| } | } | ||||
| } | } | ||||
| // Long ago you could install your own systick interrupt handler by just | |||||
| // creating your own systick_isr() function. No longer. But if you | |||||
| // *really* want to commandeer systick, you can still do so by writing | |||||
| // your function into the RAM-based vector table. | |||||
| // | |||||
| // _VectorsRam[15] = my_systick_function; | |||||
| // | |||||
| // However, for long-term portability, use a MillisTimer object to | |||||
| // generate an event every millisecond, and attach your function to | |||||
| // its EventResponder. You can attach as a software interrupt, so your | |||||
| // code will run at lower interrupt priority for better compatibility | |||||
| // with libraries using mid-to-high priority interrupts. | |||||
| extern "C" volatile uint32_t systick_millis_count; | extern "C" volatile uint32_t systick_millis_count; | ||||
| void systick_isr(void) | void systick_isr(void) | ||||
| { | { | 
| void svcall_isr(void) __attribute__ ((weak, alias("unused_isr"))); | void svcall_isr(void) __attribute__ ((weak, alias("unused_isr"))); | ||||
| void debugmonitor_isr(void) __attribute__ ((weak, alias("unused_isr"))); | void debugmonitor_isr(void) __attribute__ ((weak, alias("unused_isr"))); | ||||
| void pendablesrvreq_isr(void) __attribute__ ((weak, alias("unused_isr"))); | void pendablesrvreq_isr(void) __attribute__ ((weak, alias("unused_isr"))); | ||||
| void systick_isr(void) __attribute__ ((weak, alias("unused_isr"))); | |||||
| void systick_isr(void); | |||||
| void dma_ch0_isr(void) __attribute__ ((weak, alias("unused_isr"))); | void dma_ch0_isr(void) __attribute__ ((weak, alias("unused_isr"))); | ||||
| void dma_ch1_isr(void) __attribute__ ((weak, alias("unused_isr"))); | void dma_ch1_isr(void) __attribute__ ((weak, alias("unused_isr"))); |