Răsfoiți Sursa

!478 修正arm32的中断号有可能超出范围的问题
Merge pull request !478 from jesven/fix_arm32_irq_no

bernard 3 ani în urmă
părinte
comite
d662de9b8c
1 a modificat fișierele cu 5 adăugiri și 4 ștergeri
  1. 5 4
      libcpu/arm/cortex-a/trap.c

+ 5 - 4
libcpu/arm/cortex-a/trap.c

@@ -298,12 +298,13 @@ void rt_hw_trap_irq(void)
     }
 #else
     void *param;
-    int ir;
+    int ir, ir_real;
     rt_isr_handler_t isr_func;
     extern struct rt_irq_desc isr_table[];
 
     ir = rt_hw_interrupt_get_irq();
 
+    ir_real = ir & 0x3ff;
     if (ir == 1023)
     {
         /* Spurious interrupt */
@@ -311,14 +312,14 @@ void rt_hw_trap_irq(void)
     }
 
     /* get interrupt service routine */
-    isr_func = isr_table[ir].handler;
+    isr_func = isr_table[ir_real].handler;
 #ifdef RT_USING_INTERRUPT_INFO
-    isr_table[ir].counter++;
+    isr_table[ir_real].counter++;
 #endif
     if (isr_func)
     {
         /* Interrupt for myself. */
-        param = isr_table[ir].param;
+        param = isr_table[ir_real].param;
         /* turn to interrupt service routine */
         isr_func(ir, param);
     }