- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
vxWorks中断处理.
Vxworks作为一个实时嵌入式操作系统,通常采用中断的方式来满足系统实时性的要求,因此,熟悉其中断的处理过程对于VxWorks操作系统的开发是至关重要的.本文通过编写和调试基于AT91RM9200处理器的VxWorks嵌入式操作系统的BSP,来讨论VxWorks操作系统的中断机制。
1 VxWorks中断处理机制及AIC??? AT91RM9200使用一个8优先级,可单独屏蔽中断的中断向量控制器AIC。在ARM体系结构中,有7种异常中断,对应有一个异常中断向量表。ARM体系结构要求这个异常中断向量表从0地址处开始,对于外部中断请求IRQ,系统又增加了一块由中断控制器控制的中断向量表。
2 AT91RM9200 BSP的中断驱动的实现2.1 中断驱动中定义的函数STATUS at91rm9200LvlVecChk (int*,int*);STATUS at91rm9200LvlVecAck(int,int);STATUS at91rm9200LvlEnable(int);STATUS at91rm9200LvlDisable(int);2.2 高级中断控制器AIC的初始化??? 在usrInit()中excVecInit()函数对异常中断向量进行初始化.整个中断库,以及中断控制器的初始化都是在syslib.c中的sysHwInit2()函数中完成的.该函数在sysClkConnect()中被调用,因为系统时钟中断要在内核开放中断后就要使能,因此内核在初始化为一个多任务环境后,就产生一个usrRoot()的任务,在该任务中要建立系统时钟中断,因此调用了sysClkConnect()函数,中断库以及中断控制器的初始化也就完成了。??? 高级中断控制器必须进行初始化,其初始化是在板级支持包BSP的中断驱动程序中。具体的实现函数是void at91rm9200IntDevInit(void)。该函数在文件syslib.c的sysHwInit2()函数中调用。??? at91rm9200IntDevInit(void)函数中主要是配置系统的钩子函数,然后对中断源向量寄存器和中断模式寄存器进行配置,同时要清除并禁止AIC中所有的中断。2.3 中断驱动中的回调函数??? 在intEnt中,程序很快就进入了特权模式(SVC32),如果是中断可嵌套模式,要设置该模式下的堆栈,并且将中断深度intCnt值加1.然后跳转到intIntRtnPreempt中,在intIntRtnPreempt中为后来调用中断驱动中的函数开辟了32个字节的堆栈空间,并且将程序指针拉到at91rm9200LvlVecChk函数处执行,at91rm9200LvlVecChk函数是在中断驱动中定义的函数,是用来检测当前挂起的中断中,优先级最高的中断源。检测出最高优先级的中断后,首先要禁止该中断,因此要调用at91rm9200LvlDisable函数,该函数也在中断驱动中定义。在禁止中断的过程中,需要通过intLock和intUnLock函数来保护临界代码不被新的中断打断。??? at91rm9200LvlVecChk()函数是通过读AIC_IVR寄存器来获取当前最高优先级的中断,将获得的中断号和中断向量赋给2个变量,并且禁止该中断。at91rm9200LvlVecAek()函数是在中断处理结束后,通过写AIC_EIOC寄存器来清除刚刚处理的中断,并将其使能。at91rm9200LvlEnable(int leve1)和at91rm9200LvlDisable(int level)来允许和禁止中断,从而保护临界代码不被新的中断所打断。2.4 中断驱动程序实现的流程图??? 中断驱动程序实现的流程图如图1所示。?图1 中断驱动程序实现的流程图
3 VxWorks中断模块实现机制3.1 异常中断向量表的生成及实现??? 在usrInit()函数中通过intVecBaseSet((FUNCPTR*)VEC_BASE_ADRS)函数对异常中断向量表的基址进行设置,VEC_BASE_ADRS在configall.h中定义为程序运行空间的起始地址,但是在ARM中并没有中断基址寄存器,由于ARM9有重影射机制,可以将程序运行空间的起始地址影射成0地址,这也符合ARM体系结构通常都是把异常中断向量表放在0地址处的惯例,异常中断向量表可以从反汇编bootrom_uncmp后的0地址处看到。当有内置的外设中断或外部中断产生时,系统首先跳转到异常中断向量表的0x18处,此处是IRQ中断向量的位置,该内存中放置的是一条跳转指令,因为excVecInit()对中断向量表初始化后,生成了一个exeEnterTbl,在这个表中列出了异常向量和对应入口函数的结构表
您可能关注的文档
- VMware_物理机迁移到虚拟机P2V(热迁移)-new..doc
- VMwarevSphereHypervisor5安装配置..docx
- VMware双机热备配置(Heartbeat)..doc
- VMwareWorkstation10安装winXP系统..doc
- VMware的网络配置..doc
- VMware网络配置详解..doc
- VMwarevCenterServer安装及初始配置完整版-90页..doc
- VMware虚拟机备份..docx
- VOA商务礼仪美语_Business_EtiquetteL1-L31..doc
- VMware虚拟机安装MacOSXLion正式版教程..doc
- 2024年生化化工药品技能考试-气体深冷分离工笔试考试历年典型考题及考点含含答案.docx
- 2025年人教新起点九年级数学下册月考试卷 .docx
- 2025年人教版(2024)八年级历史下册阶段测试试卷 .docx
- 2024年仁爱科普版七年级科学上册阶段测试试卷含答案 .docx
- 2024年上教版选择性必修1物理下册月考试卷 .docx
- 2025年人教版选修3生物下册月考试卷 .docx
- 2024年沪教版八年级化学下册月考试卷含答案 .docx
- 2024年北师大版选修6地理上册阶段测试试卷 .docx
- 2024年生化化工药品技能考试-氨区值班员笔试考试历年典型考题及考点含含答案.docx
- 2024年西师新版九年级科学上册月考试卷.docx
文档评论(0)