MEMORY {ext_nvsram (RWX) : ORIGIN = 0x10000000, LENGTH = 0x00080000vector_ram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x500sram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00010000user (RWX) : ORIGIN = 0x20000500, LENGTH = 0x0000FB00ext_sram (RWX) : ORIGIN = 0x30000000, LENGTH = 0x00080000ipsbar (RWX) : ORIGIN = 0x40000000, LENGTH = 0x01ext_flash (RWX) : ORIGIN = 0xFFE00000, LENGTH = 0x00200000}SECTIONS {.vector_ram : {} > vector_ram.ipsbar : {} > ipsbar.sram : {} > sram.ext_sram : {} > ext_sram.ext_nvsram : {} > ext_nvsram.ext_flash : {} > ext_flash.user : {} > user.boot_flash :{obj-CPU_A/vectors.o (.text)*(.text)*(.rodata)*(.rodata.str1.1)} > ext_flashMy code file:enum TFlashStatus Flash_write_word(ULWORD address, UWORD data){*((uint16 *)(EXT_FLASH_ADDRESS + 0x0555)) = 0x00AA;*((uint16 *)(EXT_FLASH_ADDRESS + 0x02AA)) = 0x0055;*((uint16 *)(EXT_FLASH_ADDRESS + 0x0555)) = 0x00A0;*((uint16 *)(EXT_FLASH_ADDRESS + address)) = data;return FLASH_SUCCESS; }void runEnd(void){} // leave this immediately after runInRamenum TFlashStatus Flash_Set_Word(ULWORD address, UWORD data){enum TFlashStatus status;char buf[200];enum TFlashStatus (*ramCopy)(ULWORD, UWORD) = (enum TFlashStatus(*)(ULWORD,UWORD))buf;/* Ecriture du mot de données */memcpy(buf, (void*)Flash_write_word, (char*)runEnd - (char*)Flash_write_word);status = ramCopy(address, data);return status;}
Message Edited by Alban on 2006-09-14 10:55 AM
// Memory Map:
// ----------------------------------------------------------------------
range 0x00000000 0x0007FFFF 4 Read // 512 Kbytes Internal Flash
reserved 0x00080000 0x1FFFFFFF
range 0x20000000 0x2000FFFF 4 ReadWrite // 64 Kbytes Internal SRAM
reserved 0x20010000 0x2FFFFFFF
reserved 0x30000000 0x3FFFFFFF // External SRAM (not fitted)
// $IPSBAR_BASE $IPSBAR_BASE + 0x1FFFFF // Memory Mapped Registers
reserved $IPSBAR_BASE + 0x200000 0xEFFFFFFF
range 0xF0000000 0xF0FFFFFF 4 ReadWrite // 16 Mbyte SDRAM
reserved 0xF1000000 0xFFDFFFFF
range 0xFFE00000 0xFFEFFFFF 4 read // debugger/monitor firmware
range 0xFFF00000 0xFFFFFFFF 2 ReadWrite //
/*Any clues?
* ChipSelect 0 - External Flash
*/
MCF_CS0_CSAR = MCF_CS_CSAR_BA(0xffe00000);
MCF_CS0_CSCR = (0
| MCF_CS_CSCR_WS(6)
| MCF_CS_CSCR_AA
| MCF_CS_CSCR_PS_16);
MCF_CS0_CSMR = MCF_CS_CSMR_BAM_2M | MCF_CS_CSMR_V;