启动代码(东北大学嵌入式课件).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《启动代码(东北大学嵌入式课件).ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 启动 代码 东北大学 嵌入式 课件
- 资源描述:
-
1、ARM 应用系统设计启动代码佘黎煌东北大学信息科学与工程学院电子信息工程研究所0 x0000 00000 xFFFF FFFF用户程序中断服务程序异常向量表1.正在执行用户程序;2.外部中断0发生中断;3.AIC硬件将中断服务程序地址装入AIC_IPER寄存器;4.程序跳转至异常向量表中IRQ入口0 x0018处;5.执行指令跳转至AIC_IPER寄存器中的中断服务地址;6.中断服务程序执行完毕,返回被中断的用户程序继续执行被中断的代码。n图示IRQ中断的发生过程Vector.s(五种异常处理C函数)nAIC_IPEREQU0 xFFF8210C; Interrupt priority enc
2、oding register nAIC_EOSCREQU0 xFFF82130; End of service command register nIMPORTReset_Handler;init.snIMPORT Undefined_HandlernIMPORTSWI_HandlernIMPORTPrefetch_Handler nIMPORTAbort_HandlerVector.s (中断处理C函数)n nIMPORTWDT_Handler; Watch Dog Timer InterruptnIMPORTnIRQ0_Handler; External Interrupt 0nIMPOR
3、TnIRQ1_Handler; External Interrupt 1nIMPORTnIRQ2_Handler; External Interrupt 2nIMPORTnIRQ3_Handler; External Interrupt 3nIMPORTAC97_Handler; AC97 InterruptnIMPORTLCD_Handler; LCD Controller InterruptnIMPORTRTC_Handler; RTC Controller InterruptnIMPORTUART0_Handler; UART 0 InterruptnIMPORTUART1_Handle
4、r; UART 1 InterruptnIMPORTUART2_Handler; UART 2 InterruptnIMPORTUART3_Handler; UART 3 InterruptnIMPORTTIMER0_Handler; Timer Interrupt 0Vector.s (中断处理C函数)nIMPORTTIMER1_Handler; Timer Interrupt 1nIMPORTUSBH0_Handler; USB Host Interrupt 0nIMPORTUSBH1_Handler; USB Host Interrupt 1nIMPORTEMCTX_Handler; E
5、MC TX InterruptnIMPORTEMCRX_Handler; EMC RX InterruptnIMPORTGDMA0_Handler; GDMA Channel Interrupt 0nIMPORTGDMA1_Handler; GDMA Channel Interrupt 1nIMPORTSDIO_Handler; SDIO InterruptnIMPORTUSBD_Handler; USB Device InterruptnIMPORTSC0_Handler; SmartCard Interrupt 0nIMPORTSC1_Handler; SmartCard Interrup
6、t 1nIMPORTI2C0_Handler; I2C Interrupt 0nIMPORTI2C1_Handler; I2C Interrupt 1nIMPORTSSP_Handler; SPI InterruptnIMPORTPWM_Handler; PWM InterruptnIMPORTKPI_Handler; KPI InterruptnIMPORTPS2_Handler; PS2 InterruptnIMPORTIRQ45_Handler; IRQ45 Interrupt中断向量表的定义(vector.s)nAREA Vect, CODE, READONLYn ENTRYnstar
7、t n BReset_Handlern BUndefined_Addr n BSWI_Addrn BPrefetch_Addrn BAbort_Addrn B. n BIRQ_Addrn BFIQ_Addr异常的处理(vector.s)nUndefined_Addr ;未定义异常n STMFDSP!,R0-R12,lrn BLUndefined_Handlern LDMFDSP!,R0-R12,LR n SUBSPC, LR, #0 nSWI_Addr ;软件中断(管理模式)n STMFDSP!,R0-R12,lrn BLSWI_Handlern LDMFDSP!,R0-R12,LR n SU
8、BSPC, LR, #0nPrefetch_Addr ;预取指令异常n STMFDSP!,R0-R12,lrn BLPrefetch_Handlern LDMFDSP!,R0-R12,LR n SUBSPC, LR, #4nAbort_Addr ;中止异常n STMFDSP!,R0-R12,lrn BLAbort_Handlern LDMFDSP!,R0-R12,LR n SUBSPC, LR, #8异常的处理(vector.s)nIRQ_Addr ;IRQ异常n STMFDSP!,R0-R12,lr n LDRR0,=ISR_BASE n LDRR1,=AIC_IPERn LDRR2,R1n
9、 LDRPC,R2,R0 n nFIQ_Addr ;FIQ异常n STMFDSP!,R0-R12,lr n LDRR0,=ISR_BASE n LDRR1,=AIC_IPERn LDRR2,R1n LDRPC,R2,R0 中断向量表(vector.s)n ;interrupt service routine Entry_address definitionnISR_BASEnDCD_ISR_FAKE nDCD_ISR_INT1 nDCD_ISR_INT2 nDCD_ISR_INT3 nDCD_ISR_INT4 nDCD_ISR_INT5 nDCD_ISR_INT6nDCD_ISR_INT7nD
10、CD_ISR_INT8nDCD_ISR_INT9nDCD_ISR_INT10nDCD_ISR_INT11nDCD_ISR_INT12nDCD_ISR_INT13nDCD_ISR_INT14nDCD_ISR_INT15nDCD_ISR_INT16nDCD_ISR_INT17nDCD_ISR_INT18nDCD_ISR_INT19nDCD_ISR_INT20nDCD_ISR_INT21nDCD_ISR_INT22nDCD_ISR_INT23nDCD_ISR_INT24nDCD_ISR_INT25nDCD_ISR_INT26nDCD_ISR_INT27nDCD_ISR_INT28nDCD_ISR_I
11、NT29 nDCD_ISR_INT30nDCD_ISR_INT31 中断函数的设计(vector.s)n_ISR_FAKEn LDRR1,=AIC_EOSCRn STRR0,R1n LDMFD SP!,R0-R12,LRn SUBSPC, LR,#4n_ISR_INT1n BLWDT_Handler ; Watch Dog Timer Interruptn LDRR1,=AIC_EOSCRn STRR0,R1n LDMFD SP!,R0-R12,LR n SUBSPC, LR,#4 n_ISR_INT2n BLnIRQ0_Handler ; External Interrupt 0n LDRR
12、1,=AIC_EOSCRn STRR0,R1n LDMFD SP!,R0-R12,LR n SUBSPC, LR,#4 void nIRQ0_Handler(void)(init.s)启动代码(变量定义部分)nMode_USR EQU 0 x10nMode_FIQ EQU 0 x11nMode_IRQ EQU 0 x12nMode_SVC EQU 0 x13nMode_ABT EQU 0 x17nMode_UNDEF EQU 0 x1BnMode_SYS EQU 0 x1FnI_Bit EQU 0 x80 ; when I bit is set, IRQ is disablednF_Bit E
13、QU 0 x40 ; when F bit is set, FIQ is disablednRAM_Limit EQU 0 xffe02000 ; For unexpanded W90P710 boardnUND_Stack EQU RAM_LimitnAbort_Stack EQU RAM_Limit-256nIRQ_Stack EQU RAM_Limit-512 ; followed by IRQ stacknFIQ_Stack EQU RAM_Limit-768 ; followed by IRQ stacknSVC_Stack EQU RAM_Limit-1024 ; SVC stac
14、k at top of memorynUSR_Stack EQU 0 xffe01000 ; followed by USR(SYS) stack(1)初始化流程(init.s)n(禁止所有中断)nAREA Init, CODE, READONLYn ENTRYn EXPORTReset_HandlernReset_HandlernMRSr0, CPSRnORR r0, r0,#I_Bit nORRr0, r0,#F_BitnMSRCPSR_c, r0初始化流程(init.s)n LDRr0, =AIC_MDCR ;关闭所有中断源n LDRr1, =0 x7FFFEn STRr1, r0初始化
15、流程(init.s)n LDR r0,=REG_WTCR ;Disable watch dognMOV r1,#0nSTR r1,r0nnLDR r0,=REG_CAHCNF n;LDR r1,=0 x7 ;Enable write buffer and I/D_cachenMOV r1,#0 ;Disable write buffer and I/D_cache初始化流程(init.s)n IF RELEASEn;*n;Initalize the memoryn;FLASH4 M(base address 0 x00000000)n;SDRAM16M(base address 0 x0100
16、0000)n;*n LDR r0,=MemoryInitn LDMIA r0,r1-r6n LDR r0,=EBI_Ctrln STMIA r0,r1-r6初始化流程(init.s)n;*n;Self copy from FLASH to SDRAMn;*n LDRr0, =|Image$RO$Base| n LDRr1, =|Image$RO$Limit| n LDRr2, =|Image$RW$Base| n LDRr3, =|Image$RW$Limit| n SUB r1, r1, r0n SUBr3, r3, r2n ADDr1, r1, r3n LDRr2, =0 x1000000
17、 ;16MnSelfCopyn LDRr3, r0, #4n STRr3, r2, #4n SUBSr1, r1, #4n BNESelfCopyn ENDIF 初始化流程(init.s)n在一个简单的image里面:Image$RO$Base:是RO段的执行地址开始和装载地址开始,由-RO-BASE这个参数指定的Image$RO$Limit:是RO段的装载地址结束的后一个地址,也就是RW的装载地址的开始。n没运行:没运行:flash中的中的ro段是段是ro-base指定的地址指定的地址开始,等开始,等ro段完了后面紧接着就是段完了后面紧接着就是rw段段运行时:flash中的ro段地址没有动,
18、还是Image$RO$BaseImage$RO$limit-1,原来flash中的rw段移到了sdram中,地址为Image$RW$BaseImage$ZI$Base初始化流程(init.s)n;*n;remap the memoryn; FLASH 4 M(base address 0 x7F000000)n; SDRAM 16M(base address 0 x00000000)n;*n LDR r0,=MemoryRemapn LDMIA r0,r1-r6n LDR r0,=EBI_Ctrln STMIA r0,r1-r6(2)初始化流程(初始化各模式堆栈)n MSR CPSR_c,#M
19、ode_UNDEF:OR:I_Bit:OR:F_Bitn LDR SP, =UND_Stackn MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit n LDR SP, =Abort_Stackn MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bitn LDR SP, =IRQ_Stackn MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bitn LDR SP, =FIQ_Stackn MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bitn LDR SP, =SVC_Stack n MSR
20、 CPSR_c, #Mode_SYS:OR:I_Bit:OR:F_Bitn LDR SP, =USR_Stack(3)初始化流程(使能中断)nMSRCPSR_c, #Mode_USRnIMPORTMainnBMain nB.STMIA,LDMIA块拷贝 EXPORT MydataCopyMydataCopy MOVS R3,R2,LSL #3 BEQ copywords STMFD sp!,r4-r11Octcopy LDMIA R0!,R4-R11 STMIA R1!,R4-R11 SUBS R3,R3,#1 BNE Octcopy LDMFD sp!,r4-r11copywords AND
展开阅读全文