xref: /nrf52832-nimble/rt-thread/libcpu/arm/s3c44b0/start_rvds.S (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero;/*****************************************************************************/
2*10465441SEvalZero;/* S3C44B0X.S: Startup file for Samsung S3C44B0X                             */
3*10465441SEvalZero;/*****************************************************************************/
4*10465441SEvalZero;/* <<< Use Configuration Wizard in Context Menu >>>                          */
5*10465441SEvalZero;/*****************************************************************************/
6*10465441SEvalZero;/* This file is part of the uVision/ARM development tools.                   */
7*10465441SEvalZero;/* Copyright (c) 2005-2006 Keil Software. All rights reserved.               */
8*10465441SEvalZero;/* This software may only be used under the terms of a valid, current,       */
9*10465441SEvalZero;/* end user licence from KEIL for a compatible version of KEIL software      */
10*10465441SEvalZero;/* development tools. Nothing else gives you the right to use this software. */
11*10465441SEvalZero;/*****************************************************************************/
12*10465441SEvalZero
13*10465441SEvalZero
14*10465441SEvalZero; *** Startup Code (executed after Reset) ***
15*10465441SEvalZero
16*10465441SEvalZero
17*10465441SEvalZero; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
18*10465441SEvalZero
19*10465441SEvalZeroMode_USR        EQU     0x10
20*10465441SEvalZeroMode_FIQ        EQU     0x11
21*10465441SEvalZeroMode_IRQ        EQU     0x12
22*10465441SEvalZeroMode_SVC        EQU     0x13
23*10465441SEvalZeroMode_ABT        EQU     0x17
24*10465441SEvalZeroMode_UND        EQU     0x1B
25*10465441SEvalZeroMode_SYS        EQU     0x1F
26*10465441SEvalZero
27*10465441SEvalZeroI_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
28*10465441SEvalZeroF_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled
29*10465441SEvalZero
30*10465441SEvalZero
31*10465441SEvalZero;// <h> Stack Configuration (Stack Sizes in Bytes)
32*10465441SEvalZero;//   <o0> Undefined Mode      <0x0-0xFFFFFFFF:8>
33*10465441SEvalZero;//   <o1> Supervisor Mode     <0x0-0xFFFFFFFF:8>
34*10465441SEvalZero;//   <o2> Abort Mode          <0x0-0xFFFFFFFF:8>
35*10465441SEvalZero;//   <o3> Fast Interrupt Mode <0x0-0xFFFFFFFF:8>
36*10465441SEvalZero;//   <o4> Interrupt Mode      <0x0-0xFFFFFFFF:8>
37*10465441SEvalZero;//   <o5> User/System Mode    <0x0-0xFFFFFFFF:8>
38*10465441SEvalZero;// </h>
39*10465441SEvalZero
40*10465441SEvalZeroUND_Stack_Size  EQU     0x00000000
41*10465441SEvalZeroSVC_Stack_Size  EQU     0x00000100
42*10465441SEvalZeroABT_Stack_Size  EQU     0x00000000
43*10465441SEvalZeroFIQ_Stack_Size  EQU     0x00000000
44*10465441SEvalZeroIRQ_Stack_Size  EQU     0x00000100
45*10465441SEvalZeroUSR_Stack_Size  EQU     0x00000100
46*10465441SEvalZero
47*10465441SEvalZeroISR_Stack_Size  EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \
48*10465441SEvalZero                         FIQ_Stack_Size + IRQ_Stack_Size)
49*10465441SEvalZero
50*10465441SEvalZero                AREA    STACK, NOINIT, READWRITE, ALIGN=3
51*10465441SEvalZero
52*10465441SEvalZeroStack_Mem       SPACE   USR_Stack_Size
53*10465441SEvalZero__initial_sp    SPACE   ISR_Stack_Size
54*10465441SEvalZeroStack_Top
55*10465441SEvalZero
56*10465441SEvalZero
57*10465441SEvalZero;// <h> Heap Configuration
58*10465441SEvalZero;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF>
59*10465441SEvalZero;// </h>
60*10465441SEvalZero
61*10465441SEvalZeroHeap_Size       EQU     0x00000000
62*10465441SEvalZero
63*10465441SEvalZero                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
64*10465441SEvalZero__heap_base
65*10465441SEvalZeroHeap_Mem        SPACE   Heap_Size
66*10465441SEvalZero__heap_limit
67*10465441SEvalZero
68*10465441SEvalZero
69*10465441SEvalZero; CPU Wrapper and Bus Priorities definitions
70*10465441SEvalZeroCPUW_BASE       EQU     0x01C00000      ; CPU Wrapper Base Address
71*10465441SEvalZeroSYSCFG_OFS      EQU     0x00            ; SYSCFG Offset
72*10465441SEvalZeroNCACHBE0_OFS    EQU     0x04            ; NCACHBE0 Offset
73*10465441SEvalZeroNCACHBE1_OFS    EQU     0x08            ; NCACHBE0 Offset
74*10465441SEvalZeroBUSP_BASE       EQU     0x01C40000      ; Bus Priority Base Address
75*10465441SEvalZeroSBUSCON_OFS     EQU     0x00            ; SBUSCON Offset
76*10465441SEvalZero
77*10465441SEvalZero;// <e> CPU Wrapper and Bus Priorities
78*10465441SEvalZero;//   <h> CPU Wrapper
79*10465441SEvalZero;//     <o1.0>      SE: Stall Enable
80*10465441SEvalZero;//     <o1.1..2>   CM: Cache Mode
81*10465441SEvalZero;//                 <0=> Disable Cache (8kB SRAM)
82*10465441SEvalZero;//                 <1=> Half Cache Enable (4kB Cache, 4kB SRAM)
83*10465441SEvalZero;//                 <2=> Reserved
84*10465441SEvalZero;//                 <3=> Full Cache Enable (8kB Cache)
85*10465441SEvalZero;//     <o1.3>      WE: Write Buffer Enable
86*10465441SEvalZero;//     <o1.4>      RSE: Read Stall Enable
87*10465441SEvalZero;//     <o1.5>      DA: Data Abort  <0=> Enable <1=> Disable
88*10465441SEvalZero;//     <h> Non-cacheable Area 0
89*10465441SEvalZero;//       <o2.0..15>  Start Address     <0x0-0x0FFFF000:0x1000><#/0x1000>
90*10465441SEvalZero;//                   <i> SA = (Start Address) / 4k
91*10465441SEvalZero;//       <o2.16..31> End Address + 1   <0x0-0x10000000:0x1000><#/0x1000>
92*10465441SEvalZero;//                   <i> SE = (End Address + 1) / 4k
93*10465441SEvalZero;//     </h>
94*10465441SEvalZero;//     <h> Non-cacheable Area 1
95*10465441SEvalZero;//       <o3.0..15>  Start Address     <0x0-0x0FFFF000:0x1000><#/0x1000>
96*10465441SEvalZero;//                   <i> SA = (Start Address) / 4k
97*10465441SEvalZero;//       <o3.16..31> End Address + 1   <0x0-0x10000000:0x1000><#/0x1000>
98*10465441SEvalZero;//                   <i> SE = (End Address + 1) / 4k
99*10465441SEvalZero;//     </h>
100*10465441SEvalZero;//   </h>
101*10465441SEvalZero;//   <h> Bus Priorities
102*10465441SEvalZero;//     <o4.31>       FIX: Fixed Priorities
103*10465441SEvalZero;//     <o4.6..7>     LCD_DMA    <0=> 1st  <1=> 2nd  <2=> 3rd  <3=> 4th
104*10465441SEvalZero;//     <o4.4..5>     ZDMA       <0=> 1st  <1=> 2nd  <2=> 3rd  <3=> 4th
105*10465441SEvalZero;//     <o4.2..3>     BDMA       <0=> 1st  <1=> 2nd  <2=> 3rd  <3=> 4th
106*10465441SEvalZero;//     <o4.0..1>     nBREQ      <0=> 1st  <1=> 2nd  <2=> 3rd  <3=> 4th
107*10465441SEvalZero;//   </h>
108*10465441SEvalZero;// </e>
109*10465441SEvalZeroSYS_SETUP       EQU     0
110*10465441SEvalZeroSYSCFG_Val      EQU     0x00000001
111*10465441SEvalZeroNCACHBE0_Val    EQU     0x00000000
112*10465441SEvalZeroNCACHBE1_Val    EQU     0x00000000
113*10465441SEvalZeroSBUSCON_Val     EQU     0x80001B1B
114*10465441SEvalZero
115*10465441SEvalZero
116*10465441SEvalZero;// <e> Vectored Interrupt Mode (for IRQ)
117*10465441SEvalZero;//   <o1.25> EINT0      <i> External Interrupt 0
118*10465441SEvalZero;//   <o1.24> EINT1      <i> External Interrupt 1
119*10465441SEvalZero;//   <o1.23> EINT2      <i> External Interrupt 2
120*10465441SEvalZero;//   <o1.22> EINT3      <i> External Interrupt 3
121*10465441SEvalZero;//   <o1.21> EINT4567   <i> External Interrupt 4/5/6/7
122*10465441SEvalZero;//   <o1.20> TICK       <i> RTC Time Tick Interrupt
123*10465441SEvalZero;//   <o1.19> ZDMA0      <i> General DMA0 Interrupt
124*10465441SEvalZero;//   <o1.18> ZDMA1      <i> General DMA1 Interrupt
125*10465441SEvalZero;//   <o1.17> BDMA0      <i> Bridge DMA0 Interrupt
126*10465441SEvalZero;//   <o1.16> BDMA1      <i> Bridge DMA1 Interrupt
127*10465441SEvalZero;//   <o1.15> WDT        <i> Watchdog Timer Interrupt
128*10465441SEvalZero;//   <o1.14> UERR01     <i> UART0/1 Error Interrupt
129*10465441SEvalZero;//   <o1.13> TIMER0     <i> Timer0 Interrupt
130*10465441SEvalZero;//   <o1.12> TIMER1     <i> Timer1 Interrupt
131*10465441SEvalZero;//   <o1.11> TIMER2     <i> Timer2 Interrupt
132*10465441SEvalZero;//   <o1.10> TIMER3     <i> Timer3 Interrupt
133*10465441SEvalZero;//   <o1.9>  TIMER4     <i> Timer4 Interrupt
134*10465441SEvalZero;//   <o1.8>  TIMER5     <i> Timer5 Interrupt
135*10465441SEvalZero;//   <o1.7>  URXD0      <i> UART0 Rx Interrupt
136*10465441SEvalZero;//   <o1.6>  URXD1      <i> UART1 Rx Interrupt
137*10465441SEvalZero;//   <o1.5>  IIC        <i> IIC Interrupt
138*10465441SEvalZero;//   <o1.4>  SIO        <i> SIO Interrupt
139*10465441SEvalZero;//   <o1.3>  UTXD0      <i> UART0 Tx Interrupt
140*10465441SEvalZero;//   <o1.2>  UTXD1      <i> UART1 Tx Interrupt
141*10465441SEvalZero;//   <o1.1>  RTC        <i> RTC Alarm Interrupt
142*10465441SEvalZero;//   <o1.0>  ADC        <i> ADC EOC Interrupt
143*10465441SEvalZero;// </e>
144*10465441SEvalZeroVIM_SETUP       EQU     0
145*10465441SEvalZeroVIM_CFG         EQU     0x00000000
146*10465441SEvalZero
147*10465441SEvalZero
148*10465441SEvalZero; Clock Management definitions
149*10465441SEvalZeroCLK_BASE        EQU     0x01D80000      ; Clock Base Address
150*10465441SEvalZeroPLLCON_OFS      EQU     0x00            ; PLLCON Offset
151*10465441SEvalZeroCLKCON_OFS      EQU     0x04            ; CLKCON Offset
152*10465441SEvalZeroCLKSLOW_OFS     EQU     0x08            ; CLKSLOW Offset
153*10465441SEvalZeroLOCKTIME_OFS    EQU     0x0C            ; LOCKTIME Offset
154*10465441SEvalZero
155*10465441SEvalZero;// <e> Clock Management
156*10465441SEvalZero;//   <h> PLL Settings
157*10465441SEvalZero;//   <i> Fpllo = (m * Fin) / (p * 2^s), 20MHz < Fpllo < 66MHz
158*10465441SEvalZero;//     <o1.12..19> MDIV: Main divider <0x0-0xFF>
159*10465441SEvalZero;//                 <i> m = MDIV + 8
160*10465441SEvalZero;//     <o1.4..9>   PDIV: Pre-divider  <0x0-0x3F>
161*10465441SEvalZero;//                 <i> p = PDIV + 2, 1MHz <= Fin/p < 2MHz
162*10465441SEvalZero;//     <o1.0..1>   SDIV: Post Divider <0x0-0x03>
163*10465441SEvalZero;//                 <i> s = SDIV, Fpllo * 2^s < 170MHz
164*10465441SEvalZero;//     <o4.0..11>  LTIME CNT: PLL Lock Time Count  <0x0-0x0FFF>
165*10465441SEvalZero;//   </h>
166*10465441SEvalZero;//   <h> Master Clock
167*10465441SEvalZero;//   <i> PLL Clock:  Fout = Fpllo
168*10465441SEvalZero;//   <i> Slow Clock: Fout = Fin / (2 * SLOW_VAL), SLOW_VAL > 0
169*10465441SEvalZero;//   <i> Slow Clock: Fout = Fin, SLOW_VAL = 0
170*10465441SEvalZero;//     <o3.5>      PLL_OFF: PLL Off
171*10465441SEvalZero;//                 <i> PLL is turned Off only when SLOW_BIT = 1
172*10465441SEvalZero;//     <o3.4>      SLOW_BIT: Slow Clock
173*10465441SEvalZero;//     <o3.0..3>   SLOW_VAL: Slow Clock divider    <0x0-0x0F>
174*10465441SEvalZero;//   </h>
175*10465441SEvalZero;//   <h> Clock Generation
176*10465441SEvalZero;//     <o2.14>     IIS       <0=> Disable  <1=> Enable
177*10465441SEvalZero;//     <o2.13>     IIC       <0=> Disable  <1=> Enable
178*10465441SEvalZero;//     <o2.12>     ADC       <0=> Disable  <1=> Enable
179*10465441SEvalZero;//     <o2.11>     RTC       <0=> Disable  <1=> Enable
180*10465441SEvalZero;//     <o2.10>     GPIO      <0=> Disable  <1=> Enable
181*10465441SEvalZero;//     <o2.9>      UART1     <0=> Disable  <1=> Enable
182*10465441SEvalZero;//     <o2.8>      UART0     <0=> Disable  <1=> Enable
183*10465441SEvalZero;//     <o2.7>      BDMA0,1   <0=> Disable  <1=> Enable
184*10465441SEvalZero;//     <o2.6>      LCDC      <0=> Disable  <1=> Enable
185*10465441SEvalZero;//     <o2.5>      SIO       <0=> Disable  <1=> Enable
186*10465441SEvalZero;//     <o2.4>      ZDMA0,1   <0=> Disable  <1=> Enable
187*10465441SEvalZero;//     <o2.3>      PWMTIMER  <0=> Disable  <1=> Enable
188*10465441SEvalZero;//   </h>
189*10465441SEvalZero;// </e>
190*10465441SEvalZeroCLK_SETUP       EQU     1
191*10465441SEvalZeroPLLCON_Val      EQU     0x00038080
192*10465441SEvalZeroCLKCON_Val      EQU     0x00007FF8
193*10465441SEvalZeroCLKSLOW_Val     EQU     0x00000009
194*10465441SEvalZeroLOCKTIME_Val    EQU     0x00000FFF
195*10465441SEvalZero
196*10465441SEvalZero
197*10465441SEvalZero; Watchdog Timer definitions
198*10465441SEvalZeroWT_BASE         EQU     0x01D30000      ; WT Base Address
199*10465441SEvalZeroWTCON_OFS       EQU     0x00            ; WTCON Offset
200*10465441SEvalZeroWTDAT_OFS       EQU     0x04            ; WTDAT Offset
201*10465441SEvalZeroWTCNT_OFS       EQU     0x08            ; WTCNT Offset
202*10465441SEvalZero
203*10465441SEvalZero;// <e> Watchdog Timer
204*10465441SEvalZero;//   <o1.5>      Watchdog Timer Enable/Disable
205*10465441SEvalZero;//   <o1.0>      Reset Enable/Disable
206*10465441SEvalZero;//   <o1.2>      Interrupt Enable/Disable
207*10465441SEvalZero;//   <o1.3..4>   Clock Select
208*10465441SEvalZero;//               <0=> 1/16  <1=> 1/32  <2=> 1/64  <3=> 1/128
209*10465441SEvalZero;//               <i> Clock Division Factor
210*10465441SEvalZero;//   <o1.8..15>  Prescaler Value <0x0-0xFF>
211*10465441SEvalZero;//   <o2.0..15>  Time-out Value  <0x0-0xFFFF>
212*10465441SEvalZero;// </e>
213*10465441SEvalZeroWT_SETUP        EQU     1
214*10465441SEvalZeroWTCON_Val       EQU     0x00008000
215*10465441SEvalZeroWTDAT_Val       EQU     0x00008000
216*10465441SEvalZero
217*10465441SEvalZero
218*10465441SEvalZero; Memory Controller definitions
219*10465441SEvalZeroMC_BASE         EQU     0x01C80000      ; Memory Controller Base Address
220*10465441SEvalZero
221*10465441SEvalZero;// <e> Memory Controller
222*10465441SEvalZeroMC_SETUP        EQU     1
223*10465441SEvalZero
224*10465441SEvalZero;//   <h> Bank 0
225*10465441SEvalZero;//     <o0.0..1>   PMC: Page Mode Configuration
226*10465441SEvalZero;//                 <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
227*10465441SEvalZero;//     <o0.2..3>   Tpac: Page Mode Access Cycle
228*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
229*10465441SEvalZero;//     <o0.4..5>   Tcah: Address Holding Time after nGCSn
230*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
231*10465441SEvalZero;//     <o0.6..7>   Toch: Chip Select Hold on nOE
232*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
233*10465441SEvalZero;//     <o0.8..10>  Tacc: Access Cycle
234*10465441SEvalZero;//                 <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
235*10465441SEvalZero;//                 <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
236*10465441SEvalZero;//     <o0.11..12> Tcos: Chip Select Set-up nOE
237*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
238*10465441SEvalZero;//     <o0.13..14> Tacs: Address Set-up before nGCSn
239*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
240*10465441SEvalZero;//   </h>
241*10465441SEvalZero;//
242*10465441SEvalZero;//   <h> Bank 1
243*10465441SEvalZero;//     <o8.4..5>   DW: Data Bus Width
244*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
245*10465441SEvalZero;//     <o8.6>      WS: WAIT Status
246*10465441SEvalZero;//                 <0=> WAIT Disable
247*10465441SEvalZero;//                 <1=> WAIT Enable
248*10465441SEvalZero;//     <o8.7>      ST: SRAM Type
249*10465441SEvalZero;//                 <0=> Not using UB/LB
250*10465441SEvalZero;//                 <1=> Using UB/LB
251*10465441SEvalZero;//     <o1.0..1>   PMC: Page Mode Configuration
252*10465441SEvalZero;//                 <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
253*10465441SEvalZero;//     <o1.2..3>   Tpac: Page Mode Access Cycle
254*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
255*10465441SEvalZero;//     <o1.4..5>   Tcah: Address Holding Time after nGCSn
256*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
257*10465441SEvalZero;//     <o1.6..7>   Toch: Chip Select Hold on nOE
258*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
259*10465441SEvalZero;//     <o1.8..10>  Tacc: Access Cycle
260*10465441SEvalZero;//                 <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
261*10465441SEvalZero;//                 <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
262*10465441SEvalZero;//     <o1.11..12> Tcos: Chip Select Set-up nOE
263*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
264*10465441SEvalZero;//     <o1.13..14> Tacs: Address Set-up before nGCSn
265*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
266*10465441SEvalZero;//   </h>
267*10465441SEvalZero;//
268*10465441SEvalZero;//   <h> Bank 2
269*10465441SEvalZero;//     <o8.8..9>   DW: Data Bus Width
270*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
271*10465441SEvalZero;//     <o8.10>     WS: WAIT Status
272*10465441SEvalZero;//                 <0=> WAIT Disable
273*10465441SEvalZero;//                 <1=> WAIT Enable
274*10465441SEvalZero;//     <o8.11>     ST: SRAM Type
275*10465441SEvalZero;//                 <0=> Not using UB/LB
276*10465441SEvalZero;//                 <1=> Using UB/LB
277*10465441SEvalZero;//     <o2.0..1>   PMC: Page Mode Configuration
278*10465441SEvalZero;//                 <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
279*10465441SEvalZero;//     <o2.2..3>   Tpac: Page Mode Access Cycle
280*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
281*10465441SEvalZero;//     <o2.4..5>   Tcah: Address Holding Time after nGCSn
282*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
283*10465441SEvalZero;//     <o2.6..7>   Toch: Chip Select Hold on nOE
284*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
285*10465441SEvalZero;//     <o2.8..10>  Tacc: Access Cycle
286*10465441SEvalZero;//                 <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
287*10465441SEvalZero;//                 <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
288*10465441SEvalZero;//     <o2.11..12> Tcos: Chip Select Set-up nOE
289*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
290*10465441SEvalZero;//     <o2.13..14> Tacs: Address Set-up before nGCSn
291*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
292*10465441SEvalZero;//   </h>
293*10465441SEvalZero;//
294*10465441SEvalZero;//   <h> Bank 3
295*10465441SEvalZero;//     <o8.12..13> DW: Data Bus Width
296*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
297*10465441SEvalZero;//     <o8.14>     WS: WAIT Status
298*10465441SEvalZero;//                 <0=> WAIT Disable
299*10465441SEvalZero;//                 <1=> WAIT Enable
300*10465441SEvalZero;//     <o8.15>     ST: SRAM Type
301*10465441SEvalZero;//                 <0=> Not using UB/LB
302*10465441SEvalZero;//                 <1=> Using UB/LB
303*10465441SEvalZero;//     <o3.0..1>   PMC: Page Mode Configuration
304*10465441SEvalZero;//                 <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
305*10465441SEvalZero;//     <o3.2..3>   Tpac: Page Mode Access Cycle
306*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
307*10465441SEvalZero;//     <o3.4..5>   Tcah: Address Holding Time after nGCSn
308*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
309*10465441SEvalZero;//     <o3.6..7>   Toch: Chip Select Hold on nOE
310*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
311*10465441SEvalZero;//     <o3.8..10>  Tacc: Access Cycle
312*10465441SEvalZero;//                 <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
313*10465441SEvalZero;//                 <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
314*10465441SEvalZero;//     <o3.11..12> Tcos: Chip Select Set-up nOE
315*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
316*10465441SEvalZero;//     <o3.13..14> Tacs: Address Set-up before nGCSn
317*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
318*10465441SEvalZero;//   </h>
319*10465441SEvalZero;//
320*10465441SEvalZero;//   <h> Bank 4
321*10465441SEvalZero;//     <o8.16..17> DW: Data Bus Width
322*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
323*10465441SEvalZero;//     <o8.18>     WS: WAIT Status
324*10465441SEvalZero;//                 <0=> WAIT Disable
325*10465441SEvalZero;//                 <1=> WAIT Enable
326*10465441SEvalZero;//     <o8.19>     ST: SRAM Type
327*10465441SEvalZero;//                 <0=> Not using UB/LB
328*10465441SEvalZero;//                 <1=> Using UB/LB
329*10465441SEvalZero;//     <o4.0..1>   PMC: Page Mode Configuration
330*10465441SEvalZero;//                 <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
331*10465441SEvalZero;//     <o4.2..3>   Tpac: Page Mode Access Cycle
332*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
333*10465441SEvalZero;//     <o4.4..5>   Tcah: Address Holding Time after nGCSn
334*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
335*10465441SEvalZero;//     <o4.6..7>   Toch: Chip Select Hold on nOE
336*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
337*10465441SEvalZero;//     <o4.8..10>  Tacc: Access Cycle
338*10465441SEvalZero;//                 <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
339*10465441SEvalZero;//                 <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
340*10465441SEvalZero;//     <o4.11..12> Tcos: Chip Select Set-up nOE
341*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
342*10465441SEvalZero;//     <o4.13..14> Tacs: Address Set-up before nGCSn
343*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
344*10465441SEvalZero;//   </h>
345*10465441SEvalZero;//
346*10465441SEvalZero;//   <h> Bank 5
347*10465441SEvalZero;//     <o8.20..21> DW: Data Bus Width
348*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
349*10465441SEvalZero;//     <o8.22>     WS: WAIT Status
350*10465441SEvalZero;//                 <0=> WAIT Disable
351*10465441SEvalZero;//                 <1=> WAIT Enable
352*10465441SEvalZero;//     <o8.23>     ST: SRAM Type
353*10465441SEvalZero;//                 <0=> Not using UB/LB
354*10465441SEvalZero;//                 <1=> Using UB/LB
355*10465441SEvalZero;//     <o5.0..1>   PMC: Page Mode Configuration
356*10465441SEvalZero;//                 <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
357*10465441SEvalZero;//     <o5.2..3>   Tpac: Page Mode Access Cycle
358*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
359*10465441SEvalZero;//     <o5.4..5>   Tcah: Address Holding Time after nGCSn
360*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
361*10465441SEvalZero;//     <o5.6..7>   Toch: Chip Select Hold on nOE
362*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
363*10465441SEvalZero;//     <o5.8..10>  Tacc: Access Cycle
364*10465441SEvalZero;//                 <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
365*10465441SEvalZero;//                 <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
366*10465441SEvalZero;//     <o5.11..12> Tcos: Chip Select Set-up nOE
367*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
368*10465441SEvalZero;//     <o5.13..14> Tacs: Address Set-up before nGCSn
369*10465441SEvalZero;//                 <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
370*10465441SEvalZero;//   </h>
371*10465441SEvalZero;//
372*10465441SEvalZero;//   <h> Bank 6
373*10465441SEvalZero;//     <o10.0..2>  BK76MAP: Bank 6/7 Memory Map
374*10465441SEvalZero;//                 <0=> 32M  <4=> 2M   <5=> 4M   <6=> 8M   <7=> 16M
375*10465441SEvalZero;//     <o8.24..25> DW: Data Bus Width
376*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
377*10465441SEvalZero;//     <o8.26>     WS: WAIT Status
378*10465441SEvalZero;//                 <0=> WAIT Disable
379*10465441SEvalZero;//                 <1=> WAIT Enable
380*10465441SEvalZero;//     <o8.27>     ST: SRAM Type
381*10465441SEvalZero;//                 <0=> Not using UB/LB
382*10465441SEvalZero;//                 <1=> Using UB/LB
383*10465441SEvalZero;//     <o6.15..16> MT: Memory Type
384*10465441SEvalZero;//                 <0=> ROM or SRAM
385*10465441SEvalZero;//                 <1=> FP DRAMP
386*10465441SEvalZero;//                 <2=> EDO DRAM
387*10465441SEvalZero;//                 <3=> SDRAM
388*10465441SEvalZero;//     <h> ROM or SRAM
389*10465441SEvalZero;//       <o6.0..1>   PMC: Page Mode Configuration
390*10465441SEvalZero;//                   <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
391*10465441SEvalZero;//       <o6.2..3>   Tpac: Page Mode Access Cycle
392*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
393*10465441SEvalZero;//       <o6.4..5>   Tcah: Address Holding Time after nGCSn
394*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
395*10465441SEvalZero;//       <o6.6..7>   Toch: Chip Select Hold on nOE
396*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
397*10465441SEvalZero;//       <o6.8..10>  Tacc: Access Cycle
398*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
399*10465441SEvalZero;//                   <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
400*10465441SEvalZero;//       <o6.11..12> Tcos: Chip Select Set-up nOE
401*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
402*10465441SEvalZero;//       <o6.13..14> Tacs: Address Set-up before nGCSn
403*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
404*10465441SEvalZero;//     </h>
405*10465441SEvalZero;//     <h> FP DRAM or EDO DRAM
406*10465441SEvalZero;//       <o6.0..1>   CAN: Columnn Address Number
407*10465441SEvalZero;//                   <0=> 8-bit   <1=> 9-bit   <2=> 10-bit  <3=> 11-bit
408*10465441SEvalZero;//       <o6.2>      Tcp: CAS Pre-charge
409*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks
410*10465441SEvalZero;//       <o6.3>      Tcas: CAS Pulse Width
411*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks
412*10465441SEvalZero;//       <o6.4..5>   Trcd: RAS to CAS Delay
413*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
414*10465441SEvalZero;//     </h>
415*10465441SEvalZero;//     <h> SDRAM
416*10465441SEvalZero;//       <o6.0..1>   SCAN: Columnn Address Number
417*10465441SEvalZero;//                   <0=> 8-bit   <1=> 9-bit   <2=> 10-bit  <3=> Rsrvd
418*10465441SEvalZero;//       <o6.2..3>   Trcd: RAS to CAS Delay
419*10465441SEvalZero;//                   <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> Rsrvd
420*10465441SEvalZero;//       <o10.4>     SCLKEN: SCLK Selection (Bank 6/7)
421*10465441SEvalZero;//                   <0=> Normal
422*10465441SEvalZero;//                   <1=> Reduced Power
423*10465441SEvalZero;//       <o11.0..2>  BL: Burst Length
424*10465441SEvalZero;//                   <0=> 1
425*10465441SEvalZero;//       <o11.3>     BT: Burst Type
426*10465441SEvalZero;//                   <0=> Sequential
427*10465441SEvalZero;//       <o11.4..6>  CL: CAS Latency
428*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks  <2=> 3 clks
429*10465441SEvalZero;//       <o11.7..8>  TM: Test Mode
430*10465441SEvalZero;//                   <0=> Mode Register Set
431*10465441SEvalZero;//       <o11.9>     WBL: Write Burst Length
432*10465441SEvalZero;//                   <0=> 0
433*10465441SEvalZero;//     </h>
434*10465441SEvalZero;//   </h>
435*10465441SEvalZero;//
436*10465441SEvalZero;//   <h> Bank 7
437*10465441SEvalZero;//     <o10.0..2>  BK76MAP: Bank 6/7 Memory Map
438*10465441SEvalZero;//                 <0=> 32M  <4=> 2M   <5=> 4M   <6=> 8M   <7=> 16M
439*10465441SEvalZero;//     <o8.28..29> DW: Data Bus Width
440*10465441SEvalZero;//                 <0=> 8-bit   <1=> 16-bit  <2=> 32-bit  <3=> Rsrvd
441*10465441SEvalZero;//     <o8.30>     WS: WAIT Status
442*10465441SEvalZero;//                 <0=> WAIT Disable
443*10465441SEvalZero;//                 <1=> WAIT Enable
444*10465441SEvalZero;//     <o8.31>     ST: SRAM Type
445*10465441SEvalZero;//                 <0=> Not using UB/LB
446*10465441SEvalZero;//                 <1=> Using UB/LB
447*10465441SEvalZero;//     <o7.15..16> MT: Memory Type
448*10465441SEvalZero;//                 <0=> ROM or SRAM
449*10465441SEvalZero;//                 <1=> FP DRAMP
450*10465441SEvalZero;//                 <2=> EDO DRAM
451*10465441SEvalZero;//                 <3=> SDRAM
452*10465441SEvalZero;//     <h> ROM or SRAM
453*10465441SEvalZero;//       <o7.0..1>   PMC: Page Mode Configuration
454*10465441SEvalZero;//                   <0=> 1 Data  <1=> 4 Data  <2=> 8 Data  <3=> 16 Data
455*10465441SEvalZero;//       <o7.2..3>   Tpac: Page Mode Access Cycle
456*10465441SEvalZero;//                 <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> 6 clks
457*10465441SEvalZero;//       <o7.4..5>   Tcah: Address Holding Time after nGCSn
458*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
459*10465441SEvalZero;//       <o7.6..7>   Toch: Chip Select Hold on nOE
460*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
461*10465441SEvalZero;//       <o7.8..10>  Tacc: Access Cycle
462*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
463*10465441SEvalZero;//                   <4=> 6 clk   <5=> 8 clks  <6=> 10 clks <7=> 14 clks
464*10465441SEvalZero;//       <o7.11..12> Tcos: Chip Select Set-up nOE
465*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
466*10465441SEvalZero;//       <o7.13..14> Tacs: Address Set-up before nGCSn
467*10465441SEvalZero;//                   <0=> 0 clk   <1=> 1 clk   <2=> 2 clks  <3=> 4 clks
468*10465441SEvalZero;//     </h>
469*10465441SEvalZero;//     <h> FP DRAM or EDO DRAM
470*10465441SEvalZero;//       <o7.0..1>   CAN: Columnn Address Number
471*10465441SEvalZero;//                   <0=> 8-bit   <1=> 9-bit   <2=> 10-bit  <3=> 11-bit
472*10465441SEvalZero;//       <o7.2>      Tcp: CAS Pre-charge
473*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks
474*10465441SEvalZero;//       <o7.3>      Tcas: CAS Pulse Width
475*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks
476*10465441SEvalZero;//       <o7.4..5>   Trcd: RAS to CAS Delay
477*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
478*10465441SEvalZero;//     </h>
479*10465441SEvalZero;//     <h> SDRAM
480*10465441SEvalZero;//       <o7.0..1>   SCAN: Columnn Address Number
481*10465441SEvalZero;//                   <0=> 8-bit   <1=> 9-bit   <2=> 10-bit  <3=> Rsrvd
482*10465441SEvalZero;//       <o7.2..3>   Trcd: RAS to CAS Delay
483*10465441SEvalZero;//                   <0=> 2 clks  <1=> 3 clks  <2=> 4 clks  <3=> Rsrvd
484*10465441SEvalZero;//       <o10.4>     SCLKEN: SCLK Selection (Bank 6/7)
485*10465441SEvalZero;//                   <0=> Normal
486*10465441SEvalZero;//                   <1=> Reduced Power
487*10465441SEvalZero;//       <o12.0..2>  BL: Burst Length
488*10465441SEvalZero;//                   <0=> 1
489*10465441SEvalZero;//       <o12.3>     BT: Burst Type
490*10465441SEvalZero;//                   <0=> Sequential
491*10465441SEvalZero;//       <o12.4..6>  CL: CAS Latency
492*10465441SEvalZero;//                   <0=> 1 clk   <1=> 2 clks  <2=> 3 clks
493*10465441SEvalZero;//       <o12.7..8>  TM: Test Mode
494*10465441SEvalZero;//                   <0=> Mode Register Set
495*10465441SEvalZero;//       <o12.9>     WBL: Write Burst Length
496*10465441SEvalZero;//                   <0=> 0
497*10465441SEvalZero;//     </h>
498*10465441SEvalZero;//   </h>
499*10465441SEvalZero;//
500*10465441SEvalZero;//   <h> Refresh
501*10465441SEvalZero;//     <o9.23>     REFEN: DRAM/SDRAM Refresh
502*10465441SEvalZero;//                 <0=> Disable <1=> Enable
503*10465441SEvalZero;//     <o9.22>     TREFMD: DRAM/SDRAM Refresh Mode
504*10465441SEvalZero;//                 <0=> CBR/Auto Refresh
505*10465441SEvalZero;//                 <1=> Self Refresh
506*10465441SEvalZero;//     <o9.20..21> Trp: DRAM/SDRAM RAS Pre-charge Time
507*10465441SEvalZero;//                 <0=> 1.5 clks (DRAM) / 2 clks (SDRAM)
508*10465441SEvalZero;//                 <1=> 2.5 clks (DRAM) / 3 clks (SDRAM)
509*10465441SEvalZero;//                 <2=> 3.5 clks (DRAM) / 4 clks (SDRAM)
510*10465441SEvalZero;//                 <3=> 4.5 clks (DRAM) / Rsrvd (SDRAM)
511*10465441SEvalZero;//     <o9.18..19> Trc: SDRAM RC Min Time
512*10465441SEvalZero;//                 <0=> 4 clks  <1=> 5 clks  <2=> 6 clks  <3=> 7 clks
513*10465441SEvalZero;//     <o9.16..17> Tchr: DRAM CAS Hold Time
514*10465441SEvalZero;//                 <0=> 1 clks  <1=> 2 clks  <2=> 3 clks  <3=> 4 clks
515*10465441SEvalZero;//     <o9.0..10>  Refresh Counter <0x0-0x07FF>
516*10465441SEvalZero;//                 <i> Refresh Period = (2^11 - Refresh Count + 1) / MCLK
517*10465441SEvalZero;//   </h>
518*10465441SEvalZeroBANKCON0_Val    EQU     0x00000700
519*10465441SEvalZeroBANKCON1_Val    EQU     0x00000700
520*10465441SEvalZeroBANKCON2_Val    EQU     0x00000700
521*10465441SEvalZeroBANKCON3_Val    EQU     0x00000700
522*10465441SEvalZeroBANKCON4_Val    EQU     0x00000700
523*10465441SEvalZeroBANKCON5_Val    EQU     0x00000700
524*10465441SEvalZeroBANKCON6_Val    EQU     0x00018008
525*10465441SEvalZeroBANKCON7_Val    EQU     0x00018008
526*10465441SEvalZeroBWSCON_Val      EQU     0x00000000
527*10465441SEvalZeroREFRESH_Val     EQU     0x00AC0000
528*10465441SEvalZeroBANKSIZE_Val    EQU     0x00000000
529*10465441SEvalZeroMRSRB6_Val      EQU     0x00000000
530*10465441SEvalZeroMRSRB7_Val      EQU     0x00000000
531*10465441SEvalZero
532*10465441SEvalZero;// </e> End of MC
533*10465441SEvalZero
534*10465441SEvalZero
535*10465441SEvalZero; I/O Ports definitions
536*10465441SEvalZeroPIO_BASE        EQU     0x01D20000      ; PIO Base Address
537*10465441SEvalZeroPCONA_OFS       EQU     0x00            ; PCONA Offset
538*10465441SEvalZeroPCONB_OFS       EQU     0x08            ; PCONB Offset
539*10465441SEvalZeroPCONC_OFS       EQU     0x10            ; PCONC Offset
540*10465441SEvalZeroPCOND_OFS       EQU     0x1C            ; PCOND Offset
541*10465441SEvalZeroPCONE_OFS       EQU     0x28            ; PCONE Offset
542*10465441SEvalZeroPCONF_OFS       EQU     0x34            ; PCONF Offset
543*10465441SEvalZeroPCONG_OFS       EQU     0x40            ; PCONG Offset
544*10465441SEvalZeroPUPC_OFS        EQU     0x18            ; PUPC Offset
545*10465441SEvalZeroPUPD_OFS        EQU     0x24            ; PUPD Offset
546*10465441SEvalZeroPUPE_OFS        EQU     0x30            ; PUPE Offset
547*10465441SEvalZeroPUPF_OFS        EQU     0x3C            ; PUPF Offset
548*10465441SEvalZeroPUPG_OFS        EQU     0x48            ; PUPG Offset
549*10465441SEvalZeroSPUCR_OFS       EQU     0x4C            ; SPUCR Offset
550*10465441SEvalZero
551*10465441SEvalZero;// <e> I/O Configuration
552*10465441SEvalZeroPIO_SETUP       EQU     0
553*10465441SEvalZero
554*10465441SEvalZero;//   <e> Port A
555*10465441SEvalZero;//     <o1.0>      PA0  <0=> Output   <1=> ADDR0
556*10465441SEvalZero;//     <o1.1>      PA1  <0=> Output   <1=> ADDR16
557*10465441SEvalZero;//     <o1.2>      PA2  <0=> Output   <1=> ADDR17
558*10465441SEvalZero;//     <o1.3>      PA3  <0=> Output   <1=> ADDR18
559*10465441SEvalZero;//     <o1.4>      PA4  <0=> Output   <1=> ADDR19
560*10465441SEvalZero;//     <o1.5>      PA5  <0=> Output   <1=> ADDR20
561*10465441SEvalZero;//     <o1.6>      PA6  <0=> Output   <1=> ADDR21
562*10465441SEvalZero;//     <o1.7>      PA7  <0=> Output   <1=> ADDR22
563*10465441SEvalZero;//     <o1.8>      PA8  <0=> Output   <1=> ADDR23
564*10465441SEvalZero;//     <o1.9>      PA9  <0=> Output   <1=> ADDR24
565*10465441SEvalZero;//   </e>
566*10465441SEvalZeroPIOA_SETUP      EQU     1
567*10465441SEvalZeroPCONA_Val       EQU     0x000003FF
568*10465441SEvalZero
569*10465441SEvalZero;//   <e> Port B
570*10465441SEvalZero;//     <o1.0>      PB0  <0=> Output   <1=> SCKE
571*10465441SEvalZero;//     <o1.1>      PB1  <0=> Output   <1=> CKLK
572*10465441SEvalZero;//     <o1.2>      PB2  <0=> Output   <1=> nSCAS/nCAS2
573*10465441SEvalZero;//     <o1.3>      PB3  <0=> Output   <1=> nSRAS/nCAS3
574*10465441SEvalZero;//     <o1.4>      PB4  <0=> Output   <1=> nWBE2/nBE2/DQM2
575*10465441SEvalZero;//     <o1.5>      PB5  <0=> Output   <1=> nWBE3/nBE3/DQM3
576*10465441SEvalZero;//     <o1.6>      PB6  <0=> Output   <1=> nGCS1
577*10465441SEvalZero;//     <o1.7>      PB7  <0=> Output   <1=> nGCS2
578*10465441SEvalZero;//     <o1.8>      PB8  <0=> Output   <1=> nGCS3
579*10465441SEvalZero;//     <o1.9>      PB9  <0=> Output   <1=> nGCS4
580*10465441SEvalZero;//     <o1.10>     PB10 <0=> Output   <1=> nGCS5
581*10465441SEvalZero;//   </e>
582*10465441SEvalZeroPIOB_SETUP      EQU     1
583*10465441SEvalZeroPCONB_Val       EQU     0x000007FF
584*10465441SEvalZero
585*10465441SEvalZero;//   <e> Port C
586*10465441SEvalZero;//     <o1.0..1>   PC0  <0=> Input    <1=> Output   <2=> DATA16   <3=> IISLRCK
587*10465441SEvalZero;//     <o1.2..3>   PC1  <0=> Input    <1=> Output   <2=> DATA17   <3=> IISDO
588*10465441SEvalZero;//     <o1.4..5>   PC2  <0=> Input    <1=> Output   <2=> DATA18   <3=> IISDI
589*10465441SEvalZero;//     <o1.6..7>   PC3  <0=> Input    <1=> Output   <2=> DATA19   <3=> IISCLK
590*10465441SEvalZero;//     <o1.8..9>   PC4  <0=> Input    <1=> Output   <2=> DATA20   <3=> VD7
591*10465441SEvalZero;//     <o1.10..11> PC5  <0=> Input    <1=> Output   <2=> DATA21   <3=> VD6
592*10465441SEvalZero;//     <o1.12..13> PC6  <0=> Input    <1=> Output   <2=> DATA22   <3=> VD5
593*10465441SEvalZero;//     <o1.14..15> PC7  <0=> Input    <1=> Output   <2=> DATA23   <3=> VD4
594*10465441SEvalZero;//     <o1.16..17> PC8  <0=> Input    <1=> Output   <2=> DATA24   <3=> nXDACK1
595*10465441SEvalZero;//     <o1.18..19> PC9  <0=> Input    <1=> Output   <2=> DATA25   <3=> nXDREQ1
596*10465441SEvalZero;//     <o1.20..21> PC10 <0=> Input    <1=> Output   <2=> DATA26   <3=> nRTS1
597*10465441SEvalZero;//     <o1.22..23> PC11 <0=> Input    <1=> Output   <2=> DATA27   <3=> nCTS1
598*10465441SEvalZero;//     <o1.24..25> PC12 <0=> Input    <1=> Output   <2=> DATA28   <3=> TxD1
599*10465441SEvalZero;//     <o1.26..27> PC13 <0=> Input    <1=> Output   <2=> DATA29   <3=> RxD1
600*10465441SEvalZero;//     <o1.28..29> PC14 <0=> Input    <1=> Output   <2=> DATA30   <3=> nRTS0
601*10465441SEvalZero;//     <o1.30..31> PC15 <0=> Input    <1=> Output   <2=> DATA31   <3=> nCTS0
602*10465441SEvalZero;//     <h> Pull-up Resistors
603*10465441SEvalZero;//       <o2.0>    PC0 Pull-up        <0=> Enabled  <1=> Disabled
604*10465441SEvalZero;//       <o2.1>    PC1 Pull-up        <0=> Enabled  <1=> Disabled
605*10465441SEvalZero;//       <o2.2>    PC2 Pull-up        <0=> Enabled  <1=> Disabled
606*10465441SEvalZero;//       <o2.3>    PC3 Pull-up        <0=> Enabled  <1=> Disabled
607*10465441SEvalZero;//       <o2.4>    PC4 Pull-up        <0=> Enabled  <1=> Disabled
608*10465441SEvalZero;//       <o2.5>    PC5 Pull-up        <0=> Enabled  <1=> Disabled
609*10465441SEvalZero;//       <o2.6>    PC6 Pull-up        <0=> Enabled  <1=> Disabled
610*10465441SEvalZero;//       <o2.7>    PC7 Pull-up        <0=> Enabled  <1=> Disabled
611*10465441SEvalZero;//       <o2.8>    PC8 Pull-up        <0=> Enabled  <1=> Disabled
612*10465441SEvalZero;//       <o2.9>    PC9 Pull-up        <0=> Enabled  <1=> Disabled
613*10465441SEvalZero;//       <o2.10>   PC10 Pull-up       <0=> Enabled  <1=> Disabled
614*10465441SEvalZero;//       <o2.11>   PC11 Pull-up       <0=> Enabled  <1=> Disabled
615*10465441SEvalZero;//       <o2.12>   PC12 Pull-up       <0=> Enabled  <1=> Disabled
616*10465441SEvalZero;//       <o2.13>   PC13 Pull-up       <0=> Enabled  <1=> Disabled
617*10465441SEvalZero;//       <o2.14>   PC14 Pull-up       <0=> Enabled  <1=> Disabled
618*10465441SEvalZero;//       <o2.15>   PC15 Pull-up       <0=> Enabled  <1=> Disabled
619*10465441SEvalZero;//     </h>
620*10465441SEvalZero;//   </e>
621*10465441SEvalZeroPIOC_SETUP      EQU     1
622*10465441SEvalZeroPCONC_Val       EQU     0xAAAAAAAA
623*10465441SEvalZeroPUPC_Val        EQU     0x00000000
624*10465441SEvalZero
625*10465441SEvalZero;//   <e> Port D
626*10465441SEvalZero;//     <o1.0..1>   PD0  <0=> Input    <1=> Output   <2=> VD0      <3=> Reserved
627*10465441SEvalZero;//     <o1.2..3>   PD1  <0=> Input    <1=> Output   <2=> VD1      <3=> Reserved
628*10465441SEvalZero;//     <o1.4..5>   PD2  <0=> Input    <1=> Output   <2=> VD2      <3=> Reserved
629*10465441SEvalZero;//     <o1.6..7>   PD3  <0=> Input    <1=> Output   <2=> VD3      <3=> Reserved
630*10465441SEvalZero;//     <o1.8..9>   PD4  <0=> Input    <1=> Output   <2=> VCLK     <3=> Reserved
631*10465441SEvalZero;//     <o1.10..11> PD5  <0=> Input    <1=> Output   <2=> VLINE    <3=> Reserved
632*10465441SEvalZero;//     <o1.12..13> PD6  <0=> Input    <1=> Output   <2=> VM       <3=> Reserved
633*10465441SEvalZero;//     <o1.14..15> PD7  <0=> Input    <1=> Output   <2=> VFRAME   <3=> Reserved
634*10465441SEvalZero;//     <h> Pull-up Resistors
635*10465441SEvalZero;//       <o2.0>    PD0 Pull-up        <0=> Enabled  <1=> Disabled
636*10465441SEvalZero;//       <o2.1>    PD1 Pull-up        <0=> Enabled  <1=> Disabled
637*10465441SEvalZero;//       <o2.2>    PD2 Pull-up        <0=> Enabled  <1=> Disabled
638*10465441SEvalZero;//       <o2.3>    PD3 Pull-up        <0=> Enabled  <1=> Disabled
639*10465441SEvalZero;//       <o2.4>    PD4 Pull-up        <0=> Enabled  <1=> Disabled
640*10465441SEvalZero;//       <o2.5>    PD5 Pull-up        <0=> Enabled  <1=> Disabled
641*10465441SEvalZero;//       <o2.6>    PD6 Pull-up        <0=> Enabled  <1=> Disabled
642*10465441SEvalZero;//       <o2.7>    PD7 Pull-up        <0=> Enabled  <1=> Disabled
643*10465441SEvalZero;//     </h>
644*10465441SEvalZero;//   </e>
645*10465441SEvalZeroPIOD_SETUP      EQU     1
646*10465441SEvalZeroPCOND_Val       EQU     0x00000000
647*10465441SEvalZeroPUPD_Val        EQU     0x00000000
648*10465441SEvalZero
649*10465441SEvalZero;//   <e> Port E
650*10465441SEvalZero;//     <o1.0..1>   PE0  <0=> Input    <1=> Output   <2=> Fpllo    <3=> Fout
651*10465441SEvalZero;//     <o1.2..3>   PE1  <0=> Input    <1=> Output   <2=> TxD0     <3=> Reserved
652*10465441SEvalZero;//     <o1.4..5>   PE2  <0=> Input    <1=> Output   <2=> RxD0     <3=> Reserved
653*10465441SEvalZero;//     <o1.6..7>   PE3  <0=> Input    <1=> Output   <2=> TOUT0    <3=> Reserved
654*10465441SEvalZero;//     <o1.8..9>   PE4  <0=> Input    <1=> Output   <2=> TOUT1    <3=> TCLK
655*10465441SEvalZero;//     <o1.10..11> PE5  <0=> Input    <1=> Output   <2=> TOUT2    <3=> TCLK
656*10465441SEvalZero;//     <o1.12..13> PE6  <0=> Input    <1=> Output   <2=> TOUT3    <3=> VD6
657*10465441SEvalZero;//     <o1.14..15> PE7  <0=> Input    <1=> Output   <2=> TOUT4    <3=> VD7
658*10465441SEvalZero;//     <o1.16..17> PE8  <0=> Input    <1=> Output   <2=> CODECLK  <3=> Reserved
659*10465441SEvalZero;//     <h> Pull-up Resistors
660*10465441SEvalZero;//       <o2.0>    PE0 Pull-up        <0=> Enabled  <1=> Disabled
661*10465441SEvalZero;//       <o2.1>    PE1 Pull-up        <0=> Enabled  <1=> Disabled
662*10465441SEvalZero;//       <o2.2>    PE2 Pull-up        <0=> Enabled  <1=> Disabled
663*10465441SEvalZero;//       <o2.3>    PE3 Pull-up        <0=> Enabled  <1=> Disabled
664*10465441SEvalZero;//       <o2.4>    PE4 Pull-up        <0=> Enabled  <1=> Disabled
665*10465441SEvalZero;//       <o2.5>    PE5 Pull-up        <0=> Enabled  <1=> Disabled
666*10465441SEvalZero;//       <o2.6>    PE6 Pull-up        <0=> Enabled  <1=> Disabled
667*10465441SEvalZero;//       <o2.7>    PE7 Pull-up        <0=> Enabled  <1=> Disabled
668*10465441SEvalZero;//       <o2.8>    PE8 Pull-up        <0=> Enabled  <1=> Disabled
669*10465441SEvalZero;//     </h>
670*10465441SEvalZero;//   </e>
671*10465441SEvalZeroPIOE_SETUP      EQU     1
672*10465441SEvalZeroPCONE_Val       EQU     0x00000000
673*10465441SEvalZeroPUPE_Val        EQU     0x00000000
674*10465441SEvalZero
675*10465441SEvalZero;//   <e> Port F
676*10465441SEvalZero;//     <o1.0..1>   PF0  <0=> Input    <1=> Output   <2=> IICSCL   <3=> Reserved
677*10465441SEvalZero;//     <o1.2..3>   PF1  <0=> Input    <1=> Output   <2=> IICSDA   <3=> Reserved
678*10465441SEvalZero;//     <o1.4..5>   PF2  <0=> Input    <1=> Output   <2=> nWAIT    <3=> Reserved
679*10465441SEvalZero;//     <o1.6..7>   PF3  <0=> Input    <1=> Output   <2=> nXBACK   <3=> nXDACK0
680*10465441SEvalZero;//     <o1.8..9>   PF4  <0=> Input    <1=> Output   <2=> nXBREQ   <3=> nXDREQ0
681*10465441SEvalZero;//     <o1.10..12> PF5  <0=> Input    <1=> Output   <2=> nRTS1    <3=> SIOTxD
682*10465441SEvalZero;//                      <4=> IISLRCK  <5=> Reserved <6=> Reserved <7=> Reserved
683*10465441SEvalZero;//     <o1.13..15> PF6  <0=> Input    <1=> Output   <2=> TxD1     <3=> SIORDY
684*10465441SEvalZero;//                      <4=> IISDO    <5=> Reserved <6=> Reserved <7=> Reserved
685*10465441SEvalZero;//     <o1.16..18> PF7  <0=> Input    <1=> Output   <2=> RxD1     <3=> SIORxD
686*10465441SEvalZero;//                      <4=> IISDI    <5=> Reserved <6=> Reserved <7=> Reserved
687*10465441SEvalZero;//     <o1.19..21> PF8  <0=> Input    <1=> Output   <2=> nCTS1    <3=> SIOCLK
688*10465441SEvalZero;//                      <4=> IISCLK   <5=> Reserved <6=> Reserved <7=> Reserved
689*10465441SEvalZero;//     <h> Pull-up Resistors
690*10465441SEvalZero;//       <o2.0>    PF0 Pull-up        <0=> Enabled  <1=> Disabled
691*10465441SEvalZero;//       <o2.1>    PF1 Pull-up        <0=> Enabled  <1=> Disabled
692*10465441SEvalZero;//       <o2.2>    PF2 Pull-up        <0=> Enabled  <1=> Disabled
693*10465441SEvalZero;//       <o2.3>    PF3 Pull-up        <0=> Enabled  <1=> Disabled
694*10465441SEvalZero;//       <o2.4>    PF4 Pull-up        <0=> Enabled  <1=> Disabled
695*10465441SEvalZero;//       <o2.5>    PF5 Pull-up        <0=> Enabled  <1=> Disabled
696*10465441SEvalZero;//       <o2.6>    PF6 Pull-up        <0=> Enabled  <1=> Disabled
697*10465441SEvalZero;//       <o2.7>    PF7 Pull-up        <0=> Enabled  <1=> Disabled
698*10465441SEvalZero;//       <o2.8>    PF8 Pull-up        <0=> Enabled  <1=> Disabled
699*10465441SEvalZero;//     </h>
700*10465441SEvalZero;//   </e>
701*10465441SEvalZeroPIOF_SETUP      EQU     1
702*10465441SEvalZeroPCONF_Val       EQU     0x00000000
703*10465441SEvalZeroPUPF_Val        EQU     0x00000000
704*10465441SEvalZero
705*10465441SEvalZero;//   <e> Port G
706*10465441SEvalZero;//     <o1.0..1>   PG0  <0=> Input    <1=> Output   <2=> VD4      <3=> EINT0
707*10465441SEvalZero;//     <o1.2..3>   PG1  <0=> Input    <1=> Output   <2=> VD5      <3=> EINT1
708*10465441SEvalZero;//     <o1.4..5>   PG2  <0=> Input    <1=> Output   <2=> nCTS0    <3=> EINT2
709*10465441SEvalZero;//     <o1.6..7>   PG3  <0=> Input    <1=> Output   <2=> nRTS0    <3=> EINT3
710*10465441SEvalZero;//     <o1.8..9>   PG4  <0=> Input    <1=> Output   <2=> IISCLK   <3=> EINT4
711*10465441SEvalZero;//     <o1.10..11> PG5  <0=> Input    <1=> Output   <2=> IISDI    <3=> EINT5
712*10465441SEvalZero;//     <o1.12..13> PG6  <0=> Input    <1=> Output   <2=> IISDO    <3=> EINT6
713*10465441SEvalZero;//     <o1.14..15> PG7  <0=> Input    <1=> Output   <2=> IISLRCK  <3=> EINT7
714*10465441SEvalZero;//     <h> Pull-up Resistors
715*10465441SEvalZero;//       <o2.0>    PG0 Pull-up        <0=> Enabled  <1=> Disabled
716*10465441SEvalZero;//       <o2.1>    PG1 Pull-up        <0=> Enabled  <1=> Disabled
717*10465441SEvalZero;//       <o2.2>    PG2 Pull-up        <0=> Enabled  <1=> Disabled
718*10465441SEvalZero;//       <o2.3>    PG3 Pull-up        <0=> Enabled  <1=> Disabled
719*10465441SEvalZero;//       <o2.4>    PG4 Pull-up        <0=> Enabled  <1=> Disabled
720*10465441SEvalZero;//       <o2.5>    PG5 Pull-up        <0=> Enabled  <1=> Disabled
721*10465441SEvalZero;//       <o2.6>    PG6 Pull-up        <0=> Enabled  <1=> Disabled
722*10465441SEvalZero;//       <o2.7>    PG7 Pull-up        <0=> Enabled  <1=> Disabled
723*10465441SEvalZero;//     </h>
724*10465441SEvalZero;//   </e>
725*10465441SEvalZeroPIOG_SETUP      EQU     1
726*10465441SEvalZeroPCONG_Val       EQU     0x00000000
727*10465441SEvalZeroPUPG_Val        EQU     0x00000000
728*10465441SEvalZero
729*10465441SEvalZero;//   <e> Special Pull-up
730*10465441SEvalZero;//     <o1.0>    SPUCR0: DATA[7:0] Pull-up Resistor
731*10465441SEvalZero;//               <0=> Enabled  <1=> Disabled
732*10465441SEvalZero;//     <o1.1>    SPUCR1: DATA[15:8] Pull-up Resistor
733*10465441SEvalZero;//               <0=> Enabled  <1=> Disabled
734*10465441SEvalZero;//     <o1.2>    HZ@STOP
735*10465441SEvalZero;//               <0=> Prevoius state of PAD
736*10465441SEvalZero;//               <1=> HZ @ Stop
737*10465441SEvalZero;//   </e>
738*10465441SEvalZeroPSPU_SETUP      EQU     1
739*10465441SEvalZeroSPUCR_Val       EQU     0x00000004
740*10465441SEvalZero
741*10465441SEvalZero;// </e>
742*10465441SEvalZero
743*10465441SEvalZero
744*10465441SEvalZero                PRESERVE8
745*10465441SEvalZero
746*10465441SEvalZero
747*10465441SEvalZero; Area Definition and Entry Point
748*10465441SEvalZero;  Startup Code must be linked first at Address at which it expects to run.
749*10465441SEvalZero
750*10465441SEvalZero                AREA    RESET, CODE, READONLY
751*10465441SEvalZero                ARM
752*10465441SEvalZero
753*10465441SEvalZero
754*10465441SEvalZero; Exception Vectors
755*10465441SEvalZero;  Mapped to Address 0.
756*10465441SEvalZero;  Absolute addressing mode must be used.
757*10465441SEvalZero;  Dummy Handlers are implemented as infinite loops which can be modified.
758*10465441SEvalZero
759*10465441SEvalZeroVectors         LDR     PC, Reset_Addr
760*10465441SEvalZero                LDR     PC, Undef_Addr
761*10465441SEvalZero                LDR     PC, SWI_Addr
762*10465441SEvalZero                LDR     PC, PAbt_Addr
763*10465441SEvalZero                LDR     PC, DAbt_Addr
764*10465441SEvalZero                NOP                            ; Reserved Vector
765*10465441SEvalZero                LDR     PC, IRQ_Addr
766*10465441SEvalZero                LDR     PC, FIQ_Addr
767*10465441SEvalZero
768*10465441SEvalZeroReset_Addr      DCD     Reset_Handler
769*10465441SEvalZeroUndef_Addr      DCD     Undef_Handler
770*10465441SEvalZeroSWI_Addr        DCD     SWI_Handler
771*10465441SEvalZeroPAbt_Addr       DCD     PAbt_Handler
772*10465441SEvalZeroDAbt_Addr       DCD     DAbt_Handler
773*10465441SEvalZero                DCD     0                      ; Reserved Address
774*10465441SEvalZeroIRQ_Addr        DCD     IRQ_Handler
775*10465441SEvalZeroFIQ_Addr        DCD     FIQ_Handler
776*10465441SEvalZero
777*10465441SEvalZeroUndef_Handler   B       Undef_Handler
778*10465441SEvalZeroSWI_Handler     B       SWI_Handler
779*10465441SEvalZeroPAbt_Handler    B       PAbt_Handler
780*10465441SEvalZeroDAbt_Handler    B       DAbt_Handler
781*10465441SEvalZeroFIQ_Handler     B       FIQ_Handler
782*10465441SEvalZero
783*10465441SEvalZero
784*10465441SEvalZero; CPU Wrapper and Bus Priorities Configuration
785*10465441SEvalZero                IF      SYS_SETUP <> 0
786*10465441SEvalZeroSYS_CFG
787*10465441SEvalZero                DCD     CPUW_BASE
788*10465441SEvalZero                DCD     BUSP_BASE
789*10465441SEvalZero                DCD     SYSCFG_Val
790*10465441SEvalZero                DCD     NCACHBE0_Val
791*10465441SEvalZero                DCD     NCACHBE1_Val
792*10465441SEvalZero                DCD     SBUSCON_Val
793*10465441SEvalZero                ENDIF
794*10465441SEvalZero
795*10465441SEvalZero
796*10465441SEvalZero; Memory Controller Configuration
797*10465441SEvalZero                IF      MC_SETUP <> 0
798*10465441SEvalZeroMC_CFG
799*10465441SEvalZero                DCD     BWSCON_Val
800*10465441SEvalZero                DCD     BANKCON0_Val
801*10465441SEvalZero                DCD     BANKCON1_Val
802*10465441SEvalZero                DCD     BANKCON2_Val
803*10465441SEvalZero                DCD     BANKCON3_Val
804*10465441SEvalZero                DCD     BANKCON4_Val
805*10465441SEvalZero                DCD     BANKCON5_Val
806*10465441SEvalZero                DCD     BANKCON6_Val
807*10465441SEvalZero                DCD     BANKCON7_Val
808*10465441SEvalZero                DCD     REFRESH_Val
809*10465441SEvalZero                DCD     BANKSIZE_Val
810*10465441SEvalZero                DCD     MRSRB6_Val
811*10465441SEvalZero                DCD     MRSRB7_Val
812*10465441SEvalZero                ENDIF
813*10465441SEvalZero
814*10465441SEvalZero
815*10465441SEvalZero; Clock Management Configuration
816*10465441SEvalZero                IF      CLK_SETUP <> 0
817*10465441SEvalZeroCLK_CFG
818*10465441SEvalZero                DCD     CLK_BASE
819*10465441SEvalZero                DCD     PLLCON_Val
820*10465441SEvalZero                DCD     CLKCON_Val
821*10465441SEvalZero                DCD     CLKSLOW_Val
822*10465441SEvalZero                DCD     LOCKTIME_Val
823*10465441SEvalZero                ENDIF
824*10465441SEvalZero
825*10465441SEvalZero
826*10465441SEvalZero; I/O Configuration
827*10465441SEvalZero                IF      PIO_SETUP <> 0
828*10465441SEvalZeroPIO_CFG
829*10465441SEvalZero                DCD     PCONA_Val
830*10465441SEvalZero                DCD     PCONB_Val
831*10465441SEvalZero                DCD     PCONC_Val
832*10465441SEvalZero                DCD     PCOND_Val
833*10465441SEvalZero                DCD     PCONE_Val
834*10465441SEvalZero                DCD     PCONF_Val
835*10465441SEvalZero                DCD     PCONG_Val
836*10465441SEvalZero                DCD     PUPC_Val
837*10465441SEvalZero                DCD     PUPD_Val
838*10465441SEvalZero                DCD     PUPE_Val
839*10465441SEvalZero                DCD     PUPF_Val
840*10465441SEvalZero                DCD     PUPG_Val
841*10465441SEvalZero                DCD     SPUCR_Val
842*10465441SEvalZero                ENDIF
843*10465441SEvalZero
844*10465441SEvalZero
845*10465441SEvalZero; Reset Handler
846*10465441SEvalZero
847*10465441SEvalZero                EXPORT  Reset_Handler
848*10465441SEvalZeroReset_Handler
849*10465441SEvalZero
850*10465441SEvalZero
851*10465441SEvalZero                IF      SYS_SETUP <> 0
852*10465441SEvalZero                ADR     R8, SYS_CFG
853*10465441SEvalZero                LDMIA   R8, {R0-R5}
854*10465441SEvalZero                STMIA   R0, {R2-R4}
855*10465441SEvalZero                STR     R5, [R1]
856*10465441SEvalZero                ENDIF
857*10465441SEvalZero
858*10465441SEvalZero
859*10465441SEvalZero                IF      MC_SETUP <> 0
860*10465441SEvalZero                ADR     R14, MC_CFG
861*10465441SEvalZero                LDMIA   R14, {R0-R12}
862*10465441SEvalZero                LDR     R14, =MC_BASE
863*10465441SEvalZero                STMIA   R14, {R0-R12}
864*10465441SEvalZero                ENDIF
865*10465441SEvalZero
866*10465441SEvalZero
867*10465441SEvalZero                IF      CLK_SETUP <> 0
868*10465441SEvalZero                ADR     R8, CLK_CFG
869*10465441SEvalZero                LDMIA   R8, {R0-R4}
870*10465441SEvalZero                STR     R4, [R0, #LOCKTIME_OFS]
871*10465441SEvalZero                STR     R1, [R0, #PLLCON_OFS]
872*10465441SEvalZero                STR     R3, [R0, #CLKSLOW_OFS]
873*10465441SEvalZero                STR     R2, [R0, #CLKCON_OFS]
874*10465441SEvalZero                ENDIF
875*10465441SEvalZero
876*10465441SEvalZero
877*10465441SEvalZero                IF      WT_SETUP <> 0
878*10465441SEvalZero                LDR     R0, =WT_BASE
879*10465441SEvalZero                LDR     R1, =WTCON_Val
880*10465441SEvalZero                LDR     R2, =WTDAT_Val
881*10465441SEvalZero                STR     R2, [R0, #WTCNT_OFS]
882*10465441SEvalZero                STR     R2, [R0, #WTDAT_OFS]
883*10465441SEvalZero                STR     R1, [R0, #WTCON_OFS]
884*10465441SEvalZero                ENDIF
885*10465441SEvalZero
886*10465441SEvalZero
887*10465441SEvalZero                IF      PIO_SETUP <> 0
888*10465441SEvalZero                ADR     R14, PIO_CFG
889*10465441SEvalZero                LDMIA   R14, {R0-R12}
890*10465441SEvalZero                LDR     R14, =PIO_BASE
891*10465441SEvalZero
892*10465441SEvalZero                IF      PIOA_SETUP <> 0
893*10465441SEvalZero                STR     R0, [R14, #PCONA_OFS]
894*10465441SEvalZero                ENDIF
895*10465441SEvalZero
896*10465441SEvalZero                IF      PIOB_SETUP <> 0
897*10465441SEvalZero                STR     R1, [R14, #PCONB_OFS]
898*10465441SEvalZero                ENDIF
899*10465441SEvalZero
900*10465441SEvalZero                IF      PIOC_SETUP <> 0
901*10465441SEvalZero                STR     R2, [R14, #PCONC_OFS]
902*10465441SEvalZero                STR     R7, [R14, #PUPC_OFS]
903*10465441SEvalZero                ENDIF
904*10465441SEvalZero
905*10465441SEvalZero                IF      PIOD_SETUP <> 0
906*10465441SEvalZero                STR     R3, [R14, #PCOND_OFS]
907*10465441SEvalZero                STR     R8, [R14, #PUPD_OFS]
908*10465441SEvalZero                ENDIF
909*10465441SEvalZero
910*10465441SEvalZero                IF      PIOE_SETUP <> 0
911*10465441SEvalZero                STR     R4, [R14, #PCONE_OFS]
912*10465441SEvalZero                STR     R9, [R14, #PUPE_OFS]
913*10465441SEvalZero                ENDIF
914*10465441SEvalZero
915*10465441SEvalZero                IF      PIOF_SETUP <> 0
916*10465441SEvalZero                STR     R5, [R14, #PCONF_OFS]
917*10465441SEvalZero                STR     R10,[R14, #PUPF_OFS]
918*10465441SEvalZero                ENDIF
919*10465441SEvalZero
920*10465441SEvalZero                IF      PIOG_SETUP <> 0
921*10465441SEvalZero                STR     R6, [R14, #PCONG_OFS]
922*10465441SEvalZero                STR     R11,[R14, #PUPG_OFS]
923*10465441SEvalZero                ENDIF
924*10465441SEvalZero
925*10465441SEvalZero                IF      PSPU_SETUP <> 0
926*10465441SEvalZero                STR     R12,[R14, #SPUCR_OFS]
927*10465441SEvalZero                ENDIF
928*10465441SEvalZero
929*10465441SEvalZero                ENDIF
930*10465441SEvalZero
931*10465441SEvalZero
932*10465441SEvalZero; Setup Stack for each mode
933*10465441SEvalZero
934*10465441SEvalZero                LDR     R0, =Stack_Top
935*10465441SEvalZero
936*10465441SEvalZero;  Enter Undefined Instruction Mode and set its Stack Pointer
937*10465441SEvalZero                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
938*10465441SEvalZero                MOV     SP, R0
939*10465441SEvalZero                SUB     R0, R0, #UND_Stack_Size
940*10465441SEvalZero
941*10465441SEvalZero;  Enter Abort Mode and set its Stack Pointer
942*10465441SEvalZero                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
943*10465441SEvalZero                MOV     SP, R0
944*10465441SEvalZero                SUB     R0, R0, #ABT_Stack_Size
945*10465441SEvalZero
946*10465441SEvalZero;  Enter FIQ Mode and set its Stack Pointer
947*10465441SEvalZero                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
948*10465441SEvalZero                MOV     SP, R0
949*10465441SEvalZero                SUB     R0, R0, #FIQ_Stack_Size
950*10465441SEvalZero
951*10465441SEvalZero;  Enter IRQ Mode and set its Stack Pointer
952*10465441SEvalZero                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
953*10465441SEvalZero                MOV     SP, R0
954*10465441SEvalZero                SUB     R0, R0, #IRQ_Stack_Size
955*10465441SEvalZero
956*10465441SEvalZero;  Enter Supervisor Mode and set its Stack Pointer
957*10465441SEvalZero                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
958*10465441SEvalZero                MOV     SP, R0
959*10465441SEvalZero                SUB     R0, R0, #SVC_Stack_Size
960*10465441SEvalZero
961*10465441SEvalZero;  Enter User Mode and set its Stack Pointer
962*10465441SEvalZero                ; MSR     CPSR_c, #Mode_USR
963*10465441SEvalZero                IF      :DEF:__MICROLIB
964*10465441SEvalZero
965*10465441SEvalZero                EXPORT __initial_sp
966*10465441SEvalZero
967*10465441SEvalZero                ELSE
968*10465441SEvalZero
969*10465441SEvalZero                ; MOV     SP, R0
970*10465441SEvalZero                ; SUB     SL, SP, #USR_Stack_Size
971*10465441SEvalZero
972*10465441SEvalZero                ENDIF
973*10465441SEvalZero
974*10465441SEvalZero
975*10465441SEvalZero; Enter the C code
976*10465441SEvalZero
977*10465441SEvalZero                IMPORT  __main
978*10465441SEvalZero                LDR     R0, =__main
979*10465441SEvalZero                BX      R0
980*10465441SEvalZero
981*10465441SEvalZero				IMPORT rt_interrupt_enter
982*10465441SEvalZero				IMPORT rt_interrupt_leave
983*10465441SEvalZero				IMPORT rt_thread_switch_interrupt_flag
984*10465441SEvalZero				IMPORT rt_interrupt_from_thread
985*10465441SEvalZero				IMPORT rt_interrupt_to_thread
986*10465441SEvalZero				IMPORT rt_hw_trap_irq
987*10465441SEvalZero
988*10465441SEvalZeroIRQ_Handler		PROC
989*10465441SEvalZero				EXPORT IRQ_Handler
990*10465441SEvalZero				STMFD	sp!, {r0-r12,lr}
991*10465441SEvalZero				BL	rt_interrupt_enter
992*10465441SEvalZero				BL	rt_hw_trap_irq
993*10465441SEvalZero				BL	rt_interrupt_leave
994*10465441SEvalZero
995*10465441SEvalZero				; if rt_thread_switch_interrupt_flag set, jump to
996*10465441SEvalZero				; rt_hw_context_switch_interrupt_do and don't return
997*10465441SEvalZero				LDR	r0, =rt_thread_switch_interrupt_flag
998*10465441SEvalZero				LDR	r1, [r0]
999*10465441SEvalZero				CMP	r1, #1
1000*10465441SEvalZero				BEQ	rt_hw_context_switch_interrupt_do
1001*10465441SEvalZero
1002*10465441SEvalZero				LDMFD	sp!, {r0-r12,lr}
1003*10465441SEvalZero				SUBS	pc, lr, #4
1004*10465441SEvalZero				ENDP
1005*10465441SEvalZero
1006*10465441SEvalZero; /*
1007*10465441SEvalZero; * void rt_hw_context_switch_interrupt_do(rt_base_t flag)
1008*10465441SEvalZero; */
1009*10465441SEvalZerort_hw_context_switch_interrupt_do	PROC
1010*10465441SEvalZero				EXPORT rt_hw_context_switch_interrupt_do
1011*10465441SEvalZero				MOV		r1,  #0			; clear flag
1012*10465441SEvalZero				STR		r1,  [r0]
1013*10465441SEvalZero
1014*10465441SEvalZero				LDMFD	sp!, {r0-r12,lr}; reload saved registers
1015*10465441SEvalZero				STMFD	sp!, {r0-r3}	; save r0-r3
1016*10465441SEvalZero				MOV		r1,  sp
1017*10465441SEvalZero				ADD		sp,  sp, #16	; restore sp
1018*10465441SEvalZero				SUB		r2,  lr, #4		; save old task's pc to r2
1019*10465441SEvalZero
1020*10465441SEvalZero				MRS		r3,  spsr		; get cpsr of interrupt thread
1021*10465441SEvalZero
1022*10465441SEvalZero				; switch to SVC mode and no interrupt
1023*10465441SEvalZero                MSR     cpsr_c, #I_Bit|F_Bit|Mode_SVC
1024*10465441SEvalZero
1025*10465441SEvalZero				STMFD	sp!, {r2}		; push old task's pc
1026*10465441SEvalZero				STMFD	sp!, {r4-r12,lr}; push old task's lr,r12-r4
1027*10465441SEvalZero				MOV		r4,  r1			; Special optimised code below
1028*10465441SEvalZero				MOV		r5,  r3
1029*10465441SEvalZero				LDMFD	r4!, {r0-r3}
1030*10465441SEvalZero				STMFD	sp!, {r0-r3}	; push old task's r3-r0
1031*10465441SEvalZero				STMFD	sp!, {r5}		; push old task's cpsr
1032*10465441SEvalZero				MRS		r4,  spsr
1033*10465441SEvalZero				STMFD	sp!, {r4}		; push old task's spsr
1034*10465441SEvalZero
1035*10465441SEvalZero				LDR		r4,  =rt_interrupt_from_thread
1036*10465441SEvalZero				LDR		r5,  [r4]
1037*10465441SEvalZero				STR		sp,  [r5]		; store sp in preempted tasks's TCB
1038*10465441SEvalZero
1039*10465441SEvalZero				LDR		r6,  =rt_interrupt_to_thread
1040*10465441SEvalZero				LDR		r6,  [r6]
1041*10465441SEvalZero				LDR		sp,  [r6]		; get new task's stack pointer
1042*10465441SEvalZero
1043*10465441SEvalZero				LDMFD	sp!, {r4}		; pop new task's spsr
1044*10465441SEvalZero				MSR		spsr_cxsf, r4
1045*10465441SEvalZero				LDMFD	sp!, {r4}		; pop new task's psr
1046*10465441SEvalZero				MSR		cpsr_cxsf, r4
1047*10465441SEvalZero
1048*10465441SEvalZero				LDMFD	sp!, {r0-r12,lr,pc}	; pop new task's r0-r12,lr & pc
1049*10465441SEvalZero				ENDP
1050*10465441SEvalZero
1051*10465441SEvalZero                IF      :DEF:__MICROLIB
1052*10465441SEvalZero
1053*10465441SEvalZero                EXPORT  __heap_base
1054*10465441SEvalZero                EXPORT  __heap_limit
1055*10465441SEvalZero
1056*10465441SEvalZero                ELSE
1057*10465441SEvalZero; User Initial Stack & Heap
1058*10465441SEvalZero                AREA    |.text|, CODE, READONLY
1059*10465441SEvalZero
1060*10465441SEvalZero                IMPORT  __use_two_region_memory
1061*10465441SEvalZero                EXPORT  __user_initial_stackheap
1062*10465441SEvalZero__user_initial_stackheap
1063*10465441SEvalZero
1064*10465441SEvalZero                LDR     R0, =  Heap_Mem
1065*10465441SEvalZero                LDR     R1, =(Stack_Mem + USR_Stack_Size)
1066*10465441SEvalZero                LDR     R2, = (Heap_Mem +      Heap_Size)
1067*10465441SEvalZero                LDR     R3, = Stack_Mem
1068*10465441SEvalZero                BX      LR
1069*10465441SEvalZero                ENDIF
1070*10465441SEvalZero
1071*10465441SEvalZero
1072*10465441SEvalZero                END
1073