Imported Upstream version 3.0
[debian/gnuradio] / usrp / firmware / src / usrp2 / eeprom_boot.a51
1 ;--------------------------------------------------------
2 ; Hand tweaked minimal eeprom boot code
3 ;--------------------------------------------------------
4         .module eeprom_boot
5         .optsdcc -mmcs51 --model-small
6         
7 ;--------------------------------------------------------
8 ; Public variables in this module
9 ;--------------------------------------------------------
10         .globl _eeprom_init
11         .globl _EP8FIFOBUF
12         .globl _EP6FIFOBUF
13         .globl _EP4FIFOBUF
14         .globl _EP2FIFOBUF
15         .globl _EP1INBUF
16         .globl _EP1OUTBUF
17         .globl _EP0BUF
18         .globl _CT4
19         .globl _CT3
20         .globl _CT2
21         .globl _CT1
22         .globl _USBTEST
23         .globl _TESTCFG
24         .globl _DBUG
25         .globl _UDMACRCQUAL
26         .globl _UDMACRCL
27         .globl _UDMACRCH
28         .globl _GPIFHOLDAMOUNT
29         .globl _FLOWSTBHPERIOD
30         .globl _FLOWSTBEDGE
31         .globl _FLOWSTB
32         .globl _FLOWHOLDOFF
33         .globl _FLOWEQ1CTL
34         .globl _FLOWEQ0CTL
35         .globl _FLOWLOGIC
36         .globl _FLOWSTATE
37         .globl _GPIFABORT
38         .globl _GPIFREADYSTAT
39         .globl _GPIFREADYCFG
40         .globl _XGPIFSGLDATLNOX
41         .globl _XGPIFSGLDATLX
42         .globl _XGPIFSGLDATH
43         .globl _EP8GPIFTRIG
44         .globl _EP8GPIFPFSTOP
45         .globl _EP8GPIFFLGSEL
46         .globl _EP6GPIFTRIG
47         .globl _EP6GPIFPFSTOP
48         .globl _EP6GPIFFLGSEL
49         .globl _EP4GPIFTRIG
50         .globl _EP4GPIFPFSTOP
51         .globl _EP4GPIFFLGSEL
52         .globl _EP2GPIFTRIG
53         .globl _EP2GPIFPFSTOP
54         .globl _EP2GPIFFLGSEL
55         .globl _GPIFTCB0
56         .globl _GPIFTCB1
57         .globl _GPIFTCB2
58         .globl _GPIFTCB3
59         .globl _GPIFADRL
60         .globl _GPIFADRH
61         .globl _GPIFCTLCFG
62         .globl _GPIFIDLECTL
63         .globl _GPIFIDLECS
64         .globl _GPIFWFSELECT
65         .globl _SETUPDAT
66         .globl _SUDPTRCTL
67         .globl _SUDPTRL
68         .globl _SUDPTRH
69         .globl _EP8FIFOBCL
70         .globl _EP8FIFOBCH
71         .globl _EP6FIFOBCL
72         .globl _EP6FIFOBCH
73         .globl _EP4FIFOBCL
74         .globl _EP4FIFOBCH
75         .globl _EP2FIFOBCL
76         .globl _EP2FIFOBCH
77         .globl _EP8FIFOFLGS
78         .globl _EP6FIFOFLGS
79         .globl _EP4FIFOFLGS
80         .globl _EP2FIFOFLGS
81         .globl _EP8CS
82         .globl _EP6CS
83         .globl _EP4CS
84         .globl _EP2CS
85         .globl _EP1INCS
86         .globl _EP1OUTCS
87         .globl _EP0CS
88         .globl _EP8BCL
89         .globl _EP8BCH
90         .globl _EP6BCL
91         .globl _EP6BCH
92         .globl _EP4BCL
93         .globl _EP4BCH
94         .globl _EP2BCL
95         .globl _EP2BCH
96         .globl _EP1INBC
97         .globl _EP1OUTBC
98         .globl _EP0BCL
99         .globl _EP0BCH
100         .globl _FNADDR
101         .globl _MICROFRAME
102         .globl _USBFRAMEL
103         .globl _USBFRAMEH
104         .globl _TOGCTL
105         .globl _WAKEUPCS
106         .globl _SUSPEND
107         .globl _USBCS
108         .globl _XAUTODAT2
109         .globl _XAUTODAT1
110         .globl _I2CTL
111         .globl _I2DAT
112         .globl _I2CS
113         .globl _PORTECFG
114         .globl _PORTCCFG
115         .globl _PORTACFG
116         .globl _INTSETUP
117         .globl _INT4IVEC
118         .globl _INT2IVEC
119         .globl _CLRERRCNT
120         .globl _ERRCNTLIM
121         .globl _USBERRIRQ
122         .globl _USBERRIE
123         .globl _GPIFIRQ
124         .globl _GPIFIE
125         .globl _EPIRQ
126         .globl _EPIE
127         .globl _USBIRQ
128         .globl _USBIE
129         .globl _NAKIRQ
130         .globl _NAKIE
131         .globl _IBNIRQ
132         .globl _IBNIE
133         .globl _EP8FIFOIRQ
134         .globl _EP8FIFOIE
135         .globl _EP6FIFOIRQ
136         .globl _EP6FIFOIE
137         .globl _EP4FIFOIRQ
138         .globl _EP4FIFOIE
139         .globl _EP2FIFOIRQ
140         .globl _EP2FIFOIE
141         .globl _OUTPKTEND
142         .globl _INPKTEND
143         .globl _EP8ISOINPKTS
144         .globl _EP6ISOINPKTS
145         .globl _EP4ISOINPKTS
146         .globl _EP2ISOINPKTS
147         .globl _EP8FIFOPFL
148         .globl _EP8FIFOPFH
149         .globl _EP6FIFOPFL
150         .globl _EP6FIFOPFH
151         .globl _EP4FIFOPFL
152         .globl _EP4FIFOPFH
153         .globl _EP2FIFOPFL
154         .globl _EP2FIFOPFH
155         .globl _EP8AUTOINLENL
156         .globl _EP8AUTOINLENH
157         .globl _EP6AUTOINLENL
158         .globl _EP6AUTOINLENH
159         .globl _EP4AUTOINLENL
160         .globl _EP4AUTOINLENH
161         .globl _EP2AUTOINLENL
162         .globl _EP2AUTOINLENH
163         .globl _EP8FIFOCFG
164         .globl _EP6FIFOCFG
165         .globl _EP4FIFOCFG
166         .globl _EP2FIFOCFG
167         .globl _EP8CFG
168         .globl _EP6CFG
169         .globl _EP4CFG
170         .globl _EP2CFG
171         .globl _EP1INCFG
172         .globl _EP1OUTCFG
173         .globl _REVCTL
174         .globl _REVID
175         .globl _FIFOPINPOLAR
176         .globl _UART230
177         .globl _BPADDRL
178         .globl _BPADDRH
179         .globl _BREAKPT
180         .globl _FIFORESET
181         .globl _PINFLAGSCD
182         .globl _PINFLAGSAB
183         .globl _IFCONFIG
184         .globl _CPUCS
185         .globl _RES_WAVEDATA_END
186         .globl _GPIF_WAVE_DATA
187 ;--------------------------------------------------------
188 ; special function registers
189 ;--------------------------------------------------------
190 _IOA    =       0x0080
191 _SP     =       0x0081
192 _DPL    =       0x0082
193 _DPH    =       0x0083
194 _DPL1   =       0x0084
195 _DPH1   =       0x0085
196 _DPS    =       0x0086
197 _PCON   =       0x0087
198 _TCON   =       0x0088
199 _TMOD   =       0x0089
200 _TL0    =       0x008a
201 _TL1    =       0x008b
202 _TH0    =       0x008c
203 _TH1    =       0x008d
204 _CKCON  =       0x008e
205 _IOB    =       0x0090
206 _EXIF   =       0x0091
207 _MPAGE  =       0x0092
208 _SCON0  =       0x0098
209 _SBUF0  =       0x0099
210 _APTR1H =       0x009a
211 _APTR1L =       0x009b
212 _AUTODAT1       =       0x009c
213 _AUTOPTRH2      =       0x009d
214 _AUTOPTRL2      =       0x009e
215 _AUTODAT2       =       0x009f
216 _IOC    =       0x00a0
217 _INT2CLR        =       0x00a1
218 _INT4CLR        =       0x00a2
219 _IE     =       0x00a8
220 _EP2468STAT     =       0x00aa
221 _EP24FIFOFLGS   =       0x00ab
222 _EP68FIFOFLGS   =       0x00ac
223 _AUTOPTRSETUP   =       0x00af
224 _IOD    =       0x00b0
225 _IOE    =       0x00b1
226 _OEA    =       0x00b2
227 _OEB    =       0x00b3
228 _OEC    =       0x00b4
229 _OED    =       0x00b5
230 _OEE    =       0x00b6
231 _IP     =       0x00b8
232 _EP01STAT       =       0x00ba
233 _GPIFTRIG       =       0x00bb
234 _GPIFSGLDATH    =       0x00bd
235 _GPIFSGLDATLX   =       0x00be
236 _GPIFSGLDATLNOX =       0x00bf
237 _SCON1  =       0x00c0
238 _SBUF1  =       0x00c1
239 _T2CON  =       0x00c8
240 _RCAP2L =       0x00ca
241 _RCAP2H =       0x00cb
242 _TL2    =       0x00cc
243 _TH2    =       0x00cd
244 _PSW    =       0x00d0
245 _EICON  =       0x00d8
246 _ACC    =       0x00e0
247 _EIE    =       0x00e8
248 _B      =       0x00f0
249 _EIP    =       0x00f8
250 ;--------------------------------------------------------
251 ; special function bits 
252 ;--------------------------------------------------------
253 _SEL    =       0x0086
254 _IT0    =       0x0088
255 _IE0    =       0x0089
256 _IT1    =       0x008a
257 _IE1    =       0x008b
258 _TR0    =       0x008c
259 _TF0    =       0x008d
260 _TR1    =       0x008e
261 _TF1    =       0x008f
262 _RI     =       0x0098
263 _TI     =       0x0099
264 _RB8    =       0x009a
265 _TB8    =       0x009b
266 _REN    =       0x009c
267 _SM2    =       0x009d
268 _SM1    =       0x009e
269 _SM0    =       0x009f
270 _EX0    =       0x00a8
271 _ET0    =       0x00a9
272 _EX1    =       0x00aa
273 _ET1    =       0x00ab
274 _ES0    =       0x00ac
275 _ET2    =       0x00ad
276 _ES1    =       0x00ae
277 _EA     =       0x00af
278 _PX0    =       0x00b8
279 _PT0    =       0x00b9
280 _PX1    =       0x00ba
281 _PT1    =       0x00bb
282 _PS0    =       0x00bc
283 _PT2    =       0x00bd
284 _PS1    =       0x00be
285 _RI1    =       0x00c0
286 _TI1    =       0x00c1
287 _RB81   =       0x00c2
288 _TB81   =       0x00c3
289 _REN1   =       0x00c4
290 _SM21   =       0x00c5
291 _SM11   =       0x00c6
292 _SM01   =       0x00c7
293 _CP_RL2 =       0x00c8
294 _C_T2   =       0x00c9
295 _TR2    =       0x00ca
296 _EXEN2  =       0x00cb
297 _TCLK   =       0x00cc
298 _RCLK   =       0x00cd
299 _EXF2   =       0x00ce
300 _TF2    =       0x00cf
301 _P      =       0x00d0
302 _FL     =       0x00d1
303 _OV     =       0x00d2
304 _RS0    =       0x00d3
305 _RS1    =       0x00d4
306 _F0     =       0x00d5
307 _AC     =       0x00d6
308 _CY     =       0x00d7
309 _INT6   =       0x00db
310 _RESI   =       0x00dc
311 _ERESI  =       0x00dd
312 _SMOD1  =       0x00df
313 _EIUSB  =       0x00e8
314 _EI2C   =       0x00e9
315 _EIEX4  =       0x00ea
316 _EIEX5  =       0x00eb
317 _EIEX6  =       0x00ec
318 _PUSB   =       0x00f8
319 _PI2C   =       0x00f9
320 _EIPX4  =       0x00fa
321 _EIPX5  =       0x00fb
322 _EIPX6  =       0x00fc
323 _bitS_CLK       =       0x0080
324 _bitS_OUT       =       0x0081
325 _bitS_IN        =       0x0082
326 _bitALTERA_DATA0        =       0x00a1
327 _bitALTERA_DCLK =       0x00a3
328 ;--------------------------------------------------------
329 ; overlayable register banks 
330 ;--------------------------------------------------------
331         .area REG_BANK_0        (REL,OVR,DATA)
332         .ds 8
333 ;--------------------------------------------------------
334 ; internal ram data
335 ;--------------------------------------------------------
336         .area DSEG    (DATA)
337 ;--------------------------------------------------------
338 ; overlayable items in internal ram 
339 ;--------------------------------------------------------
340         .area OSEG    (OVR,DATA)
341 ;--------------------------------------------------------
342 ; Stack segment in internal ram 
343 ;--------------------------------------------------------
344         .area   SSEG    (DATA)
345 __start__stack:
346         .ds     1
347
348 ;--------------------------------------------------------
349 ; indirectly addressable internal ram data
350 ;--------------------------------------------------------
351         .area ISEG    (DATA)
352 ;--------------------------------------------------------
353 ; bit data
354 ;--------------------------------------------------------
355         .area BSEG    (BIT)
356 ;--------------------------------------------------------
357 ; external ram data
358 ;--------------------------------------------------------
359         .area XSEG    (XDATA)
360 _GPIF_WAVE_DATA =       0xe400
361 _RES_WAVEDATA_END       =       0xe480
362 _CPUCS  =       0xe600
363 _IFCONFIG       =       0xe601
364 _PINFLAGSAB     =       0xe602
365 _PINFLAGSCD     =       0xe603
366 _FIFORESET      =       0xe604
367 _BREAKPT        =       0xe605
368 _BPADDRH        =       0xe606
369 _BPADDRL        =       0xe607
370 _UART230        =       0xe608
371 _FIFOPINPOLAR   =       0xe609
372 _REVID  =       0xe60a
373 _REVCTL =       0xe60b
374 _EP1OUTCFG      =       0xe610
375 _EP1INCFG       =       0xe611
376 _EP2CFG =       0xe612
377 _EP4CFG =       0xe613
378 _EP6CFG =       0xe614
379 _EP8CFG =       0xe615
380 _EP2FIFOCFG     =       0xe618
381 _EP4FIFOCFG     =       0xe619
382 _EP6FIFOCFG     =       0xe61a
383 _EP8FIFOCFG     =       0xe61b
384 _EP2AUTOINLENH  =       0xe620
385 _EP2AUTOINLENL  =       0xe621
386 _EP4AUTOINLENH  =       0xe622
387 _EP4AUTOINLENL  =       0xe623
388 _EP6AUTOINLENH  =       0xe624
389 _EP6AUTOINLENL  =       0xe625
390 _EP8AUTOINLENH  =       0xe626
391 _EP8AUTOINLENL  =       0xe627
392 _EP2FIFOPFH     =       0xe630
393 _EP2FIFOPFL     =       0xe631
394 _EP4FIFOPFH     =       0xe632
395 _EP4FIFOPFL     =       0xe633
396 _EP6FIFOPFH     =       0xe634
397 _EP6FIFOPFL     =       0xe635
398 _EP8FIFOPFH     =       0xe636
399 _EP8FIFOPFL     =       0xe637
400 _EP2ISOINPKTS   =       0xe640
401 _EP4ISOINPKTS   =       0xe641
402 _EP6ISOINPKTS   =       0xe642
403 _EP8ISOINPKTS   =       0xe643
404 _INPKTEND       =       0xe648
405 _OUTPKTEND      =       0xe649
406 _EP2FIFOIE      =       0xe650
407 _EP2FIFOIRQ     =       0xe651
408 _EP4FIFOIE      =       0xe652
409 _EP4FIFOIRQ     =       0xe653
410 _EP6FIFOIE      =       0xe654
411 _EP6FIFOIRQ     =       0xe655
412 _EP8FIFOIE      =       0xe656
413 _EP8FIFOIRQ     =       0xe657
414 _IBNIE  =       0xe658
415 _IBNIRQ =       0xe659
416 _NAKIE  =       0xe65a
417 _NAKIRQ =       0xe65b
418 _USBIE  =       0xe65c
419 _USBIRQ =       0xe65d
420 _EPIE   =       0xe65e
421 _EPIRQ  =       0xe65f
422 _GPIFIE =       0xe660
423 _GPIFIRQ        =       0xe661
424 _USBERRIE       =       0xe662
425 _USBERRIRQ      =       0xe663
426 _ERRCNTLIM      =       0xe664
427 _CLRERRCNT      =       0xe665
428 _INT2IVEC       =       0xe666
429 _INT4IVEC       =       0xe667
430 _INTSETUP       =       0xe668
431 _PORTACFG       =       0xe670
432 _PORTCCFG       =       0xe671
433 _PORTECFG       =       0xe672
434 _I2CS   =       0xe678
435 _I2DAT  =       0xe679
436 _I2CTL  =       0xe67a
437 _XAUTODAT1      =       0xe67b
438 _XAUTODAT2      =       0xe67c
439 _USBCS  =       0xe680
440 _SUSPEND        =       0xe681
441 _WAKEUPCS       =       0xe682
442 _TOGCTL =       0xe683
443 _USBFRAMEH      =       0xe684
444 _USBFRAMEL      =       0xe685
445 _MICROFRAME     =       0xe686
446 _FNADDR =       0xe687
447 _EP0BCH =       0xe68a
448 _EP0BCL =       0xe68b
449 _EP1OUTBC       =       0xe68d
450 _EP1INBC        =       0xe68f
451 _EP2BCH =       0xe690
452 _EP2BCL =       0xe691
453 _EP4BCH =       0xe694
454 _EP4BCL =       0xe695
455 _EP6BCH =       0xe698
456 _EP6BCL =       0xe699
457 _EP8BCH =       0xe69c
458 _EP8BCL =       0xe69d
459 _EP0CS  =       0xe6a0
460 _EP1OUTCS       =       0xe6a1
461 _EP1INCS        =       0xe6a2
462 _EP2CS  =       0xe6a3
463 _EP4CS  =       0xe6a4
464 _EP6CS  =       0xe6a5
465 _EP8CS  =       0xe6a6
466 _EP2FIFOFLGS    =       0xe6a7
467 _EP4FIFOFLGS    =       0xe6a8
468 _EP6FIFOFLGS    =       0xe6a9
469 _EP8FIFOFLGS    =       0xe6aa
470 _EP2FIFOBCH     =       0xe6ab
471 _EP2FIFOBCL     =       0xe6ac
472 _EP4FIFOBCH     =       0xe6ad
473 _EP4FIFOBCL     =       0xe6ae
474 _EP6FIFOBCH     =       0xe6af
475 _EP6FIFOBCL     =       0xe6b0
476 _EP8FIFOBCH     =       0xe6b1
477 _EP8FIFOBCL     =       0xe6b2
478 _SUDPTRH        =       0xe6b3
479 _SUDPTRL        =       0xe6b4
480 _SUDPTRCTL      =       0xe6b5
481 _SETUPDAT       =       0xe6b8
482 _GPIFWFSELECT   =       0xe6c0
483 _GPIFIDLECS     =       0xe6c1
484 _GPIFIDLECTL    =       0xe6c2
485 _GPIFCTLCFG     =       0xe6c3
486 _GPIFADRH       =       0xe6c4
487 _GPIFADRL       =       0xe6c5
488 _GPIFTCB3       =       0xe6ce
489 _GPIFTCB2       =       0xe6cf
490 _GPIFTCB1       =       0xe6d0
491 _GPIFTCB0       =       0xe6d1
492 _EP2GPIFFLGSEL  =       0xe6d2
493 _EP2GPIFPFSTOP  =       0xe6d3
494 _EP2GPIFTRIG    =       0xe6d4
495 _EP4GPIFFLGSEL  =       0xe6da
496 _EP4GPIFPFSTOP  =       0xe6db
497 _EP4GPIFTRIG    =       0xe6dc
498 _EP6GPIFFLGSEL  =       0xe6e2
499 _EP6GPIFPFSTOP  =       0xe6e3
500 _EP6GPIFTRIG    =       0xe6e4
501 _EP8GPIFFLGSEL  =       0xe6ea
502 _EP8GPIFPFSTOP  =       0xe6eb
503 _EP8GPIFTRIG    =       0xe6ec
504 _XGPIFSGLDATH   =       0xe6f0
505 _XGPIFSGLDATLX  =       0xe6f1
506 _XGPIFSGLDATLNOX        =       0xe6f2
507 _GPIFREADYCFG   =       0xe6f3
508 _GPIFREADYSTAT  =       0xe6f4
509 _GPIFABORT      =       0xe6f5
510 _FLOWSTATE      =       0xe6c6
511 _FLOWLOGIC      =       0xe6c7
512 _FLOWEQ0CTL     =       0xe6c8
513 _FLOWEQ1CTL     =       0xe6c9
514 _FLOWHOLDOFF    =       0xe6ca
515 _FLOWSTB        =       0xe6cb
516 _FLOWSTBEDGE    =       0xe6cc
517 _FLOWSTBHPERIOD =       0xe6cd
518 _GPIFHOLDAMOUNT =       0xe60c
519 _UDMACRCH       =       0xe67d
520 _UDMACRCL       =       0xe67e
521 _UDMACRCQUAL    =       0xe67f
522 _DBUG   =       0xe6f8
523 _TESTCFG        =       0xe6f9
524 _USBTEST        =       0xe6fa
525 _CT1    =       0xe6fb
526 _CT2    =       0xe6fc
527 _CT3    =       0xe6fd
528 _CT4    =       0xe6fe
529 _EP0BUF =       0xe740
530 _EP1OUTBUF      =       0xe780
531 _EP1INBUF       =       0xe7c0
532 _EP2FIFOBUF     =       0xf000
533 _EP4FIFOBUF     =       0xf400
534 _EP6FIFOBUF     =       0xf800
535 _EP8FIFOBUF     =       0xfc00
536 ;--------------------------------------------------------
537 ; external initialized ram data
538 ;--------------------------------------------------------
539 ;--------------------------------------------------------
540 ; interrupt vector 
541 ;--------------------------------------------------------
542         .area CSEG    (CODE)
543 __interrupt_vect:
544         ljmp    __sdcc_gsinit_startup
545 ;--------------------------------------------------------
546 ; global & static initialisations
547 ;--------------------------------------------------------
548         .area GSINIT  (CODE)
549         .area GSFINAL (CODE)
550         .area GSINIT  (CODE)
551 __sdcc_gsinit_startup:
552         mov     sp,#__start__stack - 1
553         lcall   __sdcc_external_startup
554         mov     a,dpl
555         jz      __sdcc_init_data
556         ljmp    __sdcc_program_startup
557 __sdcc_init_data:
558         .area GSFINAL (CODE)
559         ljmp    __sdcc_program_startup
560 ;--------------------------------------------------------
561 ; Home
562 ;--------------------------------------------------------
563         .area HOME    (CODE)
564         .area CSEG    (CODE)
565 ;--------------------------------------------------------
566 ; code
567 ;--------------------------------------------------------
568         .area CSEG    (CODE)
569 __sdcc_program_startup:
570         lcall   _eeprom_init
571 ;       return from _eeprom_init will spin here
572         sjmp .
573         .area CSEG    (CODE)