- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COSII下的AM7中断过程分析及优化方法
引言
目前,在嵌入式处理器芯片中,以ARM7为核心的处理器是应用较多的一种。它具有多种工作模式,并且支持两种不同的指令集(标准32位ARM指令集和16位Thumb指令集)。μC/OSII是专为嵌入式应用设计的抢占式、多任务实时操作系统,可用于各类8位、16位和32位单片机或DSP。μC/OSII向ARM7移植具有得天独厚的优点,所以“μC/OSII+ARM7”成为广泛应用的一款平台。
不管是哪种型号的ARM处理器,也无论该嵌入式系统中是否有操作系统,在计算机与外界实时交互的过程中,中断技术都是一项关键的技术。当外部事件发生时,CPU必须及时响应中断以实现对相应事件的处理,因此能否中断嵌套是影响嵌入式系统实时性能的主要因素。
1? ARM7的中断处理
ARM7处理器的中断主要有两种,本文主要讨论IRQ中断异常的响应机制。当中断请求IRQ到来使CPU进入中断响应时,CPU将会自动完成下列工作:首先,将PC、CPSR的当前值存入中断模式的LR、SPSR中;然后,操作CPSR中的运行状态位,使CPU进入中断模式并关闭中断;最后将PC的值改成0从而使CPU的执行跳转到IRQ中断入口0。异常向量表中的0使用一条“LDR PC,[PC,#0xff0]”指令,在IRQ处使用的这条指令与其他向量不同。当CPU执行这条指令但还没有跳转时,PC的值为0因为ARM7TDMI内核是三级流水结构),0去0x00000FF0为0xFFFFF030,这是VIC的特殊寄存器VICVectAddr的地址单元。这个寄存器保存当前将要服务的IRQ的中断服务程序的入口,故读取VICVectAddr寄存器的值,然后放入PC程序指针,即跳转到相应中断服务程序,从而使CPU开始执行中断服务程序。
2? Handler宏分析
“μC/OSII+ARM7”系统中,只使用了ARM7的IRQ中断。由于不同的ARM芯片的中断系统并不完全一样,因此不可能编写出对所有使用ARM核的处理器通用的中断及时钟节拍移植代码。但是,为了使用户用C语言编写中断服务程序时不必为处理器的硬件区别而困扰,这里根据μC/OSII对中断服务程序的要求以及ARM7体系结构和ADS编译器的特点,编写了一个适用于所有基于ARM7核处理器的汇编宏--Handler。这个宏实现了“μC/OSII+ ARM7”中断服务程序的汇编语言代码与C语言函数代码之间的通用接口。其作用是对用户的C语言中断处理程序进行包装,只有通过这个包装之后,系统才能执行用户的中断处理程序。
中断服务程序流程如图1所示。在进入Handler宏中,首先保存LR、SPSR以及相关寄存器的值于中断模式下的堆栈中,以便于断点恢复。然后使记录系统中断次数的全局变量OSIntNeSTing加1并关中断切换到系统模式,调用C语言中断处理程序。在执行完中断处理程序后,调用出中断函数,以获取最高优先级就绪任务的任务控制块指针和任务优先级。返回中断模式后,通过比较当前任务与待切换任务的优先级,判断是否进行任务切换,最后返回断点。
图1? 中断服务程序流程
IRQ异常处理代码的汇编部分--Handler宏:
MACRO
$IRQ_Label HANDLER $IRQ_ExcepTION_Function
EXPORT $IRQ_Label;输出的标号
IMPORT $IRQ_Exception_Function;引用的外部标号
$IRQ_Label
SUB LR, LR, #4;计算返回地址
STMFD SP!, {R0R3, R12, LR};保存任务环境
MRS R3, SPSR;保存状态
STMFD SP, {R3,SP,LR}^;保存用户状态的R3、SP、LR
;OSIntNesting++
LDR R2,=OSIntNesting
LDRB R1, [R2]
ADD R1, R1, #1
STRB R1, [R2]
SUB SP, SP, #4*3
MSR CPSR_c, #(NoInt | SYS32Mode)
;切换到系统模式以便对相关寄存器进行操作
CMP R1, #1
LDREQ SP, =StackUsr
;在第1次中断时就重新开辟一个专门存储中断中用到
;的变量以避免存储空间的冲突
BL $IRQ_Exception_Function? ;调用C语言的中断处理程序
MSR CPSR_c, #(NoInt | SYS32Mode);切换到系统模式
LDR R2, =OsEnterSum
;OsEnterSum,使OSIntExit退出时中断关闭
MOV R1, #1
STR R1, [R2]
BL OSIntExit
;获取最高优先级就绪任务的
您可能关注的文档
最近下载
- 个人动产抵押合同合集.docx VIP
- 公司技术研发能力介绍.pptx VIP
- DB23T 3528-2023 黄芩与油莎豆间作保苗培肥标准化栽培技术规程.pdf VIP
- 土木工程建设法规(第5版)教学课件第05章--土木工程建设法规(5版).pptx VIP
- 小学数学倍的认识作业设计.docx VIP
- (高清版)B-T 90.1-2023 紧固件 验收检查.pdf VIP
- 安装、调试及验收方案.docx VIP
- 06J011 建筑变形缝构造图集.docx VIP
- 2023年浙江省高等职业技术教育招生考试 建筑类试题 .pdf VIP
- 土木工程建设法规(第5版)教学课件第04章--土木工程建设法规(5版).pptx VIP
文档评论(0)