求助:关于ADS中RO设置对程序允许速度的影响(S3C2410)

[复制链接]
2670|3
 楼主| jesseli 发表于 2008-3-14 10:44 | 显示全部楼层 |阅读模式
CPU:S3C2410<br />NandFlash:&nbsp;k9f1208<br />NorFlash:29lv800<br />SDRAM:两片32M并联成64M<br />问题描述:<br />最近采用S3C2410_BOIS引导程序。它能够将程序烧写到NANDFLASH的几个分区:<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;{0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00040000,&nbsp;&quot;bootloader&quot;},&nbsp;&nbsp;&nbsp;&nbsp;//256K<br />&nbsp;&nbsp;&nbsp;&nbsp;{0x00040000,&nbsp;0x02000000,&nbsp;&quot;Wince&quot;},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//32M<br />&nbsp;&nbsp;&nbsp;&nbsp;{0x02040000,&nbsp;0x01fc0000,&nbsp;&quot;Flash&quot;},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//32M-256k<br />&nbsp;&nbsp;&nbsp;&nbsp;{0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;0}<br /><br /><br />将其修改为能够驱动TFT&nbsp;LCD的测试程序,并且能够从NANDFLASH启动,并最终能够烧写到第2个分区,采用原来的loader程序引导。其中发现了一个问题,S3C2410_BOIS原来在ADS中RO&nbsp;base默认设置是:0x30100000,我就按照其默认设置编译生成BIN文件(内嵌入图片数据,大小为5M左右),,采用DNW&nbsp;(download&nbsp;address&nbsp;为0x30100000)load到内存运行很正常。<br /><br /><br />将RO&nbsp;base设置是:0x30200000后重新编译成BIN再LOAD到内存((download&nbsp;address&nbsp;为0x30200000))运行却发现运行速度明显变慢了(从LCD显示图片的速度看出)。<br />&nbsp;请问各位高手为什么会出现这种情况,该如何解决?<br />以下是这个S3C2410_BIOS中的&nbsp;start.s文件,本人没有做任何修改。<br /><br /><br />;=========================================<br />;&nbsp;NAME:&nbsp;START.S<br />;&nbsp;DESC:&nbsp;C&nbsp;start&nbsp;up&nbsp;codes<br />;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Configure&nbsp;memory,&nbsp;ISR&nbsp;,stacks<br />;&nbsp;&nbsp;&nbsp;&nbsp;Initialize&nbsp;C-variables<br />;&nbsp;HISTORY:<br />;&nbsp;2002.02.25:kwtark:&nbsp;ver&nbsp;0.0<br />;&nbsp;2002.03.20:purnnamu:&nbsp;Add&nbsp;some&nbsp;functions&nbsp;for&nbsp;testing&nbsp;STOP,POWER_OFF&nbsp;mode<br />;=========================================<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GET&nbsp;option.inc<br />&nbsp;&nbsp;&nbsp;&nbsp;GET&nbsp;memcfg.inc<br />&nbsp;&nbsp;&nbsp;&nbsp;GET&nbsp;2410addr.inc<br /><br />BIT_SELFREFRESH&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt22)<br /><br />;Pre-defined&nbsp;constants<br />USERMODE&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10<br />FIQMODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x11<br />IRQMODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x12<br />SVCMODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x13<br />ABORTMODE&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x17<br />UNDEFMODE&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1b<br />MODEMASK&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1f<br />NOINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xc0<br /><br />;The&nbsp;location&nbsp;of&nbsp;stacks<br />UserStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x3800)&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff4800&nbsp;~&nbsp;<br />SVCStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x2800)&nbsp;;0x33ff5800&nbsp;~<br />UndefStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x2400)&nbsp;;0x33ff5c00&nbsp;~<br />AbortStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x2000)&nbsp;;0x33ff6000&nbsp;~<br />IRQStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x1000)&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff7000&nbsp;~<br />FIQStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x0)&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff8000&nbsp;~&nbsp;<br /><br />;Check&nbsp;if&nbsp;tasm.exe(armasm&nbsp;-16&nbsp;...@ADS&nbsp;1.0)&nbsp;is&nbsp;used.<br />&nbsp;&nbsp;&nbsp;&nbsp;GBLL&nbsp;&nbsp;&nbsp;&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;{CONFIG}&nbsp;=&nbsp;16&nbsp;<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;{TRUE}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;{FALSE}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MACRO<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;pc,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;MEND<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MACRO<br />&nbsp;&nbsp;&nbsp;&nbsp;MOVEQ_PC_LR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bxeq&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveq&nbsp;pc,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;MEND<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MACRO<br />$HandlerLabel&nbsp;HANDLER&nbsp;$HandleLabel<br /><br />$HandlerLabel<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;sp,sp,#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;decrement&nbsp;sp(to&nbsp;store&nbsp;jump&nbsp;address)<br />&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,{r0}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PUSH&nbsp;the&nbsp;work&nbsp;register&nbsp;to&nbsp;stack(lr&nbsp;does't&nbsp;push&nbsp;because&nbsp;it&nbsp;return&nbsp;to&nbsp;original&nbsp;address)<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,=$HandleLabel;load&nbsp;the&nbsp;address&nbsp;of&nbsp;HandleXXX&nbsp;to&nbsp;r0<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;load&nbsp;the&nbsp;contents(service&nbsp;routine&nbsp;start&nbsp;address)&nbsp;of&nbsp;HandleXXX<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[sp,#4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;store&nbsp;the&nbsp;contents(ISR)&nbsp;of&nbsp;HandleXXX&nbsp;to&nbsp;stack<br />&nbsp;&nbsp;&nbsp;&nbsp;ldmfd&nbsp;&nbsp;&nbsp;sp!,{r0,pc}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;POP&nbsp;the&nbsp;work&nbsp;register&nbsp;and&nbsp;pc(jump&nbsp;to&nbsp;ISR)<br />&nbsp;&nbsp;&nbsp;&nbsp;MEND<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;|Image$$RO$$Base|&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;of&nbsp;ROM&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;|Image$$RO$$Limit|&nbsp;&nbsp;;&nbsp;End&nbsp;of&nbsp;ROM&nbsp;code&nbsp;(=start&nbsp;of&nbsp;ROM&nbsp;data)<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;|Image$$RW$$Base|&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;of&nbsp;RAM&nbsp;to&nbsp;initialise<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;|Image$$ZI$$Base|&nbsp;&nbsp;&nbsp;;&nbsp;Base&nbsp;and&nbsp;limit&nbsp;of&nbsp;area<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;|Image$$ZI$$Limit|&nbsp;&nbsp;;&nbsp;to&nbsp;zero&nbsp;initialise&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;SelfBoot,&nbsp;CODE,&nbsp;READONLY<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ENTRY<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;&nbsp;&nbsp;__ENTRY<br />__ENTRY&nbsp;&nbsp;&nbsp;&nbsp;<br />ResetEntry<br />&nbsp;&nbsp;&nbsp;&nbsp;;1)The&nbsp;code,&nbsp;which&nbsp;converts&nbsp;to&nbsp;Big-endian,&nbsp;should&nbsp;be&nbsp;in&nbsp;little&nbsp;endian&nbsp;code.<br />&nbsp;&nbsp;&nbsp;&nbsp;;2)The&nbsp;following&nbsp;little&nbsp;endian&nbsp;code&nbsp;will&nbsp;be&nbsp;compiled&nbsp;in&nbsp;Big-Endian&nbsp;mode.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;The&nbsp;code&nbsp;byte&nbsp;order&nbsp;should&nbsp;be&nbsp;changed&nbsp;as&nbsp;the&nbsp;memory&nbsp;bus&nbsp;width.<br />&nbsp;&nbsp;&nbsp;&nbsp;;3)The&nbsp;pseudo&nbsp;instruction,DCD&nbsp;can't&nbsp;be&nbsp;used&nbsp;here&nbsp;because&nbsp;the&nbsp;linker&nbsp;generates&nbsp;error.<br />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT&nbsp;&nbsp;&nbsp;&nbsp;:DEF:ENDIAN_CHANGE<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENDIAN_CHANGE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT&nbsp;&nbsp;:DEF:ENTRY_BUS_WIDTH<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;][&nbsp;ENTRY_BUS_WIDTH=32<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;ChangeBigEndian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;DCD&nbsp;0xea000007&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;andeq&nbsp;&nbsp;&nbsp;&nbsp;r14,r7,r0,lsl&nbsp;#20&nbsp;&nbsp;&nbsp;;DCD&nbsp;0x0007ea00<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;streq&nbsp;&nbsp;&nbsp;&nbsp;r0,][r0,-r10,ror&nbsp;#1]&nbsp;;DCD&nbsp;0x070000ea<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;ResetHandler&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerUndef&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;Undefined&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerSWI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;SWI&nbsp;interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerPabort&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;PAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerDabort&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;DAbort<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;reserved<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;IRQ&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerFIQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;FIQ&nbsp;interrupt<br /><br />;@0x20<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;EnterPWDN<br />ChangeBigEndian<br />;@0x24<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=32<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;0xee110f10&nbsp;&nbsp;&nbsp;&nbsp;;0xee110f10&nbsp;=&gt&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;0xe3800080&nbsp;&nbsp;&nbsp;&nbsp;;0xe3800080&nbsp;=&gt&nbsp;orr&nbsp;r0,r0,#0x80;&nbsp;&nbsp;//Big-endian<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;0xee010f10&nbsp;&nbsp;&nbsp;&nbsp;;0xee010f10&nbsp;=&gt&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0f10ee11<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0080e380&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0f10ee01&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENTRY_BUS_WIDTH=8<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x100f11ee&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x800080e3&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x100f01ee&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff&nbsp;&nbsp;;swinv&nbsp;0xffffff&nbsp;is&nbsp;similar&nbsp;with&nbsp;NOP&nbsp;and&nbsp;run&nbsp;well&nbsp;in&nbsp;both&nbsp;endian&nbsp;mode.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0xffffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;ResetHandler<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />;Function&nbsp;for&nbsp;entering&nbsp;power&nbsp;down&nbsp;mode<br />;&nbsp;1.&nbsp;SDRAM&nbsp;should&nbsp;be&nbsp;in&nbsp;self-refresh&nbsp;mode.<br />;&nbsp;2.&nbsp;All&nbsp;interrupt&nbsp;should&nbsp;be&nbsp;maksked&nbsp;for&nbsp;SDRAM/DRAM&nbsp;self-refresh.<br />;&nbsp;3.&nbsp;LCD&nbsp;controller&nbsp;should&nbsp;be&nbsp;disabled&nbsp;for&nbsp;SDRAM/DRAM&nbsp;self-refresh.<br />;&nbsp;4.&nbsp;The&nbsp;I-cache&nbsp;may&nbsp;have&nbsp;to&nbsp;be&nbsp;turned&nbsp;on.&nbsp;<br />;&nbsp;5.&nbsp;The&nbsp;location&nbsp;of&nbsp;the&nbsp;following&nbsp;code&nbsp;may&nbsp;have&nbsp;not&nbsp;to&nbsp;be&nbsp;changed.<br /><br />;void&nbsp;EnterPWDN(int&nbsp;CLKCON);&nbsp;<br />EnterPWDN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r2,r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;r2=rCLKCON<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;r0,#0x8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;POWER_OFF&nbsp;mode?<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;ENTER_POWER_OFF<br /><br />ENTER_STOP&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=REFRESH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r3,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;r3=rREFRESH&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,&nbsp;r3<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;r1,&nbsp;r1,&nbsp;#BIT_SELFREFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Enable&nbsp;SDRAM&nbsp;self-refresh<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,#16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;wait&nbsp;until&nbsp;self-refresh&nbsp;is&nbsp;issued.&nbsp;may&nbsp;not&nbsp;be&nbsp;needed.<br />0&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;r1,r1,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;%B0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=CLKCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;enter&nbsp;STOP&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,[r0]&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,#32<br />0&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;r1,r1,#1&nbsp;&nbsp;&nbsp;&nbsp;;1)&nbsp;wait&nbsp;until&nbsp;the&nbsp;STOP&nbsp;mode&nbsp;is&nbsp;in&nbsp;effect.<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;%B0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;2)&nbsp;Or&nbsp;wait&nbsp;here&nbsp;until&nbsp;the&nbsp;CPU&Peripherals&nbsp;will&nbsp;be&nbsp;turned-off<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;Entering&nbsp;POWER_OFF&nbsp;mode,&nbsp;only&nbsp;the&nbsp;reset&nbsp;by&nbsp;wake-up&nbsp;is&nbsp;available.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=REFRESH&nbsp;;exit&nbsp;from&nbsp;SDRAM&nbsp;self&nbsp;refresh&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r3,[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />ENTER_POWER_OFF&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;NOTE.<br />&nbsp;&nbsp;&nbsp;&nbsp;;1)&nbsp;rGSTATUS3&nbsp;should&nbsp;have&nbsp;the&nbsp;return&nbsp;address&nbsp;after&nbsp;wake-up&nbsp;from&nbsp;POWER_OFF&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=REFRESH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;r1=rREFRESH&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;r1,&nbsp;r1,&nbsp;#BIT_SELFREFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r1,&nbsp;[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Enable&nbsp;SDRAM&nbsp;self-refresh<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,#16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Wait&nbsp;until&nbsp;self-refresh&nbsp;is&nbsp;issued,which&nbsp;may&nbsp;not&nbsp;be&nbsp;needed.<br />0&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;r1,r1,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;%B0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,=MISCCR<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#(7&lt&lt17)&nbsp;&nbsp;;Make&nbsp;sure&nbsp;that&nbsp;SCLK0:SCLK-&gt0,&nbsp;SCLK1:SCLK-&gt0,&nbsp;SCKE=L&nbsp;during&nbsp;boot-up&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=CLKCON<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,[r0]&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;CPU&nbsp;will&nbsp;die&nbsp;here.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />WAKEUP_POWER_OFF<br />&nbsp;&nbsp;&nbsp;&nbsp;;Release&nbsp;SCLKn&nbsp;after&nbsp;wake-up&nbsp;from&nbsp;the&nbsp;POWER_OFF&nbsp;mode.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,=MISCCR<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#(7&lt&lt17)&nbsp;&nbsp;;SCLK0:0-&gtSCLK,&nbsp;SCLK1:0-&gtSCLK,&nbsp;SCKE:L-&gtH<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;Set&nbsp;memory&nbsp;control&nbsp;registers<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=SMRDATA<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=BWSCON&nbsp;&nbsp;&nbsp;&nbsp;;BWSCON&nbsp;Address<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r0,&nbsp;#52&nbsp;&nbsp;&nbsp;&nbsp;;End&nbsp;address&nbsp;of&nbsp;SMRDATA<br />0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r1],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r0<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;%B0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,#256<br />0&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;r1,r1,#1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;1)&nbsp;wait&nbsp;until&nbsp;the&nbsp;SelfRefresh&nbsp;is&nbsp;released.<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;%B0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,=GSTATUS3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;GSTATUS3&nbsp;has&nbsp;the&nbsp;start&nbsp;address&nbsp;just&nbsp;after&nbsp;POWER_OFF&nbsp;wake-up<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,[r1]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;pc,r0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LTORG&nbsp;&nbsp;&nbsp;<br />HandlerFIQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleFIQ<br />HandlerIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleIRQ<br />HandlerUndef&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleUndef<br />;HandlerUndef<br />;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;sp,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;decrement&nbsp;sp(to&nbsp;store&nbsp;jump&nbsp;address)<br />;&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{r14}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;PUSH&nbsp;the&nbsp;work&nbsp;register&nbsp;to&nbsp;stack(lr&nbsp;does't&nbsp;push&nbsp;because&nbsp;it&nbsp;return&nbsp;to&nbsp;original&nbsp;address)<br />;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=HandleUndef&nbsp;&nbsp;&nbsp;&nbsp;;load&nbsp;the&nbsp;address&nbsp;of&nbsp;HandleXXX&nbsp;to&nbsp;r0<br />;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;load&nbsp;the&nbsp;contents(service&nbsp;routine&nbsp;start&nbsp;address)&nbsp;of&nbsp;HandleXXX<br />;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[sp,&nbsp;#4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;store&nbsp;the&nbsp;contents(ISR)&nbsp;of&nbsp;HandleXXX&nbsp;to&nbsp;stack<br />;&nbsp;&nbsp;&nbsp;&nbsp;ldmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{r0,&nbsp;pc}&nbsp;&nbsp;&nbsp;&nbsp;<br />HandlerSWI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleSWI<br />HandlerDabort&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandleDabort<br />HandlerPabort&nbsp;&nbsp;&nbsp;HANDLER&nbsp;HandlePabort<br /><br />IsrIRQ&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;sp,&nbsp;sp,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;reserved&nbsp;for&nbsp;PC<br />&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,&nbsp;{r8-r9}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,&nbsp;=INTOFFSET<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,&nbsp;[r9]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;=HandleEINT0<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;r8,r9,lsl&nbsp;#2<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;[r8]<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;[sp,#8]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,{r8-r9,pc}<br /><br />;=======<br />;&nbsp;ENTRY&nbsp;&nbsp;<br />;=======<br />ResetHandler<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=WTCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;watch&nbsp;dog&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=INTMSK<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0xffffffff&nbsp;&nbsp;;all&nbsp;interrupt&nbsp;disable<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=INTSUBMSK<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0x3ff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;all&nbsp;sub&nbsp;interrupt&nbsp;disable<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;{FALSE}<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;rGPFDAT&nbsp;=&nbsp;(rGPFDAT&nbsp;&&nbsp;~(0xf&lt&lt4))&nbsp;|&nbsp;((~data&nbsp;&&nbsp;0xf)&lt&lt4);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Led_Display<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=GPFCON<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0x5500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,][r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=GPFDAT<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0x10<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;To&nbsp;reduce&nbsp;PLL&nbsp;lock&nbsp;time,&nbsp;adjust&nbsp;the&nbsp;LOCKTIME&nbsp;register.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=LOCKTIME<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0xffffff<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;PLL_ON_START<br />&nbsp;&nbsp;&nbsp;&nbsp;;Configure&nbsp;MPLL<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=MPLLCON<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=((M_MDIV&lt&lt12)+(M_PDIV&lt&lt4)+M_SDIV)&nbsp;&nbsp;;Fin=12MHz,Fout=50MHz<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,][r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;Check&nbsp;if&nbsp;the&nbsp;boot&nbsp;is&nbsp;caused&nbsp;by&nbsp;the&nbsp;wake-up&nbsp;from&nbsp;POWER_OFF&nbsp;mode.<br />;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=GSTATUS2<br />;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br />;&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x2<br />&nbsp;&nbsp;&nbsp;&nbsp;;In&nbsp;case&nbsp;of&nbsp;the&nbsp;wake-up&nbsp;from&nbsp;POWER_OFF&nbsp;mode,&nbsp;go&nbsp;to&nbsp;POWER_OFF_WAKEUP&nbsp;handler.&nbsp;<br />;&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;WAKEUP_POWER_OFF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;StartPointAfterPowerOffWakeUp<br />StartPointAfterPowerOffWakeUp<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;Set&nbsp;memory&nbsp;control&nbsp;registers<br />&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;SMRDATA&nbsp;&nbsp;&nbsp;&nbsp;;can't&nbsp;use&nbsp;ldr&nbsp;r0,&nbsp;=xxxx&nbsp;important!!!<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=BWSCON&nbsp;&nbsp;&nbsp;&nbsp;;BWSCON&nbsp;Address<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r0,&nbsp;#52&nbsp;&nbsp;&nbsp;&nbsp;;End&nbsp;address&nbsp;of&nbsp;SMRDATA<br />0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r1],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;%B0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;Initialize&nbsp;stacks<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;InitStacks<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Setup&nbsp;IRQ&nbsp;handler<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;This&nbsp;routine&nbsp;is&nbsp;needed<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=IsrIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;if&nbsp;there&nbsp;isn't&nbsp;'subs&nbsp;pc,lr,#4'&nbsp;at&nbsp;0x18,&nbsp;0x1c<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=BWSCON<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;ands&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;OM[1:0]&nbsp;!=&nbsp;0,&nbsp;NOR&nbsp;FLash&nbsp;boot<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;copy_proc_beg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;don't&nbsp;read&nbsp;nand&nbsp;flash<br />&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;ResetEntry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;OM[1:0]&nbsp;==&nbsp;0,&nbsp;NAND&nbsp;FLash&nbsp;boot<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;if&nbsp;use&nbsp;Multi-ice,&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;copy_proc_beg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;don't&nbsp;read&nbsp;nand&nbsp;flash&nbsp;for&nbsp;boot<br />;===========================================================<br />nand_boot_beg<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r5,&nbsp;#NFCONF<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;&nbsp;&nbsp;&nbsp;=(1&lt&lt15)|(1&lt&lt12)|(1&lt&lt11)|(7&lt&lt8)|(7&lt&lt4)|(7)<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;&nbsp;&nbsp;&nbsp;[r5]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;ReadNandID<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r6,&nbsp;#0<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=0xec73<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r5,&nbsp;&nbsp;&nbsp;&nbsp;r0<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;%F1<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=0xec75<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r5,&nbsp;r0<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;%F1<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r6,&nbsp;#1<br />1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;ReadNandStatus<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;#0<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,&nbsp;=ResetEntry<br />2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ands&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r8,&nbsp;#0x1f<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%F3<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r8<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CheckBadBlk<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;#0<br />&nbsp;&nbsp;&nbsp;&nbsp;addne&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;r8,&nbsp;#32<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%F4<br />3&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r8<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r9<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;ReadNandPage<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r9,&nbsp;r9,&nbsp;#512<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;r8,&nbsp;#1<br />4&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r8,&nbsp;#256<br />&nbsp;&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;%B2<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r5,&nbsp;#NFCONF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;DsNandFlash<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r5]<br />&nbsp;&nbsp;&nbsp;&nbsp;and&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#~0x8000<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r5]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;=copy_proc_beg<br />;===========================================================<br />copy_proc_beg<br />&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;ResetEntry<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;BaseOfROM<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r1<br />&nbsp;&nbsp;&nbsp;&nbsp;ldreq&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;TopOfROM<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;InitRam&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r3,&nbsp;TopOfROM<br />0&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldmia&nbsp;&nbsp;&nbsp;&nbsp;r0!,&nbsp;{r4-r7}<br />&nbsp;&nbsp;&nbsp;&nbsp;stmia&nbsp;&nbsp;&nbsp;&nbsp;r2!,&nbsp;{r4-r7}<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r3<br />&nbsp;&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;%B0<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r2,&nbsp;r3<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;r2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />InitRam&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;BaseOfBSS<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;BaseOfZero&nbsp;&nbsp;&nbsp;&nbsp;<br />0<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;r3<br />&nbsp;&nbsp;&nbsp;&nbsp;ldrcc&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;strcc&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r2],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;%B0&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;&nbsp;&nbsp;&nbsp;#0<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;&nbsp;&nbsp;&nbsp;EndOfBSS<br />1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;&nbsp;&nbsp;&nbsp;r3<br />&nbsp;&nbsp;&nbsp;&nbsp;strcc&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r2],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;%B1&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;send&nbsp;reset&nbsp;status&nbsp;to&nbsp;main&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=GSTATUS2<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r1]<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r0,&nbsp;[r1]&nbsp;&nbsp;&nbsp;&nbsp;;clear&nbsp;reset&nbsp;status<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;:LNOT:THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;pc,&nbsp;GotoMain&nbsp;&nbsp;&nbsp;&nbsp;;bl&nbsp;&nbsp;&nbsp;&nbsp;Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Don't&nbsp;use&nbsp;main()&nbsp;because&nbsp;......<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;for&nbsp;start-up&nbsp;code&nbsp;for&nbsp;Thumb&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;lr,pc,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;&nbsp;&nbsp;&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CODE16<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Don't&nbsp;use&nbsp;main()&nbsp;because&nbsp;......<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />;===========================================================<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;&nbsp;&nbsp;disable_irq<br />disable_irq<br />&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;cpsr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;enter&nbsp;svc&nbsp;mode&nbsp;and&nbsp;disable&nbsp;irq,fiq<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#0xc0<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;cpsr_c,&nbsp;r0<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />ReadNandID<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,#NFCONF&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipEn();<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x90&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(RdIDCMD);<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#4]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r4,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r4,[r7,#8]&nbsp;&nbsp;&nbsp;&nbsp;<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;while(NFIsBusy());<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0x10]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B1<br />&nbsp;&nbsp;&nbsp;&nbsp;ldrb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0xc]&nbsp;&nbsp;&nbsp;&nbsp;;id&nbsp;&nbsp;=&nbsp;RdNFDat()&lt&lt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,lsl&nbsp;#8&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldrb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r7,#0xc]&nbsp;&nbsp;&nbsp;&nbsp;;id&nbsp;|=&nbsp;RdNFDat();<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5,r1,r0&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipDs();<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,lr&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />ReadNandStatus<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,#NFCONF<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipEn();<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(QUERYCMD);<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#4]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldrb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r7,#0xc]&nbsp;&nbsp;&nbsp;&nbsp;;r1&nbsp;=&nbsp;RdNFDat();<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipDs();<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r7,#0]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,lr<br /><br />WaitNandBusy<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(QUERYCMD);<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#NFCONF<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1,#4]<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;while(!(RdNFDat()&0x40));&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldrb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1,#0xc]<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x40<br />&nbsp;&nbsp;&nbsp;&nbsp;beq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B1<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(READCMD0);<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,lr<br /><br />CheckBadBlk<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5,&nbsp;#NFCONF<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#0x1f&nbsp;&nbsp;&nbsp;&nbsp;;addr&nbsp;&=&nbsp;~0x1f;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipEn()<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0x50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(READCMD2)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#4]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;#5<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(5)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r5,#8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(addr)<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,lsr&nbsp;#8&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(addr&gt&gt8)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#8]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;if(NandAddr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;movne&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,lsr&nbsp;#16&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(addr&gt&gt16)<br />&nbsp;&nbsp;&nbsp;&nbsp;strneb&nbsp;&nbsp;&nbsp;r0,[r5,#8]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WaitNandBusy&nbsp;&nbsp;&nbsp;&nbsp;;WaitNFBusy()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldrb&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;[r5,#0xc]&nbsp;&nbsp;&nbsp;&nbsp;;RdNFDat()<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r0,&nbsp;#0xff<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(READCMD0)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#4]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipDs()<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;r7<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />ReadNandPage<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r7,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r4,r1<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r5,#NFCONF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipEn()<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r1,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFCmd(READCMD0)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#4]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(0)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r5,#8]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(addr)<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,lsr&nbsp;#8&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(addr&gt&gt8)<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#8]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r6,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;if(NandAddr)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;movne&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,lsr&nbsp;#16&nbsp;&nbsp;&nbsp;&nbsp;;WrNFAddr(addr&gt&gt16)<br />&nbsp;&nbsp;&nbsp;&nbsp;strneb&nbsp;&nbsp;&nbsp;r0,[r5,#8]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;InitEcc()<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x1000<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WaitNandBusy&nbsp;&nbsp;&nbsp;&nbsp;;WaitNFBusy()<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;for(i=0;&nbsp;i&lt512;&nbsp;i++)<br />1<br />&nbsp;&nbsp;&nbsp;&nbsp;ldrb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r5,#0xc]&nbsp;&nbsp;&nbsp;&nbsp;;buf&nbsp;=&nbsp;RdNFDat()<br />&nbsp;&nbsp;&nbsp;&nbsp;strb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,[r4,r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#1<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x10000<br />&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,#0x200<br />&nbsp;&nbsp;&nbsp;&nbsp;bcc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B1<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r5,#0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;NFChipDs()<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#0x800<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,[r5,#0]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,r7<br /><br />;===========================================================<br />;function&nbsp;initializing&nbsp;stacks<br />InitStacks<br />&nbsp;&nbsp;&nbsp;&nbsp;;Don't&nbsp;use&nbsp;DRAM,such&nbsp;as&nbsp;stmfd,ldmfd......<br />&nbsp;&nbsp;&nbsp;&nbsp;;SVCstack&nbsp;is&nbsp;initialized&nbsp;before<br />&nbsp;&nbsp;&nbsp;&nbsp;;Under&nbsp;toolkit&nbsp;ver&nbsp;2.5,&nbsp;'msr&nbsp;cpsr,r1'&nbsp;can&nbsp;be&nbsp;used&nbsp;instead&nbsp;of&nbsp;'msr&nbsp;cpsr_cxsf,r1'<br />&nbsp;&nbsp;&nbsp;&nbsp;mrs&nbsp;&nbsp;&nbsp;&nbsp;r0,cpsr<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#MODEMASK<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,#UNDEFMODE|NOINT<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;UndefMode<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,=UndefStack<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,#ABORTMODE|NOINT<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;AbortMode<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,=AbortStack<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,#IRQMODE|NOINT<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;IRQMode<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,=IRQStack<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,#FIQMODE|NOINT<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;FIQMode<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,=FIQStack<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;r0,r0,#MODEMASK|NOINT<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;r1,r0,#SVCMODE<br />&nbsp;&nbsp;&nbsp;&nbsp;msr&nbsp;&nbsp;&nbsp;&nbsp;cpsr_cxsf,r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SVCMode<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;sp,=SVCStack<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;USER&nbsp;mode&nbsp;has&nbsp;not&nbsp;be&nbsp;initialized.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;pc,lr&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;The&nbsp;LR&nbsp;register&nbsp;won't&nbsp;be&nbsp;valid&nbsp;if&nbsp;the&nbsp;current&nbsp;mode&nbsp;is&nbsp;not&nbsp;SVC&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;LTORG<br /><br />SMRDATA&nbsp;DATA<br />;&nbsp;Memory&nbsp;configuration&nbsp;should&nbsp;be&nbsp;optimized&nbsp;for&nbsp;best&nbsp;performance&nbsp;<br />;&nbsp;The&nbsp;following&nbsp;parameter&nbsp;is&nbsp;not&nbsp;optimized.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;Memory&nbsp;access&nbsp;cycle&nbsp;parameter&nbsp;strategy<br />;&nbsp;1)&nbsp;The&nbsp;memory&nbsp;settings&nbsp;is&nbsp;&nbsp;safe&nbsp;parameters&nbsp;even&nbsp;at&nbsp;HCLK=75Mhz.<br />;&nbsp;2)&nbsp;SDRAM&nbsp;refresh&nbsp;period&nbsp;is&nbsp;for&nbsp;HCLK=75Mhz.&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;(0+(B1_BWSCON&lt&lt4)+(B2_BWSCON&lt&lt8)+(B3_BWSCON&lt&lt12)+(B4_BWSCON&lt&lt16)+(B5_BWSCON&lt&lt20)+(B6_BWSCON&lt&lt24)+(B7_BWSCON&lt&lt28))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B0_Tacs&lt&lt13)+(B0_Tcos&lt&lt11)+(B0_Tacc&lt&lt8)+(B0_Tcoh&lt&lt6)+(B0_Tah&lt&lt4)+(B0_Tacp&lt&lt2)+(B0_PMC))&nbsp;&nbsp;&nbsp;;GCS0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B1_Tacs&lt&lt13)+(B1_Tcos&lt&lt11)+(B1_Tacc&lt&lt8)+(B1_Tcoh&lt&lt6)+(B1_Tah&lt&lt4)+(B1_Tacp&lt&lt2)+(B1_PMC))&nbsp;&nbsp;&nbsp;;GCS1&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B2_Tacs&lt&lt13)+(B2_Tcos&lt&lt11)+(B2_Tacc&lt&lt8)+(B2_Tcoh&lt&lt6)+(B2_Tah&lt&lt4)+(B2_Tacp&lt&lt2)+(B2_PMC))&nbsp;&nbsp;&nbsp;;GCS2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x1f7c;((B3_Tacs&lt&lt13)+(B3_Tcos&lt&lt11)+(B3_Tacc&lt&lt8)+(B3_Tcoh&lt&lt6)+(B3_Tah&lt&lt4)+(B3_Tacp&lt&lt2)+(B3_PMC))&nbsp;&nbsp;&nbsp;;GCS3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B4_Tacs&lt&lt13)+(B4_Tcos&lt&lt11)+(B4_Tacc&lt&lt8)+(B4_Tcoh&lt&lt6)+(B4_Tah&lt&lt4)+(B4_Tacp&lt&lt2)+(B4_PMC))&nbsp;&nbsp;&nbsp;;GCS4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B5_Tacs&lt&lt13)+(B5_Tcos&lt&lt11)+(B5_Tacc&lt&lt8)+(B5_Tcoh&lt&lt6)+(B5_Tah&lt&lt4)+(B5_Tacp&lt&lt2)+(B5_PMC))&nbsp;&nbsp;&nbsp;;GCS5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B6_MT&lt&lt15)+(B6_Trcd&lt&lt2)+(B6_SCAN))&nbsp;&nbsp;&nbsp;&nbsp;;GCS6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((B7_MT&lt&lt15)+(B7_Trcd&lt&lt2)+(B7_SCAN))&nbsp;&nbsp;&nbsp;&nbsp;;GCS7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;((REFEN&lt&lt23)+(TREFMD&lt&lt22)+(Trp&lt&lt20)+(Trc&lt&lt18)+(Tchr&lt&lt16)+REFCNT)&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SCLK&nbsp;power&nbsp;saving&nbsp;mode,&nbsp;BANKSIZE&nbsp;128M/128M<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR6&nbsp;CL=3clk<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR7<br />;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR6&nbsp;CL=2clk<br />;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR7<br /><br />BaseOfROM&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RO$$Base|<br />TopOfROM&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RO$$Limit|<br />BaseOfBSS&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;|Image$$RW$$Base|<br />BaseOfZero&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Base|<br />EndOfBSS&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;|Image$$ZI$$Limit|<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GBLS&nbsp;&nbsp;&nbsp;&nbsp;main_entry<br />main_entry&nbsp;&nbsp;&nbsp;&nbsp;SETS&nbsp;&nbsp;&nbsp;&nbsp;&quot;Main&quot;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;$main_entry<br />GotoMain&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;$main_entry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ALIGN<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;RamData,&nbsp;DATA,&nbsp;READWRITE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS<br />HandleReset&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUndef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleSWI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandlePabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDabort&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleReserved&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleIRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleFIQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />;Don't&nbsp;use&nbsp;the&nbsp;label&nbsp;'IntVectorTable',<br />;The&nbsp;value&nbsp;of&nbsp;IntVectorTable&nbsp;is&nbsp;different&nbsp;with&nbsp;the&nbsp;address&nbsp;you&nbsp;think&nbsp;it&nbsp;may&nbsp;be.<br />;IntVectorTable<br />HandleEINT0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT4_7&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT8_23&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleRSV6&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleBATFLT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTICK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleWDT&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTIMER0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTIMER1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTIMER2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTIMER3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTIMER4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUART2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleLCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA0&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA1&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA2&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA3&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleMMC&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleSPI0&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUART1&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleRSV24&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUSBD&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUSBH&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleIIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUART0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleSPI1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleRTC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleADC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br /><br /><br />
农民讲习所 发表于 2008-3-14 10:47 | 显示全部楼层

因为你没打开MMU

差别大概4-5倍
 楼主| jesseli 发表于 2008-3-14 11:14 | 显示全部楼层

果然是 我之前的MMU没有修改导致!

oh!&nbsp;果然是,我把以下函数稍微修改了一下就好了!<br /><br />农民讲习所兄牛!谢谢^_^!<br /><br />MMU是个神秘的东西,之前一直没有认真学习,这次终于吃苦头了。<br /><br />void&nbsp;MMU_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,j;<br />&nbsp;&nbsp;&nbsp;&nbsp;//==========================&nbsp;IMPORTANT&nbsp;NOTE&nbsp;=========================<br />&nbsp;&nbsp;&nbsp;&nbsp;//The&nbsp;current&nbsp;stack&nbsp;and&nbsp;code&nbsp;area&nbsp;can't&nbsp;be&nbsp;re-mapped&nbsp;in&nbsp;this&nbsp;routine.<br />&nbsp;&nbsp;&nbsp;&nbsp;//If&nbsp;you&nbsp;want&nbsp;memory&nbsp;map&nbsp;mapped&nbsp;freely,&nbsp;your&nbsp;own&nbsp;sophiscated&nbsp;MMU<br />&nbsp;&nbsp;&nbsp;&nbsp;//initialization&nbsp;code&nbsp;is&nbsp;needed.<br />&nbsp;&nbsp;&nbsp;&nbsp;//===================================================================<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_DisableDCache();<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_DisableICache();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//If&nbsp;write-back&nbsp;is&nbsp;used,the&nbsp;DCache&nbsp;should&nbsp;be&nbsp;cleared.<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt64;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt8;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MMU_CleanInvalidateDCacheIndex((i&lt&lt26)|(j&lt&lt5));<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_InvalidateICache();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;#if&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;//To&nbsp;complete&nbsp;MMU_Init()&nbsp;fast,&nbsp;Icache&nbsp;may&nbsp;be&nbsp;turned&nbsp;on&nbsp;here.<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_EnableICache();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_DisableMMU();<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_InvalidateTLB();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//MMU_SetMTT(int&nbsp;vaddrStart,int&nbsp;vaddrEnd,int&nbsp;paddrStart,int&nbsp;attr)<br />//&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_NCNB);&nbsp;&nbsp;//bank0<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x00000000,0x00100000,(U32)__ENTRY,RW_CB);&nbsp;&nbsp;//bank0&nbsp;&nbsp;when&nbsp;no&nbsp;nor&nbsp;flash,&nbsp;must&nbsp;do&nbsp;this<br />//!!!&nbsp;Important&nbsp;note,&nbsp;redirect&nbsp;IRQ&nbsp;vector&nbsp;to&nbsp;reset&nbsp;entry&nbsp;!!!<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x04000000,0x07f00000,0x00000000,RW_NCNB);&nbsp;//bank0<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_NCNB);&nbsp;&nbsp;//bank1&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB);&nbsp;//bank2<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB);&nbsp;//bank3<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB);&nbsp;//bank4<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB);&nbsp;//bank5<br />&nbsp;&nbsp;&nbsp;//&nbsp;MMU_SetMTT(0x30000000,0x30100000,0x30000000,RW_CB);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bank6-1<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x30000000,0x30200000,0x30000000,RW_CB);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bank6-1&nbsp;在此将&nbsp;0x30100000修改为0x30200000<br />&nbsp;&nbsp;&nbsp;&nbsp;//MMU_SetMTT(0x30200000,0x33e00000,0x30200000,(AP_RO|DOMAIN0|NCNB|DESC_SEC));&nbsp;//bank6-2<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x30800000,0x33e00000,0x30800000,(AP_RO|DOMAIN0|NCNB|DESC_SEC));&nbsp;//bank6-2&nbsp;在此将&nbsp;0x30200000修改为0x30800000<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);&nbsp;&nbsp;&nbsp;//bank6-3<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB);&nbsp;//bank7<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x40000000,0x47f00000,0x40000000,RW_NCNB);&nbsp;//SFR<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x48000000,0x5af00000,0x48000000,RW_NCNB);&nbsp;//SFR<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not&nbsp;used<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetTTBase(_MMUTT_STARTADDRESS);<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DOMAIN1:&nbsp;no_access,&nbsp;DOMAIN0,2~15=client(AP&nbsp;is&nbsp;checked)<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_SetProcessId(0x0);<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_EnableAlignFault();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_EnableMMU();<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_EnableICache();<br />&nbsp;&nbsp;&nbsp;&nbsp;MMU_EnableDCache();&nbsp;//DCache&nbsp;should&nbsp;be&nbsp;turned&nbsp;on&nbsp;after&nbsp;MMU&nbsp;is&nbsp;turned&nbsp;on.<br />}&nbsp;&nbsp;&nbsp;&nbsp;<br />
xwj 发表于 2008-3-14 11:26 | 显示全部楼层

好经验,牛!

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

53

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部