<?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>8-bit MicrocontrollersのトピックFlash write on GT60</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151010#M8136</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello everybody, I know this&amp;nbsp;has been&amp;nbsp;discussed in previous posts but I still can't achieve to write on flash or even erase the page.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I'm using a simple code from AN3404 which apparently follows the flow chart on GT60 manual, the thing is that the code works just fine if I run it step by step, but if I let it to fully run (not step by step or breakpoints) the debugger keep saying me that the frequency has changed and&amp;nbsp;sometimes the program stops or just hang.&amp;nbsp;The Cpu ints are disabled when any flash related operation is made. If it is of any help the app is for write data received from SCI to flash.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Here is the code use for page erase and the flash init routine:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void InitFlash(void){&amp;nbsp;&lt;BR /&gt;&amp;nbsp; FSTAT_FACCERR=1;&lt;BR /&gt;&amp;nbsp; FSTAT_FPVIOL=1;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; FCDIV = 25;&amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;void NVM_Erase_Page (unsigned char *dest)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; unsigned char dummy=0;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; if (FSTAT_FACCERR == 1 || FSTAT_FPVIOL == 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Verifying error flags&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FACCERR = 0;&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;&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;&amp;nbsp; //Clear error flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FPVIOL = 0;&lt;BR /&gt;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; *dest = dummy;&lt;BR /&gt;&amp;nbsp; FCMD = mPageErase;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Byte program command&lt;BR /&gt;&amp;nbsp; FSTAT_FCBEF = 1;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Run the command&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; if (FSTAT_FACCERR == 1 || FSTAT_FPVIOL == 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Verifying error flags&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FACCERR = 0;&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;&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;&amp;nbsp; //Clear error flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FPVIOL = 0;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; while (FSTAT_FCCF == 0);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The BUS frequency is set around 4.45 MHz&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance&lt;/DIV&gt;&lt;DIV&gt;Victor&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 29 Sep 2007 03:04:32 GMT</pubDate>
    <dc:creator>FSCu</dc:creator>
    <dc:date>2007-09-29T03:04:32Z</dc:date>
    <item>
      <title>Flash write on GT60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151010#M8136</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello everybody, I know this&amp;nbsp;has been&amp;nbsp;discussed in previous posts but I still can't achieve to write on flash or even erase the page.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I'm using a simple code from AN3404 which apparently follows the flow chart on GT60 manual, the thing is that the code works just fine if I run it step by step, but if I let it to fully run (not step by step or breakpoints) the debugger keep saying me that the frequency has changed and&amp;nbsp;sometimes the program stops or just hang.&amp;nbsp;The Cpu ints are disabled when any flash related operation is made. If it is of any help the app is for write data received from SCI to flash.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Here is the code use for page erase and the flash init routine:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void InitFlash(void){&amp;nbsp;&lt;BR /&gt;&amp;nbsp; FSTAT_FACCERR=1;&lt;BR /&gt;&amp;nbsp; FSTAT_FPVIOL=1;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; FCDIV = 25;&amp;nbsp;&lt;BR /&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;void NVM_Erase_Page (unsigned char *dest)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; unsigned char dummy=0;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; if (FSTAT_FACCERR == 1 || FSTAT_FPVIOL == 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Verifying error flags&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FACCERR = 0;&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;&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;&amp;nbsp; //Clear error flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FPVIOL = 0;&lt;BR /&gt;&amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; *dest = dummy;&lt;BR /&gt;&amp;nbsp; FCMD = mPageErase;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Byte program command&lt;BR /&gt;&amp;nbsp; FSTAT_FCBEF = 1;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Run the command&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp; _asm NOP;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; if (FSTAT_FACCERR == 1 || FSTAT_FPVIOL == 1)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Verifying error flags&lt;BR /&gt;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FACCERR = 0;&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;&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;&amp;nbsp; //Clear error flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FSTAT_FPVIOL = 0;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; while (FSTAT_FCCF == 0);&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The BUS frequency is set around 4.45 MHz&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks in advance&lt;/DIV&gt;&lt;DIV&gt;Victor&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 29 Sep 2007 03:04:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151010#M8136</guid>
      <dc:creator>FSCu</dc:creator>
      <dc:date>2007-09-29T03:04:32Z</dc:date>
    </item>
    <item>
      <title>Re: Flash write on GT60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151011#M8137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;I have not studied the 9S08GT60 compared with the 9S08LC60, but what is different is the Flash EPROM memory layout. The 9S08GT60 has one Flash EPROM and the 9S08LC60 has two.&lt;/DIV&gt;&lt;DIV&gt;Because the Flash EPROM needs a stable address and data when a write operation takes place, it is quite easy to do it on the LC60. On the GT60 you need to copy the erasure/programming routine to the stack, and execute it there.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;But maybe that is the thing that you have done?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Ake&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Oct 2007 17:56:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151011#M8137</guid>
      <dc:creator>Ake</dc:creator>
      <dc:date>2007-10-01T17:56:56Z</dc:date>
    </item>
    <item>
      <title>Re: Flash write on GT60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151012#M8138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;What Ake has suggested seems the most likelly cause for the OP's problem.&lt;/DIV&gt;&lt;DIV&gt;However, what he "needs" to do is execute the flash programming code from RAM.&lt;/DIV&gt;&lt;DIV&gt;Utilising the stack to achieve this is but one method.&lt;/DIV&gt;&lt;DIV&gt;&amp;lt;/pedantic&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;AN2140 is a good source for flash programming code for the GB/GT.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by peg on &lt;SPAN class="date_text"&gt;2007-10-01&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:58 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Oct 2007 18:39:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151012#M8138</guid>
      <dc:creator>peg</dc:creator>
      <dc:date>2007-10-01T18:39:26Z</dc:date>
    </item>
    <item>
      <title>Re: Flash write on GT60</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151013#M8139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thanks you both, you were right, I'm running the routines from the RAM and is working fine.&lt;BR /&gt;&lt;BR /&gt;Victor&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 11 Oct 2007 08:39:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-write-on-GT60/m-p/151013#M8139</guid>
      <dc:creator>FSCu</dc:creator>
      <dc:date>2007-10-11T08:39:07Z</dc:date>
    </item>
  </channel>
</rss>

