毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

arm嵌入式系统设计论文 第7页

更新时间:2009-4-12:  来源:毕业论文
arm嵌入式系统设计论文 第7页|免费论文
中断类型
 
软件中断是一种由用户设置的同步中断,由程序指令产生,不像硬件中断那样由外部事件触发。软件中断允许运行在用户模式的程序进入监督模式,并运行监督态下的函数。在ARM7TDMI的硬件调试系统中,应用程序可利用软件中断来申请半自主(semihosting)式操作,例如,打开主机中的一个文件、向调试通道发送一个字符等等(这些操作必须依赖主机中C程序库才能运行,因此被称为半自主式的)。利用软件中断机制,可以直观和高效地仿真调试应用程序。另外,软件中断也可用于一般性的程序控制。当中断是为支持数据传输或快速数据通道而设计的,为快速处理快中断。快中断被设为最高中断优先级;在快中断模式增设了7个私有工作寄存器,从而避免了由于主工作寄存器数据的保存和恢复而带来了额外开销;快中断处理程序处于异常向量表的最后位置,因此可紧接异常向量表书写快中断处理程序,而不必进行程序跳转操作,避免了刷新指令流水线和高速缓存。
(2)响应中断和中断返回
 当中断产生时,ARM7TDMI将执行如下操作:
①把当前程序状态寄存器(CPSR)的内容拷贝到相应的备份程序状态寄存器(SPSR),当前工作模式、中断屏蔽位和状态标志被保存下来。
②转入相应的模式,并关闭常规中断。如响应快中断,则同时关闭快中断。
③把程序计数器(pc)的值减4后,存入相应的连接寄存器(lr)。
④将程序计数器指向相应的中断向量。
 由中断返回时,ARM7TDMI将完成如下操作:
①将备份程序状态寄存器的内容拷贝到当前程序状态寄存器,恢复中断前的状态。
②清除相应禁止中断位(如果已设置的话)。
③把连接寄存器的值拷贝到程序计数器,继续运行原程序。
 返回地址的计算:
ARM7TDMI采用流水线结构,当一条指令被执行时,下一条指令正被译码,而第三条指令被从内存中取出。当程序计数器未更新的,pc指向从内存中取出的指令,(pc-4)指向当前指令的一条指令。处理器响应软件中断时,由于软件中断由指令自身产生,程序计数器还没有更新,(pc-4)正好指向当前指令的下一条指令。因此,只要在中断处理程序最后加入MOVS pc,lr把连接寄存器的值赋给程序计数器即可。ARM7TDMI总是在一条指令执行完毕后,才去检查是否有硬件中断信号和中断屏蔽状态。此时,程序计数器已经更新,(pc-4)指向当前指令的下两条指令。因此要先把连接寄存器的内容减去4(指向pc-8)后,再赋给程序计数器。
(3)中断处理程序的编写
 软件中断处理程序的编写
软件中断指令的格式如图3-3所示。低24位立即数为软件中断号。在中断处理程序中,必须首先得到软件中断号,然后根据中断号执行不同代码。以下的中断处理程序,在软件中断号为1时,将端口A的0号引脚置“1”。
 
图3.3软件中断指令结构
STMFD sp!,{r0-r12,lr}//保存各工作寄存器
LDR r0,{lr,#-4}//得到该软件中断指令
BIC r0,r0,#0xff000000//从中取出中断号
ADR r2,SWIJumpTable//r2指向代码入口表
LDR pc,[r2,r0,LSL#2]//把r0中的值乘4后加到r2。将程序计数器指向中断号对应的代码入口地址
SWIJumpTable//代码入口表
DCD SWInum0
DCD SWInum1
……
SWInum0//中断号为0时的处理代码
SWInum1//中断号为1时的处理代码
MOV r0,#0x80000000//r0指向端口A
STRB r0,#0x01//A口0脚置“1”
B EndofSWI//跳转
EndofSWI
LDMFD sp!{r0-r12,pc}//恢复各寄存器,返回原程序
 常规中断处理程序的编写
为快速执行常规中断处理程序,一般用汇编指令编写。在编写可重入常规中断处理程序(运行时仍可响应常规中断)时,必须先把链接寄存器和程序用到的工作寄存器入栈,然后才能开放中断。各寄存器出栈前,必须先关闭中断。
这样可防止因寄存器崩溃而无法返回的情况发生。下文介绍了一个与中控制器相配置的可重入的常规中断处理程序。当若干中断源同时有效时,中断控制器(基址为IntBase)把16个中断源中优先级最高的一个存入中断寄存器(偏移地址为IntLevel)中,并发出硬件中断信号。
SUB lr,lr,#4//得至并保存返回地址
STMFD sp!,{lr}
MRS r14,SPSR//把SPSR和sl2入栈
STMFD sp!,{r12,r14}
MOV r12,#IntBase
LDR r12,[r12,#IntLevel]//将最高优先级号存入r12
MRS r14,CPSR.//开中断
BIC r14,r14,#0x80
MSR CPSR_c,r14
LDR PC,[PC,r12,LSL#2]//将pc指向该优先级号对应的处理代码入口
NOP//补位
DCD Priority0Handler//代码入口表
DCD Priority 1 Handler
DCD Priority 2 Handler
……
Priority0Handler//0优先级中断处理代码
STMFD sp!,{r0-r11}//保存工作寄存器
……(略)//具体代码
LDMFD sp!,{r0-r11}//恢复工作寄存器
MRS r12,CPSR//关中断
ORR r12,r12,#0x80
MSR CPSR_c,r12
LDMFD sp!,{r12,r14}//恢复r12
MSR SPSR_csxf,r14//恢复备用程序状态寄存器(SPSR)
LDMFD sp!,{pc} //返回原程序
Priority 1 Handler//优先级中断处理代码(略)
 快中断处理程序的编写
为保证高速处理,快中断处理程序必须要用汇编语言编写,而且必须是非重入的。
4 嵌入式实时操作系统 μC/OS-Ⅱ                 
4.1 概述
μC/OS-II(Mirco-Controller Operating System Version 2)是一个完整的,可移植、固化、可裁剪的占先式实时多任务内核;是一个具备现代操作系统特点的RTOS,同时它结构清晰、注解详尽,具有良好的可扩展性和可移植性,被广泛地应用于航空业、高端音响、医疗器械、电子乐器、网络设备、工业机器人等各个领域,各种架构的微处理器上。2000年7月,μC/OS-II在一个航空项目中得到了美国联邦航空管理局(FederalAviationAdministration)对用于商用飞机的、符合RTCADO-178B标准的认证[11],这就说明μC/OS-II可以在任何场合中应用,μC/OS-II的特点主要可以概括为以下几个方面。
1.有源代码:源代码清晰易读且结构协调,注解详尽,组织有序。
2.可移植性:绝大部分μC/OS-II的代码使用移植性很强的ANSIC写的,和处理器硬件相关部分采用汇编写。
3.可裁剪:可以只使用μC/OS-II中应用程序需要的那些系统服务。这种可裁剪是靠条件编译实现的,充分利用这个特性,可以有助于缩短代码长度,优化流程控制[30]。
4.可剥夺性:μC/OS-II完全是可抢占式实时内核,即总是运行就绪条件下优先级最高的任务。
5.多任务:可以管理64个任务,但系统保留了8个任务,应用程序最多可以有56个任务。赋予每个任务的优先级必须是不相同的,这也意味着μC/OS-II不支持时间片轮转调度法(round-robin scheduling),该调度法适用于调度优先级平等的任务。
6.可确定性:全部μC/OS-II的函数调用和服务的执行时间具有可确定性,即它们的执行时间是可知的。
7.任务栈:每个任务有自己单独的栈,μC/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。
8.系统服务:μC/OS-II提供多种系统服务,如邮箱、消息队列、信号量、固定块大小的内存的申请和释放、时间相关函数等。
9.中断管理:中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

arm嵌入式系统设计论文 第7页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。