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?