打印

中断嵌套问题

[复制链接]
1959|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
barryyan|  楼主 | 2009-8-2 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟初学ARM移植UCOS-II,我现在只会用一个中断函数的移植。如果牵涉到两个中断,怎么编写程序呢?譬如说KEY1按下触发中断,在中断中LED1闪亮;而当KEY2按下后又触发更高级的中断,它会触发UART发送。那请问程序的的大体框架应该怎么写呢?
  
下面是小弟自己的想法,望给予指点,谢谢。
void KEY1ISR()
{      
     OSIntEnter;     

     这里是执行代码 LED1亮
  
     OSIntExit();  
}
  
void KEY2ISR()
{
     OSIntEnter;  
      
     这里是执行代码 UART发送

     OSIntExit();  
}
(1)有个问题,执行OSIntEnter后OSIntNesting自动加1,退出ISR前调用OSIntExit,那OSIntNesting就自动减1,这样理解是否正确?
(2)设置中断优先级的问题,在哪个文件里可以设置中断优先级?如何设置?
望高手给予解答,小弟不胜感谢。

相关帖子

沙发
ciniao| | 2009-8-2 16:32 | 只看该作者
arm不支持自动中断重入 不是有FIQ可以用么 干吗非嵌套啊
如果真的要做 就得在中断服务程序里面关当前中断,保存寄存器,开中断
或者在第二个中断前切换到系统模式
ZLG有提供了相关代码,自己google一下

使用特权

评论回复
板凳
lonely8122| | 2009-8-2 17:39 | 只看该作者
(1)你的理解是正确的。
(2)如果你所用的MCU具有中断优先级分级的功能,那就会有相关的设置中断优先级的寄存器。
arm7的中断嵌套麻烦些,因为共用一个中断入口,cortex-M3就方便多了。

使用特权

评论回复
地板
barryyan|  楼主 | 2009-8-2 19:35 | 只看该作者
3# lonely8122

谢谢你的帮助。我用的是CORTEX-M3,那只要在寄存器里设置相应的中断优先级就可以了。在UCOS中还是按照原来的写法,对吗?

使用特权

评论回复
5
barryyan|  楼主 | 2009-8-2 19:38 | 只看该作者
2# ciniao

谢谢你的帮助。对于FIQ我还不太熟悉。我想问下,在UCOS中是不是一般不用中断嵌套,而用FIQ,IRQ之类的。我看的参考书中有关这方面的资料几乎没有。能推荐点参考资料或者简单说一下它的用处吗?十分感谢。

使用特权

评论回复
6
lonely8122| | 2009-8-2 22:18 | 只看该作者
re:
“我用的是CORTEX-M3,那只要在寄存器里设置相应的中断优先级就可以了。在UCOS中还是按照原来的写法,对吗?”
  对的。
  cortex-M3没有FIQ和IRQ,各个中断源用的是不同的中断入口地址。建议看一下<cortex-M3 Technical Reference Manual>。

使用特权

评论回复
7
ciniao| | 2009-8-6 22:53 | 只看该作者
用不用嵌套或放不方便用要看具体的处理器,FIQ、IRQ是ARM7系列的中断类型,具体可参考北航出的arm嵌入式系统基础教程。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

137

帖子

0

粉丝