OpenCores
URL https://opencores.org/ocsvn/openmsp430/openmsp430/trunk

Subversion Repositories openmsp430

[/] [openmsp430/] [trunk/] [core/] [sim/] [rtl_sim/] [src/] [tA_output.s43] - Blame information for rev 141

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 olivier.gi
/*===========================================================================*/
2
/* Copyright (C) 2001 Authors                                                */
3
/*                                                                           */
4
/* This source file may be used and distributed without restriction provided */
5
/* that this copyright statement is not removed from the file and that any   */
6
/* derivative work contains the original copyright notice and the associated */
7
/* disclaimer.                                                               */
8
/*                                                                           */
9
/* This source file is free software; you can redistribute it and/or modify  */
10
/* it under the terms of the GNU Lesser General Public License as published  */
11
/* by the Free Software Foundation; either version 2.1 of the License, or    */
12
/* (at your option) any later version.                                       */
13
/*                                                                           */
14
/* This source is distributed in the hope that it will be useful, but WITHOUT*/
15
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or     */
16
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public       */
17
/* License for more details.                                                 */
18
/*                                                                           */
19
/* You should have received a copy of the GNU Lesser General Public License  */
20
/* along with this source; if not, write to the Free Software Foundation,    */
21
/* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA        */
22
/*                                                                           */
23
/*===========================================================================*/
24
/*                                  TIMER A                                  */
25
/*---------------------------------------------------------------------------*/
26
/* Test the timer A:                                                         */
27
/*                        - Check the timer output unit.                     */
28 18 olivier.gi
/*                                                                           */
29
/* Author(s):                                                                */
30
/*             - Olivier Girard,    olgirard@gmail.com                       */
31
/*                                                                           */
32
/*---------------------------------------------------------------------------*/
33 19 olivier.gi
/* $Rev: 141 $                                                                */
34
/* $LastChangedBy: olivier.girard $                                          */
35
/* $LastChangedDate: 2012-05-05 23:22:06 +0200 (Sat, 05 May 2012) $          */
36 2 olivier.gi
/*===========================================================================*/
37
 
38 141 olivier.gi
.include "pmem_defs.asm"
39
 
40 2 olivier.gi
.global main
41
 
42
WAIT_FUNC:
43
        dec r14
44
        jnz WAIT_FUNC
45
        ret
46
 
47
main:
48 111 olivier.gi
        mov #DMEM_250, r1       ; # Initialize stack pointer
49
        mov   #0x0000, &DMEM_200
50 2 olivier.gi
 
51
 
52
       /* --------------   TIMER A TEST:  COMPARATOR 0   ----------------- */
53
 
54
        mov  #0x0200, &TACTL
55
        mov  #0x0000, &TACCTL0
56
        mov  #0x0000, &TACCTL1
57
        mov  #0x0000, &TACCTL2
58
        dint
59
 
60
                                ; # --------- Output       (mode 0) ----------
61
        mov  #0x0204, &TACTL
62
        mov  #0x0000, &TACCR0
63
        mov  #0x0000, &TACCTL0
64
        mov  #0x0200, &TACTL
65
        mov  #0x0004, &TACCTL0  ; # Set to 1
66 111 olivier.gi
        mov  #0x0001, &DMEM_200
67 2 olivier.gi
        mov  #0x0000, &TACCTL0  ; # Set to 0
68 111 olivier.gi
        mov  #0x0002, &DMEM_200
69 2 olivier.gi
 
70
                                ; # --------- Set          (mode 1) ----------
71
        mov  #0x0204, &TACTL
72
        mov  #0x0015, &TACCR0   ; # Period = (0x15+1)*2
73
        mov  #0x0020, &TACCTL0  ; # Compare mode, set mode
74
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
75 111 olivier.gi
        mov  #0x0003, &DMEM_200
76 2 olivier.gi
        mov  #0x0020, r14
77
        call #WAIT_FUNC
78
        mov  #0x0204, &TACTL
79 111 olivier.gi
        mov  #0x0004, &DMEM_200
80 2 olivier.gi
 
81
                                ; # --------- Toggle       (mode 4) ----------
82
        mov  #0x0204, &TACTL
83
        mov  #0x0015, &TACCR0   ; # Period = (0x15+1)*2
84
        mov  #0x0080, &TACCTL0  ; # Compare mode, Toggle mode
85
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
86 111 olivier.gi
        mov  #0x0005, &DMEM_200
87 2 olivier.gi
        mov  #0x0020, r14
88
        call #WAIT_FUNC
89
 
90
                                ; # --------- Reset        (mode 5) ----------
91
        mov  #0x0204, &TACTL
92
        mov  #0x0015, &TACCR0   ; # Period = (0x15+1)*2
93
        mov  #0x0004, &TACCTL0  ; # Compare mode, Output mode (initialize to 1)
94
        mov  #0x00A0, &TACCTL0  ; # Compare mode, Reset mode
95
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
96 111 olivier.gi
        mov  #0x0006, &DMEM_200
97 2 olivier.gi
        mov  #0x0020, r14
98
        call #WAIT_FUNC
99
 
100
 
101
        dint
102 111 olivier.gi
        mov  #0x0000, &DMEM_200
103 2 olivier.gi
        mov  #0x1000, r15
104
 
105
 
106
       /* --------------   TIMER A TEST:  COMPARATOR 1   ----------------- */
107
 
108
        mov  #0x0200, &TACTL
109
        mov  #0x0000, &TACCTL0
110
        mov  #0x0000, &TACCTL1
111
        mov  #0x0000, &TACCTL2
112
        dint
113
 
114
                                ; # --------- Output       (mode 0) ----------
115
        mov  #0x0000, &TACCTL1
116
        mov  #0x0204, &TACTL
117
        mov  #0x0000, &TACCR0
118
        mov  #0x0000, &TACCTL0
119
        mov  #0x0200, &TACTL
120
        mov  #0x0004, &TACCTL1  ; # Set to 1
121 111 olivier.gi
        mov  #0x0001, &DMEM_200
122 2 olivier.gi
        mov  #0x0000, &TACCTL1  ; # Set to 0
123 111 olivier.gi
        mov  #0x0002, &DMEM_200
124 2 olivier.gi
 
125
                                ; # --------- Set          (mode 1) ----------
126
        mov  #0x0000, &TACCTL1
127
        mov  #0x0204, &TACTL
128
        mov  #0x0020, &TACCR0
129
        mov  #0x0000, &TACCTL0
130
        mov  #0x0015, &TACCR1
131
        mov  #0x0020, &TACCTL1  ; # Compare mode, set mode
132
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
133 111 olivier.gi
        mov  #0x0003, &DMEM_200
134 2 olivier.gi
        mov  #0x0030, r14
135
        call #WAIT_FUNC
136
        mov  #0x0204, &TACTL
137 111 olivier.gi
        mov  #0x0004, &DMEM_200
138 2 olivier.gi
 
139
                                ; # --------- Toggle/Reset (mode 2) ----------
140
        mov  #0x0000, &TACCTL1
141
        mov  #0x0204, &TACTL
142
        mov  #0x0020, &TACCR0
143
        mov  #0x0000, &TACCTL0
144
        mov  #0x0015, &TACCR1
145
        mov  #0x0040, &TACCTL1  ; # Compare mode, toggle/reset mode
146
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
147 111 olivier.gi
        mov  #0x0005, &DMEM_200
148 2 olivier.gi
        mov  #0x0020, r14
149
        call #WAIT_FUNC
150
        mov  #0x0204, &TACTL
151
        mov  #0x0020, &TACCR0
152
        mov  #0x0000, &TACCTL0
153
        mov  #0x0015, &TACCR1
154
        mov  #0x0004, &TACCTL1  ; # Init to 1
155
        mov  #0x0040, &TACCTL1  ; # Compare mode, toggle/reset mode
156
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
157 111 olivier.gi
        mov  #0x0006, &DMEM_200
158 2 olivier.gi
        mov  #0x0020, r14
159
        call #WAIT_FUNC
160
 
161
                                ; # --------- Set/Reset    (mode 3) ----------
162
        mov  #0x0000, &TACCTL1
163
        mov  #0x0204, &TACTL
164
        mov  #0x0020, &TACCR0
165
        mov  #0x0000, &TACCTL0
166
        mov  #0x0015, &TACCR1
167
        mov  #0x0060, &TACCTL1  ; # Compare mode, set/reset mode
168
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
169 111 olivier.gi
        mov  #0x0007, &DMEM_200
170 2 olivier.gi
        mov  #0x0020, r14
171
        call #WAIT_FUNC
172
        mov  #0x0000, &TACCTL1
173
        mov  #0x0204, &TACTL
174
        mov  #0x0020, &TACCR0
175
        mov  #0x0000, &TACCTL0
176
        mov  #0x0015, &TACCR1
177
        mov  #0x0004, &TACCTL1  ; # Init to 1
178
        mov  #0x0060, &TACCTL1  ; # Compare mode, set/reset mode
179
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
180 111 olivier.gi
        mov  #0x0008, &DMEM_200
181 2 olivier.gi
        mov  #0x0020, r14
182
        call #WAIT_FUNC
183
 
184
                                ; # --------- Toggle       (mode 4) ----------
185
        mov  #0x0000, &TACCTL1
186
        mov  #0x0204, &TACTL
187
        mov  #0x0020, &TACCR0
188
        mov  #0x0000, &TACCTL0
189
        mov  #0x0015, &TACCR1   ; # Period = (0x15+1)*2
190
        mov  #0x0080, &TACCTL1  ; # Compare mode, Toggle mode
191
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
192 111 olivier.gi
        mov  #0x0009, &DMEM_200
193 2 olivier.gi
        mov  #0x0030, r14
194
        call #WAIT_FUNC
195
 
196
                                ; # --------- Reset        (mode 5) ----------
197
        mov  #0x0000, &TACCTL1
198
        mov  #0x0204, &TACTL
199
        mov  #0x0020, &TACCR0
200
        mov  #0x0000, &TACCTL0
201
        mov  #0x0015, &TACCR1   ; # Period = (0x15+1)*2
202
        mov  #0x0004, &TACCTL1  ; # Compare mode, Output mode (initialize to 1)
203
        mov  #0x00A0, &TACCTL1  ; # Compare mode, Reset mode
204
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
205 111 olivier.gi
        mov  #0x000A, &DMEM_200
206 2 olivier.gi
        mov  #0x0030, r14
207
        call #WAIT_FUNC
208
 
209
                                ; # --------- Toggle/Set   (mode 6) ----------
210
        mov  #0x0000, &TACCTL1
211
        mov  #0x0204, &TACTL
212
        mov  #0x0020, &TACCR0
213
        mov  #0x0000, &TACCTL0
214
        mov  #0x0015, &TACCR1
215
        mov  #0x00C0, &TACCTL1  ; # Compare mode, toggle/set mode
216
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
217 111 olivier.gi
        mov  #0x000B, &DMEM_200
218 2 olivier.gi
        mov  #0x0020, r14
219
        call #WAIT_FUNC
220
        mov  #0x0204, &TACTL
221
        mov  #0x0020, &TACCR0
222
        mov  #0x0000, &TACCTL0
223
        mov  #0x0015, &TACCR1
224
        mov  #0x0004, &TACCTL1  ; # Init to 1
225
        mov  #0x00C0, &TACCTL1  ; # Compare mode, toggle/set mode
226
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
227 111 olivier.gi
        mov  #0x000C, &DMEM_200
228 2 olivier.gi
        mov  #0x0020, r14
229
        call #WAIT_FUNC
230
 
231
                                ; # --------- Reset/Set    (mode 7) ----------
232
        mov  #0x0000, &TACCTL1
233
        mov  #0x0204, &TACTL
234
        mov  #0x0020, &TACCR0
235
        mov  #0x0000, &TACCTL0
236
        mov  #0x0015, &TACCR1
237
        mov  #0x00E0, &TACCTL1  ; # Compare mode, reset/set mode
238
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
239 111 olivier.gi
        mov  #0x000D, &DMEM_200
240 2 olivier.gi
        mov  #0x0020, r14
241
        call #WAIT_FUNC
242
        mov  #0x0000, &TACCTL1
243
        mov  #0x0204, &TACTL
244
        mov  #0x0020, &TACCR0
245
        mov  #0x0000, &TACCTL0
246
        mov  #0x0015, &TACCR1
247
        mov  #0x0004, &TACCTL1  ; # Init to 1
248
        mov  #0x00E0, &TACCTL1  ; # Compare mode, reset/set mode
249
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
250 111 olivier.gi
        mov  #0x000E, &DMEM_200
251 2 olivier.gi
        mov  #0x0020, r14
252
        call #WAIT_FUNC
253
 
254
        dint
255 111 olivier.gi
        mov  #0x0000, &DMEM_200
256 2 olivier.gi
        mov  #0x2000, r15
257
 
258
 
259
       /* --------------   TIMER A TEST:  COMPARATOR 2   ----------------- */
260
 
261
        mov  #0x0200, &TACTL
262
        mov  #0x0000, &TACCTL0
263
        mov  #0x0000, &TACCTL1
264
        mov  #0x0000, &TACCTL2
265
        dint
266
 
267
                                ; # --------- Output       (mode 0) ----------
268
        mov  #0x0000, &TACCTL2
269
        mov  #0x0204, &TACTL
270
        mov  #0x0000, &TACCR0
271
        mov  #0x0000, &TACCTL0
272
        mov  #0x0200, &TACTL
273
        mov  #0x0004, &TACCTL2  ; # Set to 1
274 111 olivier.gi
        mov  #0x0001, &DMEM_200
275 2 olivier.gi
        mov  #0x0000, &TACCTL2  ; # Set to 0
276 111 olivier.gi
        mov  #0x0002, &DMEM_200
277 2 olivier.gi
 
278
                                ; # --------- Set          (mode 1) ----------
279
        mov  #0x0000, &TACCTL2
280
        mov  #0x0204, &TACTL
281
        mov  #0x0020, &TACCR0
282
        mov  #0x0000, &TACCTL0
283
        mov  #0x0015, &TACCR2
284
        mov  #0x0020, &TACCTL2  ; # Compare mode, set mode
285
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
286 111 olivier.gi
        mov  #0x0003, &DMEM_200
287 2 olivier.gi
        mov  #0x0030, r14
288
        call #WAIT_FUNC
289
        mov  #0x0204, &TACTL
290 111 olivier.gi
        mov  #0x0004, &DMEM_200
291 2 olivier.gi
 
292
                                ; # --------- Toggle/Reset (mode 2) ----------
293
        mov  #0x0000, &TACCTL2
294
        mov  #0x0204, &TACTL
295
        mov  #0x0020, &TACCR0
296
        mov  #0x0000, &TACCTL0
297
        mov  #0x0015, &TACCR2
298
        mov  #0x0040, &TACCTL2  ; # Compare mode, toggle/reset mode
299
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
300 111 olivier.gi
        mov  #0x0005, &DMEM_200
301 2 olivier.gi
        mov  #0x0020, r14
302
        call #WAIT_FUNC
303
        mov  #0x0204, &TACTL
304
        mov  #0x0020, &TACCR0
305
        mov  #0x0000, &TACCTL0
306
        mov  #0x0015, &TACCR2
307
        mov  #0x0004, &TACCTL2  ; # Init to 1
308
        mov  #0x0040, &TACCTL2  ; # Compare mode, toggle/reset mode
309
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
310 111 olivier.gi
        mov  #0x0006, &DMEM_200
311 2 olivier.gi
        mov  #0x0020, r14
312
        call #WAIT_FUNC
313
 
314
                                ; # --------- Set/Reset    (mode 3) ----------
315
        mov  #0x0000, &TACCTL2
316
        mov  #0x0204, &TACTL
317
        mov  #0x0020, &TACCR0
318
        mov  #0x0000, &TACCTL0
319
        mov  #0x0015, &TACCR2
320
        mov  #0x0060, &TACCTL2  ; # Compare mode, set/reset mode
321
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
322 111 olivier.gi
        mov  #0x0007, &DMEM_200
323 2 olivier.gi
        mov  #0x0020, r14
324
        call #WAIT_FUNC
325
        mov  #0x0000, &TACCTL2
326
        mov  #0x0204, &TACTL
327
        mov  #0x0020, &TACCR0
328
        mov  #0x0000, &TACCTL0
329
        mov  #0x0015, &TACCR2
330
        mov  #0x0004, &TACCTL2  ; # Init to 1
331
        mov  #0x0060, &TACCTL2  ; # Compare mode, set/reset mode
332
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
333 111 olivier.gi
        mov  #0x0008, &DMEM_200
334 2 olivier.gi
        mov  #0x0020, r14
335
        call #WAIT_FUNC
336
 
337
                                ; # --------- Toggle       (mode 4) ----------
338
        mov  #0x0000, &TACCTL2
339
        mov  #0x0204, &TACTL
340
        mov  #0x0020, &TACCR0
341
        mov  #0x0000, &TACCTL0
342
        mov  #0x0015, &TACCR2   ; # Period = (0x15+1)*2
343
        mov  #0x0080, &TACCTL2  ; # Compare mode, Toggle mode
344
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
345 111 olivier.gi
        mov  #0x0009, &DMEM_200
346 2 olivier.gi
        mov  #0x0030, r14
347
        call #WAIT_FUNC
348
 
349
                                ; # --------- Reset        (mode 5) ----------
350
        mov  #0x0000, &TACCTL2
351
        mov  #0x0204, &TACTL
352
        mov  #0x0020, &TACCR0
353
        mov  #0x0000, &TACCTL0
354
        mov  #0x0015, &TACCR2   ; # Period = (0x15+1)*2
355
        mov  #0x0004, &TACCTL2  ; # Compare mode, Output mode (initialize to 1)
356
        mov  #0x00A0, &TACCTL2  ; # Compare mode, Reset mode
357
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
358 111 olivier.gi
        mov  #0x000A, &DMEM_200
359 2 olivier.gi
        mov  #0x0030, r14
360
        call #WAIT_FUNC
361
 
362
                                ; # --------- Toggle/Set   (mode 6) ----------
363
        mov  #0x0000, &TACCTL2
364
        mov  #0x0204, &TACTL
365
        mov  #0x0020, &TACCR0
366
        mov  #0x0000, &TACCTL0
367
        mov  #0x0015, &TACCR2
368
        mov  #0x00C0, &TACCTL2  ; # Compare mode, toggle/set mode
369
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
370 111 olivier.gi
        mov  #0x000B, &DMEM_200
371 2 olivier.gi
        mov  #0x0020, r14
372
        call #WAIT_FUNC
373
        mov  #0x0204, &TACTL
374
        mov  #0x0020, &TACCR0
375
        mov  #0x0000, &TACCTL0
376
        mov  #0x0015, &TACCR2
377
        mov  #0x0004, &TACCTL2  ; # Init to 1
378
        mov  #0x00C0, &TACCTL2  ; # Compare mode, toggle/set mode
379
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
380 111 olivier.gi
        mov  #0x000C, &DMEM_200
381 2 olivier.gi
        mov  #0x0020, r14
382
        call #WAIT_FUNC
383
 
384
                                ; # --------- Reset/Set    (mode 7) ----------
385
        mov  #0x0000, &TACCTL2
386
        mov  #0x0204, &TACTL
387
        mov  #0x0020, &TACCR0
388
        mov  #0x0000, &TACCTL0
389
        mov  #0x0015, &TACCR2
390
        mov  #0x00E0, &TACCTL2  ; # Compare mode, reset/set mode
391
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
392 111 olivier.gi
        mov  #0x000D, &DMEM_200
393 2 olivier.gi
        mov  #0x0020, r14
394
        call #WAIT_FUNC
395
        mov  #0x0000, &TACCTL2
396
        mov  #0x0204, &TACTL
397
        mov  #0x0020, &TACCR0
398
        mov  #0x0000, &TACCTL0
399
        mov  #0x0015, &TACCR2
400
        mov  #0x0004, &TACCTL2  ; # Init to 1
401
        mov  #0x00E0, &TACCTL2  ; # Compare mode, reset/set mode
402
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
403 111 olivier.gi
        mov  #0x000E, &DMEM_200
404 2 olivier.gi
        mov  #0x0020, r14
405
        call #WAIT_FUNC
406
 
407
        dint
408 111 olivier.gi
        mov  #0x0000, &DMEM_200
409 2 olivier.gi
        mov  #0x3000, r15
410
 
411
 
412
        /* ----------------------         END OF TEST        --------------- */
413
end_of_test:
414
        nop
415
        br #0xffff
416
 
417
 
418
        /* ----------------------      INTERRUPT ROUTINES    --------------- */
419
 
420
TIMERA_CCR0_VECTOR:
421 111 olivier.gi
        mov     &TAR, &DMEM_202
422 2 olivier.gi
        reti
423
 
424
 
425
TIMERA_TAIV_VECTOR:
426 111 olivier.gi
        mov     &TAR, &DMEM_204
427
        mov    &TAIV, &DMEM_206
428 2 olivier.gi
        reti
429
 
430
 
431
        /* ----------------------         INTERRUPT VECTORS  --------------- */
432
 
433
.section .vectors, "a"
434
.word end_of_test        ; Interrupt  0 (lowest priority)    
435
.word end_of_test        ; Interrupt  1                      
436
.word end_of_test        ; Interrupt  2                      
437
.word end_of_test        ; Interrupt  3                      
438
.word end_of_test        ; Interrupt  4                      
439
.word end_of_test        ; Interrupt  5                      
440
.word end_of_test        ; Interrupt  6                      
441
.word end_of_test        ; Interrupt  7                      
442
.word TIMERA_TAIV_VECTOR ; Interrupt  8                      
443
.word TIMERA_CCR0_VECTOR ; Interrupt  9                      
444
.word end_of_test        ; Interrupt 10                      Watchdog timer
445
.word end_of_test        ; Interrupt 11                      
446
.word end_of_test        ; Interrupt 12                      
447
.word end_of_test        ; Interrupt 13                      
448
.word end_of_test        ; Interrupt 14                      NMI
449
.word main               ; Interrupt 15 (highest priority)   RESET

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.