You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
rp2: crash on soft reboot with DMA IRQ enabled and DMA active #18765
(gdb) bt
#0 SVC_Handler () at /micropython/lib/pico-sdk/src/rp2_common/pico_crt0/crt0.S:334
#1 <signal handler called>
#2 0x1003bf7e in dma_channel_abort (channel=0) at /micropython/lib/pico-sdk/src/rp2_common/hardware_dma/include/hardware/dma.h:763
#3 rp2_dma_close (self_in=0x20005750) at /micropython/ports/rp2/rp2_dma.c:436
#4 0x10015a86 in fun_builtin_1_call (self_in=0x1006114c <rp2_dma_close_obj>, n_args=<optimized out>, n_kw=<optimized out>, args=0x20041f64)
at /micropython/py/objfun.c:70
#5 0x10020ce2 in mp_call_function_n_kw (fun_in=fun_in@entry=0x1006114c <rp2_dma_close_obj>, n_args=n_args@entry=1, n_kw=n_kw@entry=0, args=args@entry=0x20041f64)
at /micropython/py/runtime.c:712
#6 0x10020d9c in mp_call_function_1 (fun=fun@entry=0x1006114c <rp2_dma_close_obj>, arg=<optimized out>, arg@entry=0x20005750) at /micropython/py/runtime.c:690
#7 0x1002243e in mp_call_function_1_protected (fun=0x1006114c <rp2_dma_close_obj>, arg=0x20005750) at /micropython/py/runtime_utils.c:33
#8 0x1000c3f4 in gc_sweep_run_finalisers () at /micropython/py/gc.c:606
#9 0x1000c55e in gc_collect_end () at /micropython/py/gc.c:549
#10 0x1000c5a2 in gc_sweep_all () at /micropython/py/gc.c:544
#11 0x1003a684 in main (argc=<optimized out>, argv=<optimized out>) at /micropython/ports/rp2/main.c:282
(gdb) l
431 dma_channel_config config = { .ctrl = 0 };
432 dma_channel_configure(channel, &config, NULL, NULL, 0, false);
433
434 // Abort this channel. Must be done after clearing EN bit in control
435 // register due to errata RP2350-E5.
436 dma_channel_abort(channel); // <------
437
438 // Clean up interrupt handler to ensure garbage collection
439 mp_irq_obj_t *irq = MP_STATE_PORT(rp2_dma_irq_obj[channel]);
440 MP_STATE_PORT(rp2_dma_irq_obj[channel]) = MP_OBJ_NULL;
Activity
agatti commentedon Mar 11, 2026
Stack trace:
rp2/rp2_dma: Disable DMA IRQ before clearing handler function.
rp2/rp2_dma: Disable DMA IRQ before clearing handler function.