《小谈DJYOS中断线的配置方法》
2015-05-18 14:03
99 查看
中断是嵌入式系统中一个魅力十足亮点, 关于DJYOS对中断的内部巧妙的处理机制,各位看官可阅读《都江堰操作系统与嵌入式系统设计》中第六章节“中断”相关内容以及DJYOS源码中int.c/int.h中相关内容。本文探讨两点:DJYOS中中断处理流程以及如何将自己板子上的中断快速地挂接到DJYOS的中断系统。
DJYOS中断控制块的结构示意图如图1所示:
图1 DJYOS中断控制块结构示意图
在图1所示中中断线可以理解为中断向量表中的某个中断向量,一个中断向量可对应一个或者多个中断源,也就说某个中断线有可能被多个中断源触发而接通,在中断ISR内部可判断具体是哪个中断源触发。DJYOS将中断类型分为实时中断和异步信号。实时中断对应紧急程度非常高的中断信号,异步信号对应紧急程度不是很高的中断信号,实时中断可打断异步信号,实时中断中又可实现嵌套,实时中断ISR中不可使用系统的调度功能。关于实时中断和异步信号的详细区别参考《都江堰操作系统与嵌入式系统设计》中第六章节“中断”相关内容。每个中断可自由配置为实时中断或者异步信号。当某个中断源产生中断请求即可使能某个特定中断线使能开关,如果是异步信号,还需使能异步信号总开关,最后接通中断总开关即可使CPU处理中断请求。
在DJYOS中中断执行流程如下:中断源产生中断请求IRQ-->跳转至中断向量表中查询相应ISR及中断号-->保存现场-->调用DJYOS的中断入口函数int_engine_all-->判断中断类别(real或sync)-->调用用户注册的中断服务函数——返回至ISR并恢复现场——中断返回。
OK,了解了DJYOS的中断处理流程,如何将中断源挂接到图1所示DJYOS的中断控制块上呢?归纳以下,需要以下3个步骤,
Step1:在cpu_peri_int_line.h中定义中断号,每款CPU都定义自己的中断源及中断号,发生中断号后,硬件会根据这个中断号跳转到中断向量表中相应的位置执行中断ISR,这里需要确保定义的中断号与该款CPU datasheet中定义中断号保持一致。
Step2:在critical.c中配置当前工程使用到的中断号,具体配置方法为在全局数组tg_IntUsed添加相应的中断号,如MCB1700工程中配置的
Step3:对于使用具体中断时,需要依次调用以下5个函数:
完成了以上3个步骤,你就可将自己的中断ISR函数在DJYOS中运转起来了。当然这里还有一个前提就是你手头上的板子关于DJYOS的中断移植部分(即bsp目录下int_hard.c/int_hard.h)已经完成,关于这部分下次再唠叨唠叨。
上文如有不当之处,敬请指正,欢迎拍砖~~~
欢迎访问个人主页:www.djyos.com
DJYOS中断控制块的结构示意图如图1所示:
图1 DJYOS中断控制块结构示意图
在图1所示中中断线可以理解为中断向量表中的某个中断向量,一个中断向量可对应一个或者多个中断源,也就说某个中断线有可能被多个中断源触发而接通,在中断ISR内部可判断具体是哪个中断源触发。DJYOS将中断类型分为实时中断和异步信号。实时中断对应紧急程度非常高的中断信号,异步信号对应紧急程度不是很高的中断信号,实时中断可打断异步信号,实时中断中又可实现嵌套,实时中断ISR中不可使用系统的调度功能。关于实时中断和异步信号的详细区别参考《都江堰操作系统与嵌入式系统设计》中第六章节“中断”相关内容。每个中断可自由配置为实时中断或者异步信号。当某个中断源产生中断请求即可使能某个特定中断线使能开关,如果是异步信号,还需使能异步信号总开关,最后接通中断总开关即可使CPU处理中断请求。
在DJYOS中中断执行流程如下:中断源产生中断请求IRQ-->跳转至中断向量表中查询相应ISR及中断号-->保存现场-->调用DJYOS的中断入口函数int_engine_all-->判断中断类别(real或sync)-->调用用户注册的中断服务函数——返回至ISR并恢复现场——中断返回。
OK,了解了DJYOS的中断处理流程,如何将中断源挂接到图1所示DJYOS的中断控制块上呢?归纳以下,需要以下3个步骤,
Step1:在cpu_peri_int_line.h中定义中断号,每款CPU都定义自己的中断源及中断号,发生中断号后,硬件会根据这个中断号跳转到中断向量表中相应的位置执行中断ISR,这里需要确保定义的中断号与该款CPU datasheet中定义中断号保持一致。
Step2:在critical.c中配置当前工程使用到的中断号,具体配置方法为在全局数组tg_IntUsed添加相应的中断号,如MCB1700工程中配置的
const ufast_t tg_IntUsed[] = { CN_INT_LINE_UART0, CN_INT_LINE_UART1, CN_INT_LINE_RTC, CN_INT_LINE_WDT, CN_INT_LINE_ENET, CN_INT_LINE_TIMER0, CN_INT_LINE_TIMER1, CN_INT_LINE_TIMER2, CN_INT_LINE_TIMER3, CN_INT_LINE_SSP0, CN_INT_LINE_SSP1 }; |
1.bool_t Int_SetClearType(ufast_t ufl_line,ufast_t clear_type) //设置某中断线的应答方式 2.void Int_IsrConnect(ufast_t ufl_line, u32 (*isr)(ufast_t)) //关联中断线与ISR 3.bool_t Int_SettoAsynSignal(ufast_t ufl_line)/ bool_t Int_SettoReal(ufast_t ufl_line) //设置中断为异步信号or实时中断 4.bool_t Int_ClearLine(ufast_t ufl_line) //清除相应中断线的中断挂起状态 5.bool_t Int_RestoreAsynLine(ufast_t ufl_line)/ bool_t Int_RestoreRealLine(ufast_t ufl_line) //恢复保存的异步信号或实时中断中断线状态(与第3个函数保持一致) |
上文如有不当之处,敬请指正,欢迎拍砖~~~
欢迎访问个人主页:www.djyos.com
相关文章推荐
- SSH配置环境都正常,但是每次执行到Action中的方法时就中断了,而且不报任何错误
- 木翼下载系统中说明的PHP安全配置方法
- Linux中JDK1.6的安装和配置方法
- ubuntu下安装和配置apache2+SVN的详细方法介绍
- Windows 组策略加固攻击及配置方法
- VisualSVN Server的配置和使用方法
- django中静态文件配置static的方法
- windows 7下解压缩版tomcat7配置方法
- SharePoint Server2007 的配置以及“未能创建配置数据库”的解决方法
- PL/SQL Developer 连接Oracle数据库详细配置方法
- 数据库连接池的几种配置方法
- struts2笔记(namespace,请求扩展名配置和请求的动态方法调用)
- 让DFS配置立即生效的方法
- ubuntu配置JDK方法
- (键盘)代码 19:由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备 解决方法
- Java读取配置文件的几种方法
- SAP FI模块与SD、MM的接口配置基本方法
- IIS配置Http500错误的解决方法
- FckEditor java 2.6.6的JSP 配置方法详解
- 如何配置LCD背光和LED,调试方法