void measure_irq_speed(void) { #undef TESTS #define TESTS 64 int n; dword t; float f; float test_timePR[TESTS]; float test_timeRP[TESTS]; float timer_time=1193181; // timer freq in Hz test_irq(); for(n=0; n<TESTS; n++) { t=test_irq(); test_timePR[n]=(t&0x0000FFFF); test_timeRP[n]=(t&0xFFFF0000)>>16; } f=0; for(n=0; n<TESTS; n++) f=f+test_timePR[n]; f=f/TESTS; irqPR_speed=(f/2)/timer_time; f=0; for(n=0; n<TESTS; n++) f=f+test_timeRP[n]; f=f/TESTS; irqRP_speed=(f/2)/timer_time; }
/** * @brief GPIO Interrupt handler function * @internal * * Invoked whenever an activated gpio interrupt is triggered by a rising * or falling edge. */ void __attribute__((__no_instrument_function__)) GPIO_IRQHandler(void) { if (IO_INT_STAT & BIT0) { /* interrupt(s) on PORT0 pending */ unsigned long int_stat_f = IO0_INT_STAT_F; /* save content */ unsigned long int_stat_r = IO0_INT_STAT_R; /* save content */ IO0_INT_CLR = int_stat_f; /* clear flags of fallen pins */ IO0_INT_CLR = int_stat_r; /* clear flags of risen pins */ test_irq(0, int_stat_f, int_stat_r, gpioint0); } if (IO_INT_STAT & BIT2) { /* interrupt(s) on PORT2 pending */ unsigned long int_stat_f = IO2_INT_STAT_F; /* save content */ unsigned long int_stat_r = IO2_INT_STAT_R; /* save content */ IO2_INT_CLR = int_stat_f; /* clear flags of fallen pins */ IO2_INT_CLR = int_stat_r; /* clear flags of risen pins */ test_irq(2, int_stat_f, int_stat_r, gpioint2); } VICVectAddr = 0; /* Acknowledge Interrupt */ }
void GPIO_IRQHandler(void) { if (IO_INT_STAT & BIT0) { /* interrupt(s) on PORT0 pending */ unsigned long int_stat_f = IO0_INT_STAT_F; /* save content */ unsigned long int_stat_r = IO0_INT_STAT_R; /* save content */ IO0_INT_CLR = int_stat_f; /* clear flags of fallen pins */ IO0_INT_CLR = int_stat_r; /* clear flags of risen pins */ test_irq(0, int_stat_f, int_stat_r); } if (IO_INT_STAT & BIT2) { /* interrupt(s) on PORT2 pending */ unsigned long int_stat_f = IO2_INT_STAT_F; /* save content */ unsigned long int_stat_r = IO2_INT_STAT_R; /* save content */ IO2_INT_CLR = int_stat_f; /* clear flags of fallen pins */ IO2_INT_CLR = int_stat_r; /* clear flags of risen pins */ test_irq(2, int_stat_f, int_stat_r); } VICVectAddr = 0; /* Acknowledge Interrupt */ }