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)17 void PendSV_Handler(void) {
18     pendsv_called = true;
19 }
20 
DMA_IRQ_0_Handler(void)21 void DMA_IRQ_0_Handler(void) {
22     irq_handler_called = true;
23     irq_clear(DMA_IRQ_0_IRQn);
24 }
25 
main(void)26 int 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