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

TMS570中断问题

TMS570LS0432 多个IRQ中断同时触发或中断嵌套CPU会如何处理?为何会进入异常中断中?

gaoyang9992006:

这个多个中断同时触发没有优先级的吗?

—————-

在IRQ处理函数起始处通过如下所示汇编代码进行现场保护,处理完毕后再进行恢复。

同时在保护好现场后需要将优先级等于或小于本身的IRQ中断禁掉,恢复现场后再将相应中断打开。中断关闭打开操作可以通过VIM进行。这样就可以实现高优先IRQ的

嵌套处理。

#pragma INTERRUPT(rtiCompare0Interrupt, IRQ)

void rtiCompare0Interrupt(void)

{

/* USER CODE BEGIN (39) */

/* USER CODE END */

rtiREG1->INTFLAG = 1U;

asm(" STMFD SP!, {R0-R12, LR}");/*Save R0- R12, LR_irq*/

asm(" mrs lr, spsr"); /* Copy SPSR_irq to LR */

asm(" STMFD SP!, {LR}"); /* Save SPSR_irq */

asm(" MSR CPSR_c, #0x1F"); /* Enable IRQ (Sys Mode) */

asm(" STMFD SP!, {LR}"); /* Save LR */

rtiDisableNotification(rtiNOTIFICATION_COMPARE0);/*Disable rtiCompare1 Interrupt iteself */

rtiNotification(rtiNOTIFICATION_COMPARE0);

//asm(" LDMFD SP!, {R0-R12}");/*Restore R0-R12*/

asm(" LDMFD SP!, {LR}"); /* Restore LR */

asm(" MSR CPSR_c, #0x92"); /* Disable IRQ (IRQ Mode) */

asm(" LDMFD SP!, {LR}"); /* Restore SPSR_irq to LR */

asm(" MSR SPSR_cxsf, LR"); /* Copy LR to SPSR_irq */

asm(" LDMFD SP!, {R0-R12, LR}");/* Restore LR */

rtiEnableNotification(rtiNOTIFICATION_COMPARE0);/*Enable rtiCompare1 Interrupt */

上面是RTI嵌套中断的例程,你参考一下。

stef lu:

回复 gaoyang9992006:

感谢答复,TMS570LS0432中断嵌套进入异常中断是因为中断服务占用cpu资源太多吗?

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