<?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 Re: Secondary CAN bootloader LPC11C24 (interrupts in user app are not running) in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527070#M9323</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by R2D2 on Sat Feb 13 02:21:53 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: Puschmann&lt;/STRONG&gt;&lt;BR /&gt;I read in AN??? that I must copy my vector table from my user app to static RAM...&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As shown in: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fforum%2F2nd-bootloader-requiring-the-same-interrupt-in-bootloader-and-main-application" rel="nofollow" target="_blank"&gt;https://www.lpcware.com/content/forum/2nd-bootloader-requiring-the-same-interrupt-in-bootloader-and-main-application&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You are copying 2k (512 * 4 bytes)&amp;nbsp; :quest:&amp;nbsp; :~ &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 19:25:14 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T19:25:14Z</dc:date>
    <item>
      <title>Secondary CAN bootloader LPC11C24 (interrupts in user app are not running)</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527067#M9320</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:44:20 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have written a bootloader for the LPC11C24, that works so far. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The Blinky program from the LPCOpen is running when I flash the firmware with the bootloader, but it does not supports interrupts in my user app. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I copy the vector table from my user app to the location of the vector table of the bootloader before I call the user app.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there anything else to be noted?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void run_userApp(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int entry;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;SysTick-&amp;gt;CTRL = ~(1&amp;lt;&amp;lt;0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_DisableIRQ(SysTick_IRQn);&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;// copy first 0x200 bytes (vector table)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Prepare_Copy((uint32_t *)APP_START_ADDR, (uint32_t *)0x10000000, 512);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;// User RAM Mode. Interrupt vectors are re-mapped to Static RAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCTL -&amp;gt; SYSMEMREMAP = 0x01;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __enable_irq();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __set_MSP(*(uint32_t *)APP_START_ADDR);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;entry = *((volatile unsigned int *)(APP_START_ADDR + 4));&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; ((void(*)(void))entry)();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527067#M9320</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:12Z</dc:date>
    </item>
    <item>
      <title>Re: Secondary CAN bootloader LPC11C24 (interrupts in user app are not running)</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527068#M9321</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mysepp on Sat Feb 13 01:15:23 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The above function is called by bootloader to start user app?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is it not the task of user app to setup and enable interrupts, &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;so it can (at least theoretically) run stand-alone without bootloader (perhaps relocation needed)?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I would call user app with disabled interrupts and user app can enable them if it wants to.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Other question: What happens? Does it crash? Does it just not call interrupts, but main() of user app is called,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;because you see blinking LEDs. Usually each user app does its own initialisation,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;perhaps settings you have done in bootloader or in run_user_app() function are overwritten.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527068#M9321</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:13Z</dc:date>
    </item>
    <item>
      <title>Re: Secondary CAN bootloader LPC11C24 (interrupts in user app are not running)</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527069#M9322</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:09:21 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for your reply!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The above function is called by my bootloader. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When the bootloader starts a CRC value is checked. If CRC is OK the methode run_user app is called to start the user app.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The user app does run fine, but the interrupts are not supported. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I read in AN??? that I must copy my vector table from my user app to static RAM (doing in prepare_copy(...))&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @brief Copy a number of words from source to destination&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param src: Pointer to source address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param dst: Pointer to destination&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param len: Number of words to copy&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void Prepare_Copy( uint32_t * src, uint32_t * dst, uint32_t len )&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(dst != src)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(len)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dst++ = *src++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len -= 4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; and then set the system memory remap register to 0x01 (UM10398, page 26) to select that the ARM interrupt vectors are read from SRAM.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527069#M9322</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:13Z</dc:date>
    </item>
    <item>
      <title>Re: Secondary CAN bootloader LPC11C24 (interrupts in user app are not running)</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527070#M9323</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by R2D2 on Sat Feb 13 02:21:53 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: Puschmann&lt;/STRONG&gt;&lt;BR /&gt;I read in AN??? that I must copy my vector table from my user app to static RAM...&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As shown in: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fforum%2F2nd-bootloader-requiring-the-same-interrupt-in-bootloader-and-main-application" rel="nofollow" target="_blank"&gt;https://www.lpcware.com/content/forum/2nd-bootloader-requiring-the-same-interrupt-in-bootloader-and-main-application&lt;/A&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You are copying 2k (512 * 4 bytes)&amp;nbsp; :quest:&amp;nbsp; :~ &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527070#M9323</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:14Z</dc:date>
    </item>
    <item>
      <title>Re: Secondary CAN bootloader LPC11C24 (interrupts in user app are not running)</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527071#M9324</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 03:26:11 MST 2016&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanky for your reply!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;No I not copy 2K, because I decrement len -= 4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes I read this thread in your link and it's the source of my run_userApp&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 19:25:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/Secondary-CAN-bootloader-LPC11C24-interrupts-in-user-app-are-not/m-p/527071#M9324</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T19:25:14Z</dc:date>
    </item>
  </channel>
</rss>

