Electronic – Continuing execution after ISP in LPC81x series

bootloaderlpcmicrocontroller

I am uploading software via serial ISP in to an LPC81x series microcontroller. This is a Cortex-M0+ chip. After software upload, I would like to start the execution of the uploaded software without having to reset the CPU externally.

There is a "Go " command in the serial ISP and the "lpc21isp" software uses it as such: "G 0 T\r\n". However, this does not seem to work as it has several problems:

  • The part of the program residing at address 0x00000000 is the interrupt vector table, not program code. Starting thumb mode execution at that address is just going to fault. However, I do not know what the "go" command really does.
  • Somebody needs to set up the interrupt table pointer (VTOR), reset all the pin configurations and invoke the reset handler. This is quite different from starting execution at a certain address.
  • The documentation says that using the "go" command on an address below 0x00000200 is not supported. In my case atleast the reset handler resides below that address.

I am open to any suggestions that would allow me to continue execution after ISP.

Just as extra information: the reason I wish to do this is that I do not have spare communication lines for reset or forcing ISP. I can, however, toggle the power to the chip. I would like the chip to unconditionally start in ISP mode, so I can update the software on every chip bootup if I wish.

Best Answer

I have the same problem. The ISP 'GO" command does not work for Cortex. In fact it can't work, because on a Cortex the initial SP is loaded from a particular address, not set by the code as for ARM chips.

My workaround is to reset the chip to force a reboot, by removing (and reapplying) the power. That's the only real way, because (at least on the chips I use) the 'reset' pin can be configured as GPIO.