/* test CBEIF flag to ensure that address/data/command buffers are empty.*/
while ((FSTAT & 0x80) != 0x80)
{
;
}
/* check ACCERR and PVIOL is set */
if(FSTAT & 0x30 != 0x00)
{
/* verify all ACCERR and PVIOL flag in the FSTAT are cleared. */
FSTAT = FSTAT_FPVIOL_MASK|FSTAT_ACCERR_MASK;
}
/* write 4 int data to flash */
for(i = 0x00; i < 0x04; i++)
{
FCCOBIX = i + 0x02;
if(GlobalAdd == (unsigned long)far_address)
{
FCCOB = data;
}
else
{
FCCOB = *((unsigned int *far) (GlobalAdd ));
}
GlobalAdd += 2;
}
FSTAT |= 0x80;
/* test CBEIF flag to ensure that address/data/command buffers are empty.*/
while ((FSTAT & 0x80) != 0x80)
{
;
}
return errflag;
}
/*****************************************************************************
* Function Name : FlashEraseSectorGlobalAdd
* Description : Erases a given Flash sector using global address
* passed from calling function.
*
******************************************************************************/
unsigned char FlashEraseSectorGlobalAdd(unsigned int *far far_address)
{
unsigned char errflag = ERR_OK;
unsigned long GlobalAdd;
GlobalAdd = (unsigned long)far_address;
/* test CBEIF flag to ensure that address/data/command buffers are empty.*/
while ((FSTAT & 0x80) != 0x80)
{
;
}
/* check ACCERR and PVIOL is set */
if(FSTAT & 0x30 != 0x00)
{
/* verify all ACCERR and PVIOL flag in the FSTAT are cleared. */
FSTAT = FSTAT_FPVIOL_MASK|FSTAT_ACCERR_MASK;
}
SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
/* Register space */
/* IO_SEG = PAGED 0x0000 TO 0x03FF; intentionally not defined */
/* RAM */
RAM = READ_WRITE 0x3000 TO 0x3FFF;
/* D-Flash */
DFLASH = READ_ONLY 0x010400 TO 0x0113FF;
/* non-paged FLASHs */
ROM_1400 = READ_ONLY 0x1400 TO 0x27FF;
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xf8ff;
BOOT_SEGMENT = READ_ONLY 0xf900 TO 0xFEFF RELOCATE_TO 0x2800; //1228 Bytes
/* VECTORS = READ_ONLY 0xFF00 TO 0xFFFF; intentionally not defined: used for VECTOR commands below */
//OSVECTORS = READ_ONLY 0xFF8C TO 0xFFFF; /* OSEK interrupt vectors (use your vector.o) */
/* paged FLASH: 0x8000 TO 0xBFFF; addressed through PPAGE */
PAGE_08 = READ_ONLY 0x088000 TO 0x08BFFF;
PAGE_09 = READ_ONLY 0x098000 TO 0x09BFFF;
PAGE_0A = READ_ONLY 0x0A8000 TO 0x0ABFFF;
PAGE_0B = READ_ONLY 0x0B8000 TO 0x0BBFFF;
PAGE_0C = READ_ONLY 0x0C8000 TO 0x0C93FF;
PAGE_0C_A800 = READ_ONLY 0x0CA800 TO 0x0CBFFF;
PAGE_0E = READ_ONLY 0x0E8000 TO 0x0EBFFF;
/* PAGE_0D = READ_ONLY 0x0D8000 TO 0x0DBFFF; not used: equivalent to ROM_4000 */
/* PAGE_0F = READ_ONLY 0x0F8000 TO 0x0FBEFF; not used: equivalent to ROM_C000 */
END
PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
//.ostext, /* OSEK */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_1400, ROM_4000*/;
BOOT_SEGMENT = READ_ONLY 0xf900 TO 0xFEFF RELOCATE_TO 0x2800; //1228 Bytes这个是把FLASH的驱动的存储位置,然后重定位到RAM的地址是0x2800
DEFAULT_ROM INTO /*PAGE_08, PAGE_09, PAGE_0A, PAGE_0B, PAGE_0C, PAGE_0C_A800,*/ PAGE_0E ;
//.stackstart, /* eventually used for OSEK kernel awareness: Main-Stack Start */
SSTACK, /* allocate stack first to avoid overwriting variables on overflow */
//.stackend, /* eventually used for OSEK kernel awareness: Main-Stack End */
DEFAULT_RAM INTO RAM;
BOOT_SEG INTO BOOT_SEGMENT;
//.vectors INTO OSVECTORS; /* OSEK */
END
STACKSIZE 0x100
VECTOR 0 _Startup /* reset vector: this is the default entry point for a C/C++ application. */
//VECTOR 0 Entry /* reset vector: this is the default entry point for an Assembly application. */
//INIT Entry /* for assembly applications: that this is as well the initialization entry point */作者: 念着倒会你 时间: 2010-7-9 22:25