武汉创维特ARM教学系统08嵌入式软件系统设计课件

PPT
  • 阅读 47 次
  • 下载 0 次
  • 页数 98 页
  • 大小 3.987 MB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
武汉创维特ARM教学系统08嵌入式软件系统设计课件
可在后台配置第一页与第二页中间广告代码
武汉创维特ARM教学系统08嵌入式软件系统设计课件
可在后台配置第二页与第三页中间广告代码
武汉创维特ARM教学系统08嵌入式软件系统设计课件
可在后台配置第三页与第四页中间广告代码
武汉创维特ARM教学系统08嵌入式软件系统设计课件
武汉创维特ARM教学系统08嵌入式软件系统设计课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 98
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】武汉创维特ARM教学系统08嵌入式软件系统设计课件.ppt,共(98)页,3.987 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45363.html

以下为本文档部分文字说明:

嵌入式系统教案武汉创维特信息技术有限公司2024/12/22提纲1133224455嵌入式软件开发过程ARM软件设计与代码分析ARM软件开发工具-ADTIDE简介6677第六章嵌入式软件系统设计3嵌入式系统软件开发流程❑软件需求分析:确定设计任务和目标,并提

炼出设计规格说明书,作为正式设计指导和验收的标准。嵌入式软件开发过程❑概要设计:描述系统如何实现所述的需求,包括软件模块的划分、系统的软件开发工具选择以及关键问题的论证等。概要设计模块划分软件需求分析:编码单元调试集成调试详细设计BS

P、应用程序测试产品❑详细设计:详细描述各个模块的实现方法与过程,模块间接口等问题,以作为编码人员的编码准则。❑编码4嵌入式系统的开发流程❑单元调试:编码完成后,对各个模块进行单元调试,以保证模块正常工作。嵌入式软件开发过程❑集成调试5ARM

主流开发工具❑Windows操作系统➢ARMADS/SDT+调试器➢GNU+Cygwin+调试器➢ARMSDT+简易电缆❑Linux操作系统➢GNU+GDBARM软件开发工具-ADTIDE简介6常用调试方法❑软件仿真❑驻留监控程序

➢硬件要求高,一般在硬件稳定之后进行➢需要占用目标板上的一部分资源➢不能对程序的全速运行进行完全仿真❑JTAG仿真器➢完全非插入式调试,不使用片上资源,无需目标存储器,不占用目标系统的任何端口➢仿真效果更加接近于目标硬件❑在线仿真器ARM软件开发工具-ADTIDE简介7ADTfor

ARM集成开发系统ARM软件开发工具-ADTIDE简介8ADT1000EmulatorforARMARM软件开发工具-ADTIDE简介254×1549ADT1000EmulatorforARMARM软件开发工具-ADTIDE简介❑ADTEmulatorforARM是连接

主机核目标机之间的硬件设备,它实现ADTIDEforARM与目标机之间的连接。❑它具有如下特征:➢支持ARM核CPU➢非插入式调试,无需目标存储器,不占用目标系统的任何端口➢2.5V/3.3V/5V兼容电平接口➢支持标准的14/20针JTAG接口➢运行状态指示➢与主机之间通过并口连接➢下载速度达

到25Kbytes/S10ADTIDEforARMARM软件开发工具-ADTIDE简介11ADTIDEforARM主要特征-可视化编程环境ARM软件开发工具-ADTIDE简介❑支持ARM7、ARM9、SecurCore等。❑运行于Windo

ws98、NT、2000、XP等平台。❑中文、英文版本支持❑可视化的源码编辑和工程管理功能❑界面友好,使用方便:类似MSVisualStudio的用户界面,支持打印功能,支持文件内查找功能和FindinFiles功能12ADTIDEforARM主

要特征-可视化编程环境ARM软件开发工具-ADTIDE简介❑工程管理器:ADTIDE提供图形化的工程管理工具,实现文件级、文件目录级、工程级的多级编译连接选项管理以及工程级的调试参数管理❑源码编辑器:支持标准的文本编辑功能,支持C语言、

汇编语言语法高亮显示❑辅助编辑工具:提供一系列辅助编辑工具,方便开发人员。包括:多剪贴板工具、代码模板工具、头文件和源文件切换工具、注释工具、符号配对书写工具等多种辅助编辑工具。13ADTIDEforARM主要特征-交叉编译功能ARM软件开发工具-AD

TIDE简介❑支持开发语言:ANSIC;EmbeddedC++;汇编语言❑编译工具:使用著名优秀自由软件GNU的GCC交叉编译工具,并经过优化和严格测试,支持C语言、汇编语言等❑编译参数设置:完全图形界面方式的编译参数设置,提供可视化的设置功能。支持工程级、文件目录级、文件级编译参数设置1

4ADTIDEforARM主要特征-调试功能ARM软件开发工具-ADTIDE简介❑同时提供了图形和命令行两种调试方式❑程序的单步执行❑程序下载❑存储区下载和上载功能。❑工程级调试参数管理❑支持源程序、反汇编程序和混合窗口显示,支持ARM/THUMB方式显示❑具有与MSVisualStudio

类似的调试菜单功能:Go,Stop,Reset,Restart,Stepinto,Stepover,Stepout,RuntoCursor等❑丰富的示例程序15ADTIDEforARM主要特征-调试功能ARM软件开发工具-ADTIDE简介❑断点功能:支持软件断点和硬件断点,实现断点设置、

断点屏蔽、断点取消、断点列表等功能❑变量监视功能:随程序运行同步更新变量,即时修改变量值,可设置自动/手动刷新方式、十进制/十六进制显示❑ARM各种模式的寄存器即时查看与修改,当前模式指示,寄存器值修改时红色突显❑存储器查看与修改,可设置自动/手动刷新方式、字节/双字节/四字节显示

、大/小端方式显示,存储器值修改时红色突显16ADTIDEforARM主要特征-调试功能ARM软件开发工具-ADTIDE简介❑函数堆栈显示,可设置自动/手动刷新方式、十进制/十六进制显示、参数值显示,参数类型显示❑板

上寄存器(OnBoardRegister)的查看和修改,可以查看支持CPU的所有板上寄存器的具体意义、当前值、各个位的意义,可设置自动/手动刷新方式、二进制/十进制/十六进制显示、大/小端方式显示,支持十进制/十六进制方式修改寄存器值,寄存器值修改时红色突显。❑fl

ash在线编程器,支持对多种flash芯片的空白检查、擦除、编程、校验等操作,支持单一操作和自动操作两种操作方式,支持8/16/32位flash访问宽度,支持多片flash同时编程,编程速度达15Kbytes/s。提供统一的f

lash编程接口,可以方便地添加flash编程方案。17ADTIDEforARMARM软件开发工具-ADTIDE简介ADTIDE(Arm7Lpt、Arm9Lpt、SoftSim、Arm7Simple)用户手册、编程指南丰富例程18多

版本支持ARM软件开发工具-ADTIDE简介软件仿真版本ARM7版本ARM9版本简易仿真版本19多工程管理ARM软件开发工具-ADTIDE简介工程当前活动工程20可视化编辑器ARM软件开发工具-ADTIDE简介编辑菜单语法高亮编辑器辅助编辑工具条书签21GCC交叉编译ARM软件

开发工具-ADTIDE简介编译菜单编译工具条编译结果输出错误定位22编译器设置ARM软件开发工具-ADTIDE简介多配置管理多工程设管理多参数配置23汇编器设置ARM软件开发工具-ADTIDE简介多配置管理多工程设管理多参数配置24连

接器设置ARM软件开发工具-ADTIDE简介多配置管理多工程设管理多参数配置25调试功能ARM软件开发工具-ADTIDE简介调试菜单调试工具条命令行调试窗口26多种调试模式ARM软件开发工具-ADTIDE简介源码模式混合模式汇编模式27断点ARM软件开发工具-ADTIDE简介断点列

表断点28存储器窗口ARM软件开发工具-ADTIDE简介字模式半字模式字节模式修改凸显标记29存储区上载下载功能ARM软件开发工具-ADTIDE简介存储区上载存储区下载30寄存器观察窗口ARM软件开发工具-A

DTIDE简介多模式寄存器显示修改凸显标记31函数调用栈窗口ARM软件开发工具-ADTIDE简介函数调用栈32变量观察窗口ARM软件开发工具-ADTIDE简介局部变量全局变量多个观察窗口33命令窗口ARM软件开发工具-ADTIDE简介34单步调试-STEPINTOARM软件开发工具-ADTIDE简

介35单步调试-STEPOVERARM软件开发工具-ADTIDE简介36单步调试-STEPOUTARM软件开发工具-ADTIDE简介37单步调试-RUNTOCURSORARM软件开发工具-ADTIDE简介38板上寄存器AR

M软件开发工具-ADTIDE简介寄存器组寄存器寄存器位域热点描述信息修改凸显标记39板上寄存器ARM软件开发工具-ADTIDE简介40FLASH在线编程器ARM软件开发工具-ADTIDE简介41工具菜单ARM软件开发工具-

ADTIDE简介可自定制42在线帮助ARM软件开发工具-ADTIDE简介43嵌入式软件开发❑无操作系统的软件开发➢启动代码➢应用程序❑基于操作系统的软件开发➢bootloader➢操作系统移植➢BSP板级支持包➢应用程序开发ARM软件设计与代码分

析44启动代码❑功能➢硬件初始化➢引导C代码❑特征➢通常用汇编语言编写➢程序复位运行入口点➢代码量非常小❑程序流程➢设置中断、异常入口➢关中断➢硬件寄存器初始化(GPIO配置、总线配置、PLL时钟)➢初始化栈指针➢数据区初始化

➢C入口函数调用BLMainARM软件设计与代码分析45应用程序(无操作系统)❑功能➢硬件驱动➢应用❑特征➢通常用C语言或者嵌入式汇编语言编写➢程序较复杂,代码量较大ARM软件设计与代码分析46bootloader❑功能➢硬件初始化➢引导操作系

统➢下载程序(串口、网口、USB)➢烧写flash❑特征➢程序复位运行入口点➢通常用汇编语言+C语言编写➢代码量较小ARM软件设计与代码分析47嵌入式操作系统移植❑Linux❑WindowsCE❑uC/OS

II❑uClinux❑NucleusARM软件设计与代码分析48BSP板级支持包❑功能➢为应用程序提供统一的硬件操作接口❑特征➢高度硬件相关➢高度依赖于具体硬件平台➢各种操作系统各异ARM软件设计与代码分析49应用程序开发(操作系统)❑功能

➢GUI图形、人机交互➢控制➢算法❑特征➢硬件依赖程度小➢部分可仿真调试➢各种操作系统各异ARM软件设计与代码分析50嵌入式软件设计和调试流程❑编辑➢创建工程➢添加文件、编写程序➢汇编语言加C语言❑编译➢配置编译、汇编和连接参数➢编写连接脚本文件➢编译❑

调试➢连接调试器➢下载程序➢运行、调试❑固化➢通过仿真器烧写flash➢专用或通用的编程器➢通过bootloader烧写flashARM软件设计与代码分析51交叉编译❑GNU交叉编译➢编译.carm-elf-gcc➢汇编.Sarm-elf-gas➢连接.oarm-elf-ld❑操作文件➢汇编文件.

S➢C文件.c➢链接脚本文件ldscript➢库文件.o.lib.a❑生成调试格式文件.elf➢DWARF-1➢DWARF-2❑生成bin文件➢elf2bin➢arm-elf-objcopyARM软件设计与代码分析52链接脚本❑段➢Text段➢rodata段➢data段➢bss段❑符号➢Image

_RO_Limit➢Image_RW_Base➢Image_ZI_Base➢Image_ZI_Limit❑GCC库专用❑调试信息ARM软件设计与代码分析53链接脚本示例❑程序在SDRAM中运行❑程序在FLASH中运行ARM软件设计与代码分析54GCC库❑GCC库➢标准C函数库lib

.a-lc➢标准数学函数库libm.a-lm➢标准函数库的支持库libg.a-lg➢GCC的支持库libgcc.a-lgcc❑链接排列顺序➢-lm–lc–lgcc-lgARM软件设计与代码分析55JX44B0启动代码分析ARM软件设计与代码分析❑在基于ARM7TDMIcore的嵌入式系统中,

系统在上电或复位时都从地址0x00000000开始执行,因此在这个地址处安排的通常就是系统的启动代码。❑它通常也是BootLoader程序的一部分,可以在启动代码基础上编写BootLoader。❑用汇编语言编写。❑启动代码是在复位后运行其它程序之前运行的一段小程序。通过它,初始

化硬件设备、建立内存空间的映射图(JX44B0不需要),从而将系统的软硬件环境带到一个合适的状态,以便为最终调用C函数准备好正确的环境。56启动代码的移植和修改ARM软件设计与代码分析❑启动代码除了依赖于CPU的体系结构外,实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的

硬件地址分配,RAM芯片的类型,其他外设的类型等。❑对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的启动代码也能运行在另一块板子上,也还是需要作一些必要的修改。57启动代码流程图❑启动代码的功

能:RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用C函数。❑注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;

BootLoader入口设置中断向量表切换到超级模式,并禁止中断ResetHandler:复位入口设置中断模式,关闭所有中断初始化硬件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线0-15上拉设置外部中断的触发方式设置时钟设置CPU

的运行频率,系统各部件的总线矿宽度以及各部件的时钟将BootLoader拷贝到RAM拷贝代码到RAM跳至C代码程序ARM软件设计与代码分析58设置中断向量表❑该段向量表除了复位异常外,只有位于0地址处有效,也就是必须将该段代码烧写到FLASH中。❑复位异

常直接跳转到ResetHandler处,它是相对跳转,位置无关。❑其余的异常将跳转到0c000008+向量地址的位置,使用绝对跳转。ARM软件设计与代码分析59复位入口:切换到超级模式❑系统复位成功后,将自动进入SVC模式❑在初始化之前必须关闭中断,以免引起异常LOCKOUT:0xc0Bit6

,7=1MODE_MASK:0x1fSUP_MODE:0x13ARM软件设计与代码分析60设置中断模式并禁止中断❑设置S3C44B0INTCON寄存器❑缺省值为0x07,可以不作该工作0x01e000000x

01e00000ARM软件设计与代码分析61关闭看门狗❑设置S3C44B0WTCON寄存器❑必须设置0x01e000000x01d30000ARM软件设计与代码分析62系统配置寄存器❑使能回写buffer❑打开Cache0x01e000000x01c0000

0ARM软件设计与代码分析63设置非Cache区域❑使能回写buffer❑打开Cache0-0x0b0000000c7000000-0xc7320000ARM软件设计与代码分析64端口设置ARM软件设计与代码分析65设置外部中断的触发方式0x01

e000000x01d20050ARM软件设计与代码分析66配置总线访问宽度ARM软件设计与代码分析67配置总线访问时序ARM软件设计与代码分析68C代码初始化ARM软件设计与代码分析69堆栈初始化ARM软件设计与代码分析70跳转到C入口函数ARM软件设计与

代码分析71JX44B0BOOTLOADER分析ARM软件设计与代码分析❑BootLoader是在启动代码的基础之上,通常启动代码包含于BootLoader之中❑BootLoader常用于引导操作系统或者应用程序❑BootLoader可以包含一些简单的调试手段72Bo

otLoader的基本概念❑BootLoader是系统加电后运行的第一段软件代码。❑嵌入式系统中,整个系统的加载启动任务完全由BootLoader来完成。比如在一个基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,而

在这个地址处安排的通常就是系统的BootLoader程序。❑简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图

(有的CPU没有内存映射功能如S3C44B0),从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。❑通常,BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的Bo

otLoader是很困难的。ARM软件设计与代码分析73BootLoader的移植和修改❑BootLoader除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。❑对于两块不

同的嵌入式板而言,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。ARM软件设计与代码分析74BootLoader的安装❑系统加电或复位后,所有的CPU通常都从CP

U制造商预先安排的地址上取指令。比如,S3C44B0在复位时都从地址0x00000000取它的第一条指令。❑嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先

执行BootLoader程序。❑也就是说对于基于S3C44B0的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。ARM软件设计与代码分析75用来控制BootLoader的设备或机制❑串口通讯是最简单也是最廉价的一种双机通讯设备

,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader程序在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不

够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。ARM软件设计与代码分析76BootLoader的操作模式❑启动加载模式:这种模式也称为"自主"(Autonomous)

模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。❑下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载

文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态存储设备中。BootLoader的这种模式通常在系统更新时使用。工作于这种模式下的BootLoa

der通常都会向它的终端用户提供一个简单的命令行接口。❑在教学系统中提供的BootLoader中没有实现自主模式,可以通过修改代码来实现该功能。ARM软件设计与代码分析77BootLoader与主机间文件传

输的通信设备及协议❑最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodem/ymodem/zmodem协议以及❑在以太网上采用TFTP协议。ARM软件设计与代码分析78BootLo

ader的主要任务与典型结构框架❑从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。❑大多数BootLoader都分为stage1和stage2两大部分。❑依赖于CPU体系结构的代码,比如设备初始化代码等,

通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。❑而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。ARM软件设计与代码分析79BootLoader的主

要任务与典型结构框架❑BootLoader的stage1通常包括以下步骤➢为加载BootLoader的stage2准备RAM空间➢拷贝BootLoader的stage2到RAM空间中➢设置好堆栈➢跳转到s

tage2的C入口点❑BootLoader的stage2通常包括以下步骤➢初始化本阶段要使用到的硬件设备➢调用应用程序或启动内核ARM软件设计与代码分析80Stage1初始化流程图❑stage1的功能:RAM初始化,设置各个部件的

时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage2。❑注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;BootLoader入口设置中断向量表切换到超级模式,并禁止中断ResetH

andler:复位入口设置中断模式,关闭所有中断初始化硬件关闭看门狗使能回写Buffer和Cache设置非Cache区域设置端口关闭数据线0-15上拉设置外部中断的触发方式设置时钟设置CPU的运行频率,系统各部件的总线矿宽

度以及各部件的时钟将BootLoader拷贝到RAM拷贝代码到RAM跳至C代码程序ARM软件设计与代码分析81Stage2流程图❑stage2的功能:初始化串口,显示菜单,通过菜单获取用户输入,并执行相应的操作。Stage2入口Mai

n初始化串口通过串口显示BootLoader菜单从串口获取输入根据输入执行各例程下载更新的BootLoader下载更新的ucLinux内核下载Demo程序下载声音测试文件下载ramdisk运行ucLinux运行Demo程序采用TFTP下

载ucLinux采用TFTP下载ramdiskARM软件设计与代码分析82Bootloader更新程序流程图❑通过BootLoader更新程序的流程。注意为了使用Bootloader更新FLASH中的程序,需要首先将Bootloader搬迁到RAM中运行。下

载更新的BootLoader通过串口设置下载地址和下载的长度(用于缓冲接收的数据),接收下载的数据确认下载的数据调用I28f320_Prog_Main将数据写到FLASH中返回ARM软件设计与代码分析83嵌入式实时操作系统ARM软件设计与代码分析❑将在后面介绍84板级支持包ARM软

件设计与代码分析❑BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作。85板级支持包的特点ARM软件设计与代码分析❑硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,所以,作为高层软件与硬件

之间的接口,BSP必须为操作系统提供操作和控制具体硬件的方法。❑操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。86板级支持包的功能ARM软件设计与代码分析87板级支持包的功能ARM软件设计与代码

分析❑嵌入式系统初始化❖片级初始化❖板级初始化❖系统级初始化❑硬件相关的设备驱动程序和BootLoader存在一定的重叠88系统级初始化ARM软件设计与代码分析❑这是一个以软件初始化为主的过程,主要进行操作系统初始化。

BSP将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。89硬件

相关的驱动程序ARM软件设计与代码分析❑与初始化过程相反,硬件相关的设备驱动程序的初始化和使用通常是一个从高层到底层的过程。❑尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP把它们与操作系统中通用的设备驱动程序关联起来,并在随后的应

用中由通用的设备驱动程序调用,实现对硬件设备的操作。90JX44B0应用代码设计及中断处理ARM软件设计与代码分析❑连接脚本91JX44B0应用代码中断向量ARM软件设计与代码分析❑起始地址0x0c000008❑除复位异常外,其余异常入口地址由FLAS

H跳转得到92JX44B0中断处理流程➢执行0x18处指令:LDRpc,=0x0c000020,由Bootloader控制➢执行0x0c000020处指令:HandlerIRQ,ramstart.s➢

执行HandlerIRQ,ramstart.s➢执行HandleIRQ处保存的中断分发例程,ramstart.s中初始化为IsrIRQARM软件设计与代码分析93用汇编代码编写的中断分发例程❑保护现场IsrIRQ:/*usingI_ISPRregister.*/s

ublr,lr,#4stmfdsp!,{lr}/*保存中断返回的PC值*/stmfdsp!,{r0-r4}/*备份寄存器R0-R4*/subsp,sp,#4/*为PC预留栈空间*/stmfdsp!,{r8-r9}/*备份寄存器R8-R9*/ldrr9,=I_ISPR/*读取中断状

态*/ldrr9,[r9]❑R9中保存中断状态ARM软件设计与代码分析94用汇编代码编写的中断分发例程❑寻找中断源cmpr9,#0x0/*检查中断状态*/beqi2movr8,#0x0/*R8保存中断表的偏移*/i0:/*逐位检查中断状态*/movsr9,r9,lsr#1bcsi1/*如果该位

等于1,则处理这一中断*/addr8,r8,#4/*修改当前的中断偏移*/bi0/*处理下一比特*/❑找到中断则跳转到i1,R8保存找到的中断偏移❑未找到中断则跳转到i2ARM软件设计与代码分析95用汇编代码编写的中断分发例程❑处理中断并返回i1:ldr

r9,=HandleADC/*HandleADC位于中断向量表起始位置,我们将该地址用作是中断向量表的基地址*/addr9,r9,r8/*计算入口地址指针:中断基地址加上偏移*/ldrr9,[r9]/*从地址向量表中获取入口地址*/strr9,[s

p,#8]/*将入口地址保存到堆栈,并移动堆栈指针*/movlr,pc/*保存当前PC*/ldmfdsp!,{r8-r9,pc}/*调用中断例程*/ldmfdsp!,{r0-r4,pc}^/*中断返回,并恢复中断前的处理器模式*/i

2:ldmfdsp!,{r8-r9}/*如果当前没有任何中断,直接返回*/addsp,sp,#4/*移动堆栈指针,该空间由第4句指令预留*/ldmfdsp!,{r0-r4,pc}^/*中断返回,并恢复中断前

的处理器模式*/ARM软件设计与代码分析96用C代码编写的中断分发例程❑函数声明typedef(*ISR_ROUTINE_ENTRY)(void);voidIsrIRQ()__attribute__((interrupt("IRQ

")));ARM软件设计与代码分析97用C代码编写的中断分发例程❑函数实现voidIsrIRQ(){intcount=0;unsignedintisr_pending;unsignedintisr_mask=0x00000001;u

nsignedintisr_mask_set=rINTMSK;/*读取中断掩码*/ISR_ROUTINE_ENTRYisr_routine_entry=(ISR_ROUTINE_ENTRY)0x0;isr_pending=(rINTPND&~

isr_mask_set);/*读取中断状态*//*查表*/while(isr_mask){if(isr_pending&isr_mask){/*找到中断源,获取中断例程入口地址*/isr_routine_entry=(ISR_ROUTINE_ENTRY)(*(i

nt*)(HandleADC+count));break;}count+=4;isr_mask<<=1;}/*调用中断服务例程*/if(isr_routine_entry)(*isr_routine_entry)();

}ARM软件设计与代码分析98中断处理例程❑注册例程*(unsignedint*)(HandleEINT0)=(unsignedint)EINT0_Isr;❑函数实现voidEINT0_Isr(){rI_ISPC=BIT_EINT0;/*清除中断标志*/…

…}ARM软件设计与代码分析

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?