<?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>ColdFire/68K Microcontrollers and ProcessorsのトピックRe: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182422#M7466</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I was trying to program the flash but the Reference Manual isnt clear enough...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Im using C language, and i dont know how to specify the flash address where i want to storage my precious data...How do i do this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks! please take a look to the image in this message to understand the problem...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was trying to make some assembler code asm{xxxxx} but i didnt make it...The data that i want to storage is word type (Unsigned short - 16 bits...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks! please help me!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 19 May 2009 08:32:29 GMT</pubDate>
    <dc:creator>jreyes085</dc:creator>
    <dc:date>2009-05-19T08:32:29Z</dc:date>
    <item>
      <title>Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182421#M7465</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, im almost there...Im finishing my project...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have to storage some numbers in the non-volatile memory (Flash). I have a few questions about it, and these are:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1. The code that i wrote in C (Codewarrior 6.2) where is it going to be in the flash memory? the base memory address in flash?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2. How do i read the information that i already storage?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your help!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2009 03:35:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182421#M7465</guid>
      <dc:creator>jreyes085</dc:creator>
      <dc:date>2009-05-19T03:35:42Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182422#M7466</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I was trying to program the flash but the Reference Manual isnt clear enough...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Im using C language, and i dont know how to specify the flash address where i want to storage my precious data...How do i do this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks! please take a look to the image in this message to understand the problem...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was trying to make some assembler code asm{xxxxx} but i didnt make it...The data that i want to storage is word type (Unsigned short - 16 bits...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks! please help me!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2009 08:32:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182422#M7466</guid>
      <dc:creator>jreyes085</dc:creator>
      <dc:date>2009-05-19T08:32:29Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182423#M7467</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;To specify the address and data for a word program operation in C is as simple as:&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp; *(uint32 *)address = data;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;If it helps, I have some working flash access routines for the 51QE128 (and about a dozen other MCUs -- you'll want to follow the MCF51QE128 #if's) in sources/flash.c in skeleton.zip downloadable from the bottom of this page:&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp; &lt;A href="http://www.cpustick.com/downloads.htm" rel="nofollow" target="_blank"&gt;http://www.cpustick.com/downloads.htm&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;You'll want to pick the page you use to store your precious data so it does not overlap any of your code, possibly using your linker command file to ensure this.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;Then you might also want to store two copies of the data, so you can survive if you lose power or crash during an update, since the update is not atomic.&amp;nbsp; I describe an algorithm you can use to do this here:&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp; &lt;A href="http://forums.freescale.com/freescale/board/message?board.id=CFCOMM&amp;amp;message.id=4348&amp;amp;query.id=25059#M4348" target="_blank"&gt;http://forums.freescale.com/freescale/board/message?board.id=CFCOMM&amp;amp;message.id=4348&amp;amp;query.id=25059#M4348&lt;/A&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;If you need any clarification, just let me know...&amp;nbsp; I'll be leaving for a week on Wednesday, however.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;-- Rich&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2009 09:42:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182423#M7467</guid>
      <dc:creator>RichTestardi</dc:creator>
      <dc:date>2009-05-19T09:42:32Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182424#M7468</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Ok, thanks...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Im going to take a look of that...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Maybe in the afternoon i will write to you...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks Again! Rich T...you know a lot...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 May 2009 23:51:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182424#M7468</guid>
      <dc:creator>jreyes085</dc:creator>
      <dc:date>2009-05-19T23:51:50Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182425#M7469</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have one question, that maybe i will not solve by myself...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1) My C code that i have written where is going to be in the flash memory? I ask you this because i have to storage some data in the flash memory, and i dont know the location of my C code, i dont know where is going to be storage in the flash memory...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Im taking a look to your website...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 May 2009 00:05:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182425#M7469</guid>
      <dc:creator>jreyes085</dc:creator>
      <dc:date>2009-05-20T00:05:56Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182426#M7470</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;You can see where the compiler has allocated flash for your C code and constants in the .xMAP file in your build directory -- that's a text file that tells you where everything is laid out.&amp;nbsp; You can also control the general layout by editing your linker command file (.lcf), such as to declare the space where you store your parameters as "off limits" to the compiler.&amp;nbsp; The lcf file format is documented in "ColdFire® V1 Build Tools Reference Manual for Microcontrollers" in your CodeWarrior Help/PDF directory.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 May 2009 05:46:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182426#M7470</guid>
      <dc:creator>RichTestardi</dc:creator>
      <dc:date>2009-05-20T05:46:12Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182427#M7471</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Please, HELP!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried the program of the flash memory but i didn´t make it...I dont know what Im doing wrong...Can you please give me some example of how to use your functions (Skeleton; flash.c). I included that file in my project but then it requires the main.h...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please, can you give me some examples? can i only add the flash.c file to my project? does it configure the flash clock to a secure freq.?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just want to save a data in the flash memory..only one number...it is16 bits long (word). Well, as i write the memory later iwould like to read it...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please, help me with this...is the only thing that i havent do in my project...but i tried, and tried that i dont know what else to do..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks Again Rich T...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 31 May 2009 05:31:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182427#M7471</guid>
      <dc:creator>jreyes085</dc:creator>
      <dc:date>2009-05-31T05:31:31Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182428#M7472</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You definitely don't want to pull in entire files for this...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You only need the following routines (from the MCF51QE128 #if's):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_command_ram()&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_command()&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_erase_pages()&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_write_words()&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_initialize()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You can then extract the bare minimum header information (like assert, FLASH_PAGE_SIZE, etc.) that you need to compile -- just pull in one line at a time as you encounter compile errors.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You'll have to also set variables for things like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint32 bus_frequency;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then, during your initialization, call:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_initialize();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then, to erase a flash page (say, at 0x10000), you can do something like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_erase_pages((uint32 *)0x10000, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And to program a word in it, you can do:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint32 word;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; word = 0x12345678;&lt;/P&gt;&lt;P&gt;&amp;nbsp; flash_write_words((uint32 *)0x10000, &amp;amp;word, 1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-- Rich&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 31 May 2009 10:49:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182428#M7472</guid>
      <dc:creator>RichTestardi</dc:creator>
      <dc:date>2009-05-31T10:49:55Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182429#M7473</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I dont know much about preprocessor directives, I dont know quite well what to copy in the flash.c file. Im going to put here, what i did, and i put this in my main.c file as a functions...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;uint32 bus_frequency=24000000;&lt;/P&gt;&lt;P&gt;oscillator_frequency=?????? is it the same that bus freq&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;// The type of data uint32 is the same that word data(unsigned short)?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;static&lt;BR /&gt;void&lt;BR /&gt;flash_command_ram(uint8 cmd, uint32 *addr, uint32 data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // N.B. this code generates no relocations so we can run it from RAM!!!&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write the flash thru the frontdoor address&lt;BR /&gt;#if MC9S08QE128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(byte *)addr = data;&lt;BR /&gt;#elif MC9S12DT256 || MC9S12DP512&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *(uint16 *)addr = data;&lt;BR /&gt;#else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *addr = data;&lt;BR /&gt;#endif&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write the command&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMCMD = cmd;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // launch the command (N.B. this clears CBEIF!)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMUSTAT = MCF_CFM_CFMUSTAT_CBEIF;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // busy wait for flash command complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (! (MCF_CFM_CFMUSTAT &amp;amp; MCF_CFM_CFMUSTAT_CCIF)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // assert no errors&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert_ram(! (MCF_CFM_CFMUSTAT &amp;amp; (MCF_CFM_CFMUSTAT_PVIOL|MCF_CFM_CFMUSTAT_ACCERR)));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // NULL&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // assert no errors&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert_ram(! (MCF_CFM_CFMUSTAT &amp;amp; (MCF_CFM_CFMUSTAT_PVIOL|MCF_CFM_CFMUSTAT_ACCERR)));&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;static&lt;BR /&gt;void&lt;BR /&gt;flash_command(uint8 cmd, uint32 *addr, uint32 data)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void *fn;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // assert we're initialized&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert(MCF_CFM_CFMCLKD &amp;amp; MCF_CFM_CFMCLKD_DIVLD);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // assert we're ready&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert(MCF_CFM_CFMUSTAT &amp;amp; MCF_CFM_CFMUSTAT_CBEIF);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // assert no errors&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMUSTAT |= MCF_CFM_CFMUSTAT_PVIOL|MCF_CFM_CFMUSTAT_ACCERR;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert(! (MCF_CFM_CFMUSTAT &amp;amp; (MCF_CFM_CFMUSTAT_PVIOL|MCF_CFM_CFMUSTAT_ACCERR)));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fn = (void *)(((uint32)big_buffer+3)&amp;amp;~3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; memcpy(fn, flash_command_ram, (uint32)flash_command-(uint32)flash_command_ram);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((void (* near)(uint8, uint32 *, uint32))fn)(cmd, addr, data);&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void&lt;BR /&gt;flash_erase_pages(uint32 *addr_in, uint32 npages_in)&lt;BR /&gt;{&lt;BR /&gt;#if DEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;#endif&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 *addr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 npages;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr = addr_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; npages = npages_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = splx(7);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while there are more pages to erase...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (npages) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash_command(MCF_CFM_CFMCMD_PAGE_ERASE, addr, 0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; npages--;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr += FLASH_PAGE_SIZE/sizeof(uint32);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void)splx(x);&lt;BR /&gt;&lt;BR /&gt;#if DEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; npages_in*FLASH_PAGE_SIZE/sizeof(uint32); i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert(addr_in[i] == -1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;#endif&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void&lt;BR /&gt;flash_write_words(uint32 *addr_in, uint32 *data_in, uint32 nwords_in)&lt;BR /&gt;{&lt;BR /&gt;#if DEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;#endif&lt;BR /&gt;#if MC9S08QE128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte *addr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte *data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 nbytes;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr = (byte *)addr_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (byte *)data_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; nbytes = nwords_in*sizeof(uint32);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = splx(7);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while there are more bytes to program...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (nbytes) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash_command(MCF_CFM_CFMCMD_WORD_PROGRAM, (uint32 *)addr, (uint32)*data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nbytes--;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void)splx(x);&lt;BR /&gt;#elif MC9S12DT256 || MC9S12DP512&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16 *addr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint16 *data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 nshorts;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr = (uint16 *)addr_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = (uint16 *)data_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; nshorts = nwords_in*sizeof(uint16);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = splx(7);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while there are more shorts to program...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (nshorts) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash_command(MCF_CFM_CFMCMD_WORD_PROGRAM, (uint32 *)addr, (uint32)*data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nshorts--;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void)splx(x);&lt;BR /&gt;#else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 *addr;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 *data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32 nwords;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr = addr_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = data_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; nwords = nwords_in;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x = splx(7);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while there are more words to program...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (nwords) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; flash_command(MCF_CFM_CFMCMD_WORD_PROGRAM, addr, *data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nwords--;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addr++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void)splx(x);&lt;BR /&gt;#endif&lt;BR /&gt;&lt;BR /&gt;#if DEBUG&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; nwords_in; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert(addr_in[i] == data_in[i]);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;#endif&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void&lt;BR /&gt;flash_initialize(void)&lt;BR /&gt;{&lt;BR /&gt;#if MCF52221 || MCF52233 || MCF52259 || MCF5211 || MCF51JM128 || MCF51QE128 || MC9S08QE128 || MC9S12DT256 || MC9S12DP512&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; assert((int)flash_upgrade_ram_end - (int)flash_upgrade_ram_begin &amp;lt;= sizeof(big_buffer));&lt;BR /&gt;#if MC9S12DT256 || MC9S12DP512&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (oscillator_frequency &amp;gt; 12800000) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_PRDIV8|MCF_CFM_CFMCLKD_DIV((oscillator_frequency/8-1)/200000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_DIV((oscillator_frequency-1)/200000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;#define setReg8(RegName, val)&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; (RegName = (byte)(val))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FCNFG: CBEIE=0,CCIE=0,KEYACC=0,??=0,??=0,??=0,BKSEL1=0,BKSEL0=1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FCNFG, 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; /* Select the flash block #1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FSTAT: CBEIF=0,CCIF=0,PVIOL=1,ACCERR=1,??=0,BLANK=0,??=0,??=0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FSTAT, 48);&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 PVIOL and ACCERR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FPROT: FPOPEN=1,NV6=1,FPHDIS=1,FPHS1=1,FPHS0=1,FPLDIS=1,FPLS1=1,FPLS0=1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FPROT, 255);&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; /* Set protection of flash block #1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FCNFG: CBEIE=0,CCIE=0,KEYACC=0,??=0,??=0,??=0,BKSEL1=1,BKSEL0=0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FCNFG, 2);&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; /* Select the flash block #2 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FSTAT: CBEIF=0,CCIF=0,PVIOL=1,ACCERR=1,??=0,BLANK=0,??=0,??=0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FSTAT, 48);&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 PVIOL and ACCERR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FPROT: FPOPEN=1,NV6=1,FPHDIS=1,FPHS1=1,FPHS0=1,FPLDIS=1,FPLS1=1,FPLS0=1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FPROT, 255);&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; /* Set protection of flash block #2 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FCNFG: CBEIE=0,CCIE=0,KEYACC=0,??=0,??=0,??=0,BKSEL1=1,BKSEL0=1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FCNFG, 3);&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; /* Select the flash block #3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FSTAT: CBEIF=0,CCIF=0,PVIOL=1,ACCERR=1,??=0,BLANK=0,??=0,??=0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FSTAT, 48);&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 PVIOL and ACCERR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FPROT: FPOPEN=1,NV6=1,FPHDIS=1,FPHS1=1,FPHS0=1,FPLDIS=1,FPLS1=1,FPLS0=1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FPROT, 255);&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; /* Set protection of flash block #3 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FCNFG: CBEIE=0,CCIE=0,KEYACC=0,??=0,??=0,??=0,BKSEL1=0,BKSEL0=0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FCNFG, 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; /* Select the flash block #0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FSTAT: CBEIF=0,CCIF=0,PVIOL=1,ACCERR=1,??=0,BLANK=0,??=0,??=0 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FSTAT, 48);&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 PVIOL and ACCERR */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* FPROT: FPOPEN=1,NV6=1,FPHDIS=1,FPHS1=1,FPHS0=1,FPLDIS=1,FPLS1=1,FPLS0=1 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setReg8(FPROT, 255);&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; /* Set protection of flash block #0 */&lt;BR /&gt;#else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bus_frequency &amp;gt; 12800000) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_PRDIV8|MCF_CFM_CFMCLKD_DIV((bus_frequency/8-1)/200000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMCLKD = MCF_CFM_CFMCLKD_DIV((bus_frequency-1)/200000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;#endif&lt;BR /&gt;&lt;BR /&gt;#if MCF52221 || MCF52233 || MCF52259 || MCF5211&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMPROT = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMSACC = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMDACC = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCF_CFM_CFMMCR = 0;&lt;BR /&gt;#endif&lt;BR /&gt;#endif&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//Please help, im a lot confused...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again Rich...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 31 May 2009 22:14:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182429#M7473</guid>
      <dc:creator>jreyes085</dc:creator>
      <dc:date>2009-05-31T22:14:12Z</dc:date>
    </item>
    <item>
      <title>Re: Flash Program - MCF51QE128 (Codewarrior 6.2)</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182430#M7474</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Try this -- I don't think I can make it any simpler.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-- Rich&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Jun 2009 04:11:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Flash-Program-MCF51QE128-Codewarrior-6-2/m-p/182430#M7474</guid>
      <dc:creator>RichTestardi</dc:creator>
      <dc:date>2009-06-01T04:11:00Z</dc:date>
    </item>
  </channel>
</rss>

