<?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>LPCXpresso IDEのトピックLPC11U24 and IAP Reinvoke ISP</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/LPC11U24-and-IAP-Reinvoke-ISP/m-p/588847#M28338</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by tarmo on Fri May 18 04:02:52 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; How do i start ISP as [B]MSC USB device[/B] on LPC11U24 using [B]IAP Reinvoke ISP[/B] command (57).&amp;nbsp; The following code works well on LPC1343 but not on LPC11U24.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; I can execute ISP as USB MSC device during reset or power on (PIO0_1 low &amp;amp; PIO0_3 high). &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; All other IAP commands are working well. So i think the problem is with init_msdstate() function. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#define IAP_LOCATION 0x1fff1ff1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;typedef void (*IAP)(unsigned int[], unsigned int[]);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IAP iap_entry = (IAP) IAP_LOCATION;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define CMD_SUCCESS 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int Command[5];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int Result[4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#define init_msdstate() *((uint32_t *)(0x10000054)) = 0x0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void EnterISP(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* make sure USB clock is turned on before calling ISP */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x04000;&lt;/SPAN&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_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x00400;&lt;/SPAN&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_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x00040;&lt;/SPAN&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_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x10000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* make sure AHB clock divider is 1:1 */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;SYSAHBCLKDIV = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Send Reinvoke ISP command to ISP entry point*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Command[0] = 57;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;init_msdstate(); /* Initialize Storage state machine */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set stack pointer to ROM value (reset default) This must be the last&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; piece of code executed before calling ISP, because most C expressions&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; and function returns will fail after the stack pointer is changed. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__set_MSP(*((uint32_t *) 0x1FFF0000)); /* inline asm function */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Enter ISP. We call "iap_entry" to enter ISP because the ISP entry is done&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; through the same command interface as IAP. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;iap_entry(Command, Result);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Not supposed to come back!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 00:16:34 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T00:16:34Z</dc:date>
    <item>
      <title>LPC11U24 and IAP Reinvoke ISP</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/LPC11U24-and-IAP-Reinvoke-ISP/m-p/588847#M28338</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by tarmo on Fri May 18 04:02:52 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; How do i start ISP as [B]MSC USB device[/B] on LPC11U24 using [B]IAP Reinvoke ISP[/B] command (57).&amp;nbsp; The following code works well on LPC1343 but not on LPC11U24.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; I can execute ISP as USB MSC device during reset or power on (PIO0_1 low &amp;amp; PIO0_3 high). &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; All other IAP commands are working well. So i think the problem is with init_msdstate() function. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#define IAP_LOCATION 0x1fff1ff1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;typedef void (*IAP)(unsigned int[], unsigned int[]);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;IAP iap_entry = (IAP) IAP_LOCATION;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define CMD_SUCCESS 0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int Command[5];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;unsigned int Result[4];&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#define init_msdstate() *((uint32_t *)(0x10000054)) = 0x0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void EnterISP(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* make sure USB clock is turned on before calling ISP */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x04000;&lt;/SPAN&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_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x00400;&lt;/SPAN&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_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x00040;&lt;/SPAN&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_SYSCON-&amp;gt;SYSAHBCLKCTRL |= 0x10000;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* make sure AHB clock divider is 1:1 */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SYSCON-&amp;gt;SYSAHBCLKDIV = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Send Reinvoke ISP command to ISP entry point*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Command[0] = 57;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;init_msdstate(); /* Initialize Storage state machine */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Set stack pointer to ROM value (reset default) This must be the last&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; piece of code executed before calling ISP, because most C expressions&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; and function returns will fail after the stack pointer is changed. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;__set_MSP(*((uint32_t *) 0x1FFF0000)); /* inline asm function */&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Enter ISP. We call "iap_entry" to enter ISP because the ISP entry is done&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; through the same command interface as IAP. */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;iap_entry(Command, Result);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Not supposed to come back!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:16:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/LPC11U24-and-IAP-Reinvoke-ISP/m-p/588847#M28338</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:16:34Z</dc:date>
    </item>
    <item>
      <title>Re: LPC11U24 and IAP Reinvoke ISP</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/LPC11U24-and-IAP-Reinvoke-ISP/m-p/588848#M28339</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Ex-Zero on Fri May 18 05:05:02 MST 2012&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;[Quote]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;All other IAP commands are working well. So i think the problem is with init_msdstate() function.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[/Quote]That's LPC13 code :rolleyes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;6. Initialize the mass storage state machine:&lt;BR /&gt;(uint32_t *) BulkStage = 0x10000054;&lt;BR /&gt;*BulkStage = 0x0;&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;SPAN&gt;I'm not familiar with LPC11Uxx, but I think (wild guess :eek:) you should try to reset your USB with something like&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;UM Table 191:&lt;/SPAN&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;Reset void(*void USBD_HW_API::Reset)(USBD_HANDLE_T hUsb)&lt;BR /&gt;Function to Reset USB device stack and hardware controller&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 00:16:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/LPC11U24-and-IAP-Reinvoke-ISP/m-p/588848#M28339</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T00:16:35Z</dc:date>
    </item>
  </channel>
</rss>

