Since BitMasher uses many of the MCU's peripherals, interrupts are extensively used. To avoid scattering ISRs directly called by the CPU in different source files, they are consolidated in BM_ISR. However, the actual user-defined routines can be defined in separate source files. As a result, there is a registration process when creating an ISR for a particular peripheral.

For example, TIMER1 is used as the frame update (or VSYNC) timer for the render engine. The user-defined ISR is written in BM_RenderEngine.c:

  BM_ServiceQueue_addItemToServiceQueue(BM_SERVICE_UI, NULL);

However, when the TIMER1 interrupt is triggered, the function, TIMER1_IRQHandler() in BM_ISR.c is executed. To ensure that BM_RE_VSYNCISR is executed, the function must be registered with BM_ISR:


This ensures that when TIMER1_IRQHandler is executed, BM_RE_VSYNCISR is also executed.