您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> 同优先级中断,DSP怎样处理?
本帖共有544个阅读者
发表帖子 发表投票 回复主题
同优先级中断,DSP怎样处理?
笑溜溜(论坛游民)
笑溜溜
头衔:社区公民
帮派:无帮无派
帖数:84
金钱:819
积分:107
注册时间:2012/12/13
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
同优先级中断,DSP怎样处理?
BF518---在我的程序里面有多个中断,其中两个中断是同优先级的,register_handler(ik_ivg13, MDMA_ISR);和register_handler(ik_ivg13, FlagA_ISR);PF引脚上升沿的中断和MDMA的中断。
才开始运行程序的时候本来是要执行MDMA中断,在使能了MDMA时然后函数就跳到了FlagA_ISR函数中,我觉的要是执行FlagA_ISR中断函数那应该是有PF引脚的上升沿触发,但是没有上升沿触发就执行了FlagA_ISR中断。后来我改成register_handler(ik_ivg12, FlagA_ISR);PFA中断优先级提高了就没事了,这是为什么?

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/6/26 15:52:13
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不清楚,处理器在处理中断时,有时也会出现优先级低的抢了优先级高的,通常都是屏蔽一些中断单独执行,需要时再打开。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2013/6/26 16:50:06
blackfin(论坛游民)
blackfin
头衔:社区公民
帮派:无帮无派
帖数:114
金钱:1105
积分:153
注册时间:2011/6/10
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如果想把两上中断设为同一优先级,如13。那你用如下注册后,13的中断服务为FlagA_ISR(MDMA_ISR无效)。
register_handler(ik_ivg13, MDMA_ISR);
register_handler(ik_ivg13, FlagA_ISR);
如果是
register_handler(ik_ivg13, FlagA_ISR);
register_handler(ik_ivg13, MDMA_ISR);
13的中断服务为MDMA_ISR(FlagA_ISR无效)。即谁最后注册了ik_ivg13,谁就是其中断服务。
而同一优先级处理不同中断,应该是只对ik_ivg13注册一次,然后在中断服务中判断是那个中断源触发的。
如:register_handler(ik_ivg13, FlagA_ISR);
然后,
EX_INTERRUPT_HANDLER(FlagA_ISR)
{
     if (FlagA触发?)
    {
         对应处理
     }

     if (MDMA触发?)
    {
         对应处理
    }
}
当然,也可以将其分配到两个不同的优先级。欢迎讨论。

这家伙很懒,什么也没有留下!
等级:论坛游民 参考IP地址:*.*.*.*
2013/7/3 8:25:18
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159166 Call, 1 Queries, Processed in 0.015625 second(s),