Hi, I'm working on bringing up nuttx on the c139. I am running this as I described previously by jumping from 0x2000 to 0x10000 with a small firmware image there and then nuttx is configured to run from flash at 0x10000. I configured nuttx RAM to live at 0x800100 to skip the exception vectors area that the compal loader sets up.
NuttX is coming up somewhat but getting stuck on an unregistered interrupt #21 which seems strange since there are 21 interrupts and I thought they might be 0-based so not sure what's going on here. Was wondering if there was some state that the compal loader setup that is giving me problems or if there is some other issue going on. If anyone has an idea off-hand let me know. If I take a DEBUGASSERT() out is when I get the info about irq 21. With the DEBUGASSERT() in it seems I'm trying to do initialization during interrupt handling somehow? "This API should not be called from interrupt handlers" is the comment near the assert in sem_wait(). Attached is a serial log from the phone booting up. I've added a lot of debug logging beyond what is normally in NuttX. I included first a log with DEBUGASSERT() included and then one without. Thanks,Craig
~ key=20 pressed ~~ Powering off due to keypress. ~A@ftmtoolerrorAÂC os_start: Entry os_start: Initialize the logic that determine unique process IDs. os_start: Assign the process ID of ZERO to the idle task. mm_initialize: Heap: start=80183c size=4188099 mm_addregion: Region 1: base=80183c size=4188080 irq_initialize: irq_initialize ENTER irq_initialize: adding irq_unexpected_isr to irq 0 irq_initialize: adding irq_unexpected_isr to irq 1 irq_initialize: adding irq_unexpected_isr to irq 2 irq_initialize: adding irq_unexpected_isr to irq 3 irq_initialize: adding irq_unexpected_isr to irq 4 irq_initialize: adding irq_unexpected_isr to irq 5 irq_initialize: adding irq_unexpected_isr to irq 6 irq_initialize: adding irq_unexpected_isr to irq 7 irq_initialize: adding irq_unexpected_isr to irq 8 irq_initialize: adding irq_unexpected_isr to irq 9 irq_initialize: adding irq_unexpected_isr to irq 10 irq_initialize: adding irq_unexpected_isr to irq 11 irq_initialize: adding irq_unexpected_isr to irq 12 irq_initialize: adding irq_unexpected_isr to irq 13 irq_initialize: adding irq_unexpected_isr to irq 14 irq_initialize: adding irq_unexpected_isr to irq 15 irq_initialize: adding irq_unexpected_isr to irq 16 irq_initialize: adding irq_unexpected_isr to irq 17 irq_initialize: adding irq_unexpected_isr to irq 18 irq_initialize: adding irq_unexpected_isr to irq 19 irq_initialize: adding irq_unexpected_isr to irq 20 irq_initialize: irq_initialize EXIT os_start: Initialize the watchdog facility sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT os_start: clock_initialize() os_start: before sig_initialize() sig_initialize: sig_initialize() ENTER sig_allocateblock: sig_allocateblock() ENTER, nsigs=16 sig_allocateblock: sig_allocateblock()< before kmm_malloc() mm_malloc: mm_malloc(heap,size=384) ENTER mm_malloc: mm_malloc(), before mm_takesemaphore(heap) mm_takesemaphore: mm_takesemaphore() ENTER mm_takesemaphore: mm_takesemaphore(), PID=0 taking sem_wait: sem_wait(sem) up_assert: Assertion failed at file:semaphore/sem_wait.c line: 107 up_dumpstate: sp: 00801780 up_dumpstate: IRQ stack: up_dumpstate: base: 0080063c up_dumpstate: size: 00000400 up_dumpstate: User stack: up_dumpstate: base: 00801838 up_dumpstate: size: 00000800 up_stackdump: 00801780: 00000001 00011f40 00000400 0080063c 00800a40 00000800 00801838 00801780 up_stackdump: 008017a0: 00011fe8 0000006b 0000006b 00033e38 00014994 00801188 0001a8a4 00800a40 up_stackdump: 008017c0: ffffffff 0001a8d4 0001ae08 00801188 00004900 0001ae10 00801800 00000190 up_stackdump: 008017e0: 00801188 0000003c 00017cfc 00000003 00801800 00000000 00016570 0001a4dc up_stackdump: 00801800: 00000180 0001658c 00000000 00800010 00801154 000166f4 00034370 000343a8 up_stackdump: 00801820: 0001677c 00013670 003fe7c3 0080183c 00000010 00000000 e52829c1 b6e966ce
~ key=20 pressed ~~ Powering off due to keypress. ~A@ftmtoolerrorAÂC os_start: Entry os_start: Initialize the logic that determine unique process IDs. os_start: Assign the process ID of ZERO to the idle task. mm_initialize: Heap: start=80183c size=4188099 mm_addregion: Region 1: base=80183c size=4188080 irq_initialize: irq_initialize ENTER irq_initialize: adding irq_unexpected_isr to irq 0 irq_initialize: adding irq_unexpected_isr to irq 1 irq_initialize: adding irq_unexpected_isr to irq 2 irq_initialize: adding irq_unexpected_isr to irq 3 irq_initialize: adding irq_unexpected_isr to irq 4 irq_initialize: adding irq_unexpected_isr to irq 5 irq_initialize: adding irq_unexpected_isr to irq 6 irq_initialize: adding irq_unexpected_isr to irq 7 irq_initialize: adding irq_unexpected_isr to irq 8 irq_initialize: adding irq_unexpected_isr to irq 9 irq_initialize: adding irq_unexpected_isr to irq 10 irq_initialize: adding irq_unexpected_isr to irq 11 irq_initialize: adding irq_unexpected_isr to irq 12 irq_initialize: adding irq_unexpected_isr to irq 13 irq_initialize: adding irq_unexpected_isr to irq 14 irq_initialize: adding irq_unexpected_isr to irq 15 irq_initialize: adding irq_unexpected_isr to irq 16 irq_initialize: adding irq_unexpected_isr to irq 17 irq_initialize: adding irq_unexpected_isr to irq 18 irq_initialize: adding irq_unexpected_isr to irq 19 irq_initialize: adding irq_unexpected_isr to irq 20 irq_initialize: irq_initialize EXIT os_start: Initialize the watchdog facility sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT os_start: clock_initialize() os_start: before sig_initialize() sig_initialize: sig_initialize() ENTER sig_allocateblock: sig_allocateblock() ENTER, nsigs=16 sig_allocateblock: sig_allocateblock()< before kmm_malloc() mm_malloc: mm_malloc(heap,size=384) ENTER mm_malloc: mm_malloc(), before mm_takesemaphore(heap) mm_takesemaphore: mm_takesemaphore() ENTER mm_takesemaphore: mm_takesemaphore(), PID=0 taking sem_wait: sem_wait(sem) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc(), after mm_takesemaphore(heap) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc() EXIT sig_allocateblock: sig_allocateblock(), after kmm_malloc() sig_allocateblock: sig_allocateblock(), i=0 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=1 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=2 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=3 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=4 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=5 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=6 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=7 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=8 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=9 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=10 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=11 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=12 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=13 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=14 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=15 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock() EXIT sig_allocateblock: sig_allocateblock() ENTER, nsigs=8 sig_allocateblock: sig_allocateblock()< before kmm_malloc() mm_malloc: mm_malloc(heap,size=192) ENTER mm_malloc: mm_malloc(), before mm_takesemaphore(heap) mm_takesemaphore: mm_takesemaphore() ENTER mm_takesemaphore: mm_takesemaphore(), PID=0 taking sem_wait: sem_wait(sem) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc(), after mm_takesemaphore(heap) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc() EXIT sig_allocateblock: sig_allocateblock(), after kmm_malloc() sig_allocateblock: sig_allocateblock(), i=0 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=1 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=2 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=3 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=4 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=5 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=6 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock(), i=7 sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_allocateblock: sig_allocateblock() EXIT mm_malloc: mm_malloc(heap,size=320) ENTER mm_malloc: mm_malloc(), before mm_takesemaphore(heap) mm_takesemaphore: mm_takesemaphore() ENTER mm_takesemaphore: mm_takesemaphore(), PID=0 taking sem_wait: sem_wait(sem) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc(), after mm_takesemaphore(heap) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT mm_malloc: mm_malloc(heap,size=256) ENTER mm_malloc: mm_malloc(), before mm_takesemaphore(heap) mm_takesemaphore: mm_takesemaphore() ENTER mm_takesemaphore: mm_takesemaphore(), PID=0 taking sem_wait: sem_wait(sem) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc(), after mm_takesemaphore(heap) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT mm_malloc: mm_malloc(heap,size=128) ENTER mm_malloc: mm_malloc(), before mm_takesemaphore(heap) mm_takesemaphore: mm_takesemaphore() ENTER mm_takesemaphore: mm_takesemaphore(), PID=0 taking sem_wait: sem_wait(sem) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc(), after mm_takesemaphore(heap) irqsave: irqsave() irqrestore: irqrestore() mm_malloc: mm_malloc() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sq_addlast: sq_addlast() ENTER sq_addlast: sq_addlast() EXIT sig_initialize: sig_initialize() EXIT os_start: after sig_initialize() os_start: pthread_initialize() os_start: fs_initialize() os_start: before up_initialize() up_initialize: up_initialize() ENTER up_initialize: up_initialize(), before up_calibratedelay() up_initialize: up_initialize(), before up_color_intstack() up_initialize: up_initialize(), before up_addregion() up_initialize: up_initialize(), before up_irqinitialize() up_irqinitialize: calypso_irq.c up_irqinitialize() up_irqinitialize: calypso_irq.c up_irqinitialize(), before calypso_exceptions_install() up_irqinitialize: calypso_irq.c up_irqinitialize(), before calypso_bootrom(1) up_irqinitialize: calypso_irq.c up_irqinitialize(), before set_default_priorities() set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(0))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(1))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(2))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177602, IRQ_REG(ILR_IRQ(3))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177616, IRQ_REG(ILR_IRQ(4))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(5))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(6))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177642, IRQ_REG(ILR_IRQ(7))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177622, IRQ_REG(ILR_IRQ(8))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177646, IRQ_REG(ILR_IRQ(9))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177652, IRQ_REG(ILR_IRQ(10))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177612, IRQ_REG(ILR_IRQ(11))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177662, IRQ_REG(ILR_IRQ(12))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(13))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(14))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(15))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177602, IRQ_REG(ILR_IRQ(16))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177636, IRQ_REG(ILR_IRQ(17))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177612, IRQ_REG(ILR_IRQ(18))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177606, IRQ_REG(ILR_IRQ(19))) set_default_priorities: calypso_irq.c set_default_priorities(), putreg16(val=177776, IRQ_REG(ILR_IRQ(20))) up_irqinitialize: calypso_irq.c up_irqinitialize(), mask all interrupts off up_irqinitialize: calypso_irq.c up_irqinitialize(), clear all pending interrupts up_irqinitialize: calypso_irq.c up_irqinitialize(), before irqrestore() irqrestore: irqrestore() irq_dispatch: irq_dispatch(irq=21,context) irq_dispatch: vector is irq_unexpected_isr irq_dispatch: then dispatch to the interrupt handler irqsave: irqsave() irq_unexpected_isr: irq: 21 up_assert: Assertion failed at file:irq/irq_unexpectedisr.c line: 85 up_dumpstate: sp: 008005dc up_dumpstate: IRQ stack: up_dumpstate: base: 0080063c up_dumpstate: size: 00000400 up_stackdump: 008005c0: 0000001f 00017ce0 0080063c 008005dc 008005c0 008005c0 60000053 00000001 up_stackdump: 008005e0: 00011eb4 00000400 0080063c 00800a40 00000800 00801838 008005dc 00011fe8 up_stackdump: 00800600: 00000055 00000055 00033c30 00013b38 008017d8 00000015 00013a9c 008017d8 up_stackdump: 00800620: 00000015 00013b04 000107bc 008017d8 15000000 00000000 00010074 008017d8 up_dumpstate: sp: 008017d8 up_dumpstate: User stack: up_dumpstate: base: 00801838 up_dumpstate: size: 00000800 up_stackdump: 008017c0: 00000000 0003345e 0003593c 00017c40 00801810 000331dc 00000019 00000001 up_stackdump: 008017e0: 00000019 00000053 0003593c 00000001 00000001 0000003f 00036c00 00000000 up_stackdump: 00801800: 00000000 00000000 00000000 0080181c 000102bc 000102c8 60000053 00010648 up_stackdump: 00801820: 0001b4c8 000136c8 003fe7c3 0080183c 00000010 00000000 c52829c1 a7e96ece up_registerdump: R0: 00000019 00000001 00000019 00000053 0003593c 00000001 00000001 0000003f up_registerdump: R8: 00036c00 00000000 00000000 00000000 00000000 0080181c 000102bc 000102c8 up_registerdump: CPSR: 60000053 irqsave: irqsave()