xref: /nrf52832-nimble/rt-thread/libcpu/arm/s3c24x0/start_rvds.S (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero;/*****************************************************************************/
2*10465441SEvalZero;/* S3C2440.S: Startup file for Samsung S3C440                                */
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-2008 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;/*
15*10465441SEvalZero; *  The S3C2440.S code is executed after CPU Reset. This file may be
16*10465441SEvalZero; *  translated with the following SET symbols. In uVision these SET
17*10465441SEvalZero; *  symbols are entered under Options - ASM - Define.
18*10465441SEvalZero; *
19*10465441SEvalZero; *  NO_CLOCK_SETUP: when set the startup code will not initialize Clock
20*10465441SEvalZero; *  (used mostly when clock is already initialized from script .ini
21*10465441SEvalZero; *  file).
22*10465441SEvalZero; *
23*10465441SEvalZero; *  NO_MC_SETUP: when set the startup code will not initialize Memory
24*10465441SEvalZero; *  Controller (used mostly when clock is already initialized from script
25*10465441SEvalZero; *  .ini file).
26*10465441SEvalZero; *
27*10465441SEvalZero; *  NO_GP_SETUP: when set the startup code will not initialize General Ports
28*10465441SEvalZero; *  (used mostly when clock is already initialized from script .ini
29*10465441SEvalZero; *  file).
30*10465441SEvalZero; *
31*10465441SEvalZero; *  RAM_INTVEC: when set the startup code copies exception vectors
32*10465441SEvalZero; *  from execution address to on-chip RAM.
33*10465441SEvalZero; */
34*10465441SEvalZero
35*10465441SEvalZero
36*10465441SEvalZero; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
37*10465441SEvalZero
38*10465441SEvalZeroMode_USR        EQU     0x10
39*10465441SEvalZeroMode_FIQ        EQU     0x11
40*10465441SEvalZeroMode_IRQ        EQU     0x12
41*10465441SEvalZeroMode_SVC        EQU     0x13
42*10465441SEvalZeroMode_ABT        EQU     0x17
43*10465441SEvalZeroMode_UND        EQU     0x1B
44*10465441SEvalZeroMode_SYS        EQU     0x1F
45*10465441SEvalZero
46*10465441SEvalZeroI_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
47*10465441SEvalZeroF_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled
48*10465441SEvalZero
49*10465441SEvalZero
50*10465441SEvalZero;----------------------- Stack and Heap Definitions ----------------------------
51*10465441SEvalZero
52*10465441SEvalZero;// <h> Stack Configuration (Stack Sizes in Bytes)
53*10465441SEvalZero;//   <o0> Undefined Mode      <0x0-0xFFFFFFFF:8>
54*10465441SEvalZero;//   <o1> Supervisor Mode     <0x0-0xFFFFFFFF:8>
55*10465441SEvalZero;//   <o2> Abort Mode          <0x0-0xFFFFFFFF:8>
56*10465441SEvalZero;//   <o3> Fast Interrupt Mode <0x0-0xFFFFFFFF:8>
57*10465441SEvalZero;//   <o4> Interrupt Mode      <0x0-0xFFFFFFFF:8>
58*10465441SEvalZero;//   <o5> User/System Mode    <0x0-0xFFFFFFFF:8>
59*10465441SEvalZero;// </h>
60*10465441SEvalZero
61*10465441SEvalZeroUND_Stack_Size  EQU     0x00000000
62*10465441SEvalZeroSVC_Stack_Size  EQU     0x00000100
63*10465441SEvalZeroABT_Stack_Size  EQU     0x00000000
64*10465441SEvalZeroFIQ_Stack_Size  EQU     0x00000000
65*10465441SEvalZeroIRQ_Stack_Size  EQU     0x00000100
66*10465441SEvalZeroUSR_Stack_Size  EQU     0x00000100
67*10465441SEvalZero
68*10465441SEvalZeroISR_Stack_Size  EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \
69*10465441SEvalZero                         FIQ_Stack_Size + IRQ_Stack_Size)
70*10465441SEvalZero
71*10465441SEvalZero                AREA    STACK, NOINIT, READWRITE, ALIGN=3
72*10465441SEvalZero
73*10465441SEvalZeroStack_Mem       SPACE   USR_Stack_Size
74*10465441SEvalZero__initial_sp    SPACE   ISR_Stack_Size
75*10465441SEvalZeroStack_Top
76*10465441SEvalZero
77*10465441SEvalZero
78*10465441SEvalZero;// <h> Heap Configuration
79*10465441SEvalZero;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF>
80*10465441SEvalZero;// </h>
81*10465441SEvalZero
82*10465441SEvalZeroHeap_Size       EQU     0x00000000
83*10465441SEvalZero
84*10465441SEvalZero                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
85*10465441SEvalZero__heap_base
86*10465441SEvalZeroHeap_Mem        SPACE   Heap_Size
87*10465441SEvalZero__heap_limit
88*10465441SEvalZero
89*10465441SEvalZero
90*10465441SEvalZero;----------------------- Memory Definitions ------------------------------------
91*10465441SEvalZero
92*10465441SEvalZero; Internal Memory Base Addresses
93*10465441SEvalZeroIRAM_BASE       EQU     0x40000000
94*10465441SEvalZero
95*10465441SEvalZero
96*10465441SEvalZero;----------------------- Watchdog Timer Definitions ----------------------------
97*10465441SEvalZero
98*10465441SEvalZeroWT_BASE         EQU     0x53000000      ; Watchdog Timer Base Address
99*10465441SEvalZeroWTCON_OFS       EQU     0x00            ; Watchdog Timer Control Register Offset
100*10465441SEvalZeroWTDAT_OFS       EQU     0x04            ; Watchdog Timer Data Register    Offset
101*10465441SEvalZeroWTCNT_OFS       EQU     0x08            ; Watchdog Timer Count Register   Offset
102*10465441SEvalZero
103*10465441SEvalZero;// <e> Watchdog Timer Setup
104*10465441SEvalZero;//   <h> Watchdog Timer Control Register (WTCON)
105*10465441SEvalZero;//     <o1.8..15>  Prescaler Value <0-255>
106*10465441SEvalZero;//     <o1.5>      Watchdog Timer Enable
107*10465441SEvalZero;//     <o1.3..4>   Clock Division Factor
108*10465441SEvalZero;//       <0=> 16   <1=> 32  <2=> 64  <3=> 128
109*10465441SEvalZero;//     <o1.2>      Interrupt Generation Enable
110*10465441SEvalZero;//     <o1.0>      Reset Enable
111*10465441SEvalZero;//   </h>
112*10465441SEvalZero;//   <h> Watchdog Timer Data Register (WTDAT)
113*10465441SEvalZero;//     <o2.0..15>  Count Reload Value <0-65535>
114*10465441SEvalZero;//   </h>
115*10465441SEvalZero;// </e> Watchdog Timer Setup
116*10465441SEvalZeroWT_SETUP        EQU     1
117*10465441SEvalZeroWTCON_Val       EQU     0x00000000
118*10465441SEvalZeroWTDAT_Val       EQU     0x00008000
119*10465441SEvalZero
120*10465441SEvalZero
121*10465441SEvalZero;----------------------- Clock and Power Management Definitions ----------------
122*10465441SEvalZero
123*10465441SEvalZeroCLOCK_BASE      EQU     0x4C000000      ; Clock Base Address
124*10465441SEvalZeroLOCKTIME_OFS    EQU     0x00            ; PLL Lock Time Count Register   Offset
125*10465441SEvalZeroMPLLCON_OFS     EQU     0x04            ; MPLL Configuration Register    Offset
126*10465441SEvalZeroUPLLCON_OFS     EQU     0x08            ; UPLL Configuration Register    Offset
127*10465441SEvalZeroCLKCON_OFS      EQU     0x0C            ; Clock Generator Control Reg    Offset
128*10465441SEvalZeroCLKSLOW_OFS     EQU     0x10            ; Clock Slow Control Register    Offset
129*10465441SEvalZeroCLKDIVN_OFS     EQU     0x14            ; Clock Divider Control Register Offset
130*10465441SEvalZeroCAMDIVN_OFS     EQU     0x18            ; Camera Clock Divider Register  Offset
131*10465441SEvalZero
132*10465441SEvalZero;// <e> Clock Setup
133*10465441SEvalZero;//   <h> PLL Lock Time Count Register (LOCKTIME)
134*10465441SEvalZero;//     <o1.16..31> U_LTIME: UPLL Lock Time Count Value for UCLK <0x0-0xFFFF>
135*10465441SEvalZero;//     <o1.0..15>  M_LTIME: MPLL Lock Time Count Value for FCLK, HCLK and PCLK <0x0-0xFFFF>
136*10465441SEvalZero;//   </h>
137*10465441SEvalZero;//   <h> MPLL Configuration Register (MPLLCON)
138*10465441SEvalZero;//     <i> MPLL = (2 * m * Fin) / (p * 2^s)
139*10465441SEvalZero;//     <o2.12..19> m: Main Divider m Value <9-256><#-8>
140*10465441SEvalZero;//       <i> m = MDIV + 8
141*10465441SEvalZero;//     <o2.4..9>   p: Pre-divider p Value <3-64><#-2>
142*10465441SEvalZero;//       <i> p = PDIV + 2
143*10465441SEvalZero;//     <o2.0..1>   s: Post Divider s Value <0-3>
144*10465441SEvalZero;//       <i> s = SDIV
145*10465441SEvalZero;//   </h>
146*10465441SEvalZero;//   <h> UPLL Configuration Register (UPLLCON)
147*10465441SEvalZero;//     <i> UPLL = ( m * Fin) / (p * 2^s)
148*10465441SEvalZero;//     <o3.12..19> m: Main Divider m Value <8-263><#-8>
149*10465441SEvalZero;//       <i> m = MDIV + 8
150*10465441SEvalZero;//     <o3.4..9>   p: Pre-divider p Value <2-65><#-2>
151*10465441SEvalZero;//       <i> p = PDIV + 2
152*10465441SEvalZero;//     <o3.0..1>   s: Post Divider s Value <0-3>
153*10465441SEvalZero;//       <i> s = SDIV
154*10465441SEvalZero;//   </h>
155*10465441SEvalZero;//   <h> Clock Generation Control Register (CLKCON)
156*10465441SEvalZero;//     <o4.20>     AC97 Enable
157*10465441SEvalZero;//     <o4.19>     Camera Enable
158*10465441SEvalZero;//     <o4.18>     SPI Enable
159*10465441SEvalZero;//     <o4.17>     IIS Enable
160*10465441SEvalZero;//     <o4.16>     IIC Enable
161*10465441SEvalZero;//     <o4.15>     ADC + Touch Screen Enable
162*10465441SEvalZero;//     <o4.14>     RTC Enable
163*10465441SEvalZero;//     <o4.13>     GPIO Enable
164*10465441SEvalZero;//     <o4.12>     UART2 Enable
165*10465441SEvalZero;//     <o4.11>     UART1 Enable
166*10465441SEvalZero;//     <o4.10>     UART0 Enable
167*10465441SEvalZero;//     <o4.9>      SDI Enable
168*10465441SEvalZero;//     <o4.8>      PWMTIMER Enable
169*10465441SEvalZero;//     <o4.7>      USB Device Enable
170*10465441SEvalZero;//     <o4.6>      USB Host Enable
171*10465441SEvalZero;//     <o4.5>      LCDC Enable
172*10465441SEvalZero;//     <o4.4>      NAND FLASH Controller Enable
173*10465441SEvalZero;//     <o4.3>      SLEEP Enable
174*10465441SEvalZero;//     <o4.2>      IDLE BIT Enable
175*10465441SEvalZero;//   </h>
176*10465441SEvalZero;//   <h> Clock Slow Control Register (CLKSLOW)
177*10465441SEvalZero;//     <o5.7>      UCLK_ON: UCLK ON
178*10465441SEvalZero;//     <o5.5>      MPLL_OFF: Turn off PLL
179*10465441SEvalZero;//     <o5.4>      SLOW_BIT: Slow Mode Enable
180*10465441SEvalZero;//     <o5.0..2>   SLOW_VAL: Slow Clock Divider <0-7>
181*10465441SEvalZero;//   </h>
182*10465441SEvalZero;//   <h> Clock Divider Control Register (CLKDIVN)
183*10465441SEvalZero;//     <o6.3>      DIVN_UPLL: UCLK Select
184*10465441SEvalZero;//       <0=> UCLK = UPLL clock
185*10465441SEvalZero;//       <1=> UCLK = UPLL clock / 2
186*10465441SEvalZero;//     <o6.1..2>   HDIVN: HCLK Select
187*10465441SEvalZero;//       <0=> HCLK = FCLK
188*10465441SEvalZero;//       <1=> HCLK = FCLK / 2
189*10465441SEvalZero;//       <2=> HCLK = FCLK / 4 if HCLK4_HALF = 0 in CAMDIVN, else HCLK = FCLK / 8
190*10465441SEvalZero;//       <3=> HCLK = FCLK / 3 if HCLK3_HALF = 0 in CAMDIVN, else HCLK = FCLK / 6
191*10465441SEvalZero;//     <o6.0>      PDIVN: PCLK Select
192*10465441SEvalZero;//       <0=> PCLK = HCLK
193*10465441SEvalZero;//       <1=> PCLK = HCLK / 2
194*10465441SEvalZero;//   </h>
195*10465441SEvalZero;//   <h> Camera Clock Divider Control Register (CAMDIVN)
196*10465441SEvalZero;//     <o7.12>     DVS_EN: ARM Core Clock Select
197*10465441SEvalZero;//       <0=> ARM core runs at FCLK
198*10465441SEvalZero;//       <1=> ARM core runs at HCLK
199*10465441SEvalZero;//     <o7.9>      HCLK4_HALF: HDIVN Division Rate Change Bit
200*10465441SEvalZero;//       <0=> If HDIVN = 2 in CLKDIVN then HCLK = FCLK / 4
201*10465441SEvalZero;//       <1=> If HDIVN = 2 in CLKDIVN then HCLK = FCLK / 8
202*10465441SEvalZero;//     <o7.8>      HCLK3_HALF: HDIVN Division Rate Change Bit
203*10465441SEvalZero;//       <0=> If HDIVN = 3 in CLKDIVN then HCLK = FCLK / 3
204*10465441SEvalZero;//       <1=> If HDIVN = 3 in CLKDIVN then HCLK = FCLK / 6
205*10465441SEvalZero;//     <o7.4>      CAMCLK Select
206*10465441SEvalZero;//       <0=> CAMCLK = UPLL
207*10465441SEvalZero;//       <1=> CAMCLK = UPLL / CAMCLK_DIV
208*10465441SEvalZero;//     <o7.0..3>   CAMCLK_DIV: CAMCLK Divider <0-15>
209*10465441SEvalZero;//       <i> Camera Clock = UPLL / (2 * (CAMCLK_DIV + 1))
210*10465441SEvalZero;//       <i> Divider is used only if CAMCLK_SEL = 1
211*10465441SEvalZero;//   </h>
212*10465441SEvalZero;// </e> Clock Setup
213*10465441SEvalZeroCLOCK_SETUP     EQU     0
214*10465441SEvalZeroLOCKTIME_Val    EQU     0x0FFF0FFF
215*10465441SEvalZeroMPLLCON_Val     EQU     0x00043011
216*10465441SEvalZeroUPLLCON_Val     EQU     0x00038021
217*10465441SEvalZeroCLKCON_Val      EQU     0x001FFFF0
218*10465441SEvalZeroCLKSLOW_Val     EQU     0x00000004
219*10465441SEvalZeroCLKDIVN_Val     EQU     0x0000000F
220*10465441SEvalZeroCAMDIVN_Val     EQU     0x00000000
221*10465441SEvalZero
222*10465441SEvalZero
223*10465441SEvalZero;----------------------- Memory Controller Definitions -------------------------
224*10465441SEvalZero
225*10465441SEvalZeroMC_BASE         EQU     0x48000000      ; Memory Controller Base Address
226*10465441SEvalZeroBWSCON_OFS      EQU     0x00            ; Bus Width and Wait Status Ctrl Offset
227*10465441SEvalZeroBANKCON0_OFS    EQU     0x04            ; Bank 0 Control Register        Offset
228*10465441SEvalZeroBANKCON1_OFS    EQU     0x08            ; Bank 1 Control Register        Offset
229*10465441SEvalZeroBANKCON2_OFS    EQU     0x0C            ; Bank 2 Control Register        Offset
230*10465441SEvalZeroBANKCON3_OFS    EQU     0x10            ; Bank 3 Control Register        Offset
231*10465441SEvalZeroBANKCON4_OFS    EQU     0x14            ; Bank 4 Control Register        Offset
232*10465441SEvalZeroBANKCON5_OFS    EQU     0x18            ; Bank 5 Control Register        Offset
233*10465441SEvalZeroBANKCON6_OFS    EQU     0x1C            ; Bank 6 Control Register        Offset
234*10465441SEvalZeroBANKCON7_OFS    EQU     0x20            ; Bank 7 Control Register        Offset
235*10465441SEvalZeroREFRESH_OFS     EQU     0x24            ; SDRAM Refresh Control Register Offset
236*10465441SEvalZeroBANKSIZE_OFS    EQU     0x28            ; Flexible Bank Size Register    Offset
237*10465441SEvalZeroMRSRB6_OFS      EQU     0x2C            ; Bank 6 Mode Register           Offset
238*10465441SEvalZeroMRSRB7_OFS      EQU     0x30            ; Bank 7 Mode Register           Offset
239*10465441SEvalZero
240*10465441SEvalZero;// <e> Memory Controller Setup
241*10465441SEvalZero;//   <h> Bus Width and Wait Control Register (BWSCON)
242*10465441SEvalZero;//     <o1.31>     ST7: Use UB/LB for Bank 7
243*10465441SEvalZero;//     <o1.30>     WS7: Enable Wait Status for Bank 7
244*10465441SEvalZero;//     <o1.28..29> DW7: Data Bus Width for Bank 7
245*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
246*10465441SEvalZero;//     <o1.27>     ST6: Use UB/LB for Bank 6
247*10465441SEvalZero;//     <o1.26>     WS6: Enable Wait Status for Bank 6
248*10465441SEvalZero;//     <o1.24..25> DW6: Data Bus Width for Bank 6
249*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
250*10465441SEvalZero;//     <o1.23>     ST5: Use UB/LB for Bank 5
251*10465441SEvalZero;//     <o1.22>     WS5: Enable Wait Status for Bank 5
252*10465441SEvalZero;//     <o1.20..21> DW5: Data Bus Width for Bank 5
253*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
254*10465441SEvalZero;//     <o1.19>     ST4: Use UB/LB for Bank 4
255*10465441SEvalZero;//     <o1.18>     WS4: Enable Wait Status for Bank 4
256*10465441SEvalZero;//     <o1.16..17> DW4: Data Bus Width for Bank 4
257*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
258*10465441SEvalZero;//     <o1.15>     ST3: Use UB/LB for Bank 3
259*10465441SEvalZero;//     <o1.14>     WS3: Enable Wait Status for Bank 3
260*10465441SEvalZero;//     <o1.12..13> DW3: Data Bus Width for Bank 3
261*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
262*10465441SEvalZero;//     <o1.11>     ST2: Use UB/LB for Bank 2
263*10465441SEvalZero;//     <o1.10>     WS2: Enable Wait Status for Bank 2
264*10465441SEvalZero;//     <o1.8..9>   DW2: Data Bus Width for Bank 2
265*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
266*10465441SEvalZero;//     <o1.7>      ST1: Use UB/LB for Bank 1
267*10465441SEvalZero;//     <o1.6>      WS1: Enable Wait Status for Bank 1
268*10465441SEvalZero;//     <o1.4..5>   DW1: Data Bus Width for Bank 1
269*10465441SEvalZero;//       <0=> 8-bit  <1=> 16-bit  <2=> 32-bit  <3=> Reserved
270*10465441SEvalZero;//     <o1.1..2>   DW0: Indicate Data Bus Width for Bank 0
271*10465441SEvalZero;//       <1=> 16-bit  <2=> 32-bit
272*10465441SEvalZero;//   </h>
273*10465441SEvalZero;//   <h> Bank 0 Control Register (BANKCON0)
274*10465441SEvalZero;//     <o2.13..14> Tacs: Address Set-up Time before nGCS
275*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
276*10465441SEvalZero;//     <o2.11..12> Tcos: Chip Selection Set-up Time before nOE
277*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
278*10465441SEvalZero;//     <o2.8..10>  Tacc: Access Cycle
279*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
280*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
281*10465441SEvalZero;//     <o2.6..7>   Tcoh: Chip Selection Hold Time after nOE
282*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
283*10465441SEvalZero;//     <o2.4..5>   Tcah: Address Hold Time after nGCS
284*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
285*10465441SEvalZero;//     <o2.2..3>   Tacp: Page Mode Access Cycle at Page Mode
286*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
287*10465441SEvalZero;//     <o2.0..1>   PMC: Page Mode Configuration
288*10465441SEvalZero;//       <0=> normal (1 data)  <1=> 4 data  <2=> 8 data  <3=> 16 data
289*10465441SEvalZero;//   </h>
290*10465441SEvalZero;//   <h> Bank 1 Control Register (BANKCON1)
291*10465441SEvalZero;//     <o3.13..14> Tacs: Address Set-up Time before nGCS
292*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
293*10465441SEvalZero;//     <o3.11..12> Tcos: Chip Selection Set-up Time before nOE
294*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
295*10465441SEvalZero;//     <o3.8..10>  Tacc: Access Cycle
296*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
297*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
298*10465441SEvalZero;//     <o3.6..7>   Tcoh: Chip Selection Hold Time after nOE
299*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
300*10465441SEvalZero;//     <o3.4..5>   Tcah: Address Hold Time after nGCS
301*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
302*10465441SEvalZero;//     <o3.2..3>   Tacp: Page Mode Access Cycle at Page Mode
303*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
304*10465441SEvalZero;//     <o3.0..1>   PMC: Page Mode Configuration
305*10465441SEvalZero;//       <0=> normal (1 data)  <1=> 4 data  <2=> 8 data  <3=> 16 data
306*10465441SEvalZero;//   </h>
307*10465441SEvalZero;//   <h> Bank 2 Control Register (BANKCON2)
308*10465441SEvalZero;//     <o4.13..14> Tacs: Address Set-up Time before nGCS
309*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
310*10465441SEvalZero;//     <o4.11..12> Tcos: Chip Selection Set-up Time before nOE
311*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
312*10465441SEvalZero;//     <o4.8..10>  Tacc: Access Cycle
313*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
314*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
315*10465441SEvalZero;//     <o4.6..7>   Tcoh: Chip Selection Hold Time after nOE
316*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
317*10465441SEvalZero;//     <o4.4..5>   Tcah: Address Hold Time after nGCS
318*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
319*10465441SEvalZero;//     <o4.2..3>   Tacp: Page Mode Access Cycle at Page Mode
320*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
321*10465441SEvalZero;//     <o4.0..1>   PMC: Page Mode Configuration
322*10465441SEvalZero;//       <0=> normal (1 data)  <1=> 4 data  <2=> 8 data  <3=> 16 data
323*10465441SEvalZero;//   </h>
324*10465441SEvalZero;//   <h> Bank 3 Control Register (BANKCON3)
325*10465441SEvalZero;//     <o5.13..14> Tacs: Address Set-up Time before nGCS
326*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
327*10465441SEvalZero;//     <o5.11..12> Tcos: Chip Selection Set-up Time before nOE
328*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
329*10465441SEvalZero;//     <o5.8..10>  Tacc: Access Cycle
330*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
331*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
332*10465441SEvalZero;//     <o5.6..7>   Tcoh: Chip Selection Hold Time after nOE
333*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
334*10465441SEvalZero;//     <o5.4..5>   Tcah: Address Hold Time after nGCS
335*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
336*10465441SEvalZero;//     <o5.2..3>   Tacp: Page Mode Access Cycle at Page Mode
337*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
338*10465441SEvalZero;//     <o5.0..1>   PMC: Page Mode Configuration
339*10465441SEvalZero;//       <0=> normal (1 data)  <1=> 4 data  <2=> 8 data  <3=> 16 data
340*10465441SEvalZero;//   </h>
341*10465441SEvalZero;//   <h> Bank 4 Control Register (BANKCON4)
342*10465441SEvalZero;//     <o6.13..14> Tacs: Address Set-up Time before nGCS
343*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
344*10465441SEvalZero;//     <o6.11..12> Tcos: Chip Selection Set-up Time before nOE
345*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
346*10465441SEvalZero;//     <o6.8..10>  Tacc: Access Cycle
347*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
348*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
349*10465441SEvalZero;//     <o6.6..7>   Tcoh: Chip Selection Hold Time after nOE
350*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
351*10465441SEvalZero;//     <o6.4..5>   Tcah: Address Hold Time after nGCS
352*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
353*10465441SEvalZero;//     <o6.2..3>   Tacp: Page Mode Access Cycle at Page Mode
354*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
355*10465441SEvalZero;//     <o6.0..1>   PMC: Page Mode Configuration
356*10465441SEvalZero;//       <0=> normal (1 data)  <1=> 4 data  <2=> 8 data  <3=> 16 data
357*10465441SEvalZero;//   </h>
358*10465441SEvalZero;//   <h> Bank 5 Control Register (BANKCON5)
359*10465441SEvalZero;//     <o7.13..14> Tacs: Address Set-up Time before nGCS
360*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
361*10465441SEvalZero;//     <o7.11..12> Tcos: Chip Selection Set-up Time before nOE
362*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
363*10465441SEvalZero;//     <o7.8..10>  Tacc: Access Cycle
364*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
365*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
366*10465441SEvalZero;//     <o7.6..7>   Tcoh: Chip Selection Hold Time after nOE
367*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
368*10465441SEvalZero;//     <o7.4..5>   Tcah: Address Hold Time after nGCS
369*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
370*10465441SEvalZero;//     <o7.2..3>   Tacp: Page Mode Access Cycle at Page Mode
371*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
372*10465441SEvalZero;//     <o7.0..1>   PMC: Page Mode Configuration
373*10465441SEvalZero;//       <0=> normal (1 data)  <1=> 4 data  <2=> 8 data  <3=> 16 data
374*10465441SEvalZero;//   </h>
375*10465441SEvalZero;//   <h> Bank 6 Control Register (BANKCON6)
376*10465441SEvalZero;//     <o8.15..16> Memory Type Selection
377*10465441SEvalZero;//       <0=> ROM or SRAM  <3=> SDRAM
378*10465441SEvalZero;//     <o8.13..14> Tacs: Address Set-up Time before nGCS
379*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
380*10465441SEvalZero;//     <o8.11..12> Tcos: Chip Selection Set-up Time before nOE
381*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
382*10465441SEvalZero;//     <o8.8..10>  Tacc: Access Cycle
383*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
384*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
385*10465441SEvalZero;//     <o8.6..7>   Tcoh: Chip Selection Hold Time after nOE
386*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
387*10465441SEvalZero;//     <o8.4..5>   Tcah: Address Hold Time after nGCS
388*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
389*10465441SEvalZero;//     <o8.2..3>   Tacp/Trcd: Page Mode Access Cycle at Page Mode / RAS to CAS Delay
390*10465441SEvalZero;//       <i>  Parameter depends on Memory Type: if type SRAM then parameter is Tacp,
391*10465441SEvalZero;//       <i>  if type is SDRAM then parameter is Trcd
392*10465441SEvalZero;//       <i>  For SDRAM 6 cycles setting is not allowed
393*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
394*10465441SEvalZero;//     <o8.0..1>   PMC/SCAN: Page Mode Configuration / Column Address Number <0-3>
395*10465441SEvalZero;//       <i>  Parameter depends on Memory Type: if type SRAM then parameter is PMC,
396*10465441SEvalZero;//       <i>  if type is SDRAM then parameter is SCAN
397*10465441SEvalZero;//   </h>
398*10465441SEvalZero;//   <h> Bank 7 Control Register (BANKCON7)
399*10465441SEvalZero;//     <o9.15..16> Memory Type Selection
400*10465441SEvalZero;//       <0=> ROM or SRAM  <3=> SDRAM
401*10465441SEvalZero;//     <o9.13..14> Tacs: Address Set-up Time before nGCS
402*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
403*10465441SEvalZero;//     <o9.11..12> Tcos: Chip Selection Set-up Time before nOE
404*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
405*10465441SEvalZero;//     <o9.8..10>  Tacc: Access Cycle
406*10465441SEvalZero;//       <0=>  1 clocks  <1=>  2 clocks  <2=>  3 clocks  <3=>  4 clocks
407*10465441SEvalZero;//       <4=>  6 clocks  <5=>  8 clocks  <6=> 10 clocks  <7=> 14 clocks
408*10465441SEvalZero;//     <o9.6..7>   Tcoh: Chip Selection Hold Time after nOE
409*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
410*10465441SEvalZero;//     <o9.4..5>   Tcah: Address Hold Time after nGCS
411*10465441SEvalZero;//       <0=> 0 clocks  <1=> 1 clocks  <2=> 2 clocks  <3=> 4 clocks
412*10465441SEvalZero;//     <o9.2..3>   Tacp/Trcd: Page Mode Access Cycle at Page Mode / RAS to CAS Delay
413*10465441SEvalZero;//       <i>  Parameter depends on Memory Type: if type SRAM then parameter is Tacp,
414*10465441SEvalZero;//       <i>  if type is SDRAM then parameter is Trcd
415*10465441SEvalZero;//       <i>  For SDRAM 6 cycles setting is not allowed
416*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> 6 clocks
417*10465441SEvalZero;//     <o9.0..1>   PMC/SCAN: Page Mode Configuration / Column Address Number <0-3>
418*10465441SEvalZero;//       <i>  Parameter depends on Memory Type: if type SRAM then parameter is PMC,
419*10465441SEvalZero;//       <i>  if type is SDRAM then parameter is SCAN
420*10465441SEvalZero;//   </h>
421*10465441SEvalZero;//   <h> SDRAM Refresh Control Register (REFRESH)
422*10465441SEvalZero;//     <o10.23>    REFEN: SDRAM Refresh Enable
423*10465441SEvalZero;//     <o10.22>    TREFMD: SDRAM Refresh Mode
424*10465441SEvalZero;//       <0=> CBR/Auto Refresh  <1=> Self Refresh
425*10465441SEvalZero;//     <o10.20..21> Trp: SDRAM RAS Pre-charge Time
426*10465441SEvalZero;//       <0=> 2 clocks  <1=> 3 clocks  <2=> 4 clocks  <3=> Reserved
427*10465441SEvalZero;//     <o10.18..19> Tsrc: SDRAM Semi Row Cycle Time
428*10465441SEvalZero;//       <i> SDRAM Row cycle time: Trc = Tsrc + Trp
429*10465441SEvalZero;//       <0=> 4 clocks  <1=> 5 clocks  <2=> 6 clocks  <3=> 7 clocks
430*10465441SEvalZero;//     <o10.0..10> Refresh Counter <0-1023>
431*10465441SEvalZero;//       <i> Refresh Period = (2048 - Refresh Count + 1) / HCLK
432*10465441SEvalZero;//   </h>
433*10465441SEvalZero;//   <h> Flexible Bank Size Register (BANKSIZE)
434*10465441SEvalZero;//     <o11.7>     BURST_EN: ARM Core Burst Operation Enable
435*10465441SEvalZero;//     <o11.5>     SCKE_EN: SDRAM Power Down Mode Enable
436*10465441SEvalZero;//     <o11.4>     SCLK_EN: SCLK Enabled During SDRAM Access Cycle
437*10465441SEvalZero;//       <0=> SCLK is always active  <1=> SCLK is active only during the access
438*10465441SEvalZero;//     <o11.0..2>  BK76MAP: BANK6 and BANK7 Memory Map
439*10465441SEvalZero;//       <0=> 32MB / 32MB  <1=> 64MB / 64MB  <2=> 128MB / 128MB
440*10465441SEvalZero;//       <4=> 2MB / 2MB    <5=> 4MB / 4MB    <6=> 8MB / 8MB      <7=> 16MB / 16MB
441*10465441SEvalZero;//     <o11.0..10> Refresh Counter <0-1023>
442*10465441SEvalZero;//       <i> Refresh Period = (2048 - Refresh Count + 1) / HCLK
443*10465441SEvalZero;//   </h>
444*10465441SEvalZero;//   <h> SDRAM Mode Register Set Register 6 (MRSRB6)
445*10465441SEvalZero;//     <o12.7>     WBL: Write Burst Length
446*10465441SEvalZero;//       <0=> Burst (Fixed)
447*10465441SEvalZero;//     <o12.7..8>  TM: Test Mode
448*10465441SEvalZero;//       <0=> Mode register set (Fixed)
449*10465441SEvalZero;//     <o12.4..6>  CL: CAS Latency
450*10465441SEvalZero;//       <0=> 1 clocks  <1=> 2 clocks  <2=> 3 clocks
451*10465441SEvalZero;//     <o12.3>     BT: Burst Type
452*10465441SEvalZero;//       <0=> Sequential (Fixed)
453*10465441SEvalZero;//     <o12.0..2>  BL: Burst Length
454*10465441SEvalZero;//       <0=> 1 (Fixed)
455*10465441SEvalZero;//   </h>
456*10465441SEvalZero;//   <h> SDRAM Mode Register Set Register 7 (MRSRB7)
457*10465441SEvalZero;//     <o13.7>     WBL: Write Burst Length
458*10465441SEvalZero;//       <0=> Burst (Fixed)
459*10465441SEvalZero;//     <o13.7..8>  TM: Test Mode
460*10465441SEvalZero;//       <0=> Mode register set (Fixed)
461*10465441SEvalZero;//     <o13.4..6>  CL: CAS Latency
462*10465441SEvalZero;//       <0=> 1 clocks  <1=> 2 clocks  <2=> 3 clocks
463*10465441SEvalZero;//     <o13.3>     BT: Burst Type
464*10465441SEvalZero;//       <0=> Sequential (Fixed)
465*10465441SEvalZero;//     <o13.0..2>  BL: Burst Length
466*10465441SEvalZero;//       <0=> 1 (Fixed)
467*10465441SEvalZero;//   </h>
468*10465441SEvalZero;// </e> Memory Controller Setup
469*10465441SEvalZeroMC_SETUP        EQU     0
470*10465441SEvalZeroBWSCON_Val      EQU     0x22000000
471*10465441SEvalZeroBANKCON0_Val    EQU     0x00000700
472*10465441SEvalZeroBANKCON1_Val    EQU     0x00000700
473*10465441SEvalZeroBANKCON2_Val    EQU     0x00000700
474*10465441SEvalZeroBANKCON3_Val    EQU     0x00000700
475*10465441SEvalZeroBANKCON4_Val    EQU     0x00000700
476*10465441SEvalZeroBANKCON5_Val    EQU     0x00000700
477*10465441SEvalZeroBANKCON6_Val    EQU     0x00018005
478*10465441SEvalZeroBANKCON7_Val    EQU     0x00018005
479*10465441SEvalZeroREFRESH_Val     EQU     0x008404F3
480*10465441SEvalZeroBANKSIZE_Val    EQU     0x00000032
481*10465441SEvalZeroMRSRB6_Val      EQU     0x00000020
482*10465441SEvalZeroMRSRB7_Val      EQU     0x00000020
483*10465441SEvalZero
484*10465441SEvalZero
485*10465441SEvalZero;----------------------- I/O Port Definitions ----------------------------------
486*10465441SEvalZero
487*10465441SEvalZeroGPA_BASE        EQU     0x56000000      ; GPA Base Address
488*10465441SEvalZeroGPB_BASE        EQU     0x56000010      ; GPB Base Address
489*10465441SEvalZeroGPC_BASE        EQU     0x56000020      ; GPC Base Address
490*10465441SEvalZeroGPD_BASE        EQU     0x56000030      ; GPD Base Address
491*10465441SEvalZeroGPE_BASE        EQU     0x56000040      ; GPE Base Address
492*10465441SEvalZeroGPF_BASE        EQU     0x56000050      ; GPF Base Address
493*10465441SEvalZeroGPG_BASE        EQU     0x56000060      ; GPG Base Address
494*10465441SEvalZeroGPH_BASE        EQU     0x56000070      ; GPH Base Address
495*10465441SEvalZeroGPJ_BASE        EQU     0x560000D0      ; GPJ Base Address
496*10465441SEvalZeroGPCON_OFS       EQU     0x00            ; Control Register Offset
497*10465441SEvalZeroGPDAT_OFS       EQU     0x04            ; Data Register Offset
498*10465441SEvalZeroGPUP_OFS        EQU     0x08            ; Pull-up Disable Register Offset
499*10465441SEvalZero
500*10465441SEvalZero;// <e> I/O Setup
501*10465441SEvalZeroGP_SETUP        EQU     1
502*10465441SEvalZero
503*10465441SEvalZero;//   <e> Port A Settings
504*10465441SEvalZero;//     <h> Port A Control Register (GPACON)
505*10465441SEvalZero;//         <o1.22>     GPA22     <0=> Output   <1=> nFCE
506*10465441SEvalZero;//         <o1.21>     GPA21     <0=> Output   <1=> nRSTOUT
507*10465441SEvalZero;//         <o1.20>     GPA20     <0=> Output   <1=> nFRE
508*10465441SEvalZero;//         <o1.19>     GPA19     <0=> Output   <1=> nFWE
509*10465441SEvalZero;//         <o1.18>     GPA18     <0=> Output   <1=> ALE
510*10465441SEvalZero;//         <o1.17>     GPA17     <0=> Output   <1=> CLE
511*10465441SEvalZero;//         <o1.16>     GPA16     <0=> Output   <1=> nGCS[5]
512*10465441SEvalZero;//         <o1.15>     GPA15     <0=> Output   <1=> nGCS[4]
513*10465441SEvalZero;//         <o1.14>     GPA14     <0=> Output   <1=> nGCS[3]
514*10465441SEvalZero;//         <o1.13>     GPA13     <0=> Output   <1=> nGCS[2]
515*10465441SEvalZero;//         <o1.12>     GPA12     <0=> Output   <1=> nGCS[1]
516*10465441SEvalZero;//         <o1.11>     GPA11     <0=> Output   <1=> ADDR26
517*10465441SEvalZero;//         <o1.10>     GPA10     <0=> Output   <1=> ADDR25
518*10465441SEvalZero;//         <o1.9>      GPA9      <0=> Output   <1=> ADDR24
519*10465441SEvalZero;//         <o1.8>      GPA8      <0=> Output   <1=> ADDR23
520*10465441SEvalZero;//         <o1.7>      GPA7      <0=> Output   <1=> ADDR22
521*10465441SEvalZero;//         <o1.6>      GPA6      <0=> Output   <1=> ADDR21
522*10465441SEvalZero;//         <o1.5>      GPA5      <0=> Output   <1=> ADDR20
523*10465441SEvalZero;//         <o1.4>      GPA4      <0=> Output   <1=> ADDR19
524*10465441SEvalZero;//         <o1.3>      GPA3      <0=> Output   <1=> ADDR18
525*10465441SEvalZero;//         <o1.2>      GPA2      <0=> Output   <1=> ADDR17
526*10465441SEvalZero;//         <o1.1>      GPA1      <0=> Output   <1=> ADDR16
527*10465441SEvalZero;//         <o1.0>      GPA0      <0=> Output   <1=> ADDR0
528*10465441SEvalZero;//     </h>
529*10465441SEvalZero;//   </e>
530*10465441SEvalZeroGPA_SETUP       EQU     0
531*10465441SEvalZeroGPACON_Val      EQU     0x000003FF
532*10465441SEvalZero
533*10465441SEvalZero;//   <e> Port B Settings
534*10465441SEvalZero;//     <h> Port B Control Register (GPBCON)
535*10465441SEvalZero;//       <o1.20..21> GPB10     <0=> Input <1=> Output <2=> nXDREQ0 <3=> Reserved
536*10465441SEvalZero;//       <o1.18..19> GPB9      <0=> Input <1=> Output <2=> nXDACK0 <3=> Reserved
537*10465441SEvalZero;//       <o1.16..17> GPB8      <0=> Input <1=> Output <2=> nXDREQ1 <3=> Reserved
538*10465441SEvalZero;//       <o1.14..15> GPB7      <0=> Input <1=> Output <2=> nXDACK1 <3=> Reserved
539*10465441SEvalZero;//       <o1.12..13> GPB6      <0=> Input <1=> Output <2=> nXBREQ  <3=> Reserved
540*10465441SEvalZero;//       <o1.10..11> GPB5      <0=> Input <1=> Output <2=> nXBACK  <3=> Reserved
541*10465441SEvalZero;//       <o1.8..9>   GPB4      <0=> Input <1=> Output <2=> TCLK[0] <3=> Reserved
542*10465441SEvalZero;//       <o1.6..7>   GPB3      <0=> Input <1=> Output <2=> TOUT3   <3=> Reserved
543*10465441SEvalZero;//       <o1.4..5>   GPB2      <0=> Input <1=> Output <2=> TOUT2   <3=> Reserved
544*10465441SEvalZero;//       <o1.2..3>   GPB1      <0=> Input <1=> Output <2=> TOUT1   <3=> Reserved
545*10465441SEvalZero;//       <o1.0..1>   GPB0      <0=> Input <1=> Output <2=> TOUT0   <3=> Reserved
546*10465441SEvalZero;//     </h>
547*10465441SEvalZero;//     <h> Port B Pull-up Settings Register (GPBUP)
548*10465441SEvalZero;//       <o2.10>     GPB10 Pull-up Disable
549*10465441SEvalZero;//       <o2.9>      GPB9  Pull-up Disable
550*10465441SEvalZero;//       <o2.8>      GPB8  Pull-up Disable
551*10465441SEvalZero;//       <o2.7>      GPB7  Pull-up Disable
552*10465441SEvalZero;//       <o2.6>      GPB6  Pull-up Disable
553*10465441SEvalZero;//       <o2.5>      GPB5  Pull-up Disable
554*10465441SEvalZero;//       <o2.4>      GPB4  Pull-up Disable
555*10465441SEvalZero;//       <o2.3>      GPB3  Pull-up Disable
556*10465441SEvalZero;//       <o2.2>      GPB2  Pull-up Disable
557*10465441SEvalZero;//       <o2.1>      GPB1  Pull-up Disable
558*10465441SEvalZero;//       <o2.0>      GPB0  Pull-up Disable
559*10465441SEvalZero;//     </h>
560*10465441SEvalZero;//   </e>
561*10465441SEvalZeroGPB_SETUP       EQU     0
562*10465441SEvalZeroGPBCON_Val      EQU     0x00000000
563*10465441SEvalZeroGPBUP_Val       EQU     0x00000000
564*10465441SEvalZero
565*10465441SEvalZero;//   <e> Port C Settings
566*10465441SEvalZero;//     <h> Port C Control Register (GPCCON)
567*10465441SEvalZero;//       <o1.30..31> GPC15     <0=> Input <1=> Output <2=> VD[7]   <3=> Reserved
568*10465441SEvalZero;//       <o1.28..29> GPC14     <0=> Input <1=> Output <2=> VD[6]   <3=> Reserved
569*10465441SEvalZero;//       <o1.26..27> GPC13     <0=> Input <1=> Output <2=> VD[5]   <3=> Reserved
570*10465441SEvalZero;//       <o1.24..25> GPC12     <0=> Input <1=> Output <2=> VD[4]   <3=> Reserved
571*10465441SEvalZero;//       <o1.22..23> GPC11     <0=> Input <1=> Output <2=> VD[3]   <3=> Reserved
572*10465441SEvalZero;//       <o1.20..21> GPC10     <0=> Input <1=> Output <2=> VD[2]   <3=> Reserved
573*10465441SEvalZero;//       <o1.18..19> GPC9      <0=> Input <1=> Output <2=> VD[1]   <3=> Reserved
574*10465441SEvalZero;//       <o1.16..17> GPC8      <0=> Input <1=> Output <2=> VD[0]   <3=> Reserved
575*10465441SEvalZero;//       <o1.14..15> GPC7      <0=> Input <1=> Output <2=> LCD_LPCREVB <3=> Reserved
576*10465441SEvalZero;//       <o1.12..13> GPC6      <0=> Input <1=> Output <2=> LCD_LPCREV  <3=> Reserved
577*10465441SEvalZero;//       <o1.10..11> GPC5      <0=> Input <1=> Output <2=> LCD_LPCOE   <3=> Reserved
578*10465441SEvalZero;//       <o1.8..9>   GPC4      <0=> Input <1=> Output <2=> VM      <3=> I2SSDI
579*10465441SEvalZero;//       <o1.6..7>   GPC3      <0=> Input <1=> Output <2=> VFRAME  <3=> Reserved
580*10465441SEvalZero;//       <o1.4..5>   GPC2      <0=> Input <1=> Output <2=> VLINE   <3=> Reserved
581*10465441SEvalZero;//       <o1.2..3>   GPC1      <0=> Input <1=> Output <2=> VCLK    <3=> Reserved
582*10465441SEvalZero;//       <o1.0..1>   GPC0      <0=> Input <1=> Output <2=> LEND    <3=> Reserved
583*10465441SEvalZero;//     </h>
584*10465441SEvalZero;//     <h> Port C Pull-up Settings Register (GPCUP)
585*10465441SEvalZero;//       <o2.15>     GPC15 Pull-up Disable
586*10465441SEvalZero;//       <o2.14>     GPC14 Pull-up Disable
587*10465441SEvalZero;//       <o2.13>     GPC13 Pull-up Disable
588*10465441SEvalZero;//       <o2.12>     GPC12 Pull-up Disable
589*10465441SEvalZero;//       <o2.11>     GPC11 Pull-up Disable
590*10465441SEvalZero;//       <o2.10>     GPC10 Pull-up Disable
591*10465441SEvalZero;//       <o2.9>      GPC9  Pull-up Disable
592*10465441SEvalZero;//       <o2.8>      GPC8  Pull-up Disable
593*10465441SEvalZero;//       <o2.7>      GPC7  Pull-up Disable
594*10465441SEvalZero;//       <o2.6>      GPC6  Pull-up Disable
595*10465441SEvalZero;//       <o2.5>      GPC5  Pull-up Disable
596*10465441SEvalZero;//       <o2.4>      GPC4  Pull-up Disable
597*10465441SEvalZero;//       <o2.3>      GPC3  Pull-up Disable
598*10465441SEvalZero;//       <o2.2>      GPC2  Pull-up Disable
599*10465441SEvalZero;//       <o2.1>      GPC1  Pull-up Disable
600*10465441SEvalZero;//       <o2.0>      GPC0  Pull-up Disable
601*10465441SEvalZero;//     </h>
602*10465441SEvalZero;//   </e>
603*10465441SEvalZeroGPC_SETUP       EQU     0
604*10465441SEvalZeroGPCCON_Val      EQU     0x00000000
605*10465441SEvalZeroGPCUP_Val       EQU     0x00000000
606*10465441SEvalZero
607*10465441SEvalZero;//   <e> Port D Settings
608*10465441SEvalZero;//     <h> Port D Control Register (GPDCON)
609*10465441SEvalZero;//       <o1.30..31> GPD15     <0=> Input <1=> Output <2=> VD[23]  <3=> nSS0
610*10465441SEvalZero;//       <o1.28..29> GPD14     <0=> Input <1=> Output <2=> VD[22]  <3=> nSS1
611*10465441SEvalZero;//       <o1.26..27> GPD13     <0=> Input <1=> Output <2=> VD[21]  <3=> Reserved
612*10465441SEvalZero;//       <o1.24..25> GPD12     <0=> Input <1=> Output <2=> VD[20]  <3=> Reserved
613*10465441SEvalZero;//       <o1.22..23> GPD11     <0=> Input <1=> Output <2=> VD[19]  <3=> Reserved
614*10465441SEvalZero;//       <o1.20..21> GPD10     <0=> Input <1=> Output <2=> VD[18]  <3=> SPICLK1
615*10465441SEvalZero;//       <o1.18..19> GPD9      <0=> Input <1=> Output <2=> VD[17]  <3=> SPIMOSI1
616*10465441SEvalZero;//       <o1.16..17> GPD8      <0=> Input <1=> Output <2=> VD[16]  <3=> SPIMISO1
617*10465441SEvalZero;//       <o1.14..15> GPD7      <0=> Input <1=> Output <2=> VD[15]  <3=> Reserved
618*10465441SEvalZero;//       <o1.12..13> GPD6      <0=> Input <1=> Output <2=> VD[14]  <3=> Reserved
619*10465441SEvalZero;//       <o1.10..11> GPD5      <0=> Input <1=> Output <2=> VD[13]  <3=> Reserved
620*10465441SEvalZero;//       <o1.8..9>   GPD4      <0=> Input <1=> Output <2=> VD[12]  <3=> Reserved
621*10465441SEvalZero;//       <o1.6..7>   GPD3      <0=> Input <1=> Output <2=> VD[11]  <3=> Reserved
622*10465441SEvalZero;//       <o1.4..5>   GPD2      <0=> Input <1=> Output <2=> VD[10]  <3=> Reserved
623*10465441SEvalZero;//       <o1.2..3>   GPD1      <0=> Input <1=> Output <2=> VD[9]   <3=> Reserved
624*10465441SEvalZero;//       <o1.0..1>   GPD0      <0=> Input <1=> Output <2=> VD[8]   <3=> Reserved
625*10465441SEvalZero;//     </h>
626*10465441SEvalZero;//     <h> Port D Pull-up Settings Register (GPDUP)
627*10465441SEvalZero;//       <o2.15>     GPD15 Pull-up Disable
628*10465441SEvalZero;//       <o2.14>     GPD14 Pull-up Disable
629*10465441SEvalZero;//       <o2.13>     GPD13 Pull-up Disable
630*10465441SEvalZero;//       <o2.12>     GPD12 Pull-up Disable
631*10465441SEvalZero;//       <o2.11>     GPD11 Pull-up Disable
632*10465441SEvalZero;//       <o2.10>     GPD10 Pull-up Disable
633*10465441SEvalZero;//       <o2.9>      GPD9  Pull-up Disable
634*10465441SEvalZero;//       <o2.8>      GPD8  Pull-up Disable
635*10465441SEvalZero;//       <o2.7>      GPD7  Pull-up Disable
636*10465441SEvalZero;//       <o2.6>      GPD6  Pull-up Disable
637*10465441SEvalZero;//       <o2.5>      GPD5  Pull-up Disable
638*10465441SEvalZero;//       <o2.4>      GPD4  Pull-up Disable
639*10465441SEvalZero;//       <o2.3>      GPD3  Pull-up Disable
640*10465441SEvalZero;//       <o2.2>      GPD2  Pull-up Disable
641*10465441SEvalZero;//       <o2.1>      GPD1  Pull-up Disable
642*10465441SEvalZero;//       <o2.0>      GPD0  Pull-up Disable
643*10465441SEvalZero;//     </h>
644*10465441SEvalZero;//   </e>
645*10465441SEvalZeroGPD_SETUP       EQU     0
646*10465441SEvalZeroGPDCON_Val      EQU     0x00000000
647*10465441SEvalZeroGPDUP_Val       EQU     0x00000000
648*10465441SEvalZero
649*10465441SEvalZero;//   <e> Port E Settings
650*10465441SEvalZero;//     <h> Port E Control Register (GPECON)
651*10465441SEvalZero;//       <o1.30..31> GPE15     <0=> Input <1=> Output <2=> IICSDA  <3=> Reserved
652*10465441SEvalZero;//         <i> This pad is open-drain, and has no pull-up option.
653*10465441SEvalZero;//       <o1.28..29> GPE14     <0=> Input <1=> Output <2=> IICSCL  <3=> Reserved
654*10465441SEvalZero;//         <i> This pad is open-drain, and has no pull-up option.
655*10465441SEvalZero;//       <o1.26..27> GPE13     <0=> Input <1=> Output <2=> SPICLK0 <3=> Reserved
656*10465441SEvalZero;//       <o1.24..25> GPE12     <0=> Input <1=> Output <2=> SPIMOSI0 <3=> Reserved
657*10465441SEvalZero;//       <o1.22..23> GPE11     <0=> Input <1=> Output <2=> SPIMISO0 <3=> Reserved
658*10465441SEvalZero;//       <o1.20..21> GPE10     <0=> Input <1=> Output <2=> SDDAT3  <3=> Reserved
659*10465441SEvalZero;//       <o1.18..19> GPE9      <0=> Input <1=> Output <2=> SDDAT2  <3=> Reserved
660*10465441SEvalZero;//       <o1.16..17> GPE8      <0=> Input <1=> Output <2=> SDDAT1  <3=> Reserved
661*10465441SEvalZero;//       <o1.14..15> GPE7      <0=> Input <1=> Output <2=> SDDAT0  <3=> Reserved
662*10465441SEvalZero;//       <o1.12..13> GPE6      <0=> Input <1=> Output <2=> SDCMD   <3=> Reserved
663*10465441SEvalZero;//       <o1.10..11> GPE5      <0=> Input <1=> Output <2=> SDCLK   <3=> Reserved
664*10465441SEvalZero;//       <o1.8..9>   GPE4      <0=> Input <1=> Output <2=> I2SDO   <3=> AC_SDATA_OUT
665*10465441SEvalZero;//       <o1.6..7>   GPE3      <0=> Input <1=> Output <2=> I2SDI   <3=> AC_SDATA_IN
666*10465441SEvalZero;//       <o1.4..5>   GPE2      <0=> Input <1=> Output <2=> CDCLK   <3=> AC_nRESET
667*10465441SEvalZero;//       <o1.2..3>   GPE1      <0=> Input <1=> Output <2=> I2SSCLK <3=> AC_BIT_CLK
668*10465441SEvalZero;//       <o1.0..1>   GPE0      <0=> Input <1=> Output <2=> I2SLRCK <3=> AC_SYNC
669*10465441SEvalZero;//     </h>
670*10465441SEvalZero;//     <h> Port E Pull-up Settings Register (GPEUP)
671*10465441SEvalZero;//       <o2.13>     GPE13 Pull-up Disable
672*10465441SEvalZero;//       <o2.12>     GPE12 Pull-up Disable
673*10465441SEvalZero;//       <o2.11>     GPE11 Pull-up Disable
674*10465441SEvalZero;//       <o2.10>     GPE10 Pull-up Disable
675*10465441SEvalZero;//       <o2.9>      GPE9  Pull-up Disable
676*10465441SEvalZero;//       <o2.8>      GPE8  Pull-up Disable
677*10465441SEvalZero;//       <o2.7>      GPE7  Pull-up Disable
678*10465441SEvalZero;//       <o2.6>      GPE6  Pull-up Disable
679*10465441SEvalZero;//       <o2.5>      GPE5  Pull-up Disable
680*10465441SEvalZero;//       <o2.4>      GPE4  Pull-up Disable
681*10465441SEvalZero;//       <o2.3>      GPE3  Pull-up Disable
682*10465441SEvalZero;//       <o2.2>      GPE2  Pull-up Disable
683*10465441SEvalZero;//       <o2.1>      GPE1  Pull-up Disable
684*10465441SEvalZero;//       <o2.0>      GPE0  Pull-up Disable
685*10465441SEvalZero;//     </h>
686*10465441SEvalZero;//   </e>
687*10465441SEvalZeroGPE_SETUP       EQU     0
688*10465441SEvalZeroGPECON_Val      EQU     0x00000000
689*10465441SEvalZeroGPEUP_Val       EQU     0x00000000
690*10465441SEvalZero
691*10465441SEvalZero;//   <e> Port F Settings
692*10465441SEvalZero;//     <h> Port F Control Register (GPFCON)
693*10465441SEvalZero;//       <o1.14..15> GPF7      <0=> Input <1=> Output <2=> EINT[7] <3=> Reserved
694*10465441SEvalZero;//       <o1.12..13> GPF6      <0=> Input <1=> Output <2=> EINT[6] <3=> Reserved
695*10465441SEvalZero;//       <o1.10..11> GPF5      <0=> Input <1=> Output <2=> EINT[5] <3=> Reserved
696*10465441SEvalZero;//       <o1.8..9>   GPF4      <0=> Input <1=> Output <2=> EINT[4] <3=> Reserved
697*10465441SEvalZero;//       <o1.6..7>   GPF3      <0=> Input <1=> Output <2=> EINT[3] <3=> Reserved
698*10465441SEvalZero;//       <o1.4..5>   GPF2      <0=> Input <1=> Output <2=> EINT[2] <3=> Reserved
699*10465441SEvalZero;//       <o1.2..3>   GPF1      <0=> Input <1=> Output <2=> EINT[1] <3=> Reserved
700*10465441SEvalZero;//       <o1.0..1>   GPF0      <0=> Input <1=> Output <2=> EINT[0] <3=> Reserved
701*10465441SEvalZero;//     </h>
702*10465441SEvalZero;//     <h> Port F Pull-up Settings Register (GPFUP)
703*10465441SEvalZero;//       <o2.7>      GPF7  Pull-up Disable
704*10465441SEvalZero;//       <o2.6>      GPF6  Pull-up Disable
705*10465441SEvalZero;//       <o2.5>      GPF5  Pull-up Disable
706*10465441SEvalZero;//       <o2.4>      GPF4  Pull-up Disable
707*10465441SEvalZero;//       <o2.3>      GPF3  Pull-up Disable
708*10465441SEvalZero;//       <o2.2>      GPF2  Pull-up Disable
709*10465441SEvalZero;//       <o2.1>      GPF1  Pull-up Disable
710*10465441SEvalZero;//       <o2.0>      GPF0  Pull-up Disable
711*10465441SEvalZero;//     </h>
712*10465441SEvalZero;//   </e>
713*10465441SEvalZeroGPF_SETUP       EQU     1
714*10465441SEvalZeroGPFCON_Val      EQU     0x000000AA
715*10465441SEvalZeroGPFUP_Val       EQU     0x0000000F
716*10465441SEvalZero
717*10465441SEvalZero;//   <e> Port G Settings
718*10465441SEvalZero;//     <h> Port G Control Register (GPGCON)
719*10465441SEvalZero;//       <o1.30..31> GPG15     <0=> Input <1=> Output <2=> EINT[23] <3=> Reserved
720*10465441SEvalZero;//       <o1.28..29> GPG14     <0=> Input <1=> Output <2=> EINT[22] <3=> Reserved
721*10465441SEvalZero;//       <o1.26..27> GPG13     <0=> Input <1=> Output <2=> EINT[21] <3=> Reserved
722*10465441SEvalZero;//       <o1.24..25> GPG12     <0=> Input <1=> Output <2=> EINT[20] <3=> Reserved
723*10465441SEvalZero;//       <o1.22..23> GPG11     <0=> Input <1=> Output <2=> EINT[19] <3=> TCLK[1]
724*10465441SEvalZero;//       <o1.20..21> GPG10     <0=> Input <1=> Output <2=> EINT[18] <3=> nCTS1
725*10465441SEvalZero;//       <o1.18..19> GPG9      <0=> Input <1=> Output <2=> EINT[17] <3=> nRTS1
726*10465441SEvalZero;//       <o1.16..17> GPG8      <0=> Input <1=> Output <2=> EINT[16] <3=> Reserved
727*10465441SEvalZero;//       <o1.14..15> GPG7      <0=> Input <1=> Output <2=> EINT[15] <3=> SPICLK1
728*10465441SEvalZero;//       <o1.12..13> GPG6      <0=> Input <1=> Output <2=> EINT[14] <3=> SPIMOSI1
729*10465441SEvalZero;//       <o1.10..11> GPG5      <0=> Input <1=> Output <2=> EINT[13] <3=> SPIMISO1
730*10465441SEvalZero;//       <o1.8..9>   GPG4      <0=> Input <1=> Output <2=> EINT[12] <3=> LCD_PWRDN
731*10465441SEvalZero;//       <o1.6..7>   GPG3      <0=> Input <1=> Output <2=> EINT[11] <3=> nSS1
732*10465441SEvalZero;//       <o1.4..5>   GPG2      <0=> Input <1=> Output <2=> EINT[10] <3=> nSS0
733*10465441SEvalZero;//       <o1.2..3>   GPG1      <0=> Input <1=> Output <2=> EINT[9]  <3=> Reserved
734*10465441SEvalZero;//       <o1.0..1>   GPG0      <0=> Input <1=> Output <2=> EINT[8]  <3=> Reserved
735*10465441SEvalZero;//     </h>
736*10465441SEvalZero;//     <h> Port G Pull-up Settings Register (GPGUP)
737*10465441SEvalZero;//       <o2.15>     GPG15 Pull-up Disable
738*10465441SEvalZero;//       <o2.14>     GPG14 Pull-up Disable
739*10465441SEvalZero;//       <o2.13>     GPG13 Pull-up Disable
740*10465441SEvalZero;//       <o2.12>     GPG12 Pull-up Disable
741*10465441SEvalZero;//       <o2.11>     GPG11 Pull-up Disable
742*10465441SEvalZero;//       <o2.10>     GPG10 Pull-up Disable
743*10465441SEvalZero;//       <o2.9>      GPG9  Pull-up Disable
744*10465441SEvalZero;//       <o2.8>      GPG8  Pull-up Disable
745*10465441SEvalZero;//       <o2.7>      GPG7  Pull-up Disable
746*10465441SEvalZero;//       <o2.6>      GPG6  Pull-up Disable
747*10465441SEvalZero;//       <o2.5>      GPG5  Pull-up Disable
748*10465441SEvalZero;//       <o2.4>      GPG4  Pull-up Disable
749*10465441SEvalZero;//       <o2.3>      GPG3  Pull-up Disable
750*10465441SEvalZero;//       <o2.2>      GPG2  Pull-up Disable
751*10465441SEvalZero;//       <o2.1>      GPG1  Pull-up Disable
752*10465441SEvalZero;//       <o2.0>      GPG0  Pull-up Disable
753*10465441SEvalZero;//     </h>
754*10465441SEvalZero;//   </e>
755*10465441SEvalZeroGPG_SETUP       EQU     0
756*10465441SEvalZeroGPGCON_Val      EQU     0x00000000
757*10465441SEvalZeroGPGUP_Val       EQU     0x00000000
758*10465441SEvalZero
759*10465441SEvalZero;//   <e> Port H Settings
760*10465441SEvalZero;//     <h> Port H Control Register (GPHCON)
761*10465441SEvalZero;//       <o1.20..21> GPH10     <0=> Input <1=> Output <2=> CLKOUT1  <3=> Reserved
762*10465441SEvalZero;//       <o1.18..19> GPH9      <0=> Input <1=> Output <2=> CLKOUT0  <3=> Reserved
763*10465441SEvalZero;//       <o1.16..17> GPH8      <0=> Input <1=> Output <2=> UEXTCLK  <3=> Reserved
764*10465441SEvalZero;//       <o1.14..15> GPH7      <0=> Input <1=> Output <2=> RXD[2]   <3=> nCTS1
765*10465441SEvalZero;//       <o1.12..13> GPH6      <0=> Input <1=> Output <2=> TXD[2]   <3=> nRTS1
766*10465441SEvalZero;//       <o1.10..11> GPH5      <0=> Input <1=> Output <2=> RXD[1]   <3=> Reserved
767*10465441SEvalZero;//       <o1.8..9>   GPH4      <0=> Input <1=> Output <2=> TXD[1]   <3=> Reserved
768*10465441SEvalZero;//       <o1.6..7>   GPH3      <0=> Input <1=> Output <2=> RXD[0]   <3=> Reserved
769*10465441SEvalZero;//       <o1.4..5>   GPH2      <0=> Input <1=> Output <2=> TXD[0]   <3=> Reserved
770*10465441SEvalZero;//       <o1.2..3>   GPH1      <0=> Input <1=> Output <2=> nRTS0    <3=> Reserved
771*10465441SEvalZero;//       <o1.0..1>   GPH0      <0=> Input <1=> Output <2=> nCTS0    <3=> Reserved
772*10465441SEvalZero;//     </h>
773*10465441SEvalZero;//     <h> Port H Pull-up Settings Register (GPHUP)
774*10465441SEvalZero;//       <o2.10>     GPH10 Pull-up Disable
775*10465441SEvalZero;//       <o2.9>      GPH9  Pull-up Disable
776*10465441SEvalZero;//       <o2.8>      GPH8  Pull-up Disable
777*10465441SEvalZero;//       <o2.7>      GPH7  Pull-up Disable
778*10465441SEvalZero;//       <o2.6>      GPH6  Pull-up Disable
779*10465441SEvalZero;//       <o2.5>      GPH5  Pull-up Disable
780*10465441SEvalZero;//       <o2.4>      GPH4  Pull-up Disable
781*10465441SEvalZero;//       <o2.3>      GPH3  Pull-up Disable
782*10465441SEvalZero;//       <o2.2>      GPH2  Pull-up Disable
783*10465441SEvalZero;//       <o2.1>      GPH1  Pull-up Disable
784*10465441SEvalZero;//       <o2.0>      GPH0  Pull-up Disable
785*10465441SEvalZero;//     </h>
786*10465441SEvalZero;//   </e>
787*10465441SEvalZeroGPH_SETUP       EQU     0
788*10465441SEvalZeroGPHCON_Val      EQU     0x00000000
789*10465441SEvalZeroGPHUP_Val       EQU     0x00000000
790*10465441SEvalZero
791*10465441SEvalZero;//   <e> Port J Settings
792*10465441SEvalZero;//     <h> Port J Control Register (GPJCON)
793*10465441SEvalZero;//       <o1.24..25> GPJ12     <0=> Input <1=> Output <2=> CAMRESET   <3=> Reserved
794*10465441SEvalZero;//       <o1.22..23> GPJ11     <0=> Input <1=> Output <2=> CAMCLKOUT  <3=> Reserved
795*10465441SEvalZero;//       <o1.20..21> GPJ10     <0=> Input <1=> Output <2=> CAMHREF    <3=> Reserved
796*10465441SEvalZero;//       <o1.18..19> GPJ9      <0=> Input <1=> Output <2=> CAMVSYNC   <3=> Reserved
797*10465441SEvalZero;//       <o1.16..17> GPJ8      <0=> Input <1=> Output <2=> CAMPCLK    <3=> Reserved
798*10465441SEvalZero;//       <o1.14..15> GPJ7      <0=> Input <1=> Output <2=> CAMDATA[7] <3=> Reserved
799*10465441SEvalZero;//       <o1.12..13> GPJ6      <0=> Input <1=> Output <2=> CAMDATA[6] <3=> Reserved
800*10465441SEvalZero;//       <o1.10..11> GPJ5      <0=> Input <1=> Output <2=> CAMDATA[5] <3=> Reserved
801*10465441SEvalZero;//       <o1.8..9>   GPJ4      <0=> Input <1=> Output <2=> CAMDATA[4] <3=> Reserved
802*10465441SEvalZero;//       <o1.6..7>   GPJ3      <0=> Input <1=> Output <2=> CAMDATA[3] <3=> Reserved
803*10465441SEvalZero;//       <o1.4..5>   GPJ2      <0=> Input <1=> Output <2=> CAMDATA[2] <3=> Reserved
804*10465441SEvalZero;//       <o1.2..3>   GPJ1      <0=> Input <1=> Output <2=> CAMDATA[1] <3=> Reserved
805*10465441SEvalZero;//       <o1.0..1>   GPJ0      <0=> Input <1=> Output <2=> CAMDATA[0] <3=> Reserved
806*10465441SEvalZero;//     </h>
807*10465441SEvalZero;//     <h> Port J Pull-up Settings Register (GPJUP)
808*10465441SEvalZero;//       <o2.12>     GPJ12 Pull-up Disable
809*10465441SEvalZero;//       <o2.11>     GPJ11 Pull-up Disable
810*10465441SEvalZero;//       <o2.10>     GPJ10 Pull-up Disable
811*10465441SEvalZero;//       <o2.9>      GPJ9  Pull-up Disable
812*10465441SEvalZero;//       <o2.8>      GPJ8  Pull-up Disable
813*10465441SEvalZero;//       <o2.7>      GPJ7  Pull-up Disable
814*10465441SEvalZero;//       <o2.6>      GPJ6  Pull-up Disable
815*10465441SEvalZero;//       <o2.5>      GPJ5  Pull-up Disable
816*10465441SEvalZero;//       <o2.4>      GPJ4  Pull-up Disable
817*10465441SEvalZero;//       <o2.3>      GPJ3  Pull-up Disable
818*10465441SEvalZero;//       <o2.2>      GPJ2  Pull-up Disable
819*10465441SEvalZero;//       <o2.1>      GPJ1  Pull-up Disable
820*10465441SEvalZero;//       <o2.0>      GPJ0  Pull-up Disable
821*10465441SEvalZero;//     </h>
822*10465441SEvalZero;//   </e>
823*10465441SEvalZeroGPJ_SETUP       EQU     0
824*10465441SEvalZeroGPJCON_Val      EQU     0x00000000
825*10465441SEvalZeroGPJUP_Val       EQU     0x00000000
826*10465441SEvalZero
827*10465441SEvalZero;// </e> I/O Setup
828*10465441SEvalZero
829*10465441SEvalZero
830*10465441SEvalZero;----------------------- CODE --------------------------------------------------
831*10465441SEvalZero
832*10465441SEvalZero                PRESERVE8
833*10465441SEvalZero
834*10465441SEvalZero
835*10465441SEvalZero; Area Definition and Entry Point
836*10465441SEvalZero;  Startup Code must be linked first at Address at which it expects to run.
837*10465441SEvalZero
838*10465441SEvalZero                AREA    RESET, CODE, READONLY
839*10465441SEvalZero                ARM
840*10465441SEvalZero
841*10465441SEvalZero; Exception Vectors
842*10465441SEvalZero;  Mapped to Address 0.
843*10465441SEvalZero;  Absolute addressing mode must be used.
844*10465441SEvalZero;  Dummy Handlers are implemented as infinite loops which can be modified.
845*10465441SEvalZero
846*10465441SEvalZero				EXPORT Entry_Point
847*10465441SEvalZeroEntry_Point
848*10465441SEvalZeroVectors         LDR     PC, Reset_Addr
849*10465441SEvalZero                LDR     PC, Undef_Addr
850*10465441SEvalZero                LDR     PC, SWI_Addr
851*10465441SEvalZero                LDR     PC, PAbt_Addr
852*10465441SEvalZero                LDR     PC, DAbt_Addr
853*10465441SEvalZero		NOP
854*10465441SEvalZero                LDR     PC, IRQ_Addr
855*10465441SEvalZero                LDR     PC, FIQ_Addr
856*10465441SEvalZero
857*10465441SEvalZeroReset_Addr      DCD     Reset_Handler
858*10465441SEvalZeroUndef_Addr      DCD     Undef_Handler
859*10465441SEvalZeroSWI_Addr        DCD     SWI_Handler
860*10465441SEvalZeroPAbt_Addr       DCD     PAbt_Handler
861*10465441SEvalZeroDAbt_Addr       DCD     DAbt_Handler
862*10465441SEvalZero                DCD     0                   ; Reserved Address
863*10465441SEvalZeroIRQ_Addr        DCD     IRQ_Handler
864*10465441SEvalZeroFIQ_Addr        DCD     FIQ_Handler
865*10465441SEvalZero
866*10465441SEvalZeroUndef_Handler   B       Undef_Handler
867*10465441SEvalZeroSWI_Handler     B       SWI_Handler
868*10465441SEvalZeroPAbt_Handler    B       PAbt_Handler
869*10465441SEvalZero;DAbt_Handler    B       DAbt_Handler
870*10465441SEvalZeroFIQ_Handler     B       FIQ_Handler
871*10465441SEvalZero
872*10465441SEvalZero;*
873*10465441SEvalZero;*************************************************************************
874*10465441SEvalZero;*
875*10465441SEvalZero;* Interrupt handling
876*10465441SEvalZero;*
877*10465441SEvalZero;*************************************************************************
878*10465441SEvalZero;*
879*10465441SEvalZero; DAbt Handler
880*10465441SEvalZeroDAbt_Handler
881*10465441SEvalZero               IMPORT rt_hw_trap_dabt
882*10465441SEvalZero
883*10465441SEvalZero                	sub 	sp, sp, #72
884*10465441SEvalZero	                stmia 	sp, {r0 - r12}   		;/* Calling r0-r12					*/
885*10465441SEvalZero                    add		r8, sp, #60
886*10465441SEvalZero	                stmdb   r8, {sp, lr}            ;/* Calling SP, LR					*/
887*10465441SEvalZero	                str		lr, [r8, #0]            ;/* Save calling PC					*/
888*10465441SEvalZero	                mrs		r6, spsr
889*10465441SEvalZero	                str		r6, [r8, #4]            ;/* Save CPSR						*/
890*10465441SEvalZero	                str		r0, [r8, #8]            ;/* Save OLD_R0						*/
891*10465441SEvalZero	                mov		r0, sp
892*10465441SEvalZero
893*10465441SEvalZero	                bl 		rt_hw_trap_dabt
894*10465441SEvalZero
895*10465441SEvalZero
896*10465441SEvalZero;##########################################
897*10465441SEvalZero; Reset Handler
898*10465441SEvalZero
899*10465441SEvalZero                EXPORT  Reset_Handler
900*10465441SEvalZeroReset_Handler
901*10465441SEvalZero
902*10465441SEvalZero
903*10465441SEvalZero; Watchdog Setup ---------------------------------------------------------------
904*10465441SEvalZero
905*10465441SEvalZero                IF      WT_SETUP != 0
906*10465441SEvalZero                LDR     R0, =WT_BASE
907*10465441SEvalZero                LDR     R1, =WTCON_Val
908*10465441SEvalZero                LDR     R2, =WTDAT_Val
909*10465441SEvalZero                STR     R2, [R0, #WTCNT_OFS]
910*10465441SEvalZero                STR     R2, [R0, #WTDAT_OFS]
911*10465441SEvalZero                STR     R1, [R0, #WTCON_OFS]
912*10465441SEvalZero                ENDIF
913*10465441SEvalZero
914*10465441SEvalZero
915*10465441SEvalZero; Clock Setup ------------------------------------------------------------------
916*10465441SEvalZero
917*10465441SEvalZero                IF      (:LNOT:(:DEF:NO_CLOCK_SETUP)):LAND:(CLOCK_SETUP != 0)
918*10465441SEvalZero                LDR     R0, =CLOCK_BASE
919*10465441SEvalZero                LDR     R1,      =LOCKTIME_Val
920*10465441SEvalZero                STR     R1, [R0, #LOCKTIME_OFS]
921*10465441SEvalZero                MOV     R1,      #CLKDIVN_Val
922*10465441SEvalZero                STR     R1, [R0, #CLKDIVN_OFS]
923*10465441SEvalZero                LDR     R1,      =CAMDIVN_Val
924*10465441SEvalZero                STR     R1, [R0, #CAMDIVN_OFS]
925*10465441SEvalZero                LDR     R1,      =MPLLCON_Val
926*10465441SEvalZero                STR     R1, [R0, #MPLLCON_OFS]
927*10465441SEvalZero                LDR     R1,      =UPLLCON_Val
928*10465441SEvalZero                STR     R1, [R0, #UPLLCON_OFS]
929*10465441SEvalZero                MOV     R1,      #CLKSLOW_Val
930*10465441SEvalZero                STR     R1, [R0, #CLKSLOW_OFS]
931*10465441SEvalZero                LDR     R1,      =CLKCON_Val
932*10465441SEvalZero                STR     R1, [R0, #CLKCON_OFS]
933*10465441SEvalZero                ENDIF
934*10465441SEvalZero
935*10465441SEvalZero
936*10465441SEvalZero; Memory Controller Setup ------------------------------------------------------
937*10465441SEvalZero
938*10465441SEvalZero                IF      (:LNOT:(:DEF:NO_MC_SETUP)):LAND:(CLOCK_SETUP != 0)
939*10465441SEvalZero                LDR     R0, =MC_BASE
940*10465441SEvalZero                LDR     R1,      =BWSCON_Val
941*10465441SEvalZero                STR     R1, [R0, #BWSCON_OFS]
942*10465441SEvalZero                LDR     R1,      =BANKCON0_Val
943*10465441SEvalZero                STR     R1, [R0, #BANKCON0_OFS]
944*10465441SEvalZero                LDR     R1,      =BANKCON1_Val
945*10465441SEvalZero                STR     R1, [R0, #BANKCON1_OFS]
946*10465441SEvalZero                LDR     R1,      =BANKCON2_Val
947*10465441SEvalZero                STR     R1, [R0, #BANKCON2_OFS]
948*10465441SEvalZero                LDR     R1,      =BANKCON3_Val
949*10465441SEvalZero                STR     R1, [R0, #BANKCON3_OFS]
950*10465441SEvalZero                LDR     R1,      =BANKCON4_Val
951*10465441SEvalZero                STR     R1, [R0, #BANKCON4_OFS]
952*10465441SEvalZero                LDR     R1,      =BANKCON5_Val
953*10465441SEvalZero                STR     R1, [R0, #BANKCON5_OFS]
954*10465441SEvalZero                LDR     R1,      =BANKCON6_Val
955*10465441SEvalZero                STR     R1, [R0, #BANKCON6_OFS]
956*10465441SEvalZero                LDR     R1,      =BANKCON7_Val
957*10465441SEvalZero                STR     R1, [R0, #BANKCON7_OFS]
958*10465441SEvalZero                LDR     R1,      =REFRESH_Val
959*10465441SEvalZero                STR     R1, [R0, #REFRESH_OFS]
960*10465441SEvalZero                MOV     R1,      #BANKSIZE_Val
961*10465441SEvalZero                STR     R1, [R0, #BANKSIZE_OFS]
962*10465441SEvalZero                MOV     R1,      #MRSRB6_Val
963*10465441SEvalZero                STR     R1, [R0, #MRSRB6_OFS]
964*10465441SEvalZero                MOV     R1,      #MRSRB7_Val
965*10465441SEvalZero                STR     R1, [R0, #MRSRB7_OFS]
966*10465441SEvalZero                ENDIF
967*10465441SEvalZero
968*10465441SEvalZero
969*10465441SEvalZero; I/O Pins Setup ---------------------------------------------------------------
970*10465441SEvalZero
971*10465441SEvalZero                IF      (:LNOT:(:DEF:NO_GP_SETUP)):LAND:(GP_SETUP != 0)
972*10465441SEvalZero
973*10465441SEvalZero                IF      GPA_SETUP != 0
974*10465441SEvalZero                LDR     R0, =GPA_BASE
975*10465441SEvalZero                LDR     R1, =GPACON_Val
976*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
977*10465441SEvalZero                ENDIF
978*10465441SEvalZero
979*10465441SEvalZero                IF      GPB_SETUP != 0
980*10465441SEvalZero                LDR     R0, =GPB_BASE
981*10465441SEvalZero                LDR     R1, =GPBCON_Val
982*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
983*10465441SEvalZero                LDR     R1, =GPBUP_Val
984*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
985*10465441SEvalZero                ENDIF
986*10465441SEvalZero
987*10465441SEvalZero                IF      GPC_SETUP != 0
988*10465441SEvalZero                LDR     R0, =GPC_BASE
989*10465441SEvalZero                LDR     R1, =GPCCON_Val
990*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
991*10465441SEvalZero                LDR     R1, =GPCUP_Val
992*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
993*10465441SEvalZero                ENDIF
994*10465441SEvalZero
995*10465441SEvalZero                IF      GPD_SETUP != 0
996*10465441SEvalZero                LDR     R0, =GPD_BASE
997*10465441SEvalZero                LDR     R1, =GPDCON_Val
998*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
999*10465441SEvalZero                LDR     R1, =GPDUP_Val
1000*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
1001*10465441SEvalZero                ENDIF
1002*10465441SEvalZero
1003*10465441SEvalZero                IF      GPE_SETUP != 0
1004*10465441SEvalZero                LDR     R0, =GPE_BASE
1005*10465441SEvalZero                LDR     R1, =GPECON_Val
1006*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
1007*10465441SEvalZero                LDR     R1, =GPEUP_Val
1008*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
1009*10465441SEvalZero                ENDIF
1010*10465441SEvalZero
1011*10465441SEvalZero                IF      GPF_SETUP != 0
1012*10465441SEvalZero                LDR     R0, =GPF_BASE
1013*10465441SEvalZero                LDR     R1, =GPFCON_Val
1014*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
1015*10465441SEvalZero                LDR     R1, =GPFUP_Val
1016*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
1017*10465441SEvalZero                ENDIF
1018*10465441SEvalZero
1019*10465441SEvalZero                IF      GPG_SETUP != 0
1020*10465441SEvalZero                LDR     R0, =GPG_BASE
1021*10465441SEvalZero                LDR     R1, =GPGCON_Val
1022*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
1023*10465441SEvalZero                LDR     R1, =GPGUP_Val
1024*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
1025*10465441SEvalZero                ENDIF
1026*10465441SEvalZero
1027*10465441SEvalZero                IF      GPH_SETUP != 0
1028*10465441SEvalZero                LDR     R0, =GPH_BASE
1029*10465441SEvalZero                LDR     R1, =GPHCON_Val
1030*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
1031*10465441SEvalZero                LDR     R1, =GPHUP_Val
1032*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
1033*10465441SEvalZero                ENDIF
1034*10465441SEvalZero
1035*10465441SEvalZero                IF      GPJ_SETUP != 0
1036*10465441SEvalZero                LDR     R0, =GPJ_BASE
1037*10465441SEvalZero                LDR     R1, =GPJCON_Val
1038*10465441SEvalZero                STR     R1, [R0, #GPCON_OFS]
1039*10465441SEvalZero                LDR     R1, =GPJUP_Val
1040*10465441SEvalZero                STR     R1, [R0, #GPUP_OFS]
1041*10465441SEvalZero                ENDIF
1042*10465441SEvalZero
1043*10465441SEvalZero                ENDIF
1044*10465441SEvalZero
1045*10465441SEvalZero
1046*10465441SEvalZero; Copy Exception Vectors to Internal RAM ---------------------------------------
1047*10465441SEvalZero
1048*10465441SEvalZero                IF      :DEF:RAM_INTVEC
1049*10465441SEvalZero                ADR     R8,  Vectors    ; Source
1050*10465441SEvalZero                LDR     R9, =IRAM_BASE  ; Destination
1051*10465441SEvalZero                LDMIA   R8!, {R0-R7}    ; Load Vectors
1052*10465441SEvalZero                STMIA   R9!, {R0-R7}    ; Store Vectors
1053*10465441SEvalZero                LDMIA   R8!, {R0-R7}    ; Load Handler Addresses
1054*10465441SEvalZero                STMIA   R9!, {R0-R7}    ; Store Handler Addresses
1055*10465441SEvalZero                ENDIF
1056*10465441SEvalZero
1057*10465441SEvalZero
1058*10465441SEvalZero; Setup Stack for each mode ----------------------------------------------------
1059*10465441SEvalZero
1060*10465441SEvalZero                LDR     R0, =Stack_Top
1061*10465441SEvalZero
1062*10465441SEvalZero;  Enter Undefined Instruction Mode and set its Stack Pointer
1063*10465441SEvalZero                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
1064*10465441SEvalZero                MOV     SP, R0
1065*10465441SEvalZero                SUB     R0, R0, #UND_Stack_Size
1066*10465441SEvalZero
1067*10465441SEvalZero;  Enter Abort Mode and set its Stack Pointer
1068*10465441SEvalZero                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
1069*10465441SEvalZero                MOV     SP, R0
1070*10465441SEvalZero                SUB     R0, R0, #ABT_Stack_Size
1071*10465441SEvalZero
1072*10465441SEvalZero;  Enter FIQ Mode and set its Stack Pointer
1073*10465441SEvalZero                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
1074*10465441SEvalZero                MOV     SP, R0
1075*10465441SEvalZero                SUB     R0, R0, #FIQ_Stack_Size
1076*10465441SEvalZero
1077*10465441SEvalZero;  Enter IRQ Mode and set its Stack Pointer
1078*10465441SEvalZero                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
1079*10465441SEvalZero                MOV     SP, R0
1080*10465441SEvalZero                SUB     R0, R0, #IRQ_Stack_Size
1081*10465441SEvalZero
1082*10465441SEvalZero;  Enter Supervisor Mode and set its Stack Pointer
1083*10465441SEvalZero                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
1084*10465441SEvalZero                MOV     SP, R0
1085*10465441SEvalZero                SUB     R0, R0, #SVC_Stack_Size
1086*10465441SEvalZero
1087*10465441SEvalZero;  Enter User Mode and set its Stack Pointer
1088*10465441SEvalZero                ; MSR     CPSR_c, #Mode_USR
1089*10465441SEvalZero                MOV     SP, R0
1090*10465441SEvalZero                SUB     SL, SP, #USR_Stack_Size
1091*10465441SEvalZero
1092*10465441SEvalZero; Enter the C code -------------------------------------------------------------
1093*10465441SEvalZero
1094*10465441SEvalZero                IMPORT  __main
1095*10465441SEvalZero                LDR     R0, =__main
1096*10465441SEvalZero                BX      R0
1097*10465441SEvalZero
1098*10465441SEvalZero                IMPORT rt_interrupt_enter
1099*10465441SEvalZero                IMPORT rt_interrupt_leave
1100*10465441SEvalZero                IMPORT rt_thread_switch_interrupt_flag
1101*10465441SEvalZero                IMPORT rt_interrupt_from_thread
1102*10465441SEvalZero                IMPORT rt_interrupt_to_thread
1103*10465441SEvalZero                IMPORT rt_hw_trap_irq
1104*10465441SEvalZero
1105*10465441SEvalZeroIRQ_Handler     PROC
1106*10465441SEvalZero                EXPORT IRQ_Handler
1107*10465441SEvalZero                STMFD   sp!, {r0-r12,lr}
1108*10465441SEvalZero                BL  rt_interrupt_enter
1109*10465441SEvalZero                BL  rt_hw_trap_irq
1110*10465441SEvalZero                BL  rt_interrupt_leave
1111*10465441SEvalZero
1112*10465441SEvalZero                ; if rt_thread_switch_interrupt_flag set, jump to
1113*10465441SEvalZero                ; rt_hw_context_switch_interrupt_do and don't return
1114*10465441SEvalZero                LDR r0, =rt_thread_switch_interrupt_flag
1115*10465441SEvalZero                LDR r1, [r0]
1116*10465441SEvalZero                CMP r1, #1
1117*10465441SEvalZero                BEQ rt_hw_context_switch_interrupt_do
1118*10465441SEvalZero
1119*10465441SEvalZero                LDMFD   sp!, {r0-r12,lr}
1120*10465441SEvalZero                SUBS    pc, lr, #4
1121*10465441SEvalZero                ENDP
1122*10465441SEvalZero
1123*10465441SEvalZero; /*
1124*10465441SEvalZero; * void rt_hw_context_switch_interrupt_do(rt_base_t flag)
1125*10465441SEvalZero; */
1126*10465441SEvalZerort_hw_context_switch_interrupt_do   PROC
1127*10465441SEvalZero                EXPORT rt_hw_context_switch_interrupt_do
1128*10465441SEvalZero                MOV     r1,  #0         ; clear flag
1129*10465441SEvalZero                STR     r1,  [r0]
1130*10465441SEvalZero
1131*10465441SEvalZero                LDMFD   sp!, {r0-r12,lr}; reload saved registers
1132*10465441SEvalZero                STMFD   sp!, {r0-r3}    ; save r0-r3
1133*10465441SEvalZero                MOV     r1,  sp
1134*10465441SEvalZero                ADD     sp,  sp, #16    ; restore sp
1135*10465441SEvalZero                SUB     r2,  lr, #4     ; save old task's pc to r2
1136*10465441SEvalZero
1137*10465441SEvalZero                MRS     r3,  spsr       ; get cpsr of interrupt thread
1138*10465441SEvalZero
1139*10465441SEvalZero                ; switch to SVC mode and no interrupt
1140*10465441SEvalZero				MSR 	cpsr_c, #I_Bit:OR:F_Bit:OR:Mode_SVC
1141*10465441SEvalZero
1142*10465441SEvalZero                STMFD   sp!, {r2}       ; push old task's pc
1143*10465441SEvalZero                STMFD   sp!, {r4-r12,lr}; push old task's lr,r12-r4
1144*10465441SEvalZero                MOV     r4,  r1         ; Special optimised code below
1145*10465441SEvalZero                MOV     r5,  r3
1146*10465441SEvalZero                LDMFD   r4!, {r0-r3}
1147*10465441SEvalZero                STMFD   sp!, {r0-r3}    ; push old task's r3-r0
1148*10465441SEvalZero                STMFD   sp!, {r5}       ; push old task's cpsr
1149*10465441SEvalZero                MRS     r4,  spsr
1150*10465441SEvalZero                STMFD   sp!, {r4}       ; push old task's spsr
1151*10465441SEvalZero
1152*10465441SEvalZero                LDR     r4,  =rt_interrupt_from_thread
1153*10465441SEvalZero                LDR     r5,  [r4]
1154*10465441SEvalZero                STR     sp,  [r5]       ; store sp in preempted tasks's TCB
1155*10465441SEvalZero
1156*10465441SEvalZero                LDR     r6,  =rt_interrupt_to_thread
1157*10465441SEvalZero                LDR     r6,  [r6]
1158*10465441SEvalZero                LDR     sp,  [r6]       ; get new task's stack pointer
1159*10465441SEvalZero
1160*10465441SEvalZero                LDMFD   sp!, {r4}       ; pop new task's spsr
1161*10465441SEvalZero                MSR     spsr_cxsf, r4
1162*10465441SEvalZero                LDMFD   sp!, {r4}       ; pop new task's psr
1163*10465441SEvalZero                MSR     cpsr_cxsf, r4
1164*10465441SEvalZero
1165*10465441SEvalZero                LDMFD   sp!, {r0-r12,lr,pc} ; pop new task's r0-r12,lr & pc
1166*10465441SEvalZero                ENDP
1167*10465441SEvalZero
1168*10465441SEvalZero                IF      :DEF:__MICROLIB
1169*10465441SEvalZero
1170*10465441SEvalZero                EXPORT  __heap_base
1171*10465441SEvalZero                EXPORT  __heap_limit
1172*10465441SEvalZero
1173*10465441SEvalZero                ELSE
1174*10465441SEvalZero; User Initial Stack & Heap
1175*10465441SEvalZero                AREA    |.text|, CODE, READONLY
1176*10465441SEvalZero
1177*10465441SEvalZero                IMPORT  __use_two_region_memory
1178*10465441SEvalZero                EXPORT  __user_initial_stackheap
1179*10465441SEvalZero__user_initial_stackheap
1180*10465441SEvalZero
1181*10465441SEvalZero                LDR     R0, =  Heap_Mem
1182*10465441SEvalZero                LDR     R1, =(Stack_Mem + USR_Stack_Size)
1183*10465441SEvalZero                LDR     R2, = (Heap_Mem +      Heap_Size)
1184*10465441SEvalZero                LDR     R3, = Stack_Mem
1185*10465441SEvalZero                BX      LR
1186*10465441SEvalZero                ENDIF
1187*10465441SEvalZero
1188*10465441SEvalZero
1189*10465441SEvalZero                END
1190*10465441SEvalZero
1191