This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS570LS3137: interrupt nested and data abort issue

Part Number: TMS570LS3137

Hi,

  I want to use two GIO interrupt at the same time responsed.Nowly,I have set high priority and low priority level, one interrupt is 2.5ms happened, the other is 10 ms happened,  the 10ms interrupt could be intterupted by 2.5ms, when the 10ms interrupt service routine delay time more than 2.5ms, it will happen enter the _abort handle.I don't know why it will enter data _abort routine. Please answer me. Thanks!

  • Hello Alban,

    The ARM Cortex-R4/R5 microcontroller does not support interrupt nesting in hardware. Only a two level nesting is thinkable when using IRQ and FIQ, where the FIQ can interrupt the IRQ. This device does not support more than one IRQ to be taken at a time.

    You can configure one GIO INT (every 10ms) as low level (VIM channel 23) and other GIO INT (every 2.5ms) as high level (VIM channel 9). When both interrupts occur at same time, 2.5ms GIO INT is taken first, and 10ms GIO interrupt is pending until 2.5ms INT finishes.But if the CPU is processing the 10ms interrupt (10ms ISR), the CPU is not interrupted to take 2.5ms interrupt.

    If you want to implement a nexting interrupt using SW, please refer to this application note:

    http://www.ti.com/lit/an/spna219/spna219.pdf

    In your ISR, you shall not re-enable the IRQ otherwise the dabort will be generated.

  • Hello QJ,

      Thanks for  your answer. I had set the 2.5ms interrupt as vim channel 9,and 10ms interrupt as channel 23. The 2.5ms could be responed when 10ms interrupt service routine enable interupt. But there is one question, which is the 10ms service routine delay time less than 2.7ms, it could work normally,if delay time more than 2.7ms,it will entry dabort.

      I have read the document of spna218, I want to understand there are two irq interruption that RTI0 and RTI1,why could they interrupt nest?

       I also want to know how to get the irqDispatch_c.c/irqDispatch_a.asm files.

  • Hello Alban,

    Generally, an ISR (interrupt service routine) should be as short and as fast as possible. If another interrupt fires while your ISR is running, it will not be serviced until your ISR completes. Data may be lost if the latency is too long.

    Did you use the same counter for 2.5ms interrupt (RTI compare x) and 10ms interrupt (RTI compare y)?

    Please download the source code form the link in spna218: www.ti.com/.../spna219.

    ..\spna219.zip\SPNA219\IRQ Dispatcher