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 2

Go to most recent revision | 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
/*===========================================================================*/
29
 
30
.global main
31
 
32
.set   TACTL,   0x0160
33
.set   TAR,     0x0170
34
.set   TACCTL0, 0x0162
35
.set   TACCR0,  0x0172
36
.set   TACCTL1, 0x0164
37
.set   TACCR1,  0x0174
38
.set   TACCTL2, 0x0166
39
.set   TACCR2,  0x0176
40
.set   TAIV,    0x012E
41
 
42
 
43
WAIT_FUNC:
44
        dec r14
45
        jnz WAIT_FUNC
46
        ret
47
 
48
main:
49
        mov  #0x0250, r1        ; # Initialize stack pointer
50
        mov  #0x0000, &0x0200
51
 
52
 
53
       /* --------------   TIMER A TEST:  COMPARATOR 0   ----------------- */
54
 
55
        mov  #0x0200, &TACTL
56
        mov  #0x0000, &TACCTL0
57
        mov  #0x0000, &TACCTL1
58
        mov  #0x0000, &TACCTL2
59
        dint
60
 
61
                                ; # --------- Output       (mode 0) ----------
62
        mov  #0x0204, &TACTL
63
        mov  #0x0000, &TACCR0
64
        mov  #0x0000, &TACCTL0
65
        mov  #0x0200, &TACTL
66
        mov  #0x0004, &TACCTL0  ; # Set to 1
67
        mov  #0x0001, &0x0200
68
        mov  #0x0000, &TACCTL0  ; # Set to 0
69
        mov  #0x0002, &0x0200
70
 
71
                                ; # --------- Set          (mode 1) ----------
72
        mov  #0x0204, &TACTL
73
        mov  #0x0015, &TACCR0   ; # Period = (0x15+1)*2
74
        mov  #0x0020, &TACCTL0  ; # Compare mode, set mode
75
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
76
        mov  #0x0003, &0x0200
77
        mov  #0x0020, r14
78
        call #WAIT_FUNC
79
        mov  #0x0204, &TACTL
80
        mov  #0x0004, &0x0200
81
 
82
                                ; # --------- Toggle       (mode 4) ----------
83
        mov  #0x0204, &TACTL
84
        mov  #0x0015, &TACCR0   ; # Period = (0x15+1)*2
85
        mov  #0x0080, &TACCTL0  ; # Compare mode, Toggle mode
86
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
87
        mov  #0x0005, &0x0200
88
        mov  #0x0020, r14
89
        call #WAIT_FUNC
90
 
91
                                ; # --------- Reset        (mode 5) ----------
92
        mov  #0x0204, &TACTL
93
        mov  #0x0015, &TACCR0   ; # Period = (0x15+1)*2
94
        mov  #0x0004, &TACCTL0  ; # Compare mode, Output mode (initialize to 1)
95
        mov  #0x00A0, &TACCTL0  ; # Compare mode, Reset mode
96
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
97
        mov  #0x0006, &0x0200
98
        mov  #0x0020, r14
99
        call #WAIT_FUNC
100
 
101
 
102
        dint
103
        mov  #0x0000, &0x0200
104
        mov  #0x1000, r15
105
 
106
 
107
       /* --------------   TIMER A TEST:  COMPARATOR 1   ----------------- */
108
 
109
        mov  #0x0200, &TACTL
110
        mov  #0x0000, &TACCTL0
111
        mov  #0x0000, &TACCTL1
112
        mov  #0x0000, &TACCTL2
113
        dint
114
 
115
                                ; # --------- Output       (mode 0) ----------
116
        mov  #0x0000, &TACCTL1
117
        mov  #0x0204, &TACTL
118
        mov  #0x0000, &TACCR0
119
        mov  #0x0000, &TACCTL0
120
        mov  #0x0200, &TACTL
121
        mov  #0x0004, &TACCTL1  ; # Set to 1
122
        mov  #0x0001, &0x0200
123
        mov  #0x0000, &TACCTL1  ; # Set to 0
124
        mov  #0x0002, &0x0200
125
 
126
                                ; # --------- Set          (mode 1) ----------
127
        mov  #0x0000, &TACCTL1
128
        mov  #0x0204, &TACTL
129
        mov  #0x0020, &TACCR0
130
        mov  #0x0000, &TACCTL0
131
        mov  #0x0015, &TACCR1
132
        mov  #0x0020, &TACCTL1  ; # Compare mode, set mode
133
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
134
        mov  #0x0003, &0x0200
135
        mov  #0x0030, r14
136
        call #WAIT_FUNC
137
        mov  #0x0204, &TACTL
138
        mov  #0x0004, &0x0200
139
 
140
                                ; # --------- Toggle/Reset (mode 2) ----------
141
        mov  #0x0000, &TACCTL1
142
        mov  #0x0204, &TACTL
143
        mov  #0x0020, &TACCR0
144
        mov  #0x0000, &TACCTL0
145
        mov  #0x0015, &TACCR1
146
        mov  #0x0040, &TACCTL1  ; # Compare mode, toggle/reset mode
147
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
148
        mov  #0x0005, &0x0200
149
        mov  #0x0020, r14
150
        call #WAIT_FUNC
151
        mov  #0x0204, &TACTL
152
        mov  #0x0020, &TACCR0
153
        mov  #0x0000, &TACCTL0
154
        mov  #0x0015, &TACCR1
155
        mov  #0x0004, &TACCTL1  ; # Init to 1
156
        mov  #0x0040, &TACCTL1  ; # Compare mode, toggle/reset mode
157
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
158
        mov  #0x0006, &0x0200
159
        mov  #0x0020, r14
160
        call #WAIT_FUNC
161
 
162
                                ; # --------- Set/Reset    (mode 3) ----------
163
        mov  #0x0000, &TACCTL1
164
        mov  #0x0204, &TACTL
165
        mov  #0x0020, &TACCR0
166
        mov  #0x0000, &TACCTL0
167
        mov  #0x0015, &TACCR1
168
        mov  #0x0060, &TACCTL1  ; # Compare mode, set/reset mode
169
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
170
        mov  #0x0007, &0x0200
171
        mov  #0x0020, r14
172
        call #WAIT_FUNC
173
        mov  #0x0000, &TACCTL1
174
        mov  #0x0204, &TACTL
175
        mov  #0x0020, &TACCR0
176
        mov  #0x0000, &TACCTL0
177
        mov  #0x0015, &TACCR1
178
        mov  #0x0004, &TACCTL1  ; # Init to 1
179
        mov  #0x0060, &TACCTL1  ; # Compare mode, set/reset mode
180
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
181
        mov  #0x0008, &0x0200
182
        mov  #0x0020, r14
183
        call #WAIT_FUNC
184
 
185
                                ; # --------- Toggle       (mode 4) ----------
186
        mov  #0x0000, &TACCTL1
187
        mov  #0x0204, &TACTL
188
        mov  #0x0020, &TACCR0
189
        mov  #0x0000, &TACCTL0
190
        mov  #0x0015, &TACCR1   ; # Period = (0x15+1)*2
191
        mov  #0x0080, &TACCTL1  ; # Compare mode, Toggle mode
192
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
193
        mov  #0x0009, &0x0200
194
        mov  #0x0030, r14
195
        call #WAIT_FUNC
196
 
197
                                ; # --------- Reset        (mode 5) ----------
198
        mov  #0x0000, &TACCTL1
199
        mov  #0x0204, &TACTL
200
        mov  #0x0020, &TACCR0
201
        mov  #0x0000, &TACCTL0
202
        mov  #0x0015, &TACCR1   ; # Period = (0x15+1)*2
203
        mov  #0x0004, &TACCTL1  ; # Compare mode, Output mode (initialize to 1)
204
        mov  #0x00A0, &TACCTL1  ; # Compare mode, Reset mode
205
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
206
        mov  #0x000A, &0x0200
207
        mov  #0x0030, r14
208
        call #WAIT_FUNC
209
 
210
                                ; # --------- Toggle/Set   (mode 6) ----------
211
        mov  #0x0000, &TACCTL1
212
        mov  #0x0204, &TACTL
213
        mov  #0x0020, &TACCR0
214
        mov  #0x0000, &TACCTL0
215
        mov  #0x0015, &TACCR1
216
        mov  #0x00C0, &TACCTL1  ; # Compare mode, toggle/set mode
217
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
218
        mov  #0x000B, &0x0200
219
        mov  #0x0020, r14
220
        call #WAIT_FUNC
221
        mov  #0x0204, &TACTL
222
        mov  #0x0020, &TACCR0
223
        mov  #0x0000, &TACCTL0
224
        mov  #0x0015, &TACCR1
225
        mov  #0x0004, &TACCTL1  ; # Init to 1
226
        mov  #0x00C0, &TACCTL1  ; # Compare mode, toggle/set mode
227
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
228
        mov  #0x000C, &0x0200
229
        mov  #0x0020, r14
230
        call #WAIT_FUNC
231
 
232
                                ; # --------- Reset/Set    (mode 7) ----------
233
        mov  #0x0000, &TACCTL1
234
        mov  #0x0204, &TACTL
235
        mov  #0x0020, &TACCR0
236
        mov  #0x0000, &TACCTL0
237
        mov  #0x0015, &TACCR1
238
        mov  #0x00E0, &TACCTL1  ; # Compare mode, reset/set mode
239
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
240
        mov  #0x000D, &0x0200
241
        mov  #0x0020, r14
242
        call #WAIT_FUNC
243
        mov  #0x0000, &TACCTL1
244
        mov  #0x0204, &TACTL
245
        mov  #0x0020, &TACCR0
246
        mov  #0x0000, &TACCTL0
247
        mov  #0x0015, &TACCR1
248
        mov  #0x0004, &TACCTL1  ; # Init to 1
249
        mov  #0x00E0, &TACCTL1  ; # Compare mode, reset/set mode
250
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
251
        mov  #0x000E, &0x0200
252
        mov  #0x0020, r14
253
        call #WAIT_FUNC
254
 
255
        dint
256
        mov  #0x0000, &0x0200
257
        mov  #0x2000, r15
258
 
259
 
260
       /* --------------   TIMER A TEST:  COMPARATOR 2   ----------------- */
261
 
262
        mov  #0x0200, &TACTL
263
        mov  #0x0000, &TACCTL0
264
        mov  #0x0000, &TACCTL1
265
        mov  #0x0000, &TACCTL2
266
        dint
267
 
268
                                ; # --------- Output       (mode 0) ----------
269
        mov  #0x0000, &TACCTL2
270
        mov  #0x0204, &TACTL
271
        mov  #0x0000, &TACCR0
272
        mov  #0x0000, &TACCTL0
273
        mov  #0x0200, &TACTL
274
        mov  #0x0004, &TACCTL2  ; # Set to 1
275
        mov  #0x0001, &0x0200
276
        mov  #0x0000, &TACCTL2  ; # Set to 0
277
        mov  #0x0002, &0x0200
278
 
279
                                ; # --------- Set          (mode 1) ----------
280
        mov  #0x0000, &TACCTL2
281
        mov  #0x0204, &TACTL
282
        mov  #0x0020, &TACCR0
283
        mov  #0x0000, &TACCTL0
284
        mov  #0x0015, &TACCR2
285
        mov  #0x0020, &TACCTL2  ; # Compare mode, set mode
286
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
287
        mov  #0x0003, &0x0200
288
        mov  #0x0030, r14
289
        call #WAIT_FUNC
290
        mov  #0x0204, &TACTL
291
        mov  #0x0004, &0x0200
292
 
293
                                ; # --------- Toggle/Reset (mode 2) ----------
294
        mov  #0x0000, &TACCTL2
295
        mov  #0x0204, &TACTL
296
        mov  #0x0020, &TACCR0
297
        mov  #0x0000, &TACCTL0
298
        mov  #0x0015, &TACCR2
299
        mov  #0x0040, &TACCTL2  ; # Compare mode, toggle/reset mode
300
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
301
        mov  #0x0005, &0x0200
302
        mov  #0x0020, r14
303
        call #WAIT_FUNC
304
        mov  #0x0204, &TACTL
305
        mov  #0x0020, &TACCR0
306
        mov  #0x0000, &TACCTL0
307
        mov  #0x0015, &TACCR2
308
        mov  #0x0004, &TACCTL2  ; # Init to 1
309
        mov  #0x0040, &TACCTL2  ; # Compare mode, toggle/reset mode
310
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
311
        mov  #0x0006, &0x0200
312
        mov  #0x0020, r14
313
        call #WAIT_FUNC
314
 
315
                                ; # --------- Set/Reset    (mode 3) ----------
316
        mov  #0x0000, &TACCTL2
317
        mov  #0x0204, &TACTL
318
        mov  #0x0020, &TACCR0
319
        mov  #0x0000, &TACCTL0
320
        mov  #0x0015, &TACCR2
321
        mov  #0x0060, &TACCTL2  ; # Compare mode, set/reset mode
322
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
323
        mov  #0x0007, &0x0200
324
        mov  #0x0020, r14
325
        call #WAIT_FUNC
326
        mov  #0x0000, &TACCTL2
327
        mov  #0x0204, &TACTL
328
        mov  #0x0020, &TACCR0
329
        mov  #0x0000, &TACCTL0
330
        mov  #0x0015, &TACCR2
331
        mov  #0x0004, &TACCTL2  ; # Init to 1
332
        mov  #0x0060, &TACCTL2  ; # Compare mode, set/reset mode
333
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
334
        mov  #0x0008, &0x0200
335
        mov  #0x0020, r14
336
        call #WAIT_FUNC
337
 
338
                                ; # --------- Toggle       (mode 4) ----------
339
        mov  #0x0000, &TACCTL2
340
        mov  #0x0204, &TACTL
341
        mov  #0x0020, &TACCR0
342
        mov  #0x0000, &TACCTL0
343
        mov  #0x0015, &TACCR2   ; # Period = (0x15+1)*2
344
        mov  #0x0080, &TACCTL2  ; # Compare mode, Toggle mode
345
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
346
        mov  #0x0009, &0x0200
347
        mov  #0x0030, r14
348
        call #WAIT_FUNC
349
 
350
                                ; # --------- Reset        (mode 5) ----------
351
        mov  #0x0000, &TACCTL2
352
        mov  #0x0204, &TACTL
353
        mov  #0x0020, &TACCR0
354
        mov  #0x0000, &TACCTL0
355
        mov  #0x0015, &TACCR2   ; # Period = (0x15+1)*2
356
        mov  #0x0004, &TACCTL2  ; # Compare mode, Output mode (initialize to 1)
357
        mov  #0x00A0, &TACCTL2  ; # Compare mode, Reset mode
358
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
359
        mov  #0x000A, &0x0200
360
        mov  #0x0030, r14
361
        call #WAIT_FUNC
362
 
363
                                ; # --------- Toggle/Set   (mode 6) ----------
364
        mov  #0x0000, &TACCTL2
365
        mov  #0x0204, &TACTL
366
        mov  #0x0020, &TACCR0
367
        mov  #0x0000, &TACCTL0
368
        mov  #0x0015, &TACCR2
369
        mov  #0x00C0, &TACCTL2  ; # Compare mode, toggle/set mode
370
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
371
        mov  #0x000B, &0x0200
372
        mov  #0x0020, r14
373
        call #WAIT_FUNC
374
        mov  #0x0204, &TACTL
375
        mov  #0x0020, &TACCR0
376
        mov  #0x0000, &TACCTL0
377
        mov  #0x0015, &TACCR2
378
        mov  #0x0004, &TACCTL2  ; # Init to 1
379
        mov  #0x00C0, &TACCTL2  ; # Compare mode, toggle/set mode
380
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
381
        mov  #0x000C, &0x0200
382
        mov  #0x0020, r14
383
        call #WAIT_FUNC
384
 
385
                                ; # --------- Reset/Set    (mode 7) ----------
386
        mov  #0x0000, &TACCTL2
387
        mov  #0x0204, &TACTL
388
        mov  #0x0020, &TACCR0
389
        mov  #0x0000, &TACCTL0
390
        mov  #0x0015, &TACCR2
391
        mov  #0x00E0, &TACCTL2  ; # Compare mode, reset/set mode
392
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
393
        mov  #0x000D, &0x0200
394
        mov  #0x0020, r14
395
        call #WAIT_FUNC
396
        mov  #0x0000, &TACCTL2
397
        mov  #0x0204, &TACTL
398
        mov  #0x0020, &TACCR0
399
        mov  #0x0000, &TACCTL0
400
        mov  #0x0015, &TACCR2
401
        mov  #0x0004, &TACCTL2  ; # Init to 1
402
        mov  #0x00E0, &TACCTL2  ; # Compare mode, reset/set mode
403
        mov  #0x0254, &TACTL    ; # Up-mode & clk/2
404
        mov  #0x000E, &0x0200
405
        mov  #0x0020, r14
406
        call #WAIT_FUNC
407
 
408
        dint
409
        mov  #0x0000, &0x0200
410
        mov  #0x3000, r15
411
 
412
 
413
        /* ----------------------         END OF TEST        --------------- */
414
end_of_test:
415
        nop
416
        br #0xffff
417
 
418
 
419
        /* ----------------------      INTERRUPT ROUTINES    --------------- */
420
 
421
TIMERA_CCR0_VECTOR:
422
        mov     &TAR, &0x0202
423
        reti
424
 
425
 
426
TIMERA_TAIV_VECTOR:
427
        mov     &TAR, &0x0204
428
        mov    &TAIV, &0x0206
429
        reti
430
 
431
 
432
        /* ----------------------         INTERRUPT VECTORS  --------------- */
433
 
434
.section .vectors, "a"
435
.word end_of_test        ; Interrupt  0 (lowest priority)    
436
.word end_of_test        ; Interrupt  1                      
437
.word end_of_test        ; Interrupt  2                      
438
.word end_of_test        ; Interrupt  3                      
439
.word end_of_test        ; Interrupt  4                      
440
.word end_of_test        ; Interrupt  5                      
441
.word end_of_test        ; Interrupt  6                      
442
.word end_of_test        ; Interrupt  7                      
443
.word TIMERA_TAIV_VECTOR ; Interrupt  8                      
444
.word TIMERA_CCR0_VECTOR ; Interrupt  9                      
445
.word end_of_test        ; Interrupt 10                      Watchdog timer
446
.word end_of_test        ; Interrupt 11                      
447
.word end_of_test        ; Interrupt 12                      
448
.word end_of_test        ; Interrupt 13                      
449
.word end_of_test        ; Interrupt 14                      NMI
450
.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.