打印

请高手帮忙解决C6000中断嵌套的问题,急!

[复制链接]
4581|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
superhechao|  楼主 | 2009-12-11 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 superhechao 于 2009-12-11 14:31 编辑

由于C6000默认的中断不支持嵌套,部分程序如下:
vector.asm
;====================================================================
EXT_INT4:                                       
         STW      B0, *B15--[1]
    ||   MVKL     _FIFO_ISR, B0
         MVKH     _FIFO_ISR, B0   
         B        B0
         LDW      *++B15[1], B0
         NOP      2
         NOP
         NOP
EXT_INT5:                                       
         STW      B0, *B15--[1]
    ||   MVKL     _BP_ISR, B0
         MVKH     _BP_ISR, B0   
         B        B0
         LDW      *++B15[1], B0
         NOP      2
         NOP
         NOP


ISR.C
============================
interrupt void FIFO_ISR()  
{

//搬移数据,时间很短
}

interrupt void BP_ISR()  
{

//处理数据,时间较长
}

============================

因为_BP_ISR的处理时间很长,而_FIFO_ISR处理频率较高,导致进入_BP_ISR的时候,漏掉了部分_FIFO_ISR的接收,如何在处理_BP_ISR的时候嵌套FIFO_ISR的中断呢?
请高手们针对此问题指点。

注:
1)  主程序中还有更低优先级更长的任务,不能把_BP_ISR放在主程序中执行。
2)  系统结构比较复杂,没有使用DSP/BIOS。
3)   有人建议用DMA来搬移数据,但FIFO缓存的帧比较多,使用非常不便。
十分感谢,QQ:82169587

相关帖子

沙发
asaa| | 2009-12-12 18:27 | 只看该作者
应根据优先级来决策  当一个任务占用时间较长的时候 cpu当然不可能有能力处理每一个可能的事件,若cpu的处理能力大于处理事件能力的总和的时候(包括效率因子) 则可以考虑查询任务切换,其实中断频率过高时 cpu的效率降低较明显

使用特权

评论回复
板凳
yxwsz| | 2009-12-14 22:50 | 只看该作者
你的设计都有问题;
耗时长的处理任务不应该放在ISR里面。
对于DSP而言,不擅长处理非常频繁的中断,DSP的特长在于处理数据流,比如读取FIFO里面的数据,使用EVENT来触发DMA反而是更好的方式。
在BP_ISR里面发送一个semephore,然后再一个任务里面进行处理数据,是更好的方法。
如果DSP里面的程序比较复杂,强烈建议使用DSP BIOS。

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝