I am working with an ez430-RF2500 using CCS 5.3 and wish to update the program on the end device using the wireless link. I.e. make the end device field servicable.
I have programmed multiple bootloaders for the LM4F chip, one family of bootloaders being wireless. A bootloader is what I call a small program that gets a data stream over UART, CAN or wireless and reprograms a second program into another portion of memory, then jumps to it. Basically the same as the MSP430's UART bootloader in ROM, which I have never used.
The memory layout of the MSP430 is different AND StellarisWare is not there to help you. So I have a few questions:
1) Is there a MSP430 example of what I am trying to do? I assume not, so if not...
2) In the linker command file, about the only user changable address range is for the segment usually called FLASH. Correct? (I have done it, moving the base from 0x800 to 0xC800)
3) Most importantly, the ISRs are at a fixed FLASH address range (FF. Correct? (The LM4F has the interrupt vectors figured out at the base address of the program.)
4) If so, then I have two programs that need to use the same ISR vectors. Is the appropriate approach:
Use an alternative to the #pragma vector/__interrupt to define the interrupts for the bootloader. Both the bootloader and target application need to load the last 32 bytes of memory at run time to get the interrupts correct. This would be similar to writing my own version of StellarisWare's interrupt register routines.
5) Do users do this with the MSP430? It seems while you are updating the ISR vectors, you could easily brick your processor, assuming both bootloader and app use ISRs.
6) Or is a better way just to make the bootloader a polled rather than ISR application? (That would be ugly.)
Thanks for considering an involved question.