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

C6655的uPP_Isr中断函数内设置断点,无法回到主程序?

我在调试C6655的uPP_Isr时候遇到了这个问题,一旦在uPP_Isr中断函数内设置断点进行调试,最终中断函数都会运行到

#ifdef __TI_EABI__
interrupt void _c66x_mask_int8_isr (void)
#else
interrupt void c66x_mask_int8_isr (void)
#endif
{
    c66xISRtbl[8]();
}

这个地方停止,无法回到主程序。

而且检查发现c66xISRtbl[8]确实是指向uPP_Isr,请问该如何解决?

Nancy Wang:

这个是哪里的程序?是单步执行的时候停止还是全速运行的时候?有没有报错?

Nancy Wang:

c66xISRtbl[8]();这个函数能执行通过吗?

user4504841:

回复 Nancy Wang:

Tronlong开发板的例程,如果不在uPP_Isr中断函数内设置断点,主程序通信完全没问题,但是一旦在中断函数内设置断点,就无法回到主程序内,全速运行发现程序会跑飞,单步执行还发现会在 { c66xISRtbl[8](); }

 这个部分执行完后跑飞。

user4504841:

回复 Nancy Wang:

不会报错

Nancy Wang:

回复 user4504841:

图片看不到,重新附件上传一下。
不打断点能跑那说明程序逻辑上没问题,只能建议多设一些断点,看跳到哪一步可以执行。

user4504841:

回复 Nancy Wang:

跑飞的问题找到了,因为我在主程序内使用了一个循环

while(upp_interrupt_count < 402)
{}

来判断一次完整传输是否完成(正常一次传输完成后,upp_interrupt_count = 402),但是程序一旦进入到中断函数后,就无法再次进入中断,导致upp_interrupt_count技术不再增加,这个循环变成死循环。

当把这个循环换成一个delay后,程序可以正常传输完成。

Delay(0xfffff);
//while(upp_interrupt_count < 402)
//{
//
//}

中断函数为:

/****************************************************************************/
/**/
/*中断服务函数*/
/**/
/****************************************************************************/
void uPP_Isr(void)
{//	unsigned int intr_dmai_status, intr_dmaq_status;unsigned int intr_dmai_status, intr_dmaq_status;intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);intr_dmaq_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHQ);while (intr_dmai_status != 0 || intr_dmaq_status != 0){if (intr_dmai_status & uPP_INT_EOL){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOL);upp_interrupt_count++;}if (intr_dmai_status & uPP_INT_EOW){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_EOW);upp_interrupt_count++;}if (intr_dmai_status & uPP_INT_ERR){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_ERR);upp_error_count++;}if (intr_dmai_status & uPP_INT_UOR){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_UOR);upp_error_count++;}if (intr_dmai_status & uPP_INT_DPE){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHI, uPP_INT_DPE);upp_error_count++;}if (intr_dmaq_status & uPP_INT_EOL){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_EOL);upp_interrupt_count++;}if (intr_dmaq_status & uPP_INT_EOW){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_EOW);upp_interrupt_count++;}if (intr_dmaq_status & uPP_INT_ERR){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_ERR);upp_error_count++;}if (intr_dmaq_status & uPP_INT_UOR){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_UOR);upp_error_count++;}if (intr_dmaq_status & uPP_INT_DPE){uPPIntClear(SOC_UPP_0_REGS, uPP_DMA_CHQ, uPP_INT_DPE);upp_error_count++;}intr_dmai_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHI);intr_dmaq_status = uPPIntStatus(SOC_UPP_0_REGS, uPP_DMA_CHQ);}uPPEndOfInt(SOC_UPP_0_REGS);CICClearSystemEvent(SOC_CIC_0_REGS, INTC0_uPPINT);
}

您有时间请帮我看一下,为什么进入一次中断函数中断后,就无法再次进入中断函数。

谢谢!!!

赞(0)
未经允许不得转载:TI中文支持网 » C6655的uPP_Isr中断函数内设置断点,无法回到主程序?
分享到: 更多 (0)