lpcware

LPC1788 IAP problem

Discussion created by lpcware Employee on Jun 15, 2016
Latest reply on Jun 15, 2016 by lpcware
Content originally posted in LPCWare by Lazar92 on Fri May 08 02:48:46 MST 2015
I'm working on LPC1788, trying to use In Application Programming, and in one project where I implemented this code:

#define IAP_BASE1 0x00030000 
#define IAP_BASE2 0x00038000
#define IAP_BASE3 0x00040000 

    int main(void) {

        BYTE podatak1, podatak2, podatak3;
        DWORD *pointer_podatak1, *pointer_podatak2, *pointer_podatak3;
        uart0();

        NVIC_DisableIRQ(TIMER0_IRQn);   
        NVIC_DisableIRQ(TIMER1_IRQn);
        NVIC_DisableIRQ(UART0_IRQn);

        podatak1 = 0x33;
        podatak2 = 0x63;
        podatak3 = 0x84;

        iap_copy_to_flash(&podatak1, IAP_BASE1, 1);
        delay_1_ms();
        iap_copy_to_flash(&podatak2, IAP_BASE2, 1);
        delay_1_ms();
        iap_copy_to_flash(&podatak3, IAP_BASE3, 1);
        delay_1_ms();

        pointer_podatak1 = (DWORD*) IAP_BASE1;
        pointer_podatak2 = (DWORD*) IAP_BASE2;
        pointer_podatak3 = (DWORD*) IAP_BASE3;

        LPC_UART0->THR = *pointer_podatak1;
        delay_1_ms();
        LPC_UART0->THR = *pointer_podatak2;
        delay_1_ms();
        LPC_UART0->THR = *pointer_podatak3;
        delay_1_ms();

        while(1)
        {
        }

}

It works perfectly, but when I try to utilize it in my main project, I've got nothing written on flash memory locations I indicated. Here is the code in my main project to read and write from flash:

#define   OFFSET_ADDRESS                     0x00030000                                                                                     
#define   OFFSET_VERSION                     0x00038000
#define   OFFSET_SERIAL                      0x00040000

void write_to_flash (void)    {                    
BYTE i;
DWORD *pointer_podatak1, *pointer_podatak2, *pointer_podatak3;

    iap_copy_to_flash(&display_address, OFFSET_ADDRESS, 1);
    delay_1_ms();

    iap_copy_to_flash(&version, OFFSET_VERSION, 1);
    delay_1_ms();

    for (i=0;i<8;i++)     {

        iap_copy_to_flash(&serial_no, OFFSET_SERIAL+i, 1);
        delay_1_ms();

        }  
    }

void read_from_flash (void)   {                    

    BYTE i;
    DWORD *pok_add, *pok_ver, *pok_serial_no;

    pok_add = (DWORD*)OFFSET_ADDRESS;
    display_address = *pok_add;
    delay_1_ms();
    if ((display_address > MAX_OUTDOOR_DISPLAY_ADDRESS) || (display_address < MIN_OUTDOOR_DISPLAY_ADDRESS))  display_address = UNI_ADDRESS;


    pok_ver = (DWORD*)OFFSET_VERSION;
    version = *pok_ver;
    delay_1_ms();
    if (version > MAX_FW_VERSION)        version = 0;                      

    for (i=0;i<8;i++)     {
        pok_serial_no = (DWORD*)OFFSET_SERIAL;
        serial_no = *pok_serial_no++;
        delay_1_ms();
    }
    for (i=0;i<8;i++)         if (serial_no > 9)   serial_no = 0;      

}

display_address, version and serial_no[] are global variables which are forwarded to these two functions write_to_flash and read_from_flash. Anyone knows maybe what can cause the problem, even if the correct and working code is implemented in main project?

Outcomes