1 #include <stdio.h> 2 3 #if PICO_RP2040 4 #include "RP2040.h" 5 #else 6 #include "RP2350.h" 7 #endif 8 #include "pico/stdlib.h" 9 #include "hardware/irq.h" 10 some_function(int i)11__STATIC_FORCEINLINE int some_function(int i) { 12 return __CLZ(i); 13 } 14 15 static bool pendsv_called, irq_handler_called; 16 PendSV_Handler(void)17void PendSV_Handler(void) { 18 pendsv_called = true; 19 } 20 DMA_IRQ_0_Handler(void)21void DMA_IRQ_0_Handler(void) { 22 irq_handler_called = true; 23 irq_clear(DMA_IRQ_0_IRQn); 24 } 25 main(void)26int main(void) { 27 stdio_init_all(); 28 for(int i=0;i<10;i++) { 29 printf("%d %d\n", i, some_function(i)); 30 } 31 SCB->ICSR = SCB_ICSR_PENDSVSET_Msk; 32 printf("PENDSV: "); 33 puts(pendsv_called ? "SUCCESS" : "FAILURE"); 34 printf("DMA_IRQ_0: "); 35 irq_set_enabled(DMA_IRQ_0_IRQn, true); 36 irq_set_pending(DMA_IRQ_0_IRQn); 37 puts(irq_handler_called ? "SUCCESS" : "FAILURE"); 38 return !(pendsv_called && irq_handler_called); 39 } 40