There are two implementations for the interrupt handler.
- INTERRUPT_USE_TABLE: uses tables for finding the right ISR.
- Uses link list to find the user ISR.
- INTERRUPT_USE_TABLE Space requirement:
- Array to hold CEC masks size: CEC_INTERRUPT_COUNT(9)*(2*int).9*2*4= 72B
- Array to hold isr function pointers IRQ_MAX(56)*sizeof(bfin_isr_t)= 896B
- Array for bit twidlling 32 bytes.
- Global Mask 8 bytes.
- Total = 1008 Bytes Aprox
Time requirements The worst case time is about the same for jumping to the user ISR. With a variance of one conditional statement.
- Using link list. Space requirement:
- Array to hold CEC mask CEC_INTERRUPT_COUNT(9)*(sizeof(vectors)). 9*3*4= 108B
- Array to hold isr IRQ_MAX(56)*sizeof(bfin_isr_t) The structure has additional pointers 56*7*4=1568B
- Global Mask 8 bytes. Total = 1684. Time requirements In the worst case all the lines can be on one CEC line to 56 entries have to be traversed to find the right user ISR. But this implementation has benefit of being flexible, Providing additional user assigned priority. and may consume less space if all devices are not supported. TODO: To place the dispatcher routine code in L1.