| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #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;
- }
|