2006-09-13 12:02 AM
writing data to flashmemory causes progrm crash
2006-09-06 02:41 AM
Dear all,
I am using the STR715 and I have the following problem. In debug mode I run the program from SRAM. If I use the following code: void Write_flash(int iNummer, int iWaarde) { signed int iOffset =0; unsigned int iBacklight =0; switch(iNummer) { case 4: //Offset iOffset = iWaarde; iBacklight =*((unsigned int *)(0x400C0054)); break; case 5: //Backlight colour setting iOffset =*((unsigned int *)(0x400C0050)); iBacklight = iWaarde; break; } /*Write all temperary variables to the flash*/ FLASH_Init(); FLASH_WritePrConfig (FLASH_B1F0,DISABLE); FLASH_SectorErase (FLASH_B1F0); FLASH_WordWrite (0x400C0050,iOffset); FLASH_WordWrite (0x400C0054,iBacklight); //FLASH_WritePrConfig (FLASH_B1F0,ENABLE); } And call it with: Write_flash(5,4); There is no problem. The number 4 is written in the flash memory adress 0x400C0054(in data memory flash). I checked this by looking in the flashmemory at the specific adress via my JTAG. However if I run my program from flash(production versions)the program crashes/stop running when the above function is called. I don't have any idea what to problem might be. I there someone who can help me? Thanks, Jimmey2006-09-06 03:18 AM
Hi,
I want to write to nullbank 1 sector 0. The text in your reply is referring to bank 0. Isn't it? Best Regard, Jimmey2006-09-06 04:39 AM
Hi,
Thanks for the answer. Where should I put this function in my code? I think: FLASH_Init(); FLASH_WritePrConfig (FLASH_B1F0,DISABLE); FLASH_SectorErase (FLASH_B1F0); FLASH_WaitForLastTask();FLASH_WordWrite (0x400C0050,iOffset); FLASH_WordWrite (0x400C0054,iBacklight); FLASH_WritePrConfig (FLASH_B1F0,ENABLE); Right? I am working with uVision 3 from KEIL. I don't know how to execute this function from the RAM. Do you? My main program is running from flash. Can you perhaps tell me the real problem or send me(a link to) a document? This because I still don't know the real problem here. regards, Jimmey2006-09-07 02:52 AM
Hi,
Thanks! The write to flash function is being executed now. I made the following flash_function execute from SRAM: void FLASH_Init(void) __ram void FLASH_WritePrConfig(u32 Xsectors, FunctionalState NewState) __ram void FLASH_WaitForLastTask(void) __ram However the program crashes after executing the above functions. If I run: XTI_LineConfig(XTI_Line3, DISABLE); // runs fine XTI_LineConfig(XTI_Line2, DISABLE); // runs fine Write_flash(2, ADCsample); // runs fine //program crash Set_Display(); // not being executed Function_update &= 0xFFFB; // not being executed The functions in the Write_flash(2, ADCsample); function are being executed in SRAM. This works now. But the program does not return from the functions in the SRAM, it crashes. So the Set_Display(); Function_update &= 0xFFFB; are never being executed. Does someone know what is going wrong? Regards, Jimmey2006-09-07 05:34 AM
Hello,
im my case i can write only once to the flash (address 0x400C3FFC). For a new write to the address i has to delete the sector (i use RFLASHER). I use the routine ''FLASH_WordWrite (DownloadFlag, *(unsigned int *) FlashBuffer);'' Also i used the __ramfunc option. But it works only once. Has anyone a idea? Thanks Heriebrt ________________ Attachments : neu-1.jpg : https://st--c.eu10.content.force.com/sfc/dist/version/download/?oid=00Db0000000YtG6&ids=0680X000006HtGu&d=%2Fa%2F0X0000000aKw%2FSttp5x0i9i26qtlivgNJ8otSLZv0Lbckm4bTmWHSrdU&asPdf=false2006-09-12 04:17 AM
Hi all,
My program is still crashing. I am also using the ADC, XTI and the TIM1 interrupts. Should I also put these interrupts in RAM, or should I disable them? If so, should I also disable the EIC_IRQConfig(DISABLE);? Regards, Jimmey2006-09-12 09:11 PM
Hi,
I can not find the CPSR register in the documentation. Can you tell me in which document I can find it? Or can you give me the adress and register discription. Thanks, Jimmey