Hard fault during interrupt request

I am trying to port a project to an NRF52810.  The project uses a bootloader with a modified transport to work with a proprietary RF protocol.  The bootloader/app works on the nRF52833 and nRF52840 with different build configurations.  

The hard fault occurs when the app tries to jump to an interrupt.  It seems that the interrupt vectors are not being redirected correctly in the app. 

Is there something else that I'm missing?

Here are the section placements:

App:

FLASH_PH_START=0x0
FLASH_PH_SIZE=0x30000
RAM_PH_START=0x20000000
RAM_PH_SIZE=0x6000
FLASH_START=0x1000
FLASH_SIZE=0x30000
RAM_START=0x20000000
RAM_SIZE=0x6000
BL_FLASH_START=0x21000
BL_FLASH_SIZE=0xd000

Bootloader:

FLASH_PH_START=0x0
FLASH_PH_SIZE=0x30000
RAM_PH_START=0x20000000
RAM_PH_SIZE=0x6000
FLASH_START=0x1A000
FLASH_SIZE=0x14000
MBR_PARAMS_PAGE_START=0x2E000
MBR_PARAMS_PAGE_SIZE=0x1000
BOOT_SETTING_PAGE_START=0x2F000
BOOT_SETTING_PAGE_SIZE=0x1000
RAM_START=0x20000008
RAM_SIZE=0x5ff8

Parents Reply
  • Here is the SCB->ICSR register after the NVIC_SetPendingIRQ call, but before the interrupt fires:

    Here it is after the hard fault:

    Other things that changed in the bootloader are the startup files to use the 52810 versions.  I also modified nrf_bootloader_dfu_timers.c to use RTC0.  RTC1 is being used by app_timer and there is no RTC2 on the 810.

    The app works when the flash start is 0x0000 instead of 0x1000.  If I set flash start to 0x1000 and load the mbr hex without the bootloader, it faults.  

Children
Related