




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Startup.s文件详解 没用1分满分10分已有0人评价选择您的评价10-非常有用没用1分满分10分感谢您的评价! 已有0人评价0有用0没用startup.s Mode_USR EQU 010 ; 定义用户模式标志代码 Mode_FIQ EQU 011 ; 定义快速中断模式标志代码 Mode_IRQ EQU 012 ; 定义普通中断模式标志代码 Mode_SVC EQU 013 ; 定义治理模式标志代码 Mode_ABT EQU 017 ; 定义中断模式标志代码 Mode_UND EQU 01B ; 定义未定义模式标志代码 Mode_SYS EQU 01F ; 定义系统模式(特权模式)标志代码 ; I_Bit EQU 080 ; 设置普通中断是否是有效 F_Bit EQU 040 ; 设置快速中断是否是有效 ;/ 堆栈大小设置(字节) ;/ 未定义模式堆栈大小 ;/ 治理模式堆栈大小 ;/ 中断模式堆栈大小 ;/ 快速中断模式堆栈大小 ;/ 普通中断模式堆栈大小 ;/ 用户模式堆栈大小 ;/ UND_Stack_Size EQU 000000000 ; 定义未定义模式堆栈大小 SVC_Stack_Size EQU 000000008 ; 定义治理模式堆栈大小 ABT_Stack_Size EQU 000000000 ; 定义中断模式堆栈大小 FIQ_Stack_Size EQU 000000000 ; 定义快速中断模式堆栈大小 IRQ_Stack_Size EQU 000000080 ; 定义普通中断模式堆栈大小 USR_Stack_Size EQU 000000400 ; 定义用户模式堆栈大小 Stack_Size EQU (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size) ; 将所有的堆栈大小进行相加,得到总堆栈大小 AREA STACK, NOINIT, READWRITE, ALIGN=3 ; 声明堆栈代码段(不初始化内存,可读写,字节对齐) ; Stack_Mem SPACE Stack_Size ; 申请堆栈内存空间 Stack_Top EQU Stack_Mem + Stack_Size ; 定义堆栈开始地址(最大地址,堆栈向下访问) ;/ 堆空间大小设置(字节) ;/ 堆空间大小 ;/ Heap_Size EQU 000000000 ; 定义堆空间大小(配合最后的动态内存申请使用) AREA HEAP, NOINIT, READWRITE, ALIGN=3 ; 声明堆代码段(不初始化内存,可读写,字节对齐) Heap_Mem SPACE Heap_Size ; 申请堆的内存空间 ; VPBDIV definitions VPBDIV EQU 0xE01FC100 ; 定义VPBDIV的物理地址 ;/ VPBDIV 设置 ;/ Peripheral Bus Clock Rate ;/ VPBDIV: VPB 时钟设置 ;/ VPB 时钟 = CPU 时钟 / 4 ;/ VPB 时钟 = CPU 时钟 ;/ VPB 时钟 = CPU 时钟 / 2 ;/ XCLKDIV: XCLK 引脚设置 ;/ XCLK 引脚 = CPU 时钟 / 4 ;/ XCLK 引脚 = CPU 时钟 ;/ XCLK 引脚 = CPU 时钟 / 2 ;/ VPBDIV_SETUP EQU 0 ; 定义是否是设置VPBDIV(后边程序中作为处理标志使用),0表示下面对VPBDIV值的设定无效,1表示设置有效 VPBDIV_Val EQU 000000000 ; 在VPBDIV_SETUP有效时,定义VPBDIV的值 ; 00:总线为CPU的1/4 | 01:相同 | 10:1/2 | 11:无效设置 ; Phase Locked Loop (PLL) definitions PLL_BASE EQU 0xE01FC080 ; PLL 控制寄存器的基地址 PLLCON_OFS EQU 000 ; PLLCON 对应基地址的增量 PLLCFG_OFS EQU 004 ; PLLCFG 对应基地址的增量 PLLSTAT_OFS EQU 008 ; PLLSTAT 对应基地址的增量 TT PLLFEED_OFS EQU 00C ; PLLFEED 对应基地址的增量 PLLCON_PLLE EQU (10) ; PLL 使能位(置位时使能PLL) PLLCON_PLLC EQU (11) ; PLL 连接位(置位时连接PLL) PLLCFG_MSEL EQU (01F0) ; PLL 倍频器值 PLLCFG_PSEL EQU (0035) ; PLL 分频器值 PLLSTAT_PLOCK EQU (110) ; PLL 锁定状态指点(0:未锁定;1:锁定到提定频率) ;/ PLL 设置 ;/ MSEL: PLL倍频设置 ;/ ;/ M Value ;/ PSEL: PLL分频设置 ;/ 1 2 4 8 ;/ P Value ;/ PLL_SETUP EQU 1 ; PLL 设置程序判定标志 PLLCFG_Val EQU 000000024 ; PLLCFG 的设置值(10.0100:倍频5,分频4) ; Memory Accelerator Module (MAM) definitions MAM_BASE EQU 0xE01FC000 ; MAM 存储加速模块基地址 MAMCR_OFS EQU 000 ; MAMCR 对应基地址的增量 MAMTIM_OFS EQU 004 ; MAMTIM 对应基地址的增量 ;/ MAM 存储加速模块设置 ;/ MAM 控制寄存器 ;/ 全部制止 ;/ 部份使能 ;/ 全部使能 ;/ 保存 ;/ MAM 定时寄存器 ;/ 保存 1 2 3 ;/ 4 5 6 7 ;/ 保存 ;/ MAM_SETUP EQU 1 ; MAM 设置程序判定标志 MAMCR_Val EQU 000000002 ; MAMCR 设置值 MAMTIM_Val EQU 000000004 ; MAMTIM 设置值 ; External Memory Controller (EMC) definitions EMC_BASE EQU 0xFFE00000 ; EMC 外部存储控制器基地址 BCFG0_OFS EQU 000 ; BCFG0 对应基地址的增量 BCFG1_OFS EQU 004 ; BCFG1 对应基地址的增量 BCFG2_OFS EQU 008 ; BCFG2 对应基地址的增量 BCFG3_OFS EQU 00C ; BCFG3 对应基地址的增量 ;/ 外部存储控制器(EMC) EMC_SETUP EQU 0 ;/ 存储器组0的配置寄存器(BCFG0) ;/ IDCY: 空闲周期数 ;/ WST1: 读访问长度 ;/ WST2: 写访问长度 ;/ RBLE: 读字节辨别 ;/ WP: 是否是为写保护 ;/ BM: 是否是使用Burst ROM ;/ MW: 数据总线宽度 8-bit 16-bit ;/ 32-bit 保存 ;/ BCFG0_SETUP EQU 0 BCFG0_Val EQU 00000FBEF ;/ 存储器组1的配置寄存器(BCFG1) ;/ IDCY: 空闲周期数 ;/ WST1: 读访问长度 ;/ WST2: 写访问长度 ;/ RBLE: 读字节辨别 ;/ WP: 是否是为写保护 ;/ BM: 是否是使用Burst ROM ;/ MW: 数据总线宽度 8-bit 16-bit ;/ 32-bit 保存 ;/ BCFG1_SETUP EQU 0 BCFG1_Val EQU 00000FBEF ;/ 存储器组2的配置寄存器(BCFG2) ;/ IDCY: 空闲周期数 ;/ WST1: 读访问长度 ;/ WST2: 写访问长度 ;/ RBLE: 读字节辨别 ;/ WP: 是否是为写保护 ;/ BM: 是否是使用Burst ROM ;/ MW: 数据总线宽度 8-bit 16-bit ;/ 32-bit 保存 ;/ BCFG2_SETUP EQU 0 BCFG2_Val EQU 00000FBEF ;/ 存储器组3的配置寄存器(BCFG3) ;/ IDCY: 空闲周期数 ;/ WST1: 读访问长度 ;/ WST2: 写访问长度 ;/ RBLE: 读字节辨别 ;/ WP: 是否是为写保护 ;/ BM: 是否是使用Burst ROM ;/ MW: 数据总线宽度 8-bit 16-bit ;/ 32-bit 保存 ;/ BCFG3_SETUP EQU 0 BCFG3_Val EQU 00000FBEF ;/ End of EMC ; 引脚功能定义(加进功能) PINSEL0 EQU 0xE002C000 ; PINSEL0 定义物理地址 PINSEL1 EQU 0xE002C004 ; PINSEL1 定义物理地址 PINSEL2 EQU 0xE002C014 ; PINSEL2 定义物理地址 ;/ 引脚功能定义(PINSEL) PINSEL_SETUP EQU 0 ;/ PINSEL0 设置 ;/ PINSEL0 ;/ P0.0 功能设置 ;/ GPIO ;/ TxD(UART0) ;/ PWM1 ;/ 保存 ;/ P0.1 功能设置 ;/ GPIO ;/ RxD(UART0) ;/ PWM3 ;/ EINT0 ;/ P0.2 功能设置 ;/ GPIO ;/ SCL(I2C) ;/ 捕捉0.0(TIMER0) ;/ 保存 ;/ P0.3 功能设置 ;/ GPIO ;/ SDA(I2C) ;/ 匹配0.0(TIMER0) ;/ EINT1 ;/ P0.4 功能设置 ;/ GPIO ;/ SCK(SPI0) ;/ 捕捉0.1(TIMER0) ;/ 保存 ;/ P0.5 功能设置 ;/ GPIO ;/ MISO(SPI0) ;/ 匹配0.1(TIMER0) ;/ 保存 ;/ P0.6 功能设置 ;/ GPIO ;/ MOSI(SPI0) ;/ 捕捉0.2(TIMER0) ;/ 保存 ;/ P0.7 功能设置 ;/ GPIO ;/ SSEL(SPI0) ;/ PWN2 ;/ EINT2 ;/ P0.8 功能设置 ;/ GPIO ;/ TxD(UART1) ;/ PWN4 ;/ 保存 ;/ P0.9 功能设置 ;/ GPIO ;/ RxD(UART1) ;/ PWN6 ;/ EINT3 ;/ P0.10 功能设置 ;/ GPIO ;/ RTS(UART1) ;/ 捕捉1.0(TIMER1) ;/ 保存 ;/ P0.11 功能设置 ;/ GPIO ;/ CTS(UART1) ;/ 捕捉1.1(TIMER1) ;/ 保存 ;/ P0.12 功能设置 ;/ GPIO ;/ DSR(UART1) ;/ 匹配1.0(TIMER1) ;/ 保存 ;/ P0.13 功能设置 ;/ GPIO ;/ DTR(UART1) ;/ 匹配1.1(TIMER1) ;/ 保存 ;/ P0.14 功能设置 ;/ GPIO ;/ CD(UART1) ;/ EINT1 ;/ 保存 ;/ P0.15 功能设置 ;/ GPIO ;/ RI(UART1) ;/ EINT2 ;/ 保存 ;/ PINSEL0_SETUP EQU 0 PINSEL0_Val EQU 000000000 ; 写进的数值 ;/ PINSEL1 设置 ;/ PINSEL1 ;/ P0.16 功能设置 ;/ GPIO ;/ EINT0 ;/ 匹配0.2(TIMER0) ;/ 保存 ;/ P0.17 功能设置 ;/ GPIO ;/ 捕捉1.2(TIMER1) ;/ SCK(SPI1) ;/ 匹配1.2(TIMER1) ;/ P0.18 功能设置 ;/ GPIO ;/ 捕捉1.3(TIMER1) ;/ MISO(SPI1) ;/ 匹配1.3(TIMER1) ;/ P0.19 功能设置 ;/ GPIO ;/ 匹配1.2(TIMER1) ;/ MOSI(SPI1) ;/ 匹配1.3(TIMER1) ;/ P0.20 功能设置 ;/ GPIO ;/ 匹配1.3(TIMER1) ;/ SSLE(SPI1) ;/ EINT3 ;/ P0.21 功能设置 ;/ GPIO ;/ PWN5 ;/ 保存 ;/ 捕捉1.3(TIMER1) ;/ P0.22 功能设置 ;/ GPIO ;/ 保存 ;/ 捕捉0.0(TIMER0) ;/ 匹配0.0(TIMER0) ;/ P0.23 功能设置 ;/ GPIO ;/ P0.24 功能设置 ;/ GPIO ;/ P0.25 功能设置 ;/ GPIO ;/ P0.27 功能设置 ;/ GPIO ;/ AIN0(A/D) ;/ 捕捉0.1(TIMER0) ;/ 匹配0.1(TIMER0) ;/ P0.28 功能设置 ;/ GPIO ;/ AIN1(A/D) ;/ 捕捉0.2(TIMER0) ;/ 匹配0.2(TIMER0) ;/ P0.29 功能设置 ;/ GPIO ;/ AIN2(A/D) ;/ 捕捉0.3(TIMER0) ;/ 匹配0.3(TIMER0) ;/ P0.30 功能设置 ;/ GPIO ;/ AIN3(A/D) ;/ EINT3 ;/ 捕捉0.0(TIMER0) ;/ PINSEL1_SETUP EQU 0 PINSEL1_Val EQU 0 ; 写进的数值 ;/ ;/ PINSEL2 设置 PINSEL2_SETUP EQU 0 ;/ PINSEL2 参数 ;/ ; 外部存储器引脚功能定义 PINSEL2_Val EQU 00E6149E4 ; CS0.3, OE, WE, BLS0.3, ; D0.31, A2.23, JTAG Pins ; 功能说明 PRESERVE8 ; 汇编程序数据 8 字节对齐 ; Area Definition and Entry Point ; Startup Code must be linked first at Address at which it expects to run. AREA RESET, CODE, READONLY ; 声明RESET代码段为只读程序代码 ARM ; ARM 模式运行程序 ; Exception Vectors ; Mapped to Address 0. ; Absolute addressing mode must be used. ; Dummy Handlers are implemented as infinite loops which can be modified. ; 定义中断向量表 Vectors LDR PC, Reset_Addr ; 复位 LDR PC, Undef_Addr ; 未定义指令 LDR PC, SWI_Addr ; 软件中断 LDR PC, PAbt_Addr ; 中断(预取) LDR PC, DAbt_Addr ; 中断(数据) NOP ; 保存 LDR PC, IRQ_Addr ; 普通 LDR PC, PC, #-0x0FF0 ; Vector from VicVectAddr LDR PC, FIQ_Addr ; 快速中断 Reset_Addr DCD Reset_Handler ; 以Reset_Addr为Reset_Handler分配一段字对齐的内存单元 Undef_Addr DCD Undef_Handler ; 注:应当是将CODE映照(复制)到RAM的开始地址 SWI_Addr DCD SWI_Handler PAbt_Addr DCD PAbt_Handler DAbt_Addr DCD DAbt_Handler DCD 0 ; 保存地址 IRQ_Addr DCD IRQ_Handler FIQ_Addr DCD FIQ_Handler Undef_Handler B Undef_Handler ; B为跳转指令| ?自己跳转到自己? SWI_Handler B SWI_Handler PAbt_Handler B PAbt_Handler DAbt_Handler B DAbt_Handler IRQ_Handler B IRQ_Handler FIQ_Handler B FIQ_Handler ; Reset Handler函数开始 EXPORT Reset_Handler ; 定义一个全局函数名变量 Reset_Handler ; IO端口功能设置 IF PINSEL_SETUP 0 IF PINSEL0_SETUP 0 LDR R0, =PINSEL0 LDR R1, =PINSEL0_Val STR R1, R0 ENDIF IF PINSEL1_SETUP 0 LDR R0, =PINSEL1 LDR R1, =PINSEL1_Val STR R1, R0 ENDIF ENDIF ; 设置外部存储器引脚 IF PINSEL2_SETUP 0 LDR R0, =PINSEL2 LDR R1, =PINSEL2_Val STR R1, R0 ENDIF ; 设置外部存储器控制 IF EMC_SETUP 0 LDR R0, =EMC_BASE IF BCFG0_SETUP 0 LDR R1, =BCFG0_Val STR R1, R0, #BCFG0_OFS ENDIF IF BCFG1_SETUP 0 LDR R1, =BCFG1_Val STR R1, R0, #BCFG1_OFS ENDIF IF BCFG2_SETUP 0 LDR R1, =BCFG2_Val STR R1, R0, #BCFG2_OFS ENDIF IF BCFG3_SETUP 0 LDR R1, =BCFG3_Val STR R1, R0, #BCFG3_OFS ENDIF ENDIF ; EMC_SETUP ; 设置 VPBDIV 分频器 IF VPBDIV_SETUP 0 LDR R0, =VPBDIV LDR R1, =VPBDIV_Val STR R1, R0 ENDIF ; 设置 PLL(锁相环) IF PLL_SETUP 0 LDR R0, =PLL_BASE MOV R1, #0xAA MOV R2, #055 ; 设置PLL控制寄存器 MOV R3, #PLLCFG_Val STR R3, R0, #PLLCFG_OFS MOV R3, #PLLCON_PLLE STR R3, R0, #PLLCON_OFS STR R1, R0, #PLLFEED_OFS STR R2, R0, #PLLFEED_OFS ; 等待PLL馈送成功 PLL_Loop LDR R3, R0, #PLLSTAT_OFS ANDS R3, R3, #PLLSTAT_PLOCK BEQ PLL_Loop ; 选择PLL时钟 MOV R3, #(PLLCON_PLLE:OR:PLLCON_PLLC) STR R3, R0, #PLLCON_OFS STR R1, R0, #PLLFEED_OFS STR R2, R0, #PLLFEED_OFS ENDIF ; PLL_SETUP ; 设置 MAM 存储器加速模块 IF MAM_SETUP 0 LDR R0, =MAM_BASE MOV R1, #MAMTIM_Val STR R1, R0, #MAMTIM_OFS MOV R1, #MAMCR_Val STR R1, R0, #MAMCR_OFS ENDIF ; MAM_SETUP ; 内存映照(当中断向量是在内存) MEMMAP EQU 0xE01FC040 ; Memory Mapping Control IF :DEF:REMAP LDR R0, =MEMMAP IF :DEF:EXTMEM_MODE MOV R1, #3 ELIF :DEF:RAM_MODE MOV R1, #2 ELSE MOV R1, #1 ENDIF STR R1, R0 ENDIF ; 初始化中断堆栈系统 ; ; 设置每一个工作模式堆栈 LDR R0, =Stack_Top ; 进进未定义模式,并设置堆栈指针 MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #UND_Stack_Size ; 进进中断模式,并设置堆栈指针 MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #ABT_Stack_Size ; 进进快速中断模式,并设置堆栈指针 MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #FIQ_Stack_Size ; 进进普通中断模式,并设置堆栈指针 MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #IRQ_Stack_Size ; 进进治理(特权)模式,并设置堆栈指针 MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit MOV SP, R0 SUB R0, R0, #SVC_Stack_Size ; 进进用户模式,并设置堆栈指针 MSR CPSR_c, #Mode_USR MOV SP, R0 SUB SL, SP, #USR_Stack_Size ; 进进C代码 IMPORT _main ; 援用其它文件中main函数 LDR R0, =_main ; 加载main地址到R0 BX R0 ; ARM方式转移到main实行 ; 用户设置堆栈程序(C外部接口:用于动态申请内存使用) AREA |.text|, CODE, READO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海船船员轮机考试题库及答案
- 贸易合同履行承诺书9篇范文
- 合同履行保障安排承诺函5篇
- 2025年国际经济法的基本理论与案例分析试题及答案
- 2025年新疆农业产业链合作合同协议
- 高速公司考试题目及答案
- 初一的月考试卷及答案
- 微积分下考试题目及答案
- 锐捷网络笔试测试题及答案
- 山东初一数学月考试卷及答案
- 《书愤》课件-【中职专用】高二语文(高教版2023职业模块)
- 邻里中心项目策划工作建议书框架及标准格式
- 人工智能通识 课件 第七章 智能之躯-具身智能
- 妈妈驿站加盟合同范本
- T/CUWA 60055-2023城镇排水管道螺旋缠绕内衬法修复用硬聚氯乙烯(PVC-U)带状型材
- DB62T 25-3016-2016 建筑工程资料管理规程
- 专题06 对角互补模型(原卷版)
- 2025勤工俭学合同范本
- 《职业生涯概述》课件
- 企业会计准则实施典型案例
- 混凝土路面裂缝修补施工方案
评论
0/150
提交评论