
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于s3c44box处理器的vxworks中断设计当异样发生时,程序计数器(pc)会被强制为相应异样处理程序的入口地址然后举行中断源的识别,按照中断号在中断向量表中找到相应中断服务程序(isr)的入口地址。vxworks将异样向量表定位在ram中,基地址为vec_base_adrs,在configa11h中定义普通为ram存储器的起始地址。在系统启动初始化时,由intvecbaseset()函数设置向量表的基地址。向量表地址设定后,需要初始化指定异样的缺省处理函数。vxworks在映像的代码段建立了一张中断缺省函数表,函数excvecinit()按照这张表来设置向量表的各异样中断向量值。需初始
2、化的向量表范围由low_vec和high_vec确定,在excarchlibh中定义。因为不同的处理器异样处理机制不同,有时需按照详细的异样处理来建立自己的异样向量表,详细建立实现过程在下面研究。22 中断服务程序的衔接vxworks为中断提供接口函数intconnect(),它将中断服务程序(isr)和中断向量相关联。在操作系统内核启动后,vxworks建立与中断号相对应的中断向量表,中断向量表中的每个中断向量包含中断服务程序(isr)的入口地址。当中断大事发生时vxworks内核将调用与其中断向量对应的中断服务程序。intconnect()原型如下:status intconnect(vo
3、idfuncptr * vector, /* 要关联的中断向量 */voidfuncptr routine, /*中断发生时调用的函数 */int parameter /*传递给lsr函数的参数*/)但事实上,中断浮现时并不是挺直调用指定的中断处理函数。而是,intconnect()函数将创建一小段代码,这段代码用以保存须要寄存器、设置堆栈入口、之后调用中断处理函数。相反,当从该函数返回时,这段代码先复原寄存器和堆栈,然后退出中断。3 vxworks基于s3c44b0x的中断处理31 基于s3c44b0x处理器的vxworks异样向量表的生成s3c44box处理器不支持内存重定向操作,也就是每
4、个片选的地址范围是定死的,不能按照需要自己指定。启动flash存储器向来位于0地址,异样人口不能在运行时写入,故必需硬编码将异样入口填写在启动flash的0地址处。rominits是系统上电时的初始人口程序从flash的0地址开头运行。故在其开头出定义异样入口程序实现如下:_arm_function(rominit)_rominit:b cold /* 上电复位后执行的第1条命令,也可看作是复位向量 */* 未定义命令、软件中断等异样入口 */b b _romirq /* irq中断异样入口 */b 在地址ox00000014处s3c44b0x处理器未用法,保留。另外vxworks不支持迅速中
5、断地址ox0000001c保留。因为vxworks建立的异样向量表定位在ram中那么当中断发生时如何把两者衔接起来从而由vxworks实现中断管理呢?本bsp按照vxworks缺省异样向量表,建立自定义的向量表,实现从rom到ram异样的衔接,总体程序如下:/* _romirq 及其它函数定义 */_romirq;sub sp,sp,4stmfd sq1 , (r0)ldr r0,l$_promirqldr r0,r0 /* 装载irq异样地址到r0 */str r0,sp,4ldmfd sp!,r0,pc /* 跳转到异样服务程序 */* _romirq指向ram中的位置 */l$_prom
6、irq:.long s3c_exc_base + 20 /* define s3c_exc_base 0x0c000100 */* 在真正ram空间建立异样向量表,和vxworks建立的向量表相同,只是位置不同 */void s3cexcvecset(void)uint32 i:.i=(uint32)intent;*(uint32 *)(s3c_exc_base + ox14)=i;对以上代码分析:当中断发生时程序跳转到_romirq处,然后执行出栈操作,把l$_promirq地址(0x0c000114=(s3c_exc_base + 20)的内容赋给程序计数器(pc);而上述vxwofks在
7、ram空间建立异样向量表时,把异样中断服务程序(intent)的地址放在地址0x0c00oll4(s3c_exc_base + 0x14)中,即pc=(uint32) intent实现从rom到ram中断的衔接。32 中断驱动中的回调函数vxworks中intarchlib库所包含的中断系统函数与详细的处理器体系结构相关其默认体系结构中不包含arm处理器,所以此库中的函数都要依靠于详细bsp提供的例程来完成其功能。vxworks采纳hook的办法来实现,针对本处理器的bsp,在sngkcintrctlc文件中,定义了四个钩子函数:sysintlvlvecchkrtn = sngks32cint
8、lvlvecchk;/* 中断源检测,返回中断号 */sysintlvlenablertn = sngks32cintlvlenable; /* 使能相应中断 */,svslntlvldisablertn = sngks32cintlvldisable; /* 禁止相应中断 */,svsintlvlvecackrtn = sngks32cintlvlack; /* 清除中断标记位 */,用来完成中断驱动。当外部中断发生时,程序进入intent函数,运行sysintlvlvecchkrm钩子函数读中断服务挂起寄存器(i_ispr)来检测中断源,并返回中断号,通过在intconnect函数中建立的中断向量与中断服务函数的衔接,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度购房合同因中介误导导致的合同解除与赔偿执行合同
- 二零二五年度企业信用评级认证服务协议
- 2025年度海洋资源勘探个人劳务用工合同书
- 二零二五年度货车司机驾驶安全教育与责任保险协议
- 二零二五年度金融科技公司干股虚拟股分红及投资协议
- 二零二五年度汽车美容店汽车美容品牌授权合同
- 2025年度民族风情餐厅承包运营合同
- 二零二五年度土地流转与农村社会保障体系建设协议
- 2025年度环保产业员工劳动关系解除协议
- 二零二五年度黄金投资俱乐部会员招募合同
- 2024天津经济技术开发区管委会事业单位招聘37人历年高频难、易错点500题模拟试题附带答案详解
- 临床常见操作-灌肠
- 烟叶生产培训题库附有答案
- GB/T 44264-2024光伏组件清洁机器人通用技术条件
- 2024工程用钢丝环形网
- 济南网约车驾驶员区域考试题库(含答案)
- 2024年四川省德阳市中考英语试卷真题(含答案解析)
- 2024年九年级中考语文课外文言文阅读题汇集(一)附答案解析
- 医疗器械的验收与管理制度
- 部编人教版七年级下册道德与法治全册课件
- 护理文件书写PDCA课件
评论
0/150
提交评论