<?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>Kinetis Microcontrollers中的主题 Re: Help on Assembly for Cortex-M0/M0+</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288926#M11409</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Kan,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have found the root cause. Maybe we can not call it as the root cause, since I have not traced down to register level.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In my bootloader, I init MCG before GPIO(push button+LED) , timer and UART and control transfering to user application, since I though MCG is critical for all the modules. And MCG is configured as USB device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In my user application, there is another USB CDC application, so the MCG is configured as USB device as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If bootloader jumps to user application, then MCG has been configured twice. And for some reason, it returns as 0x01 from pll_init( ), as FEI ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then I swap the init order, I init GPIO at very beginning without MCG init and jumps to user application. It works now.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW, now I use your code. I found it is available from AN4370 USB DFU bootloader.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I prepare a document for updated AN4379 bootloader at &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-97782" title="https://community.freescale.com/docs/DOC-97782"&gt;https://community.freescale.com/docs/DOC-97782&lt;/A&gt;.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 30 Oct 2013 07:34:44 GMT</pubDate>
    <dc:creator>kai_liu</dc:creator>
    <dc:date>2013-10-30T07:34:44Z</dc:date>
    <item>
      <title>Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288919#M11402</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am upgrading AN4379 MSD bootloader from K60 to FRDM-KL25Z. Here is the code snippet.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void Switch_mode(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile uint_32&amp;nbsp; temp = 1;&amp;nbsp;&amp;nbsp; /* default the button is not pressed */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Get PC and SP of application region */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; New_sp&amp;nbsp; = ((uint_32_ptr)IMAGE_ADDR)[0];&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; New_pc&amp;nbsp; = ((uint_32_ptr)IMAGE_ADDR)[1];&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(temp)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((New_sp != 0xffffffff)&amp;amp;&amp;amp;(New_pc != 0xffffffff))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Run the application */&lt;/P&gt;&lt;P&gt;#if (!defined __MK_xxx_H__)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.w&amp;nbsp;&amp;nbsp; #0x2700,sr&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; New_sp,a0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; New_pc,a1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; a0,a7&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jmp&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (a1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#elif defined(__CWCC__)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp; r4,=New_sp&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp; sp, [r4]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp; r4,=New_pc&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ldr&amp;nbsp;&amp;nbsp; r5, [r4]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; blx&amp;nbsp;&amp;nbsp; r5&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;#elif defined(__IAR_SYSTEMS_ICC__)&lt;/P&gt;&lt;P&gt;#if defined (MCU_MKL25Z4)&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("msr&amp;nbsp;&amp;nbsp;&amp;nbsp; msp, New_sp");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("msr&amp;nbsp;&amp;nbsp;&amp;nbsp; psp, New_sp");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("mov&amp;nbsp;&amp;nbsp;&amp;nbsp; r5, New_pc");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("mov&amp;nbsp;&amp;nbsp;&amp;nbsp; pc, r5");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;#else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("mov32&amp;nbsp;&amp;nbsp; r4,New_sp");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp,[r4]");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("mov32&amp;nbsp;&amp;nbsp; r4,New_pc");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5, [r4]");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("blx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5");&lt;/P&gt;&lt;P&gt;#endif&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;#endif /* end (!defined __MK_xxx_H__) */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } /* EndIf */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;But IAR reports my assembly is wrong.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does anyone can recommend some assembly language covering Cortex-M0? Although we are working on high level language. Sometimes assembly programming is still very useful in highly optimized code and libraries.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 19 Oct 2013 09:49:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288919#M11402</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-19T09:49:56Z</dc:date>
    </item>
    <item>
      <title>Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288920#M11403</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Kai,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You may add the following assembly code in your project.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;; AREA&amp;nbsp;&amp;nbsp; CortexMx, CODE, READONLY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; name&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SECTION .noinit : CODE (2)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; PUBLIC boot_app&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;;New_sp: r0&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;;New_pc: r1&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;boot_app:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; ;PUSH&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {LR}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; msr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msp,r0&amp;nbsp; ;//set SP&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; blx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;//run!&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; POP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {PC}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; END&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;and modify your code like the following:&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;#elif defined(__IAR_SYSTEMS_ICC__)&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;#if defined (MCU_MKL25Z4)&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;STRONG style="font-style: inherit; font-family: inherit;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boot_app(New_sp,New_pc);&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;#else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("mov32&amp;nbsp;&amp;nbsp; r4,New_sp");&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sp,[r4]");&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("mov32&amp;nbsp;&amp;nbsp; r4,New_pc");&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("ldr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5, [r4]");&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm("blx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; r5");&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;#endif&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;Hope that helps,&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;B.R&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;Kan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Oct 2013 07:35:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288920#M11403</guid>
      <dc:creator>Kan_Li</dc:creator>
      <dc:date>2013-10-22T07:35:07Z</dc:date>
    </item>
    <item>
      <title>Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288921#M11404</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you. Kan.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Actually I have followed the another solution available from other bootloader project. Which uses R0/R1 as params' carriers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;#if defined (MCU_MKL25Z4)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JumpToUserApplication(New_sp,New_pc);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;#else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;...&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;static void JumpToUserApplication(LWord userSP, LWord userStartup)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;{&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; // set up stack pointer&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; __asm("msr msp, r0");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; __asm("msr psp, r0");&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; // Jump to PC (r1)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; __asm("mov pc, r1"); &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In early 8051 age, and other highly optimized DSP application, assembly is a must. It seems even in ARM world assembly sometimes very important as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you know any resources introduce Cortex-M0/M0+/M3/M4 assembly language? &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 23 Oct 2013 02:42:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288921#M11404</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-23T02:42:08Z</dc:date>
    </item>
    <item>
      <title>Re: Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288922#M11405</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Kai,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please kindly refer to the following attachment for details.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope that helps,&lt;/P&gt;&lt;P&gt;B.R&lt;/P&gt;&lt;P&gt;Kan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Oct 2013 07:53:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288922#M11405</guid>
      <dc:creator>Kan_Li</dc:creator>
      <dc:date>2013-10-24T07:53:13Z</dc:date>
    </item>
    <item>
      <title>Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288923#M11406</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I will spend my hours on them.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kan.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Oct 2013 09:02:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288923#M11406</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-24T09:02:12Z</dc:date>
    </item>
    <item>
      <title>Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288924#M11407</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Kan Li&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have an issue related to this topic. The bootloader I developed &lt;A href="https://community.nxp.com/message/337722"&gt;Any update fro AN4379 MSD device bootloader?&lt;/A&gt; can download firmware correctly, which is verified by inspecting via memory window, it can jumps to user application. But the user application (FRDM-KL25ZDemo-blinky) doesn't work.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So either user application, or bootloader has some bugs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I load re-directed user application in FRDM, runs from 0x8000. The demo works.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What's going on here? In principle, only three elements are important: SP/PC.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SP: Same before redirect vectors: 0x20002FF8&lt;/P&gt;&lt;P&gt;PC: redirected, from 0x0000 to 0x8000&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Maybe I got some confusion here. Please give me some directions. I will compare the AN2295 bootloader with AN4379 as well as cross-check.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Oct 2013 12:30:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288924#M11407</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-28T12:30:00Z</dc:date>
    </item>
    <item>
      <title>Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288925#M11408</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Kai,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am suspecting if the "&lt;STRONG style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; color: #3d3d3d;"&gt;JumpToUserApplication(New_sp,New_pc);&lt;/STRONG&gt;" you are using has some problem. Would you please try my code instead to see if any difference would be made. Thanks for your patience!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope that helps,&lt;/P&gt;&lt;P&gt;B.R&lt;/P&gt;&lt;P&gt;Kan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Oct 2013 04:02:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288925#M11408</guid>
      <dc:creator>Kan_Li</dc:creator>
      <dc:date>2013-10-30T04:02:53Z</dc:date>
    </item>
    <item>
      <title>Re: Help on Assembly for Cortex-M0/M0+</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288926#M11409</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, Kan,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have found the root cause. Maybe we can not call it as the root cause, since I have not traced down to register level.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In my bootloader, I init MCG before GPIO(push button+LED) , timer and UART and control transfering to user application, since I though MCG is critical for all the modules. And MCG is configured as USB device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In my user application, there is another USB CDC application, so the MCG is configured as USB device as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If bootloader jumps to user application, then MCG has been configured twice. And for some reason, it returns as 0x01 from pll_init( ), as FEI ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then I swap the init order, I init GPIO at very beginning without MCG init and jumps to user application. It works now.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW, now I use your code. I found it is available from AN4370 USB DFU bootloader.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now I prepare a document for updated AN4379 bootloader at &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-97782" title="https://community.freescale.com/docs/DOC-97782"&gt;https://community.freescale.com/docs/DOC-97782&lt;/A&gt;.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 30 Oct 2013 07:34:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/Help-on-Assembly-for-Cortex-M0-M0/m-p/288926#M11409</guid>
      <dc:creator>kai_liu</dc:creator>
      <dc:date>2013-10-30T07:34:44Z</dc:date>
    </item>
  </channel>
</rss>

