Thank you...this is exactly what I was looking for!
In my application, the CPU is deeply embedded and is
not accessible so it cannot be reset or power cycled.
To prevent a situation where the device gets accidentally
stuck in the ISP software, I would like to resume normal
execution if the ISP software is not used for say 5 minutes.
If I set the watchdog to ~5 minutes before launching the ISP,
will the ISP code kick it (and thus never exit) or will it
allow the watchdog to timeout and reset the node 5 minutes
later?
--- In lpc2000@yahoogroups.com, "Richard" <richas@y...> wrote:
>
> Here is some code that will invoke the bootloader which will read
> P0.14 (after you have set it low) and initiate ISP.
>
> Richard
>
> /* ISP Invocation code Richard Soennichsen - Philips
> Semiconductors */
> /*
> 10/11/2004
> */
>
> /* define the SFR addresses, this may already be handled in a header
> file */
>
> #define MEMMAP (*((volatile unsigned int *) 0xE01FC040))
> #define IODIR0 (*((volatile unsigned int *) 0xE0028008))
> #define IOCLR0 (*((volatile unsigned int *) 0xE002800C))
> #define PINSEL0 (*((volatile unsigned int *) 0xE002C000))
> #define VPBDIV (*((volatile unsigned int *) 0xE01FC100))
> #define PLLCON (*((volatile unsigned int *) 0xE01FC080))
> #define PLLFEED (*((volatile unsigned int *) 0xE01FC08C))
>
>
> void (*bootloader_entry)(void); /* Declare the entry function */
> unsigned long temp; /*Temporary
> variable */
>
> void init(void)
> {
> temp = PINSEL0; /* Connect RxD0 & TxD0 pins to GPIO */
> PINSEL0 = temp & 0xFFFFFFF3;
>
> /* Select P0.14 as an output and P0.1 as an input */
> /* P0.1 is sampled to determine baud rate */
> temp = IODIR0;
> temp = temp | 0x4000;
> temp = temp & 0xFFFFFFFD;
> IODIR0 = temp;
>
> IOCLR0 = 0x4000; /* Clear P0.14 */
>
> /*
> Disconnect PLL if you want to do ISP at crystal frequency.
> Otherwise you need to pass the PLL freq when bootloader goes in
> ISP mode.
> cclk = crystal when PLL is disconnected
> cclk = PLL freq when PLL is connected.
>
> Disconnecting the PLL is recommended.
>
> *pllcon = 0x0; / disconnect the PLL
> */
> *pllfeed = 0xAA;
> *pllfeed = 0x55;
> */
>
> /*
> Set the VPB divider to 1/4 if you application changes the VPBDIV
> value.
> The bootloader is hard-coded to use the reset value of VPBDIV
> register
> *vpbdiv = 0x0;
> */
>
> /* Map bootloader vectors */
> MEMMAP = 0x0;
>
> /* Point to bootloader entry point i.e. reset vector 0x0 */
>
> bootloader_entry = (void (*)(void))(0x0);
> }
> /*
> Invoke the bootloader
> The bootloader will read pin P0.14 to detect if ISP is forced
> Since P0.14 is configured as an output and set to 0, the
> bootloader
> will go in ISP mode.
> */
> int main(void)
> {
> init();
> bootloader_entry();
> }
>
>
>
>
>
>
>
> --- In lpc2000@yahoogroups.com, Owen Mooney <ojm@s...> wrote:
> > Yup There shore is !
> >
> > In the LPC2106 anyway. I dunno about the rest of them. But it
> requrires a reset of the micro!
> >
> > Use the IAP instructions to erase the first block of flash memory.
> >
> > Drop the supply and bring it up again, and the chip detects the
> lost of a valid program
> > and automatically jumps to the ISP.
> >
> > I use this to update the firmware with P0.14 buried deep in a hunk
> of expoxy, but watch it,
> > Once the ISP is running anyone can steal your program !! I use a
> very unlikely pass code in the operating firmware to do this.
> >
> > Owen Mooney
> >
> > Subject:
> >
> >
> > Is there any way to launch the ISP software without having the BSL
> > jumper on? (i.e. does it have an entry point that does not check
> P0.14?)Message
Re: Any way to launch ISP ?
2004-11-19 by dave_albert
Attachments
- No local attachments were found for this message.