TI中文支持网
TI专业的中文技术问题搜集分享网站

dsp c5517 中断嵌套的问题?

老师:我刚刚试了在串口中断中添加一下语句 :

interrupt void UART_intrDispatch(void) //串口中断
{
     Uint8 temp;
     Uint8 i;

     CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断
    asm(" NOP"); // Wait one cycle
    asm(" BCLR INTM"); //开全局中断

    IRQ_disable(UART_EVENT); //关闭串口中断

    ……串口处理程序
   IRQ_enable(UART_EVENT); //打开串口中断
}

就是加了     CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断
    asm(" NOP"); // Wait one cycle
    asm(" BCLR INTM"); //开全局中断

我发现程序很容易死机,是不是我写的有问题?

user4117338:

我整个程序中有4个中断 (1)外部中断0   (2)定时器1中断 (3)uart接收中断 (4) uart_tx_dma  发送完成中断。

我外部中断0 每隔50ms响应一次(外部电平触发),定时器0每隔10ms响应一次自己计时,串口中断不停的接收数据。

现在我要保证数据进入 串口_isr时,若是定时器响应要能打断串口中断,先执行定时器1中断,等定时器1中断处理完成,再处理未处理完的串口_isr,

(1)关闭外部中断0,就响应(2)(3)两个中断, 在串口中断中添加以下语句–没有问题。

CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断    asm(" NOP"); // Wait one cycle    asm(" BCLR INTM"); //开全局中断

(2)我打开外部中断0,让外部中断0每隔50ms响应一次,还响应(2)(3)(4)中断 在串口中断中添加以下语句—–程序执行一会就会死机。

CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断    asm(" NOP"); // Wait one cycle    asm(" BCLR INTM"); //开全局中断

麻烦老师帮我好好的分析下原因。真的比较急切的需要解决这个问题。

user4117338:

回复 user4117338:

我是裸跑的,没有用到操作系统

Shine:

回复 user4117338:

请问死机具体是什么现象?是完全跑飞了还是还在自己代码中?

user4117338:

回复 Shine:

完全跑飞了,

我外部中断是每隔50ms响应一次,    

再在串口中断中开启定时器1中断嵌套:

CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断// CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 & 0x0010; //只允许定时器中断 asm(" NOP"); // Wait one cycle asm(" BCLR INTM"); //开全局中断

程序就很容易跑飞

若是关闭外部中断,在串口中断开启–定时器1中断嵌套就没有问题

CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断// CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 & 0x0010; //只允许定时器中断asm(" NOP"); // Wait one cycleasm(" BCLR INTM"); //开全局中断

user4117338:

回复 user4117338:

老师 我在串口中加这几句开发定时器中断的–有没有问题啊

CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 | 0x0010; //只允许定时器中断// CSL_CPU_REGS->IER0 = CSL_CPU_REGS->IER0 & 0x0010; //只允许定时器中断asm(" NOP"); // Wait one cycleasm(" BCLR INTM"); //开全局中断

Shine:

回复 user4117338:

IER你在程序初始化的时候就使能了吧?没必要在中断子程序中再打开,在中断子程序中把总中断打开就可以了。

另外,你代码里的中断比较多,试试加大stack, heap size。

user4117338:

回复 Shine:

我的cmd文件如附件1

cmd文件中   .stack    >  DARAM0                /* Primary system stack        */ 这个我设置了

但是 heap size 这个没有设置  

user4117338:

回复 user4117338:

老师 麻烦您帮我看下我这个cmd文件是否有问题  , heap size这个应该如何正确设置?

赞(0)
未经允许不得转载:TI中文支持网 » dsp c5517 中断嵌套的问题?
分享到: 更多 (0)