<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Reinvoke (ISP) not working in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596528#M23047</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lea on Sat Feb 13 00:24:55 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using a LPCA 11C24 and flash new firmware over the primary CANopen bootloader. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My user app process a command to start the reinvoke function. But this causes a crash. I read in other posts that it is important to turn PLL off, set timer value to it defaults., so I modiy my ipa_reinvoke methode&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code &amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @brief Prepare an invoke µC to call isp-command reinvoke&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void iap_reinvoke_bootloader(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint32_t cmd[5] = {IAP_REINVOKE_ISP_CMD,0,0,0,0};&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint32_t result[4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cmd[0] = IAP_REINVOKE_ISP_CMD;// reinvoke ISP command&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;__disable_irq();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// make sure 32-bit timer 1 is turned on before calling ISP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKCTRL |= 0x00400;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_CT32B1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// make sure GPIO clock is turned on before calling ISP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKCTRL |= 0x00040;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_GPIO);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// make sure IO configuration clock is turned on before calling ISP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKCTRL |= 0x10000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// AHB clock divider must 1:1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKDIV = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_SetSysClockDiv(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// disabele PLL&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKSEL = 0;// enable IRQ oscillator&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKUEN = 0x01;// update MLCK clock source&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKUEN = 0x00;// toggle update register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKUEN = 0x01;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while (!(LPC_SYSCTL-&amp;gt;MAINCLKUEN &amp;amp; 0x01))// wait until updated&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// reset the stack pointer to point to the top of the stack minus 32 byte for IAP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// for LPC11Cxx where top of RAM (8kB) is 0x1000_2000: MSP = (0x1000_20000 - 0x20 = 0x1000_1FE0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//__set_MSP((uint32_t)0x100001FE0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//__set_MSP((uint32_t)0x100002000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set stack pointer to ROM value (reset default) */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__set_MSP(*((uint32_t *) 0x100001FE0));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// the cortex M0 needs to synchronize the CPU cache&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__ISB();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;iap_entry(cmd, result);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;\code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone have a tip for me, what am I doing wrong?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:25:55 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:25:55Z</dc:date>
    <item>
      <title>Reinvoke (ISP) not working</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596528#M23047</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lea on Sat Feb 13 00:24:55 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using a LPCA 11C24 and flash new firmware over the primary CANopen bootloader. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My user app process a command to start the reinvoke function. But this causes a crash. I read in other posts that it is important to turn PLL off, set timer value to it defaults., so I modiy my ipa_reinvoke methode&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;code &amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @brief Prepare an invoke µC to call isp-command reinvoke&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void iap_reinvoke_bootloader(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint32_t cmd[5] = {IAP_REINVOKE_ISP_CMD,0,0,0,0};&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static uint32_t result[4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;cmd[0] = IAP_REINVOKE_ISP_CMD;// reinvoke ISP command&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;__disable_irq();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// make sure 32-bit timer 1 is turned on before calling ISP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKCTRL |= 0x00400;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_CT32B1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// make sure GPIO clock is turned on before calling ISP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKCTRL |= 0x00040;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_GPIO);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// make sure IO configuration clock is turned on before calling ISP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKCTRL |= 0x10000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_IOCON);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// AHB clock divider must 1:1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;SYSAHBCLKDIV = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_Clock_SetSysClockDiv(1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// disabele PLL&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKSEL = 0;// enable IRQ oscillator&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKUEN = 0x01;// update MLCK clock source&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKUEN = 0x00;// toggle update register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL-&amp;gt;MAINCLKUEN = 0x01;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;while (!(LPC_SYSCTL-&amp;gt;MAINCLKUEN &amp;amp; 0x01))// wait until updated&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// reset the stack pointer to point to the top of the stack minus 32 byte for IAP&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// for LPC11Cxx where top of RAM (8kB) is 0x1000_2000: MSP = (0x1000_20000 - 0x20 = 0x1000_1FE0)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//__set_MSP((uint32_t)0x100001FE0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//__set_MSP((uint32_t)0x100002000);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set stack pointer to ROM value (reset default) */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__set_MSP(*((uint32_t *) 0x100001FE0));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// the cortex M0 needs to synchronize the CPU cache&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__ISB();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_GPIO_SetPinOutLow(LPC_GPIO, 0, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;iap_entry(cmd, result);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;lt;\code&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does anyone have a tip for me, what am I doing wrong?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596528#M23047</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:55Z</dc:date>
    </item>
    <item>
      <title>Re: Reinvoke (ISP) not working</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596529#M23048</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by vtw.433e on Sat Feb 13 02:28:56 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;You have changed the stack and are then calling gpio functions. I don't think that will work and is probably causing the crash. In fact you shouldn't need to change the stack as the reinvoke ISP call will reset it for you. &lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596529#M23048</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:56Z</dc:date>
    </item>
    <item>
      <title>Re: Reinvoke (ISP) not working</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596530#M23049</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Lea on Sat Feb 13 02:41:39 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Great :D &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You solve my problem. That was the reason. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you very, very much&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Reinvoke-ISP-not-working/m-p/596530#M23049</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:57Z</dc:date>
    </item>
  </channel>
</rss>

