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

Subversion Repositories openmsp430

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

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 RD/WR register access.                     */
28
/*                        - Check the clock divider.                         */
29
/*                        - Check the timer modes.                           */
30 18 olivier.gi
/*                                                                           */
31
/* Author(s):                                                                */
32
/*             - Olivier Girard,    olgirard@gmail.com                       */
33
/*                                                                           */
34
/*---------------------------------------------------------------------------*/
35 19 olivier.gi
/* $Rev: 111 $                                                                */
36
/* $LastChangedBy: olivier.girard $                                          */
37
/* $LastChangedDate: 2011-05-20 22:39:02 +0200 (Fri, 20 May 2011) $          */
38 2 olivier.gi
/*===========================================================================*/
39
 
40
.global main
41
 
42 111 olivier.gi
.set   DMEM_BASE, (__data_start     )
43
.set   DMEM_200,  (__data_start+0x00)
44
.set   DMEM_202,  (__data_start+0x02)
45
.set   DMEM_204,  (__data_start+0x04)
46
.set   DMEM_206,  (__data_start+0x06)
47
.set   DMEM_208,  (__data_start+0x08)
48
.set   DMEM_20A,  (__data_start+0x0A)
49
.set   DMEM_20C,  (__data_start+0x0C)
50
.set   DMEM_20E,  (__data_start+0x0E)
51
.set   DMEM_210,  (__data_start+0x10)
52
.set   DMEM_212,  (__data_start+0x12)
53
.set   DMEM_214,  (__data_start+0x14)
54
.set   DMEM_216,  (__data_start+0x16)
55
.set   DMEM_218,  (__data_start+0x18)
56
.set   DMEM_21A,  (__data_start+0x1A)
57
.set   DMEM_21E,  (__data_start+0x1E)
58
.set   DMEM_220,  (__data_start+0x20)
59
.set   DMEM_222,  (__data_start+0x22)
60
.set   DMEM_224,  (__data_start+0x24)
61
.set   DMEM_226,  (__data_start+0x26)
62
.set   DMEM_228,  (__data_start+0x28)
63
.set   DMEM_22A,  (__data_start+0x2A)
64
.set   DMEM_230,  (__data_start+0x30)
65
.set   DMEM_232,  (__data_start+0x32)
66
.set   DMEM_234,  (__data_start+0x34)
67
.set   DMEM_236,  (__data_start+0x36)
68
.set   DMEM_238,  (__data_start+0x38)
69
.set   DMEM_23A,  (__data_start+0x3A)
70
.set   DMEM_240,  (__data_start+0x40)
71
.set   DMEM_242,  (__data_start+0x42)
72
.set   DMEM_244,  (__data_start+0x44)
73
.set   DMEM_246,  (__data_start+0x46)
74
.set   DMEM_248,  (__data_start+0x48)
75
.set   DMEM_24A,  (__data_start+0x4A)
76
.set   DMEM_250,  (__data_start+0x50)
77
.set   DMEM_254,  (__data_start+0x54)
78
.set   DMEM_256,  (__data_start+0x56)
79
.set   DMEM_262,  (__data_start+0x62)
80
.set   DMEM_296,  (__data_start+0x96)
81
.set   DMEM_2D6,  (__data_start+0xD6)
82
 
83 2 olivier.gi
.set   TACTL,   0x0160
84
.set   TAR,     0x0170
85
.set   TACCTL0, 0x0162
86
.set   TACCR0,  0x0172
87
.set   TACCTL1, 0x0164
88
.set   TACCR1,  0x0174
89
.set   TACCTL2, 0x0166
90
.set   TACCR2,  0x0176
91
.set   TAIV,    0x012E
92
 
93
 
94
WAIT_FUNC:
95
        dec r14
96
        jnz WAIT_FUNC
97
        ret
98
 
99
main:
100 111 olivier.gi
        mov  #DMEM_250, r1      ; # Initialize stack pointer
101
        mov  #0x0000, &DMEM_200
102 2 olivier.gi
 
103
       /* --------------   TIMER A TEST:  RD/WR ACCESS    --------------- */
104
 
105
        mov  #0xaaaa, &TACTL	; # TACTL
106 111 olivier.gi
        mov   &TACTL, &DMEM_200
107 2 olivier.gi
        mov  #0x5555, &TACTL
108 111 olivier.gi
        mov   &TACTL, &DMEM_202
109 2 olivier.gi
        mov  #0x0000, &TACTL
110 111 olivier.gi
        mov   &TACTL, &DMEM_204
111 2 olivier.gi
        mov  #0x0000, &TACTL
112 111 olivier.gi
        mov   &TACTL, &DMEM_206
113 2 olivier.gi
 
114
        mov  #0xaaaa, &TAR	; # TAR
115 111 olivier.gi
        mov     &TAR, &DMEM_208
116 2 olivier.gi
        mov  #0x5555, &TAR
117 111 olivier.gi
        mov     &TAR, &DMEM_20A
118 2 olivier.gi
        mov  #0x0000, &TAR
119 111 olivier.gi
        mov     &TAR, &DMEM_20C
120 2 olivier.gi
 
121
        mov  #0xaaaa, &TACCTL0	; # TACCTL0
122 111 olivier.gi
        mov &TACCTL0, &DMEM_210
123 2 olivier.gi
        mov  #0x5555, &TACCTL0
124 111 olivier.gi
        mov &TACCTL0, &DMEM_212
125 2 olivier.gi
        mov  #0x0000, &TACCTL0
126 111 olivier.gi
        mov &TACCTL0, &DMEM_214
127 2 olivier.gi
 
128
        mov  #0xaaaa, &TACCR0	; # TACCR0
129 111 olivier.gi
        mov  &TACCR0, &DMEM_216
130 2 olivier.gi
        mov  #0x5555, &TACCR0
131 111 olivier.gi
        mov  &TACCR0, &DMEM_218
132 2 olivier.gi
        mov  #0x0000, &TACCR0
133 111 olivier.gi
        mov  &TACCR0, &DMEM_21A
134 2 olivier.gi
 
135
        mov  #0xaaaa, &TACCTL1	; # TACCTL1
136 111 olivier.gi
        mov &TACCTL1, &DMEM_220
137 2 olivier.gi
        mov  #0x5555, &TACCTL1
138 111 olivier.gi
        mov &TACCTL1, &DMEM_222
139 2 olivier.gi
        mov  #0x0000, &TACCTL1
140 111 olivier.gi
        mov &TACCTL1, &DMEM_224
141 2 olivier.gi
 
142
        mov  #0xaaaa, &TACCR1	; # TACCR1
143 111 olivier.gi
        mov  &TACCR1, &DMEM_226
144 2 olivier.gi
        mov  #0x5555, &TACCR1
145 111 olivier.gi
        mov  &TACCR1, &DMEM_228
146 2 olivier.gi
        mov  #0x0000, &TACCR1
147 111 olivier.gi
        mov  &TACCR1, &DMEM_22A
148 2 olivier.gi
 
149
        mov  #0xaaaa, &TACCTL2	; # TACCTL2
150 111 olivier.gi
        mov &TACCTL2, &DMEM_230
151 2 olivier.gi
        mov  #0x5555, &TACCTL2
152 111 olivier.gi
        mov &TACCTL2, &DMEM_232
153 2 olivier.gi
        mov  #0x0000, &TACCTL2
154 111 olivier.gi
        mov &TACCTL2, &DMEM_234
155 2 olivier.gi
 
156
        mov  #0xaaaa, &TACCR2	; # TACCR2
157 111 olivier.gi
        mov  &TACCR2, &DMEM_236
158 2 olivier.gi
        mov  #0x5555, &TACCR2
159 111 olivier.gi
        mov  &TACCR2, &DMEM_238
160 2 olivier.gi
        mov  #0x0000, &TACCR2
161 111 olivier.gi
        mov  &TACCR2, &DMEM_23A
162 2 olivier.gi
 
163
        mov  #0xaaaa, &TAIV	; # TAIV
164 111 olivier.gi
        mov    &TAIV, &DMEM_240
165 2 olivier.gi
        mov  #0x5555, &TAIV
166 111 olivier.gi
        mov    &TAIV, &DMEM_242
167 2 olivier.gi
        mov  #0x0000, &TAIV
168 111 olivier.gi
        mov    &TAIV, &DMEM_244
169 2 olivier.gi
 
170
        mov  #0x1000, r15
171
 
172
       /* --------------   TIMER A TEST:  INPUT DIVIDER   --------------- */
173
 
174
        mov  #0x0200, &TACTL
175
        mov  #0x0000, &TACCTL0
176
        eint
177
 
178
        mov  #0x0200, &TACTL
179
        mov  #0x0020, &TACCR0
180
        mov  #0x0216, &TACTL 	; # /1
181 111 olivier.gi
        mov  #0x0001, &DMEM_200
182 2 olivier.gi
        mov  #0x0010, r14
183
        call #WAIT_FUNC
184
 
185
        mov  #0x0200, &TACTL
186
        mov  #0x0010, &TACCR0
187
        mov  #0x0256, &TACTL 	; # /2
188 111 olivier.gi
        mov  #0x0002, &DMEM_200
189 2 olivier.gi
        mov  #0x0010, r14
190
        call #WAIT_FUNC
191
 
192
        mov  #0x0200, &TACTL
193
        mov  #0x0008, &TACCR0
194
        mov  #0x0296, &TACTL 	; # /4
195 111 olivier.gi
        mov  #0x0003, &DMEM_200
196 2 olivier.gi
        mov  #0x0010, r14
197
        call #WAIT_FUNC
198
 
199
        mov  #0x0200, &TACTL
200
        mov  #0x0004, &TACCR0
201
        mov  #0x02D6, &TACTL 	; # /8
202 111 olivier.gi
        mov  #0x0004, &DMEM_200
203 2 olivier.gi
        mov  #0x0010, r14
204
        call #WAIT_FUNC
205
 
206
        dint
207 111 olivier.gi
        mov  #0x0000, &DMEM_200
208 2 olivier.gi
        mov  #0x2000, r15
209
 
210
 
211
       /* --------------   TIMER A TEST:  UP MODE   ----------------- */
212
 
213
        mov  #0x0200, &TACTL
214
        mov  #0x0000, &TACCTL0
215
        eint
216
 
217
        mov  #0x0200, &TACTL
218
        mov  #0x0000, &TACCTL0
219
        mov  #0x0012, &TACCR0   ; # Check timing for period = 0x12 +1
220
        mov  #0x0256, &TACTL
221 111 olivier.gi
        mov  #0x0001, &DMEM_200
222 2 olivier.gi
        mov  #0x0010, r14
223
        call #WAIT_FUNC
224
 
225
        mov  #0x0200, &TACTL
226
        mov  #0x0000, &TACCTL0
227
        mov  #0x001E, &TACCR0   ; # Check timing for period = 0x1E +1
228
        mov  #0x0256, &TACTL
229 111 olivier.gi
        mov  #0x0002, &DMEM_200
230 2 olivier.gi
        mov  #0x0020, r14
231
        call #WAIT_FUNC
232
 
233
        mov  #0x0200, &TACTL
234
        mov  #0x0000, &TACCTL0
235
        mov  #0x0012, &TACCR0   ; # Check timing for period = 0x12 +1
236
        mov  #0x0254, &TACTL
237
        mov  #0x0010, &TACCTL0
238 111 olivier.gi
        mov  #0x0003, &DMEM_200
239 2 olivier.gi
        mov  #0x0010, r14
240
        call #WAIT_FUNC
241
 
242
        mov  #0x0200, &TACTL
243
        mov  #0x0000, &TACCTL0
244
        mov  #0x001E, &TACCR0   ; # Check timing for period = 0x1E +1
245
        mov  #0x0254, &TACTL
246
        mov  #0x0010, &TACCTL0
247 111 olivier.gi
        mov  #0x0004, &DMEM_200
248 2 olivier.gi
        mov  #0x0020, r14
249
        call #WAIT_FUNC
250
 
251
        dint
252 111 olivier.gi
        mov  #0x0000, &DMEM_200
253 2 olivier.gi
        mov  #0x3000, r15
254
 
255
 
256
       /* --------------   TIMER A TEST:  CONTINUOUS MODES   ----------------- */
257
 
258
        mov  #0x0200, &TACTL
259
        mov  #0x0000, &TACCTL0
260
        eint
261
 
262
        mov  #0x0200, &TACTL
263
        mov  #0x0000, &TACCTL0
264
        mov  #0xfff0, &TAR      ; # Continuous mode
265
        mov  #0x0262, &TACTL
266 111 olivier.gi
        mov  #0x0001, &DMEM_200
267 2 olivier.gi
        mov  #0x0020, r14
268
        call #WAIT_FUNC
269
 
270
        dint
271 111 olivier.gi
        mov  #0x0000, &DMEM_200
272 2 olivier.gi
        mov  #0x4000, r15
273
 
274
 
275
       /* --------------   TIMER A TEST:  UP-DOWN MODE   ----------------- */
276
 
277
        mov  #0x0200, &TACTL
278
        mov  #0x0000, &TACCTL0
279
        eint
280
 
281
        mov  #0x0200, &TACTL
282
        mov  #0x0000, &TACCTL0
283
        mov  #0x0031, &TACCR0   ; # Up-Down mode - timing 1
284
        mov  #0x0000, &TAR
285
        mov  #0x0236, &TACTL
286
        mov  #0x0010, &TACCTL0
287 111 olivier.gi
        mov  #0x0001, &DMEM_200
288 2 olivier.gi
        mov  #0x0050, r14
289
        call #WAIT_FUNC
290 111 olivier.gi
        mov  #0x0002, &DMEM_200
291 2 olivier.gi
 
292
 
293
        dint
294
        mov  #0x0200, &TACTL
295
        mov  #0x0000, &TACCTL0
296 111 olivier.gi
        mov  #0x0000, &DMEM_200
297 2 olivier.gi
        mov  #0x5000, r15
298
 
299
 
300
 
301
        /* ----------------------         END OF TEST        --------------- */
302
end_of_test:
303
        nop
304
        br #0xffff
305
 
306
 
307
        /* ----------------------      INTERRUPT ROUTINES    --------------- */
308
 
309
TIMERA_CCR0_VECTOR:
310 111 olivier.gi
        mov     &TAR, &DMEM_204
311 2 olivier.gi
        reti
312
 
313
 
314
TIMERA_TAIV_VECTOR:
315 111 olivier.gi
        mov     &TAR, &DMEM_202
316 2 olivier.gi
        bic  #0x0001, &TACTL
317
        reti
318
 
319
 
320
        /* ----------------------         INTERRUPT VECTORS  --------------- */
321
 
322
.section .vectors, "a"
323
.word end_of_test        ; Interrupt  0 (lowest priority)    
324
.word end_of_test        ; Interrupt  1                      
325
.word end_of_test        ; Interrupt  2                      
326
.word end_of_test        ; Interrupt  3                      
327
.word end_of_test        ; Interrupt  4                      
328
.word end_of_test        ; Interrupt  5                      
329
.word end_of_test        ; Interrupt  6                      
330
.word end_of_test        ; Interrupt  7                      
331
.word TIMERA_TAIV_VECTOR ; Interrupt  8                      
332
.word TIMERA_CCR0_VECTOR ; Interrupt  9                      
333
.word end_of_test        ; Interrupt 10                      Watchdog timer
334
.word end_of_test        ; Interrupt 11                      
335
.word end_of_test        ; Interrupt 12                      
336
.word end_of_test        ; Interrupt 13                      
337
.word end_of_test        ; Interrupt 14                      NMI
338
.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.