Program to flash memory

Status
Not open for further replies.
I have written the following program to program flash memory with data. I have tried to simulate the code before actually flashing the code but i am not seeing the data as expected. Please help.

Code:
#include<xc.h>
/*
 * Program to flash double word
 * family:dspic33evgm256
 */
_FOSCSEL(FNOSC_FRC & IESO_OFF);
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);
_FWDT(FWDTEN_OFF)
_FICD(ICS_PGD2)

#define SET                             (1u)
#define PM_ROW   __attribute__((space(prog), aligned(2)))
const PM_ROW data_in_flash[10];
unsigned int nvmAdru;
unsigned int nvmAdr;
unsigned int nvmAdrPageAligned;
unsigned int tableOffset;
unsigned int data[10]={0x1111,0x2222, 0x3333,0x4444, 0x5555, 0x6666, 0x7777, 0x8888, 0x9999, 0xaaaaa};
unsigned int *pdata=data;
int main(int argc , char *argv[])
{
   
 PLLFBD=38;              // M=40
 CLKDIVbits.PLLPOST=1;   // N2=4
 CLKDIVbits.PLLPRE=0;    // N1=2

// Initiate Clock Switch to Primary Oscillator with PLL (NOSC=0b011)
__builtin_write_OSCCONH(0x03);
__builtin_write_OSCCONL(OSCCON | 0x01);
// Wait for Clock switch to occur
while (OSCCONbits.COSC!= 0b011);
// Wait for PLL to locke
while (OSCCONbits.LOCK!= 1);
    /*step1  ---> Let the destination address to be loaded*/
    nvmAdru=__builtin_tblpage(&data_in_flash[0]);
   nvmAdr=__builtin_tbloffset(&data_in_flash[0]);
   NVMADRU = nvmAdru;
    NVMADR = nvmAdr;
/*step2: Load the two words into latches*/   
    TBLPAG = 0xFA;
    tableOffset= 0x0000;
    __builtin_tblwtl(tableOffset,*pdata);
    __builtin_tblwth(tableOffset,0x00);
    tableOffset +=2;
    pdata++;
    __builtin_tblwtl(tableOffset,*pdata);
    __builtin_tblwth(tableOffset,0x00);
    /* Setup NVMCON for word programming */
     NVMCON = 0x4001;   
    /*step3: with interrupts disabled write the key sequence */
    __builtin_write_NVM();
    /* set the WR bit it will start programming operation */
    NVMCONbits.WR = SET;
    Nop();
    Nop();
    while(1);
    return 0;
}

When i simulated i got the following details in the variables section



So i am assuming that the variable data_in_flash is placed at the address 0x0103B4. Am i correct? Then i opened the program memory window and i see the following information

the data seem to match but not in proper order with what ever i am trying to write, but does not seem to be writing in the address i am expecting. Please help.
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…