Other Parts Discussed in Thread: MSP430FR5969, CC1101
Tool/software:
I implemented the MSP430FRBoot example for MSP430FR5959. Since the example code is for FR5969, I followed the same memory map for the MSP430FR5959 controller in my application.
I am able to get the bootloader to boot correctly to the application space, but the application code gets stuck in the run_cinit in the while loop where the variables are being loaded into the run addresses using the CINIT tables.
I have attached a screenshot of the debug session. When I step through the while loop in the run_cinit function, the program control always ends up at address 0x000004 and I get an error message "No debug information available at address 0x04"
Can you please help me figure out why the run_cinit function goes to address 0x04 and does not complete successfully?
Code snippet is as follows:
/*------------------------------------------------------------------------*/
/* Process the compressed ELF cinit table. The format is as follows: */
/* |4-byte load addr|4-byte run addr| */
/* |4-byte load addr|4-byte run addr| */
/* */
/* Processing steps: */
/* 1. Read load and run address. */
/* 2. Read one byte at load address, say idx. */
/* 3. Get pointer to handler at handler_start[idx] */
/* 4. call handler(load_addr + 1, run_addr) */
/*------------------------------------------------------------------------*/
if (&__TI_Handler_Table_Base != &__TI_Handler_Table_Limit)
{
#if defined(__TI_EABI__) && defined(__TMS320C2000__)
char *const *table_ptr = cinit_start;
#else
char *const *table_ptr = __TI_CINIT_Base;
#endif
char *const *table_limit = __TI_CINIT_Limit;
while (table_ptr != table_limit)
{
char const *load_addr = *table_ptr++;
char *run_addr = *table_ptr++;
char handler_idx = *load_addr++;
handler_fn_t handler = __TI_Handler_Table_Base[handler_idx];
handler(load_addr, run_addr);
}
}
?
