完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. AIC已经正确编程,AIC_SVR也已经写入正确的中断服务程序的入口地址。且中断已经
使能 2. 地址0x18(IRQ的中断向量地址)的指令为 LDR PC,[PC,#&F20] 当NIRQ到来,且CPSR的I位为0时,步骤如下: ① CPSR被拷贝到SPSR_irq,当前程序计数器PC的值被保存到IRQ链接寄存器(R14_irq),同时PC(R15)自身也被赋予了新值0x18。在接下来的时钟里(处理器向0x1C取指令),ARM核使R14_irq减4 ②ARM内核进入IRQ模式 ③当指令LDR PC,[PC,#&F20]得到执行(ARM为流水线结构,当前PC之前还有两条指令)后,PC被赋予了AIC_IVR的内容。读取AIC_IVR具有如下作用: ·将当前中断设置为被挂起的最高优先级中断,并把它作为最高优先级的中断;当前中断级别则设置为此中断的优先级。 ·将NIRQ的信号撤消(即使系统没有用到向量功能,也必须去读AIC_IVR,以便将NIRQ撤消)。 ·如果中断为边沿触发,则读取AIC_IVR会自动将中断清除 ·将当前的中断的优先级推入堆栈 ·返回当前中断的AIC_SVR的值。 ④上述步骤将程序跳到了对应的中断服务程序。接下来的第一步是保存链接寄存器LR(R14_irq)和SPSR(SPSR_irq)。如果需要在中断返回时,把LR的值直接赋给程序计数器,则LR首先要减去4才能保存。否则在中断返回时,LR要首先减去4之后才能拷贝给PC。 ⑤清零CPSR的位I就可以使其他中断不被屏蔽,再施加的NIRQ可以被内核接受。只要发生的中断的优先级高于当前中断的优先级,嵌套中断就会发生。 ⑥接着中断例程可以保存相应的寄存器以保护现场。如果此时有高优先级中断发生,则处理器将重复执行从步骤①开始的动作。要注意的是,如果中断是电平敏感的,那么在中断结束前要清除中断源。 ⑦在退出中断前要首先置位CPSR的位I,以便屏蔽其他中断,保证多个中断有序地完成。 ⑧在结束中断之前还必须执行一次对AIC_EOICR的写操作,向AIC表明中断已经完成。存放于堆栈的前一个当前中断优先级将被弹出并作为当前中断优先级。如果此时系统又有一个挂起的中断,其优先级比刚才结束的中断的优先级低(或相等)、但又高于从堆栈弹出来的中断的优先级,则将重新施加NIRQ;但是,中断步骤不会立即开始,因为此时CPSR的I位是置位的。 ⑨SPSR(SPSR_irq)被恢复。最后是链接寄存器LR恢复到PC。程序返回到中断发生前之处。SPSR也恢复为CPSR,中断屏蔽状态恢复为SPSR所指明的状态。 |
|
相关推荐
|
|
有用啊,TS201的中断也是这个样子的吧
|
|
|
|
|
|
786 浏览 0 评论
4210 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2520 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2926 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31442 浏览 11 评论
72894 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:43 , Processed in 0.499113 second(s), Total 65, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号