pico-sdk/test/cmsis_test/cmsis_test.c
2025-01-26 13:30:56 -06:00

42 lines
914 B
C

#include <stdio.h>
#if PICO_RP2040
#include "RP2040.h"
#else
#include "RP2350.h"
#endif
#include "pico/stdlib.h"
#include "hardware/irq.h"
__STATIC_FORCEINLINE int some_function(int i) {
return __CLZ(i);
}
static bool pendsv_called, irq_handler_called;
void PendSV_Handler(void) {
pendsv_called = true;
}
void DMA_IRQ_0_Handler(void) {
irq_handler_called = true;
irq_clear(DMA_IRQ_0_IRQn);
}
int main(void) {
stdio_init_all();
for(int i=0;i<10;i++) {
printf("%d %d\n", i, some_function(i));
}
SCB->ICSR = SCB_ICSR_PENDSVSET_Msk;
printf("PENDSV: ");
puts(pendsv_called ? "SUCCESS" : "FAILURE");
printf("DMA_IRQ_0: ");
irq_set_enabled(DMA_IRQ_0_IRQn, true);
irq_set_pending(DMA_IRQ_0_IRQn);
puts(irq_handler_called ? "SUCCESS" : "FAILURE");
bool ok = pendsv_called && irq_handler_called;
puts(ok ? "PASSED" : "FAILED");
return !ok;
}