2440启动代码ADS.KEIL.(大狭帮忙注解!)(新1)

[复制链接]
7538|18
 楼主| avocationA 发表于 2008-9-10 22:22 | 显示全部楼层

2

;=====================================================================<br />;&nbsp;File&nbsp;Name&nbsp;:&nbsp;2440slib.s<br />;&nbsp;Function&nbsp;&nbsp;:&nbsp;S3C2440&nbsp;&nbsp;(Assembly)<br />;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;March&nbsp;09,&nbsp;2002<br />;&nbsp;Revision&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Programming&nbsp;start&nbsp;(February&nbsp;26,2002)&nbsp;-&gt&nbsp;SOP<br />;&nbsp;Revision&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;03.11.2003&nbsp;ver&nbsp;0.0&nbsp;&nbsp;&nbsp;&nbsp;Attatched&nbsp;for&nbsp;2440<br />;=====================================================================<br /><br />;Interrupt,&nbsp;FIQ/IRQ&nbsp;disable<br />NOINT&nbsp;&nbsp;EQU&nbsp;0xc0&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;1100&nbsp;0000<br /><br />;Check&nbsp;if&nbsp;tasm.exe(armasm&nbsp;-16&nbsp;...@ADS&nbsp;1.0)&nbsp;is&nbsp;used.<br />&nbsp;&nbsp;&nbsp;GBLL&nbsp;&nbsp;&nbsp;&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;[&nbsp;{CONFIG}&nbsp;=&nbsp;16<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;{TRUE}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CODE32<br />&nbsp;&nbsp;&nbsp;|<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;{FALSE}<br />&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;MACRO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;pc,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;MEND<br /><br />&nbsp;&nbsp;&nbsp;AREA&nbsp;|C$$code|,&nbsp;CODE,&nbsp;READONLY<br /><br />;========================================<br />;Workaround&nbsp;of&nbsp;problem&nbsp;between&nbsp;LCD&nbsp;and&nbsp;Framebuffer<br />;========================================<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;&nbsp;&nbsp;SDRAMtest<br />SDRAMtest<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=0x31000000&nbsp;&nbsp;&nbsp;&nbsp;;//#表示立即数寻址,但是LDR立即数是有限制的,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,=0x80000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//只有部分可以,=是伪指令,表示先把这个数存<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r2,#0xf000000f&nbsp;&nbsp;&nbsp;&nbsp;;//在某个空间然后再给,如果可以直接寻址就自动<br />&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;&nbsp;&nbsp;&nbsp;;//设置,编译器自己搞定<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />LB2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,[r0],#4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,[r0],#4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subs&nbsp;r1,r1,#4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;LB2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;pc,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />;==============<br />;&nbsp;CPSR&nbsp;I,F&nbsp;bit<br />;==============<br />;int&nbsp;SET_IF(void);<br />;The&nbsp;return&nbsp;value&nbsp;is&nbsp;current&nbsp;CPSR.<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;&nbsp;&nbsp;SET_IF<br />SET_IF<br />&nbsp;&nbsp;&nbsp;&nbsp;;This&nbsp;function&nbsp;works&nbsp;only&nbsp;if&nbsp;the&nbsp;processor&nbsp;is&nbsp;in&nbsp;previliged&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;mrs&nbsp;r0,cpsr<br />&nbsp;&nbsp;&nbsp;mov&nbsp;r1,r0<br />&nbsp;&nbsp;&nbsp;orr&nbsp;r1,r1,#NOINT<br />&nbsp;&nbsp;&nbsp;msr&nbsp;cpsr_cxsf,r1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//置位IRQ和FIQ控制位,禁止中断<br /><br /><br /><br />;void&nbsp;WR_IF(int&nbsp;cpsrValue);<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;WR_IF<br />WR_IF<br />&nbsp;&nbsp;&nbsp;&nbsp;;This&nbsp;function&nbsp;works&nbsp;only&nbsp;if&nbsp;the&nbsp;processor&nbsp;is&nbsp;in&nbsp;previliged&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;msr&nbsp;cpsr_cxsf,r0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//写CPSR<br /><br /><br />;void&nbsp;CLR_IF(void);<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;CLR_IF<br />CLR_IF<br />&nbsp;&nbsp;&nbsp;&nbsp;;This&nbsp;function&nbsp;works&nbsp;only&nbsp;if&nbsp;the&nbsp;processor&nbsp;is&nbsp;in&nbsp;previliged&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;mrs&nbsp;r0,cpsr<br />&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#NOINT<br />&nbsp;&nbsp;&nbsp;msr&nbsp;cpsr_cxsf,r0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//清零IRQ和FIQ控制位,使能中断<br /><br /><br /><br />;====================================<br />;&nbsp;MMU&nbsp;Cache/TLB/etc&nbsp;on/off&nbsp;functions&nbsp;&nbsp;//TLB--页表缓冲<br />;====================================<br /><br /><br />;//=============CP15协处理器MMU的C1功能================<br />;//M-bit[0]:禁止/使能MMU&nbsp;1使能<br />;//A-bit[1]:是否支持内存访问时地址对齐检查系统,1使能<br />;//C-bit[2]:禁止/使能数据Cache或整个Cache,1使能&nbsp;&nbsp;不含Cache返回0,不能禁止Cache返回1<br />;//W-bit[3]:禁止/使能写入缓冲,1使能<br />;//P-bit[4]:控制PROG32控制信号<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;异常中断处理程序进入32地址的模式<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;异常中断处理程序进入26地址的模式&nbsp;&nbsp;不支持26位时返回1<br /><br />;//D-bit[5]:对于向前兼容的26位地址的ARM处理器<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;禁止26位地址异常检查<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;使能26位地址异常检查<br /><br />;//L-bit[6]:对于ARMv3及以前的版本<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;选择后期中止模型<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;选择早前中止模型<br /><br />;//B-bit[7]:0&nbsp;选择little-endian<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;选择big-endian<br /><br />;//S-bit[8]:用于系统保护<br />;//R-bit[9]:用于ROM保护<br />;//F-bit[10]:由生产商定义<br />;//Z-bit[11]:对于支持跳转预测的ARM系统<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;使能跳转预测功能<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;禁止跳转预测功能<br /><br />;//I-bit[12]:Cache分开时,1&nbsp;使能指令Cache,0&nbsp;禁止使能Cache<br />;//V-bit[13]:对于支持高端异常中断向量表的系统<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;选择&nbsp;0x00000000-0x0000001c<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;选择&nbsp;0xFFFF0000-0xFFFF001c<br /><br />;//RR-bit[14]:Cache的淘汰算法<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;选择常规的淘汰算法,<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;选择预测性的淘汰算法,如round-robin淘汰算法<br /><br />;//L4-bit[15]:对于ARM版本5以上的处理器,用于兼容以前的ARM版本的功能<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;保持当前ARM的正常的功能<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;对于一些根据跳转地址的位[0]进行状态切换的指令,忽略[0],不进行状态切换,保持和以前的ARM版本兼容<br />;//=====================================================<br /><br />R1_I&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt12)&nbsp;;//Cache分开时,1&nbsp;使能指令Cache,0&nbsp;禁止使能Cache<br />R1_C&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt2)&nbsp;&nbsp;&nbsp;&nbsp;;//禁止/使能数据Cache或整个Cache,1使能&nbsp;&nbsp;不含Cache返回0,不能禁止Cache返回1<br />R1_A&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt1)&nbsp;&nbsp;&nbsp;&nbsp;;//是否支持内存访问时地址对齐检查系统,1使能<br />R1_M&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//禁止/使能MMU&nbsp;1使能<br />R1_iA&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt31)<br />R1_nF&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt30)<br /><br />;void&nbsp;MMU_EnableICache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_EnableICache<br />MMU_EnableICache<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;orr&nbsp;r0,r0,#R1_I<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_DisableICache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_DisableICache<br />MMU_DisableICache<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#R1_I<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//禁止/使能指令Cache<br /><br /><br /><br />;void&nbsp;MMU_EnableDCache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_EnableDCache<br />MMU_EnableDCache<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;orr&nbsp;r0,r0,#R1_C<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_DisableDCache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_DisableDCache<br />MMU_DisableDCache<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#R1_C<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//禁止/使能数据Cache&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />;void&nbsp;MMU_EnableAlignFault(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_EnableAlignFault<br />MMU_EnableAlignFault<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;orr&nbsp;r0,r0,#R1_A<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_DisableAlignFault(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_DisableAlignFault<br />MMU_DisableAlignFault<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#R1_A<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//使能/禁止存储器对齐功能&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br /><br />;void&nbsp;MMU_EnableMMU(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_EnableMMU<br />MMU_EnableMMU<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;orr&nbsp;r0,r0,#R1_M<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_DisableMMU(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_DisableMMU<br />MMU_DisableMMU<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#R1_M<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />;//使能/禁止MMU<br />;//注意:使能/禁止MMU时<br /><br />;//====================================================================================================<br />;//1、在使能MMU之前,要在内存中建立好页表,同时CP15中的各相关寄存器必须完成初始化。<br />;//2、如果使用的不是平板存储模式(物理地址和虚拟地址相等),在禁止/使能MMU时虚拟地<br />;//址和物理地址的对应关系会发生改变,这时应该清楚Cache中的当前地址变换条目。<br />;//3、如果完成禁止/使能MMU的代码的物理地址和虚拟地址不相同,则禁止/使能MMU时将造成<br />;//很**烦,因此强烈完成禁止/使能MMU的代码的物理地址和虚拟地址最好相同。<br />;//====================================================================================================<br /><br />;void&nbsp;MMU_SetFastBusMode(void)<br />;&nbsp;FCLK:HCLK=&nbsp;1:1<br />&nbsp;&nbsp;EXPORT&nbsp;MMU_SetFastBusMode<br />MMU_SetFastBusMode<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;bic&nbsp;r0,r0,#R1_iA:OR:R1_nF<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_SetAsyncBusMode(void)<br />;&nbsp;FCLK:HCLK=&nbsp;1:2<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetAsyncBusMode<br />MMU_SetAsyncBusMode<br />&nbsp;&nbsp;&nbsp;mrc&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;orr&nbsp;r0,r0,#R1_nF:OR:R1_iA<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c1,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br /><br />;//C2用于保存页表的在内存中的基地址<br />;//页表中每一行对应一个虚地址页对应的实地址页的地址、该位的方位权限和该页的缓冲特性<br />;//通常把部分页表放在页表缓冲器TLB(translation&nbsp;lookaside&nbsp;buffer)中,换页表时,TLB要清空,因为。。。。<br />;//C8控制清空TLB<br />;//C10用于控制TLB中内容的锁定<br />;=========================<br />;&nbsp;Set&nbsp;TTBase<br />;=========================<br />;void&nbsp;MMU_SetTTBase(int&nbsp;base)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetTTBase<br />MMU_SetTTBase<br />&nbsp;&nbsp;&nbsp;;ro=TTBase<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c2,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br /><br /><br />;//MMU将整个存储空间分成16个域(domain),每个域具有相同的访问属性<br />;//C3用于设置域的属性<br />;=========================<br />;&nbsp;Set&nbsp;Domain<br />;=========================<br />;void&nbsp;MMU_SetDomain(int&nbsp;domain)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetDomain<br />MMU_SetDomain<br />&nbsp;&nbsp;&nbsp;;ro=domain<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c3,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;=========================<br />;&nbsp;ICache/DCache&nbsp;functions<br />;=========================<br />;void&nbsp;MMU_InvalidateIDCache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateIDCache<br />MMU_InvalidateIDCache<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c7,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateICache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateICache<br />MMU_InvalidateICache<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c5,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateICacheMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateICacheMVA<br />MMU_InvalidateICacheMVA<br />&nbsp;&nbsp;&nbsp;;r0=mva<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c5,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_PrefetchICacheMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_PrefetchICacheMVA<br />MMU_PrefetchICacheMVA<br />&nbsp;&nbsp;&nbsp;;r0=mva<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c13,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateDCache(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateDCache<br />MMU_InvalidateDCache<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c6,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateDCacheMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateDCacheMVA<br />MMU_InvalidateDCacheMVA<br />&nbsp;&nbsp;&nbsp;;r0=mva<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c6,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_CleanDCacheMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_CleanDCacheMVA<br />MMU_CleanDCacheMVA<br />&nbsp;&nbsp;&nbsp;;r0=mva<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c10,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_CleanInvalidateDCacheMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_CleanInvalidateDCacheMVA<br />MMU_CleanInvalidateDCacheMVA<br />&nbsp;&nbsp;&nbsp;;r0=mva<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c14,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_CleanDCacheIndex(U32&nbsp;index)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_CleanDCacheIndex<br />MMU_CleanDCacheIndex<br />&nbsp;&nbsp;&nbsp;;r0=index<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c10,2<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_CleanInvalidateDCacheIndex(U32&nbsp;index)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_CleanInvalidateDCacheIndex<br />MMU_CleanInvalidateDCacheIndex<br />&nbsp;&nbsp;&nbsp;;r0=index<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c14,2<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_WaitForInterrupt(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_WaitForInterrupt<br />MMU_WaitForInterrupt<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c7,c0,4<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;===============<br />;&nbsp;TLB&nbsp;functions<br />;===============<br />;voic&nbsp;MMU_InvalidateTLB(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateTLB<br />MMU_InvalidateTLB<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c8,c7,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateITLB(void)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateITLB<br />MMU_InvalidateITLB<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c8,c5,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateITLBMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateITLBMVA<br />MMU_InvalidateITLBMVA<br />&nbsp;&nbsp;&nbsp;;ro=mva<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c8,c5,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateDTLB(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateDTLB<br />MMU_InvalidateDTLB<br />&nbsp;&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c8,c6,0<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_InvalidateDTLBMVA(U32&nbsp;mva)<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_InvalidateDTLBMVA<br />MMU_InvalidateDTLBMVA<br />&nbsp;&nbsp;&nbsp;&nbsp;;r0=mva<br />&nbsp;&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c8,c6,1<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;=================<br />;&nbsp;Cache&nbsp;lock&nbsp;down<br />;=================<br />;void&nbsp;MMU_SetDCacheLockdownBase(U32&nbsp;base)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetDCacheLockdownBase<br />MMU_SetDCacheLockdownBase<br />&nbsp;&nbsp;&nbsp;;r0=&nbsp;victim&nbsp;&&nbsp;lockdown&nbsp;base<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c9,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_SetICacheLockdownBase(U32&nbsp;base)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetICacheLockdownBase<br />MMU_SetICacheLockdownBase<br />&nbsp;&nbsp;&nbsp;;r0=&nbsp;victim&nbsp;&&nbsp;lockdown&nbsp;base<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c9,c0,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;=================<br />;&nbsp;TLB&nbsp;lock&nbsp;down<br />;=================<br />;void&nbsp;MMU_SetDTLBLockdown(U32&nbsp;baseVictim)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetDTLBLockdown<br />MMU_SetDTLBLockdown<br />&nbsp;&nbsp;&nbsp;;r0=&nbsp;baseVictim<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c10,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;void&nbsp;MMU_SetITLBLockdown(U32&nbsp;baseVictim)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetITLBLockdown<br />MMU_SetITLBLockdown<br />&nbsp;&nbsp;&nbsp;;r0=&nbsp;baseVictim<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c10,c0,1<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />;============<br />;&nbsp;Process&nbsp;ID<br />;============<br />;void&nbsp;MMU_SetProcessId(U32&nbsp;pid)<br />&nbsp;&nbsp;&nbsp;EXPORT&nbsp;MMU_SetProcessId<br />MMU_SetProcessId<br />&nbsp;&nbsp;&nbsp;;r0=&nbsp;pid<br />&nbsp;&nbsp;&nbsp;mcr&nbsp;p15,0,r0,c13,c0,0<br />&nbsp;&nbsp;&nbsp;MOV_PC_LR<br /><br />&nbsp;&nbsp;&nbsp;END<br />
 楼主| avocationA 发表于 2008-9-10 22:22 | 显示全部楼层 |阅读模式
;=========================================<br />;&nbsp;NAME:&nbsp;2440INIT.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,Sleep&nbsp;mode<br />;&nbsp;2003.03.14:DonGo:&nbsp;Modified&nbsp;for&nbsp;2440.<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;2440addr.inc<br /><br />BIT_SELFREFRESH&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(1&lt&lt22)&nbsp;&nbsp;&nbsp;&nbsp;;bit[22]=1,others=0<br /><br />;Pre-defined&nbsp;constants&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;系统的工作模式设定<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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;系统的堆栈空间设定<br />UserStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x3800)&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff4800&nbsp;~<br />SVCStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x2800)&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff5800&nbsp;~<br />UndefStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x2400)&nbsp;&nbsp;&nbsp;&nbsp;;0x33ff5c00&nbsp;~<br />AbortStack&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;(_STACK_BASEADDRESS-0x2000)&nbsp;&nbsp;&nbsp;&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;~<br /><br />;arm处理器有两种工作状态&nbsp;1.arm:32位&nbsp;这种工作状态下执行字对准的arm指令&nbsp;2.Thumb:16位&nbsp;这种工作状<br />;态执行半字对准的Thumb指令&nbsp;<br />;因为处理器分为16位&nbsp;32位两种工作状态&nbsp;程序的编译器也是分16位和32两种编译方式&nbsp;所以下面的程序用<br />;于根据处理器工作状态确定编译器编译方式&nbsp;<br />;code16伪指令指示汇编编译器后面的指令为16位的thumb指令&nbsp;<br />;code32伪指令指示汇编编译器后面的指令为32位的arm指令&nbsp;<br />;这段是为了统一目前的处理器工作状态和软件编译方式(16位编译环境使用tasm.exe编译<br />;Check&nbsp;if&nbsp;tasm.exe(armasm&nbsp;-16&nbsp;...@ADS&nbsp;1.0)&nbsp;is&nbsp;used.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;GBLL&nbsp;&nbsp;&nbsp;&nbsp;THUMBCODE&nbsp;&nbsp;&nbsp;&nbsp;;定义一个全局变量<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;{CONFIG}&nbsp;=&nbsp;16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;if&nbsp;config==16&nbsp;这里表示你的目前处于领先地16位编译方式<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;{TRUE}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;设置THUMBCODE&nbsp;为&nbsp;true表示告诉系统当前想用thumb,但实际启动时不行,只能启动后再跳<br />&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;;&nbsp;][|]表示if&nbsp;else&nbsp;endif&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CODE32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;启动时强制使用32位编译模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />THUMBCODE&nbsp;SETL&nbsp;&nbsp;{FALSE}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;如果系统要求是ARM指令,则直接设置THUMBCODE&nbsp;为&nbsp;false&nbsp;说明当前的是32位编译模式<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MACRO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;宏定义<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bx&nbsp;lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;pc,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;MEND<br /><br />&nbsp;&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;[&nbsp;THUMBCODE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bxeq&nbsp;lr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;相等Z=1,则跳转<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveq&nbsp;pc,lr<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;MEND<br /><br />;注意下面这段程序是个宏定义&nbsp;很多人对这段程序不理解&nbsp;我再次强调这是一个宏定义&nbsp;所以大家要注意了<br />;下面包含的HandlerXXX&nbsp;HANDLER&nbsp;HandleXXX将都被下面这段程序展开&nbsp;<br />;这段程序用于把中断服务程序的首地址装载到pc中,有人称之为“加载程序”。&nbsp;<br />;本初始化程序定义了一个数据区(在文件最后),34个字空间,存放相应中断服务程序的首地址。每个字<br />;空间都有一个标号,以Handle***命名。&nbsp;<br />;在向量中断模式下使用“加载程序”来执行中断服务程序。&nbsp;<br />;这里就必须讲一下向量中断模式和非向量中断模式的概念&nbsp;<br />;向量中断模式是当cpu读取位于0x18处的IRQ中断指令的时候,系统自动读取对应于该中断源确定地址上的;<br />;指令取代0x18处的指令,通过跳转指令系统就直接跳转到对应地址&nbsp;<br />;函数中&nbsp;节省了中断处理时间提高了中断处理速度标&nbsp;例如&nbsp;ADC中断的向量地址为0xC0,则在0xC0处放如下<br />;代码:ldr&nbsp;PC,=HandlerADC&nbsp;当ADC中断产生的时候系统会&nbsp;<br />;自动跳转到HandlerADC函数中&nbsp;<br />;非向量中断模式处理方式是一种传统的中断处理方法,当系统产生中断的时候,系统将interrupt&nbsp;<br />;pending寄存器中对应标志位置位&nbsp;然后跳转到位于0x18处的统一中断&nbsp;<br />;函数中&nbsp;该函数通过读取interrupt&nbsp;pending寄存器中对应标志位&nbsp;来判断中断源&nbsp;并根据优先级关系再跳到<br />;对应中断源的处理代码中<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MACRO&nbsp;<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;;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;;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;;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 />;将$HandleLabel地址空间中的数据给PC,中断服务程序的入口<br /><br /><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<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;&nbsp;&nbsp;Main<br />;导入要用到的字符常量<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;Init,CODE,READONLY<br /><br />;异常中断矢量表(每个表项占4个字节)&nbsp;下面是中断向量表&nbsp;一旦系统运行时有中断发生&nbsp;即使移植了操作<br />;系统&nbsp;如linux&nbsp;处理器已经把控制权交给了操作系统&nbsp;一旦发生中断&nbsp;处理器还是会跳转到从0x0开始&nbsp;<br />;中断向量表中某个中断表项(依据中断类型)开始执行&nbsp;<br />;具体中断向量布局请参考s3c44b0&nbsp;spec&nbsp;例如&nbsp;adc中断向量为&nbsp;0x000000c0下面对应表中第49项位置&nbsp;向量地址0x0+4*(49-1)=0x000000c0&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ENTRY<br />;板子上电和复位后&nbsp;程序开始从位于0x0处开始执行硬件刚刚上电复位后&nbsp;程序从这里开始执行跳转到标<br />;为ResetHandler处执行<br /><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.<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;<br />&nbsp;&nbsp;&nbsp;&nbsp;;条件编译,在编译成机器码前就设定好<br />&nbsp;&nbsp;&nbsp;&nbsp;ASSERT&nbsp;&nbsp;&nbsp;&nbsp;:DEF:ENDIAN_CHANGE&nbsp;&nbsp;&nbsp;&nbsp;;判断ENDIAN_CHANGE是否已定义<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;ENDIAN_CHANGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;如果已经定义了ENDIAN_CHANGE,则判断,here&nbsp;is&nbsp;FALSE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT&nbsp;&nbsp;:DEF:ENTRY_BUS_WIDTH&nbsp;&nbsp;&nbsp;&nbsp;;判断ENTRY_BUS_WIDTH是否已定义<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;][&nbsp;ENTRY_BUS_WIDTH=32&nbsp;&nbsp;&nbsp;&nbsp;;如果已经定义了ENTRY_BUS_WIDTH,则判断是不是为32<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;ChangeBigEndian&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;DCD&nbsp;0xea000007<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;;在bigendian中,地址为A的字单元包括字节单元A,A+1,A+2,A+3,字节单元由高位到低位为A,A+1,A+2,A+3<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;地址为A的字单元包括半字单元A,A+2,半字单元由高位到低位为A,A+2<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&nbsp;&nbsp;&nbsp;&nbsp;也是b&nbsp;&nbsp;&nbsp;&nbsp;ChangeBigEndian指令,只是由于总线不一样而取机器码的顺序不一样<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;先取低位-&gt高位&nbsp;&nbsp;&nbsp;&nbsp;上述指令是通过机器码装换而来的<br /><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&nbsp;也是b&nbsp;&nbsp;&nbsp;&nbsp;ChangeBigEndian指令,只是由于总线不一样而取机器码的顺序不一样<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;ResetHandler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//here&nbsp;is&nbsp;the&nbsp;first&nbsp;instrument&nbsp;&nbsp;0x00<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&nbsp;&nbsp;&nbsp;&nbsp;;0x04<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerSWI&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;SWI&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x08<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerPabort&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;PAbort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x0c<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerDabort&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;DAbort&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x10<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;reserved&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;;0x14<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerIRQ&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;IRQ&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x18<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;HandlerFIQ&nbsp;&nbsp;&nbsp;&nbsp;;handler&nbsp;for&nbsp;FIQ&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x1c<br /><br />;@0x20<br />&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;&nbsp;&nbsp;&nbsp;EnterPWDN&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Must&nbsp;be&nbsp;@0x20.<br /><br /><br />;通过设置CP15的C1的位7,设置存储格式为Bigendian,三种总线方式<br />ChangeBigEndian&nbsp;;//here&nbsp;ENTRY_BUS_WIDTH=16<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;&nbsp;&nbsp;&nbsp;&nbsp;;对存储器控制寄存器操作,指定内存模式为Big-endian<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;因为刚开始CPU都是按照32位总线的指令格式运行的,如果采用其他的话,CPU别不了,必须转化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;但当系统初始化好以后,则CPU能自动识别<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<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x0f10ee01<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;因为采用Big-endian模式,采用16位总线时,物理地址的高位和数据的地位对应<br />&nbsp;&nbsp;&nbsp;&nbsp;&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<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x800080e3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x100f01ee<br />&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.<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 /><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.<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);<br />EnterPWDN<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r2,r0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;r2=rCLKCON&nbsp;保存原始数据&nbsp;0x4c00000c&nbsp;使能各模块的时钟输入<br />&nbsp;&nbsp;&nbsp;&nbsp;tst&nbsp;r0,#0x8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;测试bit[3]&nbsp;SLEEP&nbsp;mode?&nbsp;1=&gtsleep<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;ENTER_SLEEP&nbsp;&nbsp;&nbsp;&nbsp;;C=0,即TST结果非0,bit[3]=1<br /><br />;//进入PWDN后如果不是sleep则进入stop<br /><br />;//进入Stop&nbsp;mode<br />ENTER_STOP<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=REFRESH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;0x48000024&nbsp;&nbsp;&nbsp;DRAM/SDRAM&nbsp;refresh&nbsp;config<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r3,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;r3=rREFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,&nbsp;r3<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;r1,&nbsp;r1,&nbsp;#BIT_SELFREFRESH&nbsp;&nbsp;&nbsp;&nbsp;;Enable&nbsp;SDRAM&nbsp;self-refresh<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 />;//Enable&nbsp;SDRAM&nbsp;self-refresh<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;r1,#16&nbsp;&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 />;//wait&nbsp;16&nbsp;fclks&nbsp;for&nbsp;self-refresh<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]<br />;//??????????????<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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Entering&nbsp;SLEEP&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;MOV_PC_LR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;back&nbsp;to&nbsp;main&nbsp;process<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />ENTER_SLEEP<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;SLEEP&nbsp;mode.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=REFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r1,[r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;r1=rREFRESH<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 />;//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;&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 />;//Wait&nbsp;until&nbsp;self-refresh&nbsp;is&nbsp;issued,which&nbsp;may&nbsp;not&nbsp;be&nbsp;needed<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=MISCCR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;IO&nbsp;register&nbsp;<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;;Set&nbsp;SCLK0=1,&nbsp;SCLK1=1,&nbsp;SCKE=1.<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,=CLKCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Enter&nbsp;sleep&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;r2,[r0]<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 />;//进入Sleep&nbsp;Mode,1)设置SDRAM为self-refresh<br />;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2)设置MISCCR&nbsp;bit[17]&nbsp;1:sclk0=sclk&nbsp;0:sclk0=0<br />;//&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit[18]&nbsp;1:sclk1=sclk&nbsp;0:sclk1=0<br />;//&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bit[19]&nbsp;1:Self&nbsp;refresh&nbsp;retain&nbsp;enable<br />;//&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:Self&nbsp;refresh&nbsp;retain&nbsp;disable&nbsp;&nbsp;<br />;//&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When&nbsp;1,&nbsp;After&nbsp;wake-up&nbsp;from&nbsp;sleep,&nbsp;The&nbsp;self-refresh&nbsp;will&nbsp;be&nbsp;retained.<br /><br />WAKEUP_SLEEP<br />&nbsp;&nbsp;&nbsp;&nbsp;;Release&nbsp;SCLKn&nbsp;after&nbsp;wake-up&nbsp;from&nbsp;the&nbsp;SLEEP&nbsp;mode.<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&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:0-&gt=SCKE.<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r0,[r1]<br />;//设置MISCCR<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;Set&nbsp;memory&nbsp;control&nbsp;registers<br />&nbsp;&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&nbsp;&nbsp;&nbsp;&nbsp;;//总线宽度和等待控制寄存器<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<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;[r0],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;;数据处理后R0自加4,[R0]-&gtR3,R0+4-&gtR0<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 />;//设置所有的memory&nbsp;control&nbsp;register,他的初始地址为BWSCON,初始化<br />;//数据在以SMRDATA为起始的存储区<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;;1)&nbsp;wait&nbsp;until&nbsp;the&nbsp;SelfRefresh&nbsp;is&nbsp;released.<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;%B0<br />;//1)&nbsp;wait&nbsp;until&nbsp;the&nbsp;SelfRefresh&nbsp;is&nbsp;released.<br /><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;SLEEP&nbsp;wake-up<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;r0,[r1]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;pc,r0<br />;//跳出Sleep&nbsp;Mode,进入Sleep状态前的PC<br /><br /><br /><br />;//异常中断宏调用<br />&nbsp;&nbsp;&nbsp;&nbsp;LTORG<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 />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<br />&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;sp,sp,#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;reserved&nbsp;for&nbsp;PC<br />&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,{r8-r9}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,=INTOFFSET&nbsp;&nbsp;&nbsp;&nbsp;;地址为0x4a000014的空间存着中断的偏移<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,[r9]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;I_ISR<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r8,=HandleEINT0<br />&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r8,r8,r9,lsl&nbsp;#2<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r8,[r8]<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r8,[sp,#8]<br />&nbsp;&nbsp;&nbsp;&nbsp;ldmfd&nbsp;&nbsp;&nbsp;&nbsp;sp!,{r8-r9,pc}<br />;//外部中断号判断,通过中断服务程序入口地址存储器的地址偏移确定<br />;//PC=[HandleEINT0+][INTOFFSET]]<br /><br />;=======<br />;&nbsp;ENTRY<br />;扳子上电和复位后&nbsp;程序开始从位于0x0执行b&nbsp;ResetHandler&nbsp;程序从跳转到这里执行&nbsp;<br />;板子上电复位后&nbsp;执行几个步骤这里通过标号在注释中加1,2,3....标示&nbsp;标号表示执行顺序&nbsp;<br />;1.禁止看门狗&nbsp;屏蔽所有中断<br />;=======<br />ResetHandler<br /><br />;//1.禁止看门狗&nbsp;屏蔽所有中断<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=WTCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;watch&nbsp;dog&nbsp;disable<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0x0<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//rGPFDAT&nbsp;=&nbsp;(rGPFDAT&nbsp;&&nbsp;~(0xf&lt&lt4))&nbsp;|&nbsp;((~data&nbsp;&&nbsp;0xf)&lt&lt4);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//Led_Display<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=GPFCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//F-IO&nbsp;In/Out&nbsp;config&nbsp;10&nbsp;10&nbsp;10&nbsp;10&nbsp;00&nbsp;00&nbsp;00&nbsp;00<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=0x5500&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//00&nbsp;=&nbsp;Input&nbsp;01&nbsp;=&nbsp;Output<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,][r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//10&nbsp;=&nbsp;EINT[0]&nbsp;11&nbsp;=&nbsp;Reserved&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=GPFDAT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//F-IO&nbsp;data&nbsp;register<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 /><br />;//2.根据工作频率设置pll&nbsp;<br />;这里介绍一下计算公式&nbsp;<br />;//Fpllo=(m*Fin)/(p*2^s)&nbsp;<br />;//m=MDIV+8,p=PDIV+2,s=SDIV&nbsp;<br />;The&nbsp;proper&nbsp;range&nbsp;of&nbsp;P&nbsp;and&nbsp;M:&nbsp;1&lt=P&lt=62,&nbsp;1&lt=M&lt=248<br /><br />;Fpllo必须大于20Mhz小于66Mhz&nbsp;<br />;Fpllo*2^s必须小于170Mhz&nbsp;<br />;如下面的PLLCON设定中的M_DIV&nbsp;P_DIV&nbsp;S_DIV是取自option.h中&nbsp;<br />;#elif&nbsp;(MCLK==40000000)&nbsp;<br />;#define&nbsp;PLL_M&nbsp;(0x48)&nbsp;<br />;#define&nbsp;PLL_P&nbsp;(0x3)&nbsp;<br />;#define&nbsp;PLL_S&nbsp;(0x2)&nbsp;<br />;所以m=MDIV+8=80,p=PDIV+2=5,s=SDIV=2&nbsp;<br />;硬件使用晶振为10Mhz,即Fin=10Mhz&nbsp;<br />;Fpllo=80*10/5*2^2=40Mhz<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;To&nbsp;reduce&nbsp;PLL&nbsp;lock&nbsp;time,&nbsp;adjust&nbsp;the&nbsp;LOCKTIME&nbsp;register.<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 />;//设置PLL的重置延迟<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;PLL_ON_START<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Added&nbsp;for&nbsp;confirm&nbsp;clock&nbsp;divide.&nbsp;for&nbsp;2440.<br />&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Setting&nbsp;value&nbsp;Fclk:Hclk:Pclk<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=CLKDIVN&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=CLKDIV_VAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;0=1:1:1,&nbsp;1=1:1:2,&nbsp;2=1:2:2,&nbsp;3=1:2:4,&nbsp;4=1:4:4,&nbsp;5=1:4:8,&nbsp;6=1:3:3,&nbsp;7=1:3:6.<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,][r0]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//数据表示分频数<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;//Configure&nbsp;UPLL&nbsp;Fin=12.0MHz&nbsp;UFout=48MHz<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r0,=UPLLCON<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r1,=((U_MDIV&lt&lt12)+(U_PDIV&lt&lt4)+U_SDIV)&nbsp;;//USB&nbsp;PLL&nbsp;CONFIG<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;nop&nbsp;&nbsp;&nbsp;&nbsp;;//&nbsp;Caution:&nbsp;After&nbsp;UPLL&nbsp;setting,&nbsp;at&nbsp;least&nbsp;7-clocks&nbsp;delay&nbsp;must&nbsp;be&nbsp;inserted&nbsp;for&nbsp;setting&nbsp;hardware&nbsp;be&nbsp;completed.<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;;//Configure&nbsp;MPLL&nbsp;Fin=12.0MHz&nbsp;MFout=304.8MHz<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;<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r1,[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />;//Check&nbsp;if&nbsp;the&nbsp;boot&nbsp;is&nbsp;caused&nbsp;by&nbsp;the&nbsp;wake-up&nbsp;from&nbsp;SLEEP&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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;test&nbsp;if&nbsp;bit[1]&nbsp;is&nbsp;1&nbsp;or&nbsp;0&nbsp;0-&gtC=1<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1-&gtC=0<br />&nbsp;&nbsp;&nbsp;&nbsp;;In&nbsp;case&nbsp;of&nbsp;the&nbsp;wake-up&nbsp;from&nbsp;SLEEP&nbsp;mode,&nbsp;go&nbsp;to&nbsp;SLEEP_WAKEUP&nbsp;handler.<br />&nbsp;&nbsp;&nbsp;&nbsp;bne&nbsp;&nbsp;&nbsp;&nbsp;WAKEUP_SLEEP&nbsp;&nbsp;&nbsp;&nbsp;;C=0,jump<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;StartPointAfterSleepWakeUp<br />StartPointAfterSleepWakeUp<br /><br />;//3.置存储相关寄存器的程序&nbsp;<br />;这是设置SDRAM,flash&nbsp;ROM&nbsp;存储器连接和工作时序的程序,片选定义的程序&nbsp;<br />;SMRDATA&nbsp;map在下面的程序中定义&nbsp;<br />;SMRDATA中涉及的值请参考memcfg.s程序&nbsp;<br />;具体寄存器各位含义请参考s3c44b0&nbsp;spec&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;Set&nbsp;memory&nbsp;control&nbsp;registers<br />&nbsp;&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />0<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 />;//set&nbsp;memory&nbsp;registers<br /><br /><br />;//4.初始化各模式下的栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;<br /><br />;//5.设置缺省中断处理函数&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;;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 />&nbsp;&nbsp;&nbsp;&nbsp;;//initialize&nbsp;the&nbsp;IRQ&nbsp;将普通中断判断程序的入口地址给HandleIRQ<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />;//6.将数据段拷贝到ram中&nbsp;将零初始化数据段清零&nbsp;跳入C语言的main函数执行&nbsp;到这步结束bootloader初步引导结束<br />&nbsp;&nbsp;&nbsp;&nbsp;;If&nbsp;main()&nbsp;is&nbsp;used,&nbsp;the&nbsp;variable&nbsp;initialization&nbsp;will&nbsp;be&nbsp;done&nbsp;in&nbsp;__main().<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;:LNOT:USE_MAIN&nbsp;&nbsp;&nbsp;&nbsp;;initialized&nbsp;{FALSE}<br />&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;;Copy&nbsp;and&nbsp;paste&nbsp;RW&nbsp;data/zero&nbsp;initialized&nbsp;data<br />&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;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=|Image$$RO$$Limit|&nbsp;;&nbsp;Get&nbsp;pointer&nbsp;to&nbsp;ROM&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=|Image$$RW$$Base|&nbsp;&nbsp;;&nbsp;and&nbsp;RAM&nbsp;copy<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;=|Image$$ZI$$Base|&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;Zero&nbsp;init&nbsp;base&nbsp;=&gt&nbsp;top&nbsp;of&nbsp;initialised&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Check&nbsp;that&nbsp;they&nbsp;are&nbsp;different&nbsp;just&nbsp;for&nbsp;debug??????????????????????????<br />&nbsp;&nbsp;&nbsp;&nbsp;BEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%F2<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Copy&nbsp;init&nbsp;data<br />&nbsp;&nbsp;&nbsp;&nbsp;LDRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;][r0],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt&nbsp;LDRCC&nbsp;r2,&nbsp;[r0]&nbsp;+&nbsp;ADD&nbsp;r0,&nbsp;r0,&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r1],&nbsp;#4&nbsp;&nbsp;&nbsp;&nbsp;;--&gt&nbsp;STRCC&nbsp;r2,&nbsp;[r1]&nbsp;+&nbsp;ADD&nbsp;r1,&nbsp;r1,&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B1<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=|Image$$ZI$$Limit|&nbsp;;&nbsp;Top&nbsp;of&nbsp;zero&nbsp;init&nbsp;segment<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r2,&nbsp;#0<br />3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r3,&nbsp;r1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Zero&nbsp;init<br />&nbsp;&nbsp;&nbsp;&nbsp;STRCC&nbsp;&nbsp;&nbsp;r2,&nbsp;[r3],&nbsp;#4<br />&nbsp;&nbsp;&nbsp;&nbsp;BCC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%B3<br />&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;:LNOT:THUMBCODE&nbsp;&nbsp;&nbsp;&nbsp;;if&nbsp;thumbcode={false}&nbsp;bl&nbsp;main<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;.&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 /><br />;//if&nbsp;thumbcod={ture}<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 />;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;<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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;UndefStack=0x33FF_5C00<br /><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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;AbortStack=0x33FF_6000<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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;IRQStack=0x33FF_7000<br /><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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;FIQStack=0x33FF_8000<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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;SVCStack=0x33FF_5800<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;;USER&nbsp;mode&nbsp;has&nbsp;not&nbsp;be&nbsp;initialized.<br />&nbsp;&nbsp;&nbsp;&nbsp;;//为什么不用初始化user的stacks,系统刚启动的时候运行在哪个模式下???????????????????<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;pc,lr<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 />;//系统一开始运行就是SVCmode????????????????????????????????????????<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />;=====================================================================<br />;&nbsp;Clock&nbsp;division&nbsp;test<br />;&nbsp;Assemble&nbsp;code,&nbsp;because&nbsp;VSYNC&nbsp;time&nbsp;is&nbsp;very&nbsp;short<br />;=====================================================================<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;CLKDIV124<br />&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;CLKDIV144<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />CLKDIV124<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=&nbsp;CLKDIVN<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=&nbsp;0x3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;0x3&nbsp;=&nbsp;1:2:4<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0]<br />;&nbsp;&nbsp;&nbsp;&nbsp;wait&nbsp;until&nbsp;clock&nbsp;is&nbsp;stable<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=&nbsp;REFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#0xff<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#(0x7&lt&lt8)<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#0x470&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;REFCNT135<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;lr<br /><br />CLKDIV144<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=&nbsp;CLKDIVN<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;=&nbsp;0x4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;0x4&nbsp;=&nbsp;1:4:4<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0]<br />;&nbsp;&nbsp;&nbsp;&nbsp;wait&nbsp;until&nbsp;clock&nbsp;is&nbsp;stable<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r0,&nbsp;=&nbsp;REFRESH<br />&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#0xff<br />&nbsp;&nbsp;&nbsp;&nbsp;bic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#(0x7&lt&lt8)<br />&nbsp;&nbsp;&nbsp;&nbsp;orr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;r1,&nbsp;#0x630&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;REFCNT675&nbsp;-&nbsp;1520<br />&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r1,&nbsp;[r0]<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc,&nbsp;lr<br /><br /><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<br />;&nbsp;The&nbsp;following&nbsp;parameter&nbsp;is&nbsp;not&nbsp;optimized.<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&lt=75Mhz.<br /><br />&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;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;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<br />&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;DCD&nbsp;((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;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;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;DCD&nbsp;((B6_MT&lt&lt15)+(B6_Trcd&lt&lt2)+(B6_SCAN))&nbsp;&nbsp;&nbsp;&nbsp;;GCS6<br />&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;DCD&nbsp;((REFEN&lt&lt23)+(TREFMD&lt&lt22)+(Trp&lt&lt20)+(Trc&lt&lt18)+(Tchr&lt&lt16)+REFCNT)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x32&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;DCD&nbsp;0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR6&nbsp;CL=3clk<br />&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;MRSR7&nbsp;CL=3clk<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ALIGN<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;RamData,&nbsp;DATA,&nbsp;READWRITE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;^&nbsp;&nbsp;&nbsp;_ISR_STARTADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;_ISR_STARTADDRESS=0x33FF_FF00<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;&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;&nbsp;4<br />HandleFIQ&nbsp;&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 />;@0x33FF_FF20<br />HandleEINT0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleEINT3&nbsp;&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 />HandleCAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Added&nbsp;for&nbsp;2440.<br />HandleBATFLT&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleTICK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleWDT&nbsp;&nbsp;&nbsp;&nbsp;&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 />;@0x33FF_FF60<br />HandleLCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleDMA3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleMMC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleSPI0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUART1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleNFCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Added&nbsp;for&nbsp;2440.<br />HandleUSBD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleUSBH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleIIC&nbsp;&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;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleRTC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />HandleADC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;4<br />;@0x33FF_FFA0<br />&nbsp;&nbsp;&nbsp;&nbsp;END<br />
Etual 发表于 2008-9-11 08:44 | 显示全部楼层

原创还是转载?

在友善之臂那里看到过这段注释,一样的。<br /><br />另外,这个貌似是那个&nbsp;裸机测试外围的启动代码,不是vivi,不过<br />原理跟差不多&nbsp;-&nbsp;-b<br /><br />
c.sunway 发表于 2008-9-12 10:31 | 显示全部楼层

看了很管用

多谢LZ
shyboy1212 发表于 2008-9-12 11:17 | 显示全部楼层

谢谢.学习中

  
linhuaou 发表于 2008-9-12 16:19 | 显示全部楼层

呵呵。不错哦!

  
lhjlxr 发表于 2008-9-13 11:16 | 显示全部楼层

很好!

不错啊!
renjie 发表于 2008-9-13 19:10 | 显示全部楼层

引导时候其实什么寄存器也可以不配!放在c代码中方便!!

给你提几个意见!<br />引导时候其实什么寄存器也可以不配!放在c代码中方便!!<br />
robertc 发表于 2008-9-14 00:23 | 显示全部楼层

回复主题:2440 启动代码详

不错&nbsp;学习学习
 楼主| avocationA 发表于 2008-9-14 17:09 | 显示全部楼层

keil mdk3.22 2440led工程

  
 楼主| avocationA 发表于 2008-9-14 17:34 | 显示全部楼层

贴在这里是方便看!21IC的背景是灰色的保护眼睛!呵呵!

 楼主| avocationA 发表于 2008-9-15 10:20 | 显示全部楼层
 楼主| avocationA 发表于 2008-9-15 14:01 | 显示全部楼层

再贴MDK3.22下的2440例程!!!可能有错误,E文差

请高人再详细注解下.......!!!!!!!!!!!!!!!!!!!!!<br />请高人再详细注解下.......!!!!!!!!!!!!!!!!!!!!!<br />请高人再详细注解下.......!!!!!!!!!!!!!!!!!!!!!<br />原文以打包上传....在16楼........<br />更新18楼.........................<br />
freewing 发表于 2008-9-18 13:54 | 显示全部楼层

不管怎样,顶一个

不管怎样,顶一个
db10 发表于 2008-9-18 14:50 | 显示全部楼层

hao

  
 楼主| avocationA 发表于 2008-9-18 21:41 | 显示全部楼层

源文件

  
l0p0c 发表于 2008-9-19 13:35 | 显示全部楼层

不错!感谢!

  
 楼主| avocationA 发表于 2008-9-24 21:53 | 显示全部楼层

RealView(更新注解)顺便问下怎么改成彩色的代码谢谢!

;/*****************************************************************************/<br />;/*&nbsp;S3C2440A.S:&nbsp;Startup&nbsp;file&nbsp;for&nbsp;Samsung&nbsp;S3C440A&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;&nbsp;&nbsp;*/<br />;/*&nbsp;This&nbsp;file&nbsp;is&nbsp;part&nbsp;of&nbsp;the&nbsp;uVision/ARM&nbsp;development&nbsp;tools.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />;/*&nbsp;Copyright&nbsp;(c)&nbsp;2005-2006&nbsp;Keil&nbsp;Software.&nbsp;All&nbsp;rights&nbsp;reserved.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />;/*&nbsp;This&nbsp;software&nbsp;may&nbsp;only&nbsp;be&nbsp;used&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;a&nbsp;valid,&nbsp;current,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />;/*&nbsp;end&nbsp;user&nbsp;licence&nbsp;from&nbsp;KEIL&nbsp;for&nbsp;a&nbsp;compatible&nbsp;version&nbsp;of&nbsp;KEIL&nbsp;software&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />;/*&nbsp;development&nbsp;tools.&nbsp;Nothing&nbsp;else&nbsp;gives&nbsp;you&nbsp;the&nbsp;right&nbsp;to&nbsp;use&nbsp;this&nbsp;software.&nbsp;*/<br />;/*****************************************************************************/<br /><br />;elementary&nbsp;avocationA&nbsp;(rework:2008.09.24更新)<br /><br />;***启动代码(执行复位后)***&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;Standard&nbsp;definitions&nbsp;of&nbsp;Mode&nbsp;bits&nbsp;and&nbsp;Interrupt&nbsp;(I&nbsp;&&nbsp;F)&nbsp;flags&nbsp;in&nbsp;PSRs//;向量中断模式/非向量中断模式&nbsp;在PSRs设置(猜的)<br /><br />&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;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;系统的工作模式设定<br />Mode_USR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义用户模式标志代码;//&nbsp;用户模式的CPSR代码&nbsp;<br />Mode_FIQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x11&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义快速中断模式标志代码;//&nbsp;快中断模式的CPSR代码<br />Mode_IRQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x12&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义普通中断模式标志代码;//&nbsp;中断模式的CPSR代码<br />Mode_SVC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x13&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义管理模式标志代码;//&nbsp;管理模式的CPSR代码<br />Mode_ABT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x17&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义中止模式标志代码;//&nbsp;中止模式的CPSR代码<br />Mode_UND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1B&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义未定义模式标志代码&nbsp;;//&nbsp;未定义模式的CPSR代码<br />Mode_SYS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1F&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;定义系统模式(特权模式)标志代码;//&nbsp;系统(特权)模式的CPSR代码<br /><br />I_Bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80&nbsp;&nbsp;&nbsp;&nbsp;;//&nbsp;普通中断开关(0×80:打开;0×00:关闭)<br />F_Bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40&nbsp;&nbsp;&nbsp;&nbsp;;//&nbsp;快速中断开关(0×40:打开;0×00:关闭)<br /><br />;//栈配置()<br /><br />;系统的栈空间设定<br /><br />UND_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;;未定义&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />SVC_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000008&nbsp;;管理模式端栈长度<br />ABT_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;;中止模式端栈长度<br />FIQ_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;;快速中断模式端栈长度<br />IRQ_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000080&nbsp;;普通中断模式模式端栈长度<br />USR_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000400&nbsp;;用户模端栈长度<br />;//<br />ISR_Stack_Size&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(UND_Stack_Size&nbsp;+&nbsp;SVC_Stack_Size&nbsp;+&nbsp;ABT_Stack_Size&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;FIQ_Stack_Size&nbsp;+&nbsp;IRQ_Stack_Size);所有的堆栈大小进行相加,得到总堆栈大小<br />/**********************************************************************************************<br />;//arm的汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性:<br />;//READWRITE(读写)READONLY(只读)<br />**********************************************************************************************/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;STACK,&nbsp;NOINIT,&nbsp;READWRITE,&nbsp;ALIGN=3&nbsp;;开辟端栈段,段名(STACK)定义为可读可写,不初始化内存单元或将内存写0,字节对齐<br /><br />Stack_Mem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;USR_Stack_Size&nbsp;&nbsp;;//申请栈内存空间<br />__initial_sp&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;ISR_Stack_Size<br /><br />Stack_Top&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Stack_Mem&nbsp;+&nbsp;ISR_Stack_Size&nbsp;;//定义堆栈开始地址(最大地址,堆栈向下访问)<br /><br />;//堆配置<br />;//堆大小&nbsp;(单位字节)//<br />Heap_Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;系统的堆空间设定//定义堆空间大小(配合最后的动态内存申请使用)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;HEAP,&nbsp;NOINIT,&nbsp;READWRITE,&nbsp;ALIGN=3&nbsp;&nbsp;;//段名(HEAP)声明堆代码段(不初始化内存,可读写,字节对齐)<br />Heap_Mem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SPACE&nbsp;&nbsp;&nbsp;Heap_Size&nbsp;;//申请堆的内存空间<br /><br /><br />;时钟管理定义<br />CLK_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4C000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟基地址&nbsp;<br />LOCKTIME_OFS&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;PLL锁定时间计数器对应基地址的偏移值<br />MPLLCON_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;MPLL控制&nbsp;对应基地址的偏移值//认为MPLL分出三种模式:FCLK、HCLK、PCLK<br />UPLLCON_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0X08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;UPLL控制&nbsp;对应基地址的偏移值//用于USB设备<br />CLKCON_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟生成控制&nbsp;对应基地址的偏移值<br />CLKSLOW_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;慢时钟控制&nbsp;对应基地址的偏移值<br />CLKDIVN_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0X14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟除法器控制&nbsp;对应基地址的偏移值<br />CAMDIVN_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0X18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;摄象时钟除法器控制&nbsp;对应基地址的偏移值//UPLL提供<br /><br /><br />CLOCK_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟设置<br />LOCKTIME_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0FFF0FFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;PLL锁定时间计数器&nbsp;值<br />MPLLCON_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00043011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;MPLL控制&nbsp;值<br />UPLLCON_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00038021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;UPLL控制&nbsp;值<br />CLKCON_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x001FFFF0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟生成控制&nbsp;值<br />CLKSLOW_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;慢时钟控制&nbsp;值<br />CLKDIVN_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0000000F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;时钟除法器控制&nbsp;值<br />CAMDIVN_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;摄象时钟除法器控制&nbsp;值<br /><br />;Interrupt&nbsp;&nbsp;definitions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断定义<br />INTOFFSET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;0X4A000014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断请求源偏移&nbsp;地址<br /><br />;//中断向量表<br />;//&nbsp;中断向量地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt0x20-0x3fffff78&gt&nbsp;&nbsp;<br />;//&nbsp;中断向量表地址必须字对齐&nbsp;<br />;//&lt/e&gt&nbsp;&nbsp;<br />IntVT_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中断向量设置<br />IntVTAddress&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x33ffff20&nbsp;&nbsp;&nbsp;&nbsp;;中断向量地址<br /><br /><br />;-----------------------&nbsp;存储器设定&nbsp;------------------------------------<br /><br />IRAM_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40000000&nbsp;;&nbsp;//内存基地址<br /><br />;&nbsp;&nbsp;//看门狗定义<br />WT_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x53000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗基地址<br />WTCON_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗控制&nbsp;对应基地址的偏移值<br />WTDAT_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗数据&nbsp;对应基地址的偏移值<br />WTCNT_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗记数&nbsp;对应基地址的偏移值<br /><br />WT_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗设置<br />WTCON_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗控制<br />WTDAT_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00008000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;看门狗数据<br /><br />;&nbsp;存储控制器设定<br />MC_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x48000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;存储控制器基地址<br /><br />MC_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;存储控制器设定<br /><br />BWSCON_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x22000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;总线宽度和等待控制<br />BANKCON0_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;Boot&nbsp;ROM&nbsp;控制<br />BANKCON1_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK1&nbsp;控制<br />BANKCON2_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK2&nbsp;控制<br />BANKCON3_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK3&nbsp;控制<br />BANKCON4_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK4&nbsp;控制<br />BANKCON5_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK5&nbsp;控制<br />BANKCON6_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00018005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK6&nbsp;控制<br />BANKCON7_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00018005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;BANK7&nbsp;控制<br />REFRESH_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x008404F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;DRAM/SDRAM&nbsp;刷新&nbsp;控制<br />BANKSIZE_Val&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;存储器大小&nbsp;控制<br />MRSRB6_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SDRAM&nbsp;的模式设置寄存器&nbsp;控制<br />MRSRB7_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;SDRAM&nbsp;的模式设置寄存器&nbsp;控制<br /><br />;&nbsp;存储控制器设定结束<br /><br />;&nbsp;I/O&nbsp;口设定<br />PIO_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x56000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口基地址<br />PCONA_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口A控制&nbsp;对应基地址的偏移值<br />PCONB_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口B控制&nbsp;对应基地址的偏移值<br />PCONC_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口C控制&nbsp;对应基地址的偏移值<br />PCOND_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口D控制&nbsp;对应基地址的偏移值<br />PCONE_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口E控制&nbsp;对应基地址的偏移值<br />PCONF_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口F控制&nbsp;对应基地址的偏移值<br />PCONG_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口G控制&nbsp;对应基地址的偏移值<br />PCONH_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口H控制&nbsp;对应基地址的偏移值<br />PCONJ_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xD0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口J控制&nbsp;对应基地址的偏移值<br />PUPB_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口B上拉控制&nbsp;对应基地址的偏移值<br />PUPC_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口C上拉控制&nbsp;对应基地址的偏移值<br />PUPD_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口D上拉控制&nbsp;对应基地址的偏移值<br />PUPE_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口E上拉控制&nbsp;对应基地址的偏移值<br />PUPF_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口F上拉控制&nbsp;对应基地址的偏移值<br />PUPG_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口G上拉控制&nbsp;对应基地址的偏移值<br />PUPH_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口H上拉控制&nbsp;对应基地址的偏移值<br />PUPJ_OFS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xD8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;端口J上拉控制&nbsp;对应基地址的偏移值<br /><br />;--------端口&nbsp;配置--------------<br />PIO_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br />;端口A<br />PIOA_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONA_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x000003FF<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;端口B<br />PIOB_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONB_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPB_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;端口B上拉开启<br />&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;&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 />;端口C<br />PIOC_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />PCONC_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00001401&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPC_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;;端口C上拉开启<br />&nbsp;&nbsp;<br />;端口D<br />PIOD_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCOND_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPD_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;端口D上拉开启<br />&nbsp;&nbsp;<br />;端口E<br />PIOE_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONE_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPE_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;端口E上拉开启<br /><br />;端口F<br />PIOF_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONF_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPF_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;端口F上拉开启<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;端口G<br />PIOG_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONG_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPG_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;端口G上拉开启<br />&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;&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 />;端口H<br />PIOH_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONH_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x000007FF<br />PUPH_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;端口H上拉开启<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;端口J<br />PIOJ_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />PCONJ_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;<br />PUPJ_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000000&nbsp;&nbsp;&nbsp;&nbsp;;端口J上拉开启<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;汇编程序数据&nbsp;8&nbsp;字节对齐<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRESERVE8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;c和汇编有8位对齐的要求,这个伪指令可以满足此要求<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;//存储区设定和程序入口点<br />;//启动代码必须连接到第一个地址才能运行。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;RESET,&nbsp;CODE,&nbsp;READONLY&nbsp;;//开辟端栈段,段名(RESET)定义RESET代码段为只读<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//ARM&nbsp;模式运行程序<br />;//异常向量<br />;//影射到地址0<br /><br />;//必须使用,绝对寻址方式。<br />;//虚处理(子程序)是用一个无限循环实现的,&nbsp;它是可修改的..//(11942295)翻译<br />Vectors&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Reset_Addr&nbsp;;&nbsp;复位&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;Undef_Addr&nbsp;;&nbsp;未定义指令<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;SWI_Addr&nbsp;&nbsp;&nbsp;;&nbsp;软件中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;PAbt_Addr&nbsp;&nbsp;;&nbsp;中止(预取)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;DAbt_Addr&nbsp;&nbsp;;&nbsp;中止(数据)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOP&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;IRQ_Addr&nbsp;&nbsp;&nbsp;;&nbsp;普通<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PC,&nbsp;FIQ_Addr&nbsp;&nbsp;&nbsp;;&nbsp;快速中断<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntVT_SETUP&nbsp;&lt&gt&nbsp;0<br /><br />;//中断向量表地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />HandleEINT0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />HandleEINT1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4<br />HandleEINT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*2<br />HandleEINT3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*3<br />HandleEINT4_7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*4<br />HandleEINT8_23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*5<br />HandleCAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*6<br />HandleBATFLT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*7<br />HandleTICK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*8<br />HandleWDT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*9<br />HandleTIMER0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*10<br />HandleTIMER1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*11<br />HandleTIMER2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*12<br />HandleTIMER3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*13<br />HandleTIMER4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*14<br />HandleUART2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*15<br />HandleLCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*16<br />HandleDMA0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*17<br />HandleDMA1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*18<br />HandleDMA2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*19<br />HandleDMA3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*20<br />HandleMMC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*21<br />HandleSPI0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*22<br />HandleUART1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*23<br />HandleNFCON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*24<br />HandleUSBD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*25<br />HandleUSBH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*26<br />HandleIIC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*27<br />HandleUART0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*28<br />HandleSPI1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*39<br />HandleRTC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*30<br />HandleADC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;IntVTAddress&nbsp;+4*31<br /><br />IRQ_Entry<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub&nbsp;&nbsp;&nbsp;&nbsp;sp,sp,#4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//保留PC值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmfd&nbsp;&nbsp;sp!,{r8-r9}<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,=INTOFFSET<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r9,[r9]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r8,=HandleEINT0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp;r8,r8,r9,lsl&nbsp;#2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldr&nbsp;&nbsp;&nbsp;&nbsp;r8,[r8]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;&nbsp;&nbsp;&nbsp;r8,[sp,#8]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ldmfd&nbsp;&nbsp;sp!,{r8-r9,pc}&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />Reset_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reset_Handler&nbsp;;定义中断的入口地址;&nbsp;以Reset_Addr为Reset_Handler分配一段字对齐的内存单元<br />Undef_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undef_Handler&nbsp;;&nbsp;注:应该是将CODE映射(复制)到RAM的开始地址<br />SWI_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWI_Handler<br />PAbt_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAbt_Handler<br />DAbt_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAbt_Handler<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//保留地址&nbsp;<br />IRQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Handler<br />FIQ_Addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_Handler<br /><br />Undef_Handler&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Undef_Handler&nbsp;;中断处理程序的入口地址//B为跳转指令||&nbsp;??自己跳转到自己??<br />SWI_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWI_Handler<br />PAbt_Handler&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAbt_Handler<br />DAbt_Handler&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DAbt_Handler<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntVT_SETUP&nbsp;&lt&gt&nbsp;1<br />IRQ_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Handler<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntVT_SETUP&nbsp;&lt&gt&nbsp;0<br />IRQ_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IRQ_Entry<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />FIQ_Handler&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FIQ_Handler<br /><br /><br />;//存储控制器配制&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MC_SETUP&nbsp;&lt&gt&nbsp;0<br />MC_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BWSCON_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON0_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON1_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON2_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON3_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON4_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON5_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON6_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKCON7_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;REFRESH_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BANKSIZE_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRSRB6_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MRSRB7_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br /><br />;//时钟管理配置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLOCK_SETUP&nbsp;&lt&gt&nbsp;0<br />CLK_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOCKTIME_Val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLKDIVN_Val&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UPLLCON_Val&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MPLLCON_Val&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLKSLOW_Val&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLKCON_Val&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAMDIVN_Val&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;//I/O&nbsp;配置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIO_SETUP&nbsp;&lt&gt&nbsp;0<br />PIOA_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONA_Val<br />PIOB_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONB_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPB_Val<br />PIOC_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONC_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPC_Val<br />PIOD_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCOND_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPD_Val<br />PIOE_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONE_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPE_Val<br />PIOF_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONF_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPF_Val<br />PIOG_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONG_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPG_Val<br />PIOH_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONH_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPH_Val<br />PIOJ_CFG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PCONJ_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DCD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUPJ_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />;&nbsp;//复位处理模块<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;Reset_Handler&nbsp;&nbsp;;//定义一个全局函数名变量<br />Reset_Handler&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WT_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//看门狗处理;若WT_SETUP为1,则执行下一个语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=WT_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;=WTCON_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;=WTDAT_Val<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;[R0,&nbsp;#WTCNT_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;[R0,&nbsp;#WTDAT_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,&nbsp;#WTCON_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLOCK_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//时钟处理;若CLOCK_SETUP为1,则执行下一个语句&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=CLK_BASE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R8,&nbsp;CLK_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDMIA&nbsp;&nbsp;&nbsp;R8,&nbsp;{R1-R7}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,&nbsp;#LOCKTIME_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;[R0,&nbsp;#CLKDIVN_OFS]&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R3,&nbsp;[R0,&nbsp;#UPLLCON_OFS]&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R4,&nbsp;[R0,&nbsp;#MPLLCON_OFS]&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,&nbsp;[R0,&nbsp;#CLKSLOW_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R6,&nbsp;[R0,&nbsp;#CLKCON_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,&nbsp;[R0,&nbsp;#CAMDIVN_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MC_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//存储控制器处理;若MC_SETUP为1,则执行下一个语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,&nbsp;MC_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDMIA&nbsp;&nbsp;&nbsp;R13,&nbsp;{R0-R12}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,&nbsp;=MC_BASE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STMIA&nbsp;&nbsp;&nbsp;R13,&nbsp;{R0-R12}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&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;<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIO_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//IO处理;若PIO_SETUP为1,则执行下一个语句<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13,&nbsp;=PIO_BASE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOA_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口A处理;若PIOA_SETUP为1,则执行下一个语句&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOA_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONA_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOB_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口B处理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOB_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONB_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPB_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOC_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口C处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOC_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONC_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPC_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOD_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口D处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOD_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCOND_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPD_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOE_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口E处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOE_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONE_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPE_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOF_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口F处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOF_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONF_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPF_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOG_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口G处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOG_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONG_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPG_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOH_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口H处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOH_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONH_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPH_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PIOJ_SETUP&nbsp;&lt&gt&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;//端口J处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;PIOJ_CFG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R0,#4]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;[R13,&nbsp;#PCONJ_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;[R13,&nbsp;#PUPJ_OFS]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;;以下函数为进入相应的模式,并定义相应模式的端栈大小<br />;//为每个模式设置栈<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=Stack_Top<br /><br />;//进入未定义指令模式并设定其栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_UND:OR:I_Bit:OR:F_Bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#UND_Stack_Size<br /><br />;//进入异常中断模式,并设定其栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_ABT:OR:I_Bit:OR:F_Bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#ABT_Stack_Size<br /><br />;//进入&nbsp;FIQ&nbsp;模式,并设定其栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_FIQ:OR:I_Bit:OR:F_Bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#FIQ_Stack_Size<br /><br />;//进入&nbsp;IRQ&nbsp;模式,并设定其栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_IRQ:OR:I_Bit:OR:F_Bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#IRQ_Stack_Size<br /><br />;//进入&nbsp;Supervisor&nbsp;模式,并设定其栈指针<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_SVC:OR:I_Bit:OR:F_Bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;R0,&nbsp;#SVC_Stack_Size<br />;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;MMU_EnableICache<br />;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MMU_EnableICache<br /><br /><br />;//进入&nbsp;用户&nbsp;模式,并设定其栈指针&nbsp;&nbsp;//;最后进入用户模式&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MSR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPSR_c,&nbsp;#Mode_USR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SP,&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SL,&nbsp;SP,&nbsp;#USR_Stack_Size<br /><br /><br />;//进入C代码<br />&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPORT&nbsp;&nbsp;__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=__main<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0<br /><br /><br />;//用护初始堆与栈&nbsp;;//用户设置堆栈程序(C外部接口:用于动态申请内存使用)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AREA&nbsp;&nbsp;&nbsp;&nbsp;|.text|,&nbsp;CODE,&nbsp;READONLY<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;IMPORT&nbsp;&nbsp;__use_two_region_memory<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EXPORT&nbsp;&nbsp;__user_initial_stackheap<br />__user_initial_stackheap&nbsp;&nbsp;<br />/**********************************************************************<br />//__user_initial_stackheap&nbsp;库函数用法翻译<br />用法:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__user_initial_stackheap&nbsp;返回这些值:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;堆基址(heap&nbsp;base)&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;---&gt&nbsp;RO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;栈基址(stack&nbsp;base,一般为栈的最高地址)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---&gt&nbsp;R1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;堆顶(heap&nbsp;limit)&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;---&gt&nbsp;R2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;栈顶(stack&nbsp;limit)&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;---&gt&nbsp;R3<br />***********************************************************************/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,&nbsp;=&nbsp;&nbsp;Heap_Mem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,&nbsp;=(Stack_Mem&nbsp;+&nbsp;USR_Stack_Size)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,&nbsp;=&nbsp;(Heap_Mem&nbsp;+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Heap_Size)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
 楼主| avocationA 发表于 2008-9-24 22:08 | 显示全部楼层

函数__user_initial_stackheap翻译 (转)

函数__user_initial_stackheap翻译&nbsp;<br />发表于&nbsp;2008-7-25&nbsp;23:33:08&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天被这些库函数郁闷了,翻出帮助文档,索性就翻译了点,提供给像我这样迷惑的人参考,俺英文水平很有限,见谅!另外格式为txt文本,复制粘贴即可解决。<br /><br />__user_initial_stackheap&nbsp;库函数用法翻译<br />__user_initial_stackheap返回初始化堆和栈的位置。<br />RVCT&nbsp;V2.X及其更早的版本中__user_initial_stackheap默认使用的是符号|Image$$ZI$$Limit|的值。当使用分散<br />加载文件的时候这个符号不会产生。如果你使用分散加载文件,那么你需要重新执行__user_initial_stackheap<br />函数,不然链接会失败。<br /><br />在RVCT&nbsp;V3.X中__user_initial_stackheap的功能得到了加强,即使你使用分散加载文件也不需要你重新执行<br />__user_initial_stackheap函数。函数会根据你的分散加载文件的描述选择正确的功能函数段。<br /><br />注意:如果你重新执行__user_initial_stackheap函数,这将忽略所有的库函数的执行。这就使得存在的应用程序不<br />需要修改。<br />语法:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__valu_in_regs&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;__initial_stackheap&nbsp;&nbsp;&nbsp;&nbsp;__user_initial_stackheap(unsinged&nbsp;R0,<br />&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;&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;&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;unsigned&nbsp;SP,<br />&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;&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;&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;unsgined&nbsp;R2)<br /><br />用法:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__user_initial_stackheap&nbsp;返回这些值:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;堆基址(heap&nbsp;base)&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;---&gt&nbsp;RO<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;栈基址(stack&nbsp;base,一般为栈的最高地址)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;---&gt&nbsp;R1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;堆顶(heap&nbsp;limit)&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;---&gt&nbsp;R2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;栈顶(stack&nbsp;limit)&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;---&gt&nbsp;R3<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果这个函数被重新执行,那么必须满足以下条件:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;栈的使用不能超过88字节。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;R12(ip)不能被破坏。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;堆要以8字节方式对齐(ALIGN&nbsp;=&nbsp;3)。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认的一段模式中R2,R3将被忽略,R0,R1间的存储空间将全部用来作为堆空间。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果使用二段模式那么堆和栈的空间将分别受R2,R3的限制。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在rt_misc.h中__user_initial_stackheap的定义是这样的:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;__initial_stackheap&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;heap_base,&nbsp;stack_base,&nbsp;heap_limit,&nbsp;stack_limit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于满递减堆栈的原因,stack_base的值比栈的最高地址要高出1个栈容量。<br /><br /><br />返回:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R1,R2,R3中的返回值是由你使用的一段存储模式还是二段存储模式决定。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;一段模式中R1比R0大。R2和R3被忽略了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;二段模式中R0和R2用来初始化堆,R1和R3用来初始化栈。R2&nbsp;&gt=&nbsp;R0,&nbsp;R3&nbsp;&lt&nbsp;R1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┏━━━┳━━━┓&lt-----&nbsp;R1&nbsp;-----&gt┏━━━┳━━━┓&lt---&nbsp;HIGH&nbsp;ADDR<br />&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;┃&nbsp;&nbsp;&nbsp;&nbsp;stack_base&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;│&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃<br />&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;┃&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;┃<br />&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;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;stacks&nbsp;&nbsp;&nbsp;&nbsp;┃<br />&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;┃&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;┃<br />&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;┃&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;┃<br />&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;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R3&nbsp;-----&gt┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┻&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃<br />&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;┃&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;&nbsp;&nbsp;┃<br />&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;┃&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;&nbsp;&nbsp;┃<br />&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;┃&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;&nbsp;&nbsp;┃<br />&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;┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2&nbsp;-----&gt┃&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┳&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃<br />&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;┃&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;┃<br />&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;┃&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;┃<br />&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;┃&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;┃<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┃&nbsp;&nbsp;&nbsp;&nbsp;heaps&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;heaps&nbsp;&nbsp;&nbsp;&nbsp;┃<br />&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;┃&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;┃<br />&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;┃&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;┃<br />&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;┃&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;┃<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;┗━━━┻━━━┛&lt-----&nbsp;R0&nbsp;-----&gt┗━━━┻━━━┛&lt---&nbsp;LOW&nbsp;ADDR<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_use_one_memory_region&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_use_two_memory_region<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用分散加载文件:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认情况下__user_initial_stackhep()使用的是符号|Image$$ZI$$limit|的值。这个符号在用户使<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用分散加载文件时不会产生。然而,C库提供了比较折中的方法:利用分散加载文件中的一些信息来<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;执行这个函数。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你重新执行__user_initial_stackhep()函数,那么其他的库的执行将被忽略。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择使用一段存储模式:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义一段特殊的执行域在你的分散加载文件中。使用这种符号:ARM_LIB_STACKHEAP,并使用EMPTY<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样库管理器就选择了一个把这个域当作堆和栈合并在一起的__user_initial_stackhep()函数。在<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个函数中使用了Image$$ARM_LIB_STACKHEAP$$Base和Image$$ARM_LIB_STACKHEAP$$ZI$$Limit符号<br />&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 />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义两个特殊的执行域再你的分散加载文件中。使用这两种符号:ARM_LIB_STACK,&nbsp;ARM_LIB_HEAP。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并且两个段都要使用EMPTY属性。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样库管理器就会选择使用符号:Image$$ARM_LIB_HEAP$$Base、<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image$$ARM_LIB_STACK$$ZI$$ZI$$limit、<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image$$ARM_LIB_STACK$$Base<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Image$$ARM_LIB_STACK$$ZI$$Limit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的__user_initial_stackhep()函数。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例子:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FLASH_LOAD&nbsp;0x0000&nbsp;0x00200000<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VECTORS&nbsp;+0&nbsp;0x400<br />&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;&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;*&nbsp;(:gdef:__vectab_stack_and_reset,&nbsp;+FIRST)<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;其他域可以放在这里<br />&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 /><br />&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;最高256&nbsp;异常深度&nbsp;(256*4bytes&nbsp;==&nbsp;1024&nbsp;==&nbsp;0x400)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CODE&nbsp;0x400&nbsp;FIXED<br />&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;&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;*&nbsp;(+RO)<br />&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 /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;0x20000000&nbsp;0x00200000<br />&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;&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;*&nbsp;(+RW,&nbsp;+ZI)<br />&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 /><br />&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;1MB&nbsp;,向高地址生长<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM_LIB_HEAP&nbsp;0x20100000&nbsp;EMPTY&nbsp;0x100000-0x8000<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&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;2MB&nbsp;RAM的最高地址处<br />&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;向低地址生长,空间为32KB<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ARM_LIB_STACK&nbsp;0x20200000&nbsp;EMPTY&nbsp;-&nbsp;0x8000<br />&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;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

123

主题

934

帖子

0

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