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