<?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: Access Error Exception in ColdFire/68K Microcontrollers and Processors</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124725#M146</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi&lt;BR /&gt;&lt;BR /&gt;It seems that you do not run your write and erase routines in RAM. Is it not a requirement to do so when program code is running from flash?&lt;BR /&gt;&lt;BR /&gt;Thanks&lt;BR /&gt;Kyle&lt;P&gt;Message Edited by wyliek on &lt;SPAN class="date_text"&gt;2006-12-08&lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;02:27 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 08 Dec 2006 22:24:18 GMT</pubDate>
    <dc:creator>wyliek</dc:creator>
    <dc:date>2006-12-08T22:24:18Z</dc:date>
    <item>
      <title>Access Error Exception</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124723#M144</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;SPAN style="font-size: 2;"&gt;Hello&lt;BR /&gt; I tried to write a sample code that just program 1 32bit data into flash.&lt;BR /&gt;&lt;BR /&gt; I am working with the M52235EVB(25Mhz Crystal oscillator on board).&lt;BR /&gt; The lcf is:&lt;BR /&gt;&lt;BR /&gt; MEMORY&lt;BR /&gt; {&lt;BR /&gt; flash (RX) : ORIGIN = 0x00000000, LENGTH = 0x00040000&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vectorram(RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000400&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sram&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(RWX) : ORIGIN = 0x20000400, LENGTH = 0x00007C00&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipsbar (RWX) : ORIGIN = 0x40000000, LENGTH = 0x0&lt;BR /&gt; }&lt;BR /&gt;&lt;BR /&gt; The c initialize is:&lt;BR /&gt;&lt;BR /&gt; MCF_CLOCK_SYNCR=0x4007;//Multiply By 12 (Divide By 5 Later),PLL Enable&lt;BR /&gt;&lt;BR /&gt; MCF_CFM_CFMMCR=0;//No Lock,Interrupt Disable&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_CFM_CFMCLKD=0x55;//Set Freq To About ~178Khz&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_CFM_CFMPROT=0;//No Sector Is Protect&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_CFM_CFMSACC=0xFFFFFFFF;//Flash Sectors Are Placed In Supervisor Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MCF_CFM_CFMDACC=0;&lt;BR /&gt; MCF_CFM_CFMUSTAT = PVIOL | ACCERR;&lt;BR /&gt;The assembler code:&lt;BR /&gt;&lt;BR /&gt; asm&lt;BR /&gt; {&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EndProgByte,a1&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lea&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ProgByte,a2&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sub.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#2,a2&lt;BR /&gt; cont:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.w&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(a1),-(sp)//Save Line Of Prog Byte&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sub.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#2,a1&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmp.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a1,a2&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;bne&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cont&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; //After This Line ProgByte Func Is In The Ram&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a7,-(sp)//Save SP Pointer Value To SP&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rts//Jump To SP To Run Code&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; //Code To Copy To Ram&lt;BR /&gt; ProgByte:&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0x2B70,a0&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0x55aa,d0&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.w&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d0,(a0)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0x40000000,a0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; move.b #0x20,d0&lt;BR /&gt; add.l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#0x1D0024,a0//Offset Of CFMCMD&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; EndProgByte:&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;move.b d0,(a0)//Write To CFMCMD 0x20 (Program long 32bit)&lt;BR /&gt; }&lt;BR /&gt;&lt;BR /&gt; When the PC is changing to the stack address and run the code from the stack in line (or in it's area) --&amp;gt;&lt;BR /&gt; move.w&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;d0,(a0)&lt;BR /&gt;&lt;BR /&gt; i get Access Error Exception and the write to the flash fails.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-size: 2;"&gt;Why is that?&lt;BR /&gt; Is the code order OK?&lt;BR /&gt; Is there simpler way to write to the CFMCMD?&lt;BR /&gt; In my code for start i assume that the address for prog is erase(0xffffffff) and that all the error flags are OK.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt; Thanks&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 23 Jul 2006 19:49:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124723#M144</guid>
      <dc:creator>UDP</dc:creator>
      <dc:date>2006-07-23T19:49:18Z</dc:date>
    </item>
    <item>
      <title>Re: Access Error Exception</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124724#M145</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;To program flash, use address 0x44020000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;//*****************************************************************************&lt;BR /&gt;// FLASH Parameters&lt;BR /&gt;//*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;// Start address for region of flash available for web page upload&lt;BR /&gt;#define FLASH_START_ADDRESS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x44020000&lt;/DIV&gt;&lt;DIV&gt;// End address for region of flash available for web page upload&lt;BR /&gt;#define FLASH_END_ADDRESS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x4403FFFF&lt;/DIV&gt;&lt;DIV&gt;// Flash erase page size&lt;BR /&gt;#define FLASH_PAGE_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x0800&lt;/DIV&gt;&lt;DIV&gt;// Number of flash pages erased per task itteration&lt;BR /&gt;#define PAGES_PER_SESSION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x08&lt;/DIV&gt;&lt;DIV&gt;// Address for flash region as seen by CPU&lt;BR /&gt;#define FAT_FILE_BASE_ADDR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0x00020000&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void flash_init( void )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;// So, for fSYS = 66 MHz, writing 0x54 to CFMCLKD will set fCLK to 196.43 kHz which is a valid frequency&lt;BR /&gt;&amp;nbsp;// for the timing of program and erase operations.&lt;BR /&gt;&amp;nbsp;// WARNING&lt;BR /&gt;&amp;nbsp;// For proper program and erase operations, it is critical to set fCLK between&lt;BR /&gt;&amp;nbsp;// 150 kHz and 200 kHz. Array damage due to overstress can occur when fCLK&lt;BR /&gt;&amp;nbsp;// is less than 150 kHz. Incomplete programming and erasure can occur when&lt;BR /&gt;&amp;nbsp;// fCLK is greater than 200 kHz.&lt;BR /&gt;&amp;nbsp;MCF_CFM_CFMCLKD = 0x54;&lt;BR /&gt;&amp;nbsp;init_serial_flash();&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;// Flash page erase function.&lt;BR /&gt;//&lt;BR /&gt;// Author: Eric Gregori&amp;nbsp; (847) 651 - 1971&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:eric.gregori@freescale.com" rel="nofollow" target="_blank"&gt;eric.gregori@freescale.com&lt;/A&gt;&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;volatile void flash_page_erase( unsigned long *address, unsigned long data )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;mcf5xxx_irq_disable();&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;*address = data;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;MCF_CFM_CFMCMD = 0x40;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;MCF_CFM_CFMUSTAT = 0x80;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;while( !(MCF_CFM_CFMUSTAT &amp;amp; MCF_CFM_CFMUSTAT_CCIF))&lt;BR /&gt;&amp;nbsp;{};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;mcf5xxx_irq_enable();&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;// Flash write function.&lt;BR /&gt;//&lt;BR /&gt;// Author: Eric Gregori&amp;nbsp; (847) 651 - 1971&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:eric.gregori@freescale.com" rel="nofollow" target="_blank"&gt;eric.gregori@freescale.com&lt;/A&gt;&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;volatile void flash_write( unsigned long *address, unsigned long data )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;mcf5xxx_irq_disable();&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;*address = data;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;MCF_CFM_CFMCMD = 0x20;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;MCF_CFM_CFMUSTAT = 0x80;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;while( !(MCF_CFM_CFMUSTAT &amp;amp; MCF_CFM_CFMUSTAT_CCIF))&lt;BR /&gt;&amp;nbsp;{};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;mcf5xxx_irq_enable();&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;// Flash test function, used to erase flash for demo&lt;BR /&gt;//&lt;BR /&gt;// Author: Eric Gregori&amp;nbsp; (847) 651 - 1971&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;A href="mailto:eric.gregori@freescale.com" rel="nofollow" target="_blank"&gt;eric.gregori@freescale.com&lt;/A&gt;&lt;BR /&gt;//*****************************************************************************&lt;BR /&gt;int flash_erase( void *pio&amp;nbsp; )&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;unsigned long&amp;nbsp;address;&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;&amp;nbsp;flash_init();&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;for( address = FLASH_START_ADDRESS; address &amp;lt; FLASH_END_ADDRESS; address += FLASH_PAGE_SIZE )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;flash_page_erase( (unsigned long *)address, (unsigned long)0 );&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;return(0);&lt;BR /&gt;}&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Aug 2006 09:18:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124724#M145</guid>
      <dc:creator>ericgregori</dc:creator>
      <dc:date>2006-08-03T09:18:26Z</dc:date>
    </item>
    <item>
      <title>Re: Access Error Exception</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124725#M146</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi&lt;BR /&gt;&lt;BR /&gt;It seems that you do not run your write and erase routines in RAM. Is it not a requirement to do so when program code is running from flash?&lt;BR /&gt;&lt;BR /&gt;Thanks&lt;BR /&gt;Kyle&lt;P&gt;Message Edited by wyliek on &lt;SPAN class="date_text"&gt;2006-12-08&lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;02:27 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Dec 2006 22:24:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/Access-Error-Exception/m-p/124725#M146</guid>
      <dc:creator>wyliek</dc:creator>
      <dc:date>2006-12-08T22:24:18Z</dc:date>
    </item>
  </channel>
</rss>

