When I attempt to jump from my custom bootloader for a custom board with the K66 processor I get the following errors:
*** assert failed : ../drivers/fsl_clock.c:236 : g_xtal0Freq
*** assert failed : ../drivers/fsl_clock.c:813 : mcgpll0clk
*** assert failed : ../drivers/fsl_clock.c:236 : g_xtal0Freq
*** assert failed : ../drivers/fsl_clock.c:813 : mcgpll0clk
By looking at the disassembly and the map file for the loaded program I have determined that the stock pointer is on the HardFault_Handler for the loaded application. Is there something that I am not doing correctly or something that I could add to avoid these assert failed errors and going to the HardFault_Handler right away?
解決済! 解決策の投稿を見る。
My problems were that I was not setting the stack pointer correctly and that I was not disabling all of the clocks correctly before jumping.
My vector table
__attribute__ ((used, section(".isr_vector")))
void (* const g_pfnVectors[])(void) = {
// Core Level - CM4
&_vStackTop, // The initial stack pointer
ResetISR, // The reset handler
NMI_Handler, // The NMI handler
HardFault_Handler, // The hard fault handler
MemManage_Handler, // The MPU fault handler
BusFault_Handler, // The bus fault handler
UsageFault_Handler, // The usage fault handler
0, // Reserved
0, // Reserved
0, // Reserved
0, // Reserved
SVC_Handler, // SVCall handler
DebugMon_Handler, // Debug monitor handler
0, // Reserved
PendSV_Handler, // The PendSV handler
SysTick_Handler, // The SysTick handler
// Chip Level - MK66F18
DMA0_DMA16_IRQHandler, // 16 : DMA Channel 0, 16 Transfer Complete
DMA1_DMA17_IRQHandler, // 17 : DMA Channel 1, 17 Transfer Complete
DMA2_DMA18_IRQHandler, // 18 : DMA Channel 2, 18 Transfer Complete
DMA3_DMA19_IRQHandler, // 19 : DMA Channel 3, 19 Transfer Complete
DMA4_DMA20_IRQHandler, // 20 : DMA Channel 4, 20 Transfer Complete
DMA5_DMA21_IRQHandler, // 21 : DMA Channel 5, 21 Transfer Complete
DMA6_DMA22_IRQHandler, // 22 : DMA Channel 6, 22 Transfer Complete
DMA7_DMA23_IRQHandler, // 23 : DMA Channel 7, 23 Transfer Complete
DMA8_DMA24_IRQHandler, // 24 : DMA Channel 8, 24 Transfer Complete
DMA9_DMA25_IRQHandler, // 25 : DMA Channel 9, 25 Transfer Complete
DMA10_DMA26_IRQHandler, // 26 : DMA Channel 10, 26 Transfer Complete
DMA11_DMA27_IRQHandler, // 27 : DMA Channel 11, 27 Transfer Complete
DMA12_DMA28_IRQHandler, // 28 : DMA Channel 12, 28 Transfer Complete
DMA13_DMA29_IRQHandler, // 29 : DMA Channel 13, 29 Transfer Complete
DMA14_DMA30_IRQHandler, // 30 : DMA Channel 14, 30 Transfer Complete
DMA15_DMA31_IRQHandler, // 31 : DMA Channel 15, 31 Transfer Complete
DMA_Error_IRQHandler, // 32 : DMA Error Interrupt
MCM_IRQHandler, // 33 : Normal Interrupt
FTFE_IRQHandler, // 34 : FTFE Command complete interrupt
Read_Collision_IRQHandler, // 35 : Read Collision Interrupt
LVD_LVW_IRQHandler, // 36 : Low Voltage Detect, Low Voltage Warning
LLWU_IRQHandler, // 37 : Low Leakage Wakeup Unit
WDOG_EWM_IRQHandler, // 38 : WDOG Interrupt
RNG_IRQHandler, // 39 : RNG Interrupt
I2C0_IRQHandler, // 40 : I2C0 interrupt
I2C1_IRQHandler, // 41 : I2C1 interrupt
SPI0_IRQHandler, // 42 : SPI0 Interrupt
SPI1_IRQHandler, // 43 : SPI1 Interrupt
I2S0_Tx_IRQHandler, // 44 : I2S0 transmit interrupt
I2S0_Rx_IRQHandler, // 45 : I2S0 receive interrupt
Reserved46_IRQHandler, // 46 : Reserved interrupt
UART0_RX_TX_IRQHandler, // 47 : UART0 Receive/Transmit interrupt
UART0_ERR_IRQHandler, // 48 : UART0 Error interrupt
UART1_RX_TX_IRQHandler, // 49 : UART1 Receive/Transmit interrupt
UART1_ERR_IRQHandler, // 50 : UART1 Error interrupt
UART2_RX_TX_IRQHandler, // 51 : UART2 Receive/Transmit interrupt
UART2_ERR_IRQHandler, // 52 : UART2 Error interrupt
UART3_RX_TX_IRQHandler, // 53 : UART3 Receive/Transmit interrupt
UART3_ERR_IRQHandler, // 54 : UART3 Error interrupt
ADC0_IRQHandler, // 55 : ADC0 interrupt
CMP0_IRQHandler, // 56 : CMP0 interrupt
CMP1_IRQHandler, // 57 : CMP1 interrupt
FTM0_IRQHandler, // 58 : FTM0 fault, overflow and channels interrupt
FTM1_IRQHandler, // 59 : FTM1 fault, overflow and channels interrupt
FTM2_IRQHandler, // 60 : FTM2 fault, overflow and channels interrupt
CMT_IRQHandler, // 61 : CMT interrupt
RTC_IRQHandler, // 62 : RTC interrupt
RTC_Seconds_IRQHandler, // 63 : RTC seconds interrupt
PIT0_IRQHandler, // 64 : PIT timer channel 0 interrupt
PIT1_IRQHandler, // 65 : PIT timer channel 1 interrupt
PIT2_IRQHandler, // 66 : PIT timer channel 2 interrupt
PIT3_IRQHandler, // 67 : PIT timer channel 3 interrupt
PDB0_IRQHandler, // 68 : PDB0 Interrupt
USB0_IRQHandler, // 69 : USB0 interrupt
USBDCD_IRQHandler, // 70 : USBDCD Interrupt
Reserved71_IRQHandler, // 71 : Reserved interrupt
DAC0_IRQHandler, // 72 : DAC0 interrupt
MCG_IRQHandler, // 73 : MCG Interrupt
LPTMR0_IRQHandler, // 74 : LPTimer interrupt
PORTA_IRQHandler, // 75 : Port A interrupt
PORTB_IRQHandler, // 76 : Port B interrupt
PORTC_IRQHandler, // 77 : Port C interrupt
PORTD_IRQHandler, // 78 : Port D interrupt
PORTE_IRQHandler, // 79 : Port E interrupt
SWI_IRQHandler, // 80 : Software interrupt
SPI2_IRQHandler, // 81 : SPI2 Interrupt
UART4_RX_TX_IRQHandler, // 82 : UART4 Receive/Transmit interrupt
UART4_ERR_IRQHandler, // 83 : UART4 Error interrupt
Reserved84_IRQHandler, // 84 : Reserved interrupt
Reserved85_IRQHandler, // 85 : Reserved interrupt
CMP2_IRQHandler, // 86 : CMP2 interrupt
FTM3_IRQHandler, // 87 : FTM3 fault, overflow and channels interrupt
DAC1_IRQHandler, // 88 : DAC1 interrupt
ADC1_IRQHandler, // 89 : ADC1 interrupt
I2C2_IRQHandler, // 90 : I2C2 interrupt
CAN0_ORed_Message_buffer_IRQHandler, // 91 : CAN0 OR'd message buffers interrupt
CAN0_Bus_Off_IRQHandler, // 92 : CAN0 bus off interrupt
CAN0_Error_IRQHandler, // 93 : CAN0 error interrupt
CAN0_Tx_Warning_IRQHandler, // 94 : CAN0 Tx warning interrupt
CAN0_Rx_Warning_IRQHandler, // 95 : CAN0 Rx warning interrupt
CAN0_Wake_Up_IRQHandler, // 96 : CAN0 wake up interrupt
SDHC_IRQHandler, // 97 : SDHC interrupt
ENET_1588_Timer_IRQHandler, // 98 : Ethernet MAC IEEE 1588 Timer Interrupt
ENET_Transmit_IRQHandler, // 99 : Ethernet MAC Transmit Interrupt
ENET_Receive_IRQHandler, // 100: Ethernet MAC Receive Interrupt
ENET_Error_IRQHandler, // 101: Ethernet MAC Error and miscelaneous Interrupt
LPUART0_IRQHandler, // 102: LPUART0 status/error interrupt
TSI0_IRQHandler, // 103: TSI0 interrupt
TPM1_IRQHandler, // 104: TPM1 fault, overflow and channels interrupt
TPM2_IRQHandler, // 105: TPM2 fault, overflow and channels interrupt
USBHSDCD_IRQHandler, // 106: USBHSDCD, USBHS Phy Interrupt
I2C3_IRQHandler, // 107: I2C3 interrupt
CMP3_IRQHandler, // 108: CMP3 interrupt
USBHS_IRQHandler, // 109: USB high speed OTG interrupt
CAN1_ORed_Message_buffer_IRQHandler, // 110: CAN1 OR'd message buffers interrupt
CAN1_Bus_Off_IRQHandler, // 111: CAN1 bus off interrupt
CAN1_Error_IRQHandler, // 112: CAN1 error interrupt
CAN1_Tx_Warning_IRQHandler, // 113: CAN1 Tx warning interrupt
CAN1_Rx_Warning_IRQHandler, // 114: CAN1 Rx warning interrupt
CAN1_Wake_Up_IRQHandler, // 115: CAN1 wake up interrupt
}; /* End of g_pfnVectors */
Hex values starting at 0x100000
20000000 00100221 0010029D 001018C5 001002A1 001002A3 001002A5 00000000 00000000 00000000 00000000
001002A7 001002A9 00000000 001002AB 001002AD 001015A5 001015AD 001015B5 001015BD 001015C5 001015CD
001015D5 001015DD 001015E5 001015ED 001015F5 001015FD 00101605 0010160D 00101615 0010161D 00101625
0010162D 00101635 0010163D 00101645 0010164D 00101655 0010165D 00101665 0010166D 00101675 0010167D
00101685 0010168D 00101695 0010169D 001016A5 001016AD 001016B5 001016BD 001016C5 001016CD 001016D5
001016DD 001016E5 001016ED 001016F5 001016FD 00101705 0010170D 00101715 0010171D 00101725 0010172D
00101735 0010173D 00101745 0010174D 00101755 0010175D 00101765 0010176D 00101775 0010177D 00101785
0010178D 00101795 0010179D 001017A5 001017AD 001017B5 001017BD 001017C5 001017CD 001017D5 001017DD
001017E5 001017ED 001017F5 001017FD 00101805 0010180D 00101815 0010181D 00101825 0010182D 00101835
0010183D 00101845 0010184D 00101855 0010185D 00101865 0010186D 00101875 0010187D 00101885 0010188D