历史上的今天
今天是:2024年12月19日(星期四)
2018年12月19日 | 关于s3c2410 中断异常处理
2018-12-19 来源:eefocus
s3c2410的中断异常处理模块总共由以下寄存器构成
SRCPND(SOURCE PENDING REGISTER)
INTMOD(INTERRUPT MODE REGISTER)
INTMSK(INTERRUPT MASK REGISTER)
PRIORITY( PRIORITY REGISTER)
INTPND(INTERRUPT PENDING REGISTER)
INTOFFSET(INTERRUPT OFFSET REGISTER)
SUBSRCPND (INTERRUPT SUB SOURCE PENDING)
INTSUBMSK (INTERRUPT SUB MASK REGISTER)
下面我将讲解每个寄存器在一个中断处理流程中所扮演的角色SRCPND/ SUBSRCPND这两个寄存器在功能上是相同的,它们是中断源引脚寄存器,在一个中断异常处理流程中,中断信号传进中断异常处理模块后首先遇到的就是SRCPND/ SUBSRCPND,这两个寄存器的作用是用于标示出哪个中断请求被触发。SRCPND的有效位为32,SUBSRCPND 的有效位为11,它们中的每一位分别代表一个中断源。SRCPND为主中断源引脚寄存器,SUBSRCPND为副中断源引脚寄存器。
每个位的初始值皆为0。假设现在系统触发了TIMER0中断,则第10bit将被置1,代表TIMER0中断被触发,该中断请求即将被处理(若该中断没有被屏蔽的话)。
SUBSRCPND情况与SRCPND相同,这里就不多讲了。
INTMOD寄存器有效位为32位,每一位与SRCPND中各位相对应,它的作用是指定该位相应的中断源处理模式(IRQ还是FIQ)。若某位为0,则该位相对应的中断按IRQ模式处理,为1则以FIQ模式进行处理,该寄存器初始化值为0x00000000,即所有中断皆以IRQ模式进行处理。(详细请参考s3c2410操作手册)。
INTMSK/ INTSUBMSK 寄存器为中断屏蔽寄存器 ,INTMSK为主中断屏蔽寄存器,INTSUBMSK为副中断屏蔽寄存器。INTMSK有效位为32,INTSUBMSK有效位为11,这两个寄存器各个位与SRCPND和SUBSRCPND分别对应。它们的作用是决定该位相应的中断请求是否被处理。若某位被设置为1,则该位相对应的中断产生后将被忽略(CPU不处理该中断请求),设置为0则对其进行处理。这两个寄存器初始化后的值是0xFFFFFFFF和0x7FF,既默认情况下所有的中断都是被屏蔽的。
到目前为止我们总共讲解了SRCPND,INTMOD,INTMSK,SUBSRCPND,INTSUBMSK INTPND 寄存器可能是整个中断处理过程中我们要特别注意的一个寄存器了,他的操作比较特别,怎么特别?请听我慢慢道来
正如你所见的,INTPND 寄存器与SRCPND长得一模一样,但他们在中断异常处理中却扮演着不同的角色,如果说SRCPND是中断信号进入中断处理模块后所经过的第一个场所的话,那么INTPND 则是中断信号在中断处理模块里经历的最后一个寄存器。它的每个位对应一个中断请求,若该位被置1,则表示相应的中断请求被触发,描述到这里你可能会发现它不仅和SRCPND长得一模一样,就连功能都一样,其实不然,他们在功能上有着重大的区别。SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND 在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理。于是我们可以有一个总结:SRCPND说明了有什么中断被触发了,INTPND说明了CPU即将或已经在对某一个中断进行处理。
特别注意:每当某一个中断被处理完之后,我们必须手动地把SRCPND/SUBSRCPND , INTPND三个寄存器中与该中断相应的位由1设置为0,刚才我说INTPND的操作很特别,它的特别之处就在于对当我们要把该寄存器中某个值为1的位设置为0时,我们不是往该位置0,而是往该位置1。假设SRCPND=0x00000003,INTPND=0x00000001,该值说明当前0号中断和1号中断被触发,但当前正在被处理的是0号中断,处理完毕后我们应该这样设置INTPND和SRCPND:
SRCPND=0x00000002 //位0被置为0
INTPND =0x00000001 //位0被置为0(方法是往该位写入1)
INTOFFSET寄存器的功能则很简单,它的作用只是用于表明哪个中断正在被处理。
下面我用INT_TIMER0, INT_TIMER2和INT_UART0三个中断完整地介绍一次中断异常处理。首先我们得做几个假设:
假设1:这三个中断的屏蔽被取消。
假设2:PRIORITY寄存器中ARB_MODE2,ARB_MODE5皆为0,既不进行优先级的自动旋转排序,任何时候ARBITER2,ARBITER5控制的中断组优先级次序分别为0-1-2-3-4-5和1-2-3-4。
假设3:这三个中断皆为IRQ类型。
假设4:这三个中断同时被触发。
INT_TIMER0, INT_TIMER2和INT_UART0三个中断被同时触发,此时三个中断信号流向SRCPND寄存器,使该寄存器中的第10位,12位,28位被置为1,中断信号继续向前流经INTMASK 寄存器,这三个中断都没有被屏蔽,于是信号进一步流经INTMODE寄存器,这三个中断皆为IRQ类型,故中断信号继续向前流向PRIORITY寄存器,经过优先级判断,INT_TIMER0中断信号使INTPND 寄存器的第10位置1(INT_TIMER0优先级最高),此时INTOFFSET 寄存器的值为10,CPU转向相应的中断服务例程进行处理。处理完毕后,我们的程序将INTPND和SRCPND的第10置为0,至此INT_TIMER0中断处理完毕。此时SRCPND 的第12位,28位仍为1(这两个中断请求未被处理),故他们会继续被CPU已刚才描述的方式进行处理。
上一篇:ARM基本接口之外部中断实验
下一篇:ARM中断向量程序实例
史海拾趣
|
USB 精油蜡烛 蜡烛是营造气氛的好东西,但是乱滴的蜡油和引发火灾的可能性,让科科们敬而远之。没关系,现在有兼顾安全与便利的产品出现啦,这款 USB 烛光灯座是浪漫的好选择,采用 USB 或两颗3号电池供电,LED 模拟的烛火相当逼真,更妙的是要熄 ...… 查看全部问答> |
|
【FPGA技术问题】关于区域约束(Area Constraints) nArea Constraints是Floorplanner最容易、最有效的应用 n大型设计首选布局工具- Floorplanner p在综合中,为了防止单独的component名称被改变,选择“Keep Hierarchy”参数选项 p设计的每个组成部分可以被约束限定到某一个区域 p ...… 查看全部问答> |
|
我们打算在X01HT这款手机上进行软件开发,有谁知道哪里有厂商开发包提供(收费的也可以), 可以通知我,非常感谢!QQ:176609958 邮箱:mchsh1985@126.com … 查看全部问答> |
|
在看一个步进电机的驱动程序,有个问题: 步进电机的物理地址是0x28000006,对应的虚拟地址是0xd3000006,不懂的是这个是怎么计算出来的? 32位有4G的虚拟地址,我只知道是怎么进行内存映射的,但是对于GPIO口怎么映射的,不怎么懂! 请指教,谢谢!… 查看全部问答> |
|
免费风暴来袭 - 快来申请 MSP430 LaunchPad 开始您的设计之旅吧! 德仪社区搞的活动,今天开始了哦 http://www.deyisupport.com/question_answer/f/55/t/6227.aspx… 查看全部问答> |
|
我用的是板子F28335 ezDSP 3組SCI都被使用了 因為工作環境震動很大 所有的電路板都會被震動到 板子已經固定不知道怎麼再固定了... 因為GPS的資料一直發生 收不到的情形 (震動很大的時候資料就斷了) 後來實驗結果發現 SCIC RX 的PI ...… 查看全部问答> |
|
职位:项目工程师 地点:上海 职责:负责的项目为汽车动力总成零部件,电机、逆变器等;协助项目经理管理项目进程(公司设置的项目经理主要是面向客户的,所以项目工程师要在研发的技术等问题上协助项目经理)。 要求:1、有motor、inventor等类 ...… 查看全部问答> |
|
很开心能拿到Helper2416的开发板,从拿到开发板初,就准备全身心的投入进去进行相应的学习,要学习就要有个学习的方法不是,咱是摸着石头过河。OK,先进行资料的整理了,先从BBS的贴子入手吧,https://bbs.eeworld.com.cn/thread-441984-1-1.html从 ...… 查看全部问答> |
|
本人每天都会花点时间逛各种论坛,看帖子,学技术。本人比较低调,基本上不喜欢发帖子,最近在这个电子工程师论坛逛了几次,看了很多帖子,发现,这里面的大部分人都有一个通病,发帖子必须回复能看。本是一个技术交流的论坛,被你们这帮人搞得都是 ...… 查看全部问答> |




