您好,欢迎访问三七文档
2440初始化程序;*****所用到的寄存器地址设置*****pWTCONEQU0x53000000;看门狗定时器口地址pLOCKTIMEEQU0x4c000000;锁定时间计数值寄存器地址pCLKDIVNEQU0x4c000014;时钟分频控制寄存器pUPLLCONEQU0x4c000008;UPLL控制寄存器pMPLLCONEQU0x4c000004;MPLL控制寄存器pBWSCONEQU0x48000000;设置数据总线宽度与等待状态控制寄存器地址pSRCPNDEQU0x4a000000;中断源悬挂寄存器pSUBSRCPNDEQU0x4a000018;子中断源悬挂寄存器pINTPNDEQU0x4a000010;中断悬挂寄存器pINTMODEQU0x4a000004;中断模式寄存器地址pINTMSKEQU0x4a000008;中断屏蔽寄存器地址pINTSUBMSKEQU0x4a00001c;子中断状态源寄存器地址pINTOFFSETEQU0x4a000014;中断源偏移地址寄存器地址pGPHCONEQU0x56000070;GPIOH口控制寄存器地址pGPHUPEQU0x56000078;H口上拉电阻控制寄存器地址pUMCON0EQU0x5000000c;UART0的MODEM控制寄存器pULCON0EQU0x50000000;UART0线路控制寄存器pUCON0EQU0x50000004;UART0控制寄存器pUBRDIV0EQU0x50000028;UART0波特率因子寄存器pUTRSTAT0EQU0x50000010;UART0状态寄存器pUTXH0EQU0x50000020;小端模式:发送寄存器pURXH0EQU0x50000024;小端模式:接收寄存器;*****所用到的变量值初始化*****DATA_AREAEQU0x33FFFF00;异常二级向量表及IRQ中断二级向量表起始地址vCLKDIVNEQU0x5;时钟分频控制寄存器值,DIVN_UPLL=0b,HDIVN=10b,PDIVN=01bvUPLLCONEQU0x00038022;UPLL控制寄存器值,Fin=12M,Uclk=48M,MDIV=0x38,PDIV=2,SDIV=2vMPLLCONEQU0x0005c011;MPLL控制寄存器值,Fin=12M,Fclk=400M,MDIV=0x5c,PDIV=1,SDIV=1;*****以下为各存储器BANK数据宽度设置数据*****DW16EQU(0x1)DW32EQU(0x2)B1_BWSCONEQU(DW16);AMDflash(AM29LV160DB),16-bit,fornCS1B2_BWSCONEQU(DW16);PCMCIA(PD6710),16-bitB3_BWSCONEQU(DW16);Ethernet(CS8900),16-bitB4_BWSCONEQU(DW32);IntelStrata(28F128),32-bit,fornCS4B5_BWSCONEQU(DW16);A400/A410Ext,16-bitB6_BWSCONEQU(DW32);SDRAM(K4S561632C)32MBx2,32-bitB7_BWSCONEQU(DW32);N.C.;*****Bank0存储器参数区,对应后面的SMRDATA设置数据内具体值*****B0_TacsEQU0x3;0clkB0_TcosEQU0x3;0clkB0_TaccEQU0x7;14clkB0_TcohEQU0x3;0clkB0_TahEQU0x3;0clkB0_TacpEQU0x1B0_PMCEQU0x0;normal;*****Bank4存储器参数区NB4_TacsEQU0x1;0;0clkB4_TcosEQU0x1;0;0clkB4_TaccEQU0x6;7;14clkB4_TcohEQU0x1;0;0clkB4_TahEQU0x1;0;0clkB4_TacpEQU0x0B4_PMCEQU0x0;normal;*****Bank6SDRAM存储器参数区B6_MTEQU0x3;SDRAMB6_TrcdEQU0x1;3clkB6_SCANEQU0x1;9bit;*****SDRAM动态存储器所需的刷新参数区REFENEQU0x1;RefreshenableTREFMDEQU0x0;CBR(CASbeforeRAS)/AutorefreshTrpEQU0x1;3clkTsrcEQU0x1;5clkTrc=Trp(3)+Tsrc(5)=8clockTchrEQU0x2;3clkREFCNTEQU1268;1463;1268;HCLK=105Mhz,(2048+1-7.81*100);75M-1463;*******以下数据为CPSR中有关工作模式的设置位信息********USERMODEEQU0x10IRQMODEEQU0x12SVCMODEEQU0x13MODEMASKEQU0x1fNOINTEQU0xc0;*****以下数据为管理模式、IRQ模式及用户模式堆栈指针数据******UserStackEQU0x33ff4800SVCStackEQU0x33ff5800IRQStackEQU0x33ff7000;*******以下为代码区********AREAInit,CODE,READONLYENTRYEXPORT__ENTRY__ENTRYResetEntryb_reset;跳转到复位异常处理程序_reset去运行b.;死循环,为未定义指令异常预留b.;死循环,为软件中断异常预留b.;死循环,为指令预取中止异常预留b.;死循环,为数据访问中止异常预留b.;死循环,为ARM公司预留bIsrIRQ;跳转到中断源判别程序IsrIRQ去运行b.;死循环,为快中断FIQ预留;*****以下为SDRAM参数设置,包括数据宽度,刷新模式和频率SMRDATADCD(0+(B1_BWSCON4)+(B2_BWSCON8)+(B3_BWSCON12)+(B4_BWSCON16)+(B5_BWSCON20)+(B6_BWSCON24)+(B7_BWSCON28))DCD((B0_Tacs13)+(B0_Tcos11)+(B0_Tacc8)+(B0_Tcoh6)+(B0_Tah4)+(B0_Tacp2)+(B0_PMC));GCS0DCD0DCD0DCD0;GCS3DCD((B4_Tacs13)+(B4_Tcos11)+(B4_Tacc8)+(B4_Tcoh6)+(B4_Tah4)+(B4_Tacp2)+(B4_PMC));GCS4DCD0DCD((B6_MT15)+(B6_Trcd2)+(B6_SCAN));GCS6DCD0DCD((REFEN23)+(TREFMD22)+(Trp20)+(Tsrc18)+(Tchr16)+REFCNT)DCD0x32;SCLK节能模式,BANKSIZE128M/128MDCD0x30;MRSR6CL=3clkDCD0x30;MRSR7CL=3clk;********以下IsrIRQ为中断源判别程序,作用是读取INTOFFSET内容并计算出所寻址的中断向量在;二级向量表内的偏移地址,然后与IRQ二级向量表起始地址相加生成向量表地址,将地址内的向量送入PC,;进入中断处理程序运行。*********IsrIRQsubsp,sp,#4;在堆栈为最终索引出的二级向量表内容(中断处理程序地址)预留字空间stmfdsp!,{r8-r9};压栈保存r8,r9内容ldrr9,=pINTOFFSETldrr9,[r9];将中断偏移值寄存器INTOFFSET内容读到r9ldrr8,=HandleEINT0;将二级向量表起始地址送r8(本实验HandleEINT0=0x33FF_FF00)addr8,r8,r9,lsl#2;r9=INTOFFSET值×4=二级向量表偏移地址,r8=r8+r9=向量地址ldrr8,[r8];r8=向量内容(中断处理程序地址)strr8,[sp,#8];先将向量内容存入前面预留的堆栈字单元ldmfdsp!,{r8-r9,pc};从堆栈恢复r8和r9,同时将向量内容(中断处理程序地址)送入PC;*****以下为复位异常处理程序,主要完成系统初始化******_reset;复位异常处理程序,是开机或复位后首先运行的程序ldrr0,=pWTCON;看门狗定时器ldrr1,=0x0;关闭看门狗定时器strr1,[r0]ldrr0,=pINTMSK;中断屏蔽寄存器,32位有效位,1=关闭,0=开通。ldrr1,=0xffffffff;关闭所有一级中断请求。strr1,[r0]ldrr0,=pINTSUBMSK;子中断屏蔽寄存器,0~14为有效设置位,1=关闭,0=开通。ldrr1,=0x7fff;关闭所有子中断请求strr1,[r0]ldrr0,=pLOCKTIME;设置PLL锁存时间ldrr1,=0x0fffffff;0~15位=MPLL锁定时间,16~31位=UPLL锁定时间。strr1,[r0]ldrr0,=pCLKDIVN;时钟分频控制寄存器ldrr1,=vCLKDIVN;vCLKDIVN=0x05。UCLK=UPLL,HCLK=FCLK/4,PCLK=HCLK/2=50Mstrr1,[r0]ldrr0,=pUPLLCON;设置MPLLldrr1,=vUPLLCON;Fin=12.0MHz,UCLK=48MHzstrr1,[r0]nop;注:S3C2440要求对UPLL设置后至少需要延时7个时钟周期nopnopnopnopnopnopldrr0,=pMPLLCON;设置MPLLldrr1,=vMPLLCON;Fin=12.0MHz,FCLK=400MHzstrr1,[r0];****设置SDRAM存储器参数,最多13个,占52字节adrlr0,SMRDATA;SDRAM参数区起始地址ldrr1,=pBWSCON;特殊功能寄存器区内存储器参数区首地址=0x48000000addr2,r0,#52;SMRDATA参数区结尾地址0ldrr3,[r0],#4;将DRAM参数区的数据逐个传送到0x48000000起始的特殊功能寄存器区strr3,[r1],#4cmpr2,r0bne%B0;跳转到后向(Back)0标号处运行;********初始化可能用到的不同工作模式下的堆栈区,即设置它们的堆栈指针********InitStacks;初始化可能用到的工作模式下的堆栈区mrsr0,cpsrbicr0,r0,#MODEMASK|NOINT;清0CPSR内的工作模式位,以及I、F位orrr1,r0,#IRQMODEmsrcpsr_cxsf,r1;IRQ模式ldrsp,=IRQStack;IRQ堆栈指针=0x33FF_7000orrr1,r0,#USERMODEmsrcpsr_cxsf,r1;用户模式ldrsp,=UserStack;用户模式堆栈指针=0x33FF_4800ldrpc,=Main;此后程序将跳转到SDRAM中去运行LTORG
本文标题:2440初始化程序
链接地址:https://www.777doc.com/doc-2913399 .html