<?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: Flash page write in GP32, Codewarrior 5.7 in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142574#M6296</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;B&gt;&lt;SPAN&gt;Flash page write code&lt;/SPAN&gt;&lt;/B&gt;&lt;P&gt;Hello.&lt;BR /&gt;&lt;BR /&gt;would you please send me the file zipped with the flash page write code?&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;My email is edgarandres8@yahoo.com&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 22 Feb 2008 01:48:25 GMT</pubDate>
    <dc:creator>edgarandres8</dc:creator>
    <dc:date>2008-02-22T01:48:25Z</dc:date>
    <item>
      <title>Flash page write in GP32, Codewarrior 5.7</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142568#M6290</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;SPAN&gt;Hi all,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Just after some ideas i have spent a couple of hours without making and progress with my flash erase / write routines for GP32 (68HC908GP32)...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I cannot work out why the processor is resetting when i call the WriteFlashRow(); function. Erase works. COP is disabled, routines are running from RAM, i believe i have all the right timing (i think), based on the data sheet... Seems to work in the simulator, and the erase routines appear to work as the bytes are erased when i upload the module (FB01, FB02)..&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This code was chopped down, so some basic things may have been deleted, im also open to comments on better ways to do things as i am new to C, comming from assembly background&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;**************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;FLASH.C&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;**************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "derivative.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "FlashRoutines.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma CONST_SEG UserFlashData&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;const far byte FB01 = 0xC1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;const far byte FB02 = 0xC3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma CONST_SEG DEFAULT&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//Flash block protect register set&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;const byte xFLBPR @ 0xFF7E = 0xFF;&amp;nbsp; // NOTHING IS PROTECTED!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//xFLCR (Flash Control Register) This is not setup properly in the the header file for addressing far bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;byte xFLCR @ 0xFE08;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // NOTHING IS PROTECTED!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define PGM&amp;nbsp;&amp;nbsp; 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; // Mask bits for FLCR&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define ERASE 2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define MASS&amp;nbsp; 4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#define HVEN&amp;nbsp; 8&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/****&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Erase a Block of FLASH Memory Subroutine&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; *****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// This routine copies all the flash routines to ram as defined in&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// the PRM&amp;nbsp; file&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Add this to the last SEGMENTS entry in the .PRM file&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// ROM_IMAGE = READ_ONLY 0xF000 TO 0xF2FF RELOCATE_TO 0x0200;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// Add this line to the last entry under PLACMENT&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// ToCopyToRAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; ROM_IMAGE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// For more information see TN228 from freescale, or search on "SEGMENTS"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// or "RELOCATE_TO" in the code warrior help files.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void CopyInRAM(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; char *srcPtr, *dstPtr;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; int count;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; srcPtr = (byte *)Start_Copy_In_RAM;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dstPtr = (byte *)&amp;amp;EraseRoutine;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Must be address of first routines&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (count = 0; count &amp;lt; (int) Size_Copy_In_RAM; count++, dstPtr++, srcPtr++) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *dstPtr = *srcPtr;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//WARNING: These function MUST be loaded into RAM before calling using&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// CopyInRAM();&amp;nbsp; //Call prior to calling function in 'ToCopyToRAM'&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma CODE_SEG ToCopyToRAM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/****&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Erase a Block of FLASH Memory Subroutine&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; *****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* This routine erases a block of FLASH of the size specified in the &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* FLASH Control Registers and at the location specified by FLASH_addr.&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* FLASH_addr is any address within the block to be erased.&amp;nbsp; The routine */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* follows the basic 9 step sequence of the FLASH erase operation.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Initializations required:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp; Set charge pump clock and block erase size in xFLCR and xFLCR2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASH_addr set&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Values returned:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp; none&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void EraseRoutine (byte *FlashRow)&amp;nbsp; //WARNING: This name is part of CopyInRAM, do not add code above this&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; //This may need to be done in one line&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; xFLCR |= ERASE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 1 - Set erase and clear MASS erase&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; xFLCR &amp;amp;= (~MASS);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MASS and xFLCR is actually xFLCR GP32 header is WRONG&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __asm lda xFLBPR;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 2 - read from Flash block protect register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *FlashRow = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 3 - Write to any FLASH&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; Delay(t10uS);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 4 - Delay 10uS&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; xFLCR |= HVEN;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 5 - Set the HVEN bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; Delay(t1mS);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 6 - Wait 1mS&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; xFLCR &amp;amp;= (~ERASE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 7 - Clear the ERASE bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; Delay(t5uS);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 8 - Wait min 5uS&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; xFLCR &amp;amp;= (~HVEN);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 9 - Clear the HVEN bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flash Write Row&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Pass a pointer to the data in RAM to write, called pRAMData&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Pass a pointer to the Flash row to write to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Warning, this WILL write the hole row i.e. 64 bytes, you must point to the START of a row!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void WriteFlashRow(byte* pRAMData, byte* pFlashData){&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte* pFlashFirstByte = pFlashData;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Need to save this so we know when the row is programmed&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xFLCR |= PGM;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 1 - Set PGM bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; __asm lda xFLBPR;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Step 2 - read from Flash block protect register&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pFlashFirstByte = 0xFF;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 3 - Write to any address in the flash range we are about to write data to&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay(t10uS);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 4 - Wait for time tNVS&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xFLCR |= HVEN;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 5 - Set the HVEN enable&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay(t5uS);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 6 - Wait for time&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 7/8/9 - Write data to flash, delay 30uS, for entire row 0x40 bytes&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(pFlashData != (pFlashFirstByte+63)){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; *pFlashData++ = *pRAMData++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Delay(t10uS);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Tprog MAX is 40uS, allowing for the delay in the loop, this works out to ~36uS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xFLCR &amp;amp;= (~PGM);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 10 - Clear PGM bit&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay(t5uS);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; //Step 11 - Delay for tNVH&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; xFLCR &amp;amp;= (~HVEN);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Step 12 - Clear HVEN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay Routine&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* This routine delays for a variable amount of time depending on the &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* value passed into the routine as variable A.&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Delay time = (12 + (5 + (11+72+11)*A + 11) + 8) / Bus Freq&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* This equation includes the bus cycles from calling the delay routine&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* until hitting the next line of code. This allows the user to&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* accurately predict the delay between two steps in the code.&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Initializations required:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp; Pass in variable A = Delay Value&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Values returned:&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*&amp;nbsp;&amp;nbsp;&amp;nbsp; None&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&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;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/*************************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void Delay (byte A)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp; count;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (A!=0) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for (count=0x03;count!=0;count--);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; A--;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#pragma CODE_SEG DEFAULT;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //WARNING: Do no add code to be ran from RAM below here&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Message Edited by CarlFST60L_2nd on &lt;/SPAN&gt;&lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class="time_text"&gt;09:11 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2007 15:08:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142568#M6290</guid>
      <dc:creator>CarlFST60L_2nd</dc:creator>
      <dc:date>2007-08-09T15:08:58Z</dc:date>
    </item>
    <item>
      <title>Continued</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142569#M6291</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;**************************************&lt;BR /&gt;MAIN.C&lt;BR /&gt;**************************************&lt;BR /&gt;&lt;BR /&gt;#include &amp;lt;hidef.h&amp;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; /* for EnableInterrupts macro */&lt;BR /&gt;#include "derivative.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* include peripheral declarations */&lt;BR /&gt;#include "EDS_MCinit.h"&lt;BR /&gt;#include "FlashRoutines.h"&lt;BR /&gt;&lt;BR /&gt;void main(void) {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCUSetup();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Setup MCU (PLL, Config, IO and all other processor environment settings&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable interrupts&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; DebounceInit();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Initialise the debounce routines&lt;BR /&gt;&lt;BR /&gt;// MAIN LOOP&lt;BR /&gt;for(;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;{&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;//------------------------------------------------------------------------------------------------&lt;BR /&gt;//Main loop&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;byte&amp;nbsp; RAMData[64] = {0};&lt;BR /&gt;byte&amp;nbsp; FlashData[64] = {0};&lt;BR /&gt;byte&amp;nbsp; *pRAMData = &amp;amp;RAMData;&lt;BR /&gt;byte&amp;nbsp; temp = 0x00;&lt;BR /&gt;char&amp;nbsp; *pFlashData;&lt;BR /&gt;pFlashData = (char *)Start_User_Flash_Data;&lt;BR /&gt;&lt;BR /&gt;while(pRAMData != (RAMData+65)) *pRAMData++ = ++temp ;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; //Fill up RAM table with 0x01 to 0x3F&lt;BR /&gt;&lt;BR /&gt;pRAMData = &amp;amp;RAMData;&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;DisableInterrupts;&lt;BR /&gt;CopyInRAM();&lt;BR /&gt;EraseRoutine(pFlashData);&lt;BR /&gt;//TEST pFlashData = &amp;amp;FlashData;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Write data to a ram array for testing purposes, where FlashData is byte; FlashData[64] = {0}; */&lt;BR /&gt;WriteFlashRow(pRAMData, pFlashData);&amp;nbsp; //Processor resets in this function&lt;BR /&gt;EnableInterrupts;&lt;BR /&gt;&lt;BR /&gt;for(;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt; PTC ^= 1;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; //Stop here and toggle PTC bit 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __RESET_WATCHDOG();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // feeds the dog&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;// END Main loop&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;******************************&lt;BR /&gt;PRM File&lt;BR /&gt;******************************&lt;BR /&gt;&lt;BR /&gt;/* This is a linker parameter file for the GP32 */&lt;BR /&gt;&lt;BR /&gt;NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */&lt;BR /&gt;&lt;BR /&gt;SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xA000 TO 0xFDFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Moved from 0x8000 to 0x9000 to make room for flash data storage&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; F_RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x9000 TO 0x9FFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Added read write block for flash data storage&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Z_RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_WRITE&amp;nbsp;&amp;nbsp; 0x0040 TO 0x00FF;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_WRITE&amp;nbsp;&amp;nbsp; 0x0100 TO 0x023F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; ROM_IMAGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp; READ_ONLY&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xF000 TO 0xF2FF RELOCATE_TO 0x016F; //CDN 02/07/07 7pm&lt;BR /&gt;END&lt;BR /&gt;&lt;BR /&gt;PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFAULT_RAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; RAM;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEFAULT_ROM, ROM_VAR, STRINGS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; ROM; /*&amp;nbsp; In case you want to use&amp;nbsp; as well, be sure the option -OnB=b is passed to the compiler. */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _DATA_ZEROPAGE, MY_ZEROPAGE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; Z_RAM;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UserFlashData&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; F_RAM;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //CDN 02/07/07 10pm&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ToCopyToRAM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTO&amp;nbsp; ROM_IMAGE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //CDN 02/07/07 7pm&lt;BR /&gt;END&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;STACKSIZE 0x50&lt;BR /&gt;&lt;BR /&gt;VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */&lt;BR /&gt;&lt;BR /&gt;ENTRIES&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FB01&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FB02&lt;BR /&gt;END&lt;BR /&gt;***********************************&lt;BR /&gt;Flash.h&lt;BR /&gt;***********************************&lt;BR /&gt;&lt;BR /&gt;#pragma CONST_SEG UserFlashData&lt;BR /&gt;extern const far byte FB01;&lt;BR /&gt;extern const far byte FB02;&lt;BR /&gt;#pragma CONST_SEG DEFAULT&lt;BR /&gt;&lt;BR /&gt;/*************************************************************************/&lt;BR /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; Program-Specific Defines&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &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;/*************************************************************************/&lt;BR /&gt;extern char __SEG_START_ToCopyToRAM[];&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used for copying code to RAM&lt;BR /&gt;extern char __SEG_SIZE_ToCopyToRAM[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used for copying code to RAM&lt;BR /&gt;&lt;BR /&gt;extern byte __SEG_START_UserFlashData[];&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used for copying code to RAM&lt;BR /&gt;extern byte __SEG_SIZE_UserFlashData[];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Used for copying code to RAM&lt;BR /&gt;&lt;BR /&gt;void EraseRoutine&amp;nbsp;&amp;nbsp;&amp;nbsp; (byte*);&lt;BR /&gt;void Delay (byte);&lt;BR /&gt;void CopyInRAM(void);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;void WriteFlashRow(byte*, byte*);&lt;BR /&gt;&lt;BR /&gt;//Start_Copy_In_RAM refers to the begining of the segment&lt;BR /&gt;//ToCopyToRAM. This segment contains the functions after&lt;BR /&gt;//they have been copied to RAM.&lt;BR /&gt;#define Start_Copy_In_RAM __SEG_START_ToCopyToRAM&lt;BR /&gt;#define Size_Copy_In_RAM __SEG_SIZE_ToCopyToRAM&lt;BR /&gt;//Start_In_ROM refers to the begining of the segment&lt;BR /&gt;//ToCopyToRAM. This segment contains the functions in ROM.&lt;BR /&gt;&lt;BR /&gt;//refers to thebeginining of the segment&lt;BR /&gt;#define Start_User_Flash_Data __SEG_START_UserFlashData&lt;BR /&gt;&lt;BR /&gt;//UserFlashData start&lt;BR /&gt;#define User_Flash_Data __SEG_START_UserFlashData&lt;BR /&gt;//Size of UserFlashData as defined in PRM file&lt;BR /&gt;#define Size_User_Flash_Data __SEG_SIZE_UserFlashData&lt;BR /&gt;/*************************************************************************/&lt;BR /&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FLASH Delay Equates&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;/*************************************************************************/&lt;BR /&gt;// To setup these values use&lt;BR /&gt;// 30X + 31 cycles where X is the value u pass&lt;BR /&gt;// NOTE, when passing 0x00, it only takes 30 cycles, not 31.&lt;BR /&gt;// to take into account bus frequency&lt;BR /&gt;// (30X + 31) / Bus Frequency = Time&lt;BR /&gt;// GP32 Set at 4.9152uS&lt;BR /&gt;//&lt;BR /&gt;// .XLS formula =((30*A2)+31) / $C$2&lt;BR /&gt;// Where A2 is a colum from 0 &amp;gt; 255, and Cell C2 = bus frequency in Hertz&lt;BR /&gt;// Please note these results are wrong, the times are all substaintially over! (approx 25%),&lt;BR /&gt;// to many beers = bad code!&lt;BR /&gt;/*************************************************************************/&lt;BR /&gt;#define t5uS&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x00&amp;nbsp;&amp;nbsp;&amp;nbsp; // ~5uS (6.31uS)&lt;BR /&gt;&lt;BR /&gt;#define t10uS&amp;nbsp;&amp;nbsp; 0x01&amp;nbsp;&amp;nbsp;&amp;nbsp; // ~10uS (12.4uS)&lt;BR /&gt;&lt;BR /&gt;#define t30uS&amp;nbsp;&amp;nbsp; 0x03&amp;nbsp;&amp;nbsp;&amp;nbsp; // ~30uS (30.7uS)&lt;BR /&gt;&lt;BR /&gt;#define t1mS&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xA3&amp;nbsp;&amp;nbsp;&amp;nbsp; // 1ms (1.00mS)&lt;BR /&gt;&lt;BR /&gt;*************************************&lt;BR /&gt;copied out of "EDS_MCinit.h"&lt;BR /&gt;*************************************&lt;BR /&gt;void SetupConfigReg(void){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1 = (&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1_STOP_MASK |&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1_LVIRSTD_MASK |&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1_LVIPWRD_MASK |&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1_LVISTOP_MASK |&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1_COPD_MASK);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG2 = (&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG2_OSCSTOPENB_MASK |&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG2_SCIBDSRC_MASK);&lt;BR /&gt;}&lt;BR /&gt;//------------------------------------------------------------------------------------------------&lt;BR /&gt;void SetupPLL(void){&lt;BR /&gt;&amp;nbsp; PCTL_PLLON = 0;&amp;nbsp;&amp;nbsp; //Turn off PLL&lt;BR /&gt;//PLL to run the internal clock at 4.9152MHz&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PCTL_VPR1 = 1;&lt;BR /&gt;&amp;nbsp; PMSH = 0x02;&lt;BR /&gt;&amp;nbsp; PMSL = 0x58;&lt;BR /&gt;&amp;nbsp; PMRS = 0x80; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; PCTL_PLLON = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Turn on PLL&lt;BR /&gt;&amp;nbsp; PCTL_BCS = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Base clock select&lt;BR /&gt;}&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by CarlFST60L_2nd on &lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:10 AM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by CarlFST60L_2nd on &lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:12 AM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by CarlFST60L_2nd on &lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:12 AM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by CarlFST60L_2nd on &lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:15 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2007 15:09:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142569#M6291</guid>
      <dc:creator>CarlFST60L_2nd</dc:creator>
      <dc:date>2007-08-09T15:09:34Z</dc:date>
    </item>
    <item>
      <title>Re: Continued</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142570#M6292</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;I have also updated&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (in flash write routines)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(pFlashData != (pFlashFirstByte+65)){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(pFlashData != (pFlashFirstByte+64)){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and/or&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(pFlashData != (pFlashFirstByte+32)){&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;**************************************&lt;BR /&gt;MAIN.C&lt;BR /&gt;**************************************&lt;BR /&gt;&lt;BR /&gt;#include &amp;lt;hidef.h&amp;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; /* for EnableInterrupts macro */&lt;BR /&gt;#include "derivative.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* include peripheral declarations */&lt;BR /&gt;#include "EDS_MCinit.h"&lt;BR /&gt;#include "FlashRoutines.h"&lt;BR /&gt;&lt;BR /&gt;void main(void) {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MCUSetup();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Setup MCU (PLL, Config, IO and all other processor environment settings&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // enable interrupts&lt;BR /&gt;//&amp;nbsp;&amp;nbsp;&amp;nbsp; DebounceInit();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Initialise the debounce routines&lt;BR /&gt;&lt;BR /&gt;// MAIN LOOP&lt;BR /&gt;for(;&lt;IMG border="0" height="16" src="http://forums.freescale.com/../../i/smilies/16x16_smiley-wink.gif" width="16" /&gt;{&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;//------------------------------------------------------------------------------------------------&lt;BR /&gt;//Main loop&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;byte&amp;nbsp; RAMData[64] = {0};&lt;BR /&gt;byte&amp;nbsp; FlashData[64] = {0};&lt;BR /&gt;byte&amp;nbsp; *pRAMData = &amp;amp;RAMData[0];&lt;BR /&gt;byte&amp;nbsp; *pFlashData;&lt;BR /&gt;pFlashData = (byte *)Start_User_Flash_Data;&lt;BR /&gt;&lt;BR /&gt;while(pRAMData != (RAMData+64)) *pRAMData++ = ++temp ;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; //Fill up RAM table with 0x01 to 0x3F&lt;BR /&gt;&lt;BR /&gt;pRAMData = &amp;amp;RAMData[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;&lt;BR /&gt;DisableInterrupts;&lt;BR /&gt;CopyInRAM();&lt;BR /&gt;EraseRoutine(pFlashData);&lt;BR /&gt;//TEST pFlashData = &amp;amp;FlashData[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; /*Write data to a ram array for testing purposes, where FlashData is byte; FlashData[64] = {0}; */&lt;BR /&gt;WriteFlashRow(pRAMData, pFlashData);&amp;nbsp; //Processor resets in this function&lt;BR /&gt;EnableInterrupts;&lt;BR /&gt;&lt;BR /&gt;for(;&lt;IMG border="0" height="16" src="http://forums.freescale.com/../../i/smilies/16x16_smiley-wink.gif" width="16" /&gt; PTC ^= 1;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; //Stop here and toggle PTC bit 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;// END Main loop&lt;BR /&gt;&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Nothing major, just fixed up some basic stuff...&lt;BR /&gt;&lt;BR /&gt;I am still stumped as to why the processor is reseting. I have tried two processors and get the same result, i can call eraseflash and it works, but calling writeflash causes a reset.&lt;BR /&gt;&lt;BR /&gt;LVI is disable, COP is disabled, the Simulator lets it run no problem, but the processor resets... Take out that routine, and it sits there toggling PTC0&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by CarlFST60L_2nd on &lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;12:06 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2007 17:58:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142570#M6292</guid>
      <dc:creator>CarlFST60L_2nd</dc:creator>
      <dc:date>2007-08-09T17:58:26Z</dc:date>
    </item>
    <item>
      <title>Re: Continued</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142571#M6293</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;The cause of the reset is ILAD (Illegal address reset) i.e. "last reset called by an opcode fetch from an illegal address", the POR reset flag is also set.&lt;BR /&gt;&lt;BR /&gt;Would the simulator not reset with the same problem?? I have stepped through the assembly code an not noticed the PC going anywhere out of bounds...&lt;BR /&gt;&lt;BR /&gt;Anyone go any ideas as to what could cause this in the processor and not in the simulator?&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2007 19:02:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142571#M6293</guid>
      <dc:creator>CarlFST60L_2nd</dc:creator>
      <dc:date>2007-08-09T19:02:50Z</dc:date>
    </item>
    <item>
      <title>Re: Flash page write in GP32, Codewarrior 5.7</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142572#M6294</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;Problem solved!&lt;BR /&gt;&lt;BR /&gt;while(pFlashData != (pFlashFirstByte+63)&lt;BR /&gt;&lt;BR /&gt;This compiled to code that runs from FLASH!&lt;BR /&gt;&lt;BR /&gt;Thanks for putting up with my posts!&lt;BR /&gt;&lt;BR /&gt;Whats the best way to do this without causing code to run from Flash?&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by CarlFST60L_2nd on &lt;SPAN class="date_text"&gt;2007-08-09&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;01:11 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2007 19:08:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142572#M6294</guid>
      <dc:creator>CarlFST60L_2nd</dc:creator>
      <dc:date>2007-08-09T19:08:25Z</dc:date>
    </item>
    <item>
      <title>Re: Flash page write in GP32, Codewarrior 5.7</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142573#M6295</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;I have a file zipped that i am happy to post with full working GP32 flash erase/write routines if someone wants to host it&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 Aug 2007 19:55:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142573#M6295</guid>
      <dc:creator>CarlFST60L_2nd</dc:creator>
      <dc:date>2007-08-09T19:55:24Z</dc:date>
    </item>
    <item>
      <title>Re: Flash page write in GP32, Codewarrior 5.7</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142574#M6296</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;B&gt;&lt;SPAN&gt;Flash page write code&lt;/SPAN&gt;&lt;/B&gt;&lt;P&gt;Hello.&lt;BR /&gt;&lt;BR /&gt;would you please send me the file zipped with the flash page write code?&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;My email is edgarandres8@yahoo.com&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Feb 2008 01:48:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Flash-page-write-in-GP32-Codewarrior-5-7/m-p/142574#M6296</guid>
      <dc:creator>edgarandres8</dc:creator>
      <dc:date>2008-02-22T01:48:25Z</dc:date>
    </item>
  </channel>
</rss>

