【原创】DSP_FLASH操作.doc
文本预览下载声明
FLASH的读写
说是原创其实也没多少是自己的东西,主要就是合众达的SEEDVPM642的例程,再加上一些程序说明,有本书《TMS320 DM642应用系统设计与开发》里面写的很全,还包括使用CPLD对地址空间的拓展。
注意:FLASH在写之前必须先擦除FLASH上的内容。
擦除FLASH
程序:
/* Constant table containing end address of each sector */
static Uint32 sector_end[SEEDDM642_FLASH_SECTORS] = {
SEEDDM642_FLASH_BASE + 0x00ffff, /* Sector 0 */
SEEDDM642_FLASH_BASE + 0x01ffff, /* Sector 1 */
SEEDDM642_FLASH_BASE + 0x02ffff, /* Sector 2 */
SEEDDM642_FLASH_BASE + 0x03ffff, /* Sector 3 */
SEEDDM642_FLASH_BASE + 0x04ffff, /* Sector 4 */
SEEDDM642_FLASH_BASE + 0x05ffff, /* Sector 5 */
SEEDDM642_FLASH_BASE + 0x06ffff, /* Sector 6 */
SEEDDM642_FLASH_BASE + 0x07ffff /* Sector 7 */
};
void SEEDDM642_FLASH_erase(Uint32 start, Uint32 length)
{
Int16 i;
Uint8 *pdata;
Uint32 sector_base, end;
/* Calculate extents of range to erase */
end = start + length - 1;
/* Walk through each sector, erase any sectors within range */
sector_base = SEEDDM642_FLASH_BASE; /* FLASH的基地址 */
for (i = 0; i SEEDDM642_FLASH_SECTORS; i++)
{
if ((start = sector_base) (sector_end[i] = end)) /*判断该页是否要擦除*/
{
/* Start sector erase sequence */
*((Uint8 *)SEEDDM642_FLASH_BASE) = 0xaa;
*((Uint8 *)SEEDDM642_FLASH_BASE) = 0x55;
*((Uint8 *)SEEDDM642_FLASH_BASE) = 0x80;
*((Uint8 *)SEEDDM642_FLASH_BASE) = 0xaa;
*((Uint8 *)SEEDDM642_FLASH_BASE) = 0x55;
/* Start erase at sector address */
pdata = (Uint8 *)sector_base;
*pdata = 0x30;
/* Wait for erase to complete */
while (1)
{
if (*pdata 0x80)
{
break;
}
}
/* Put back in read mode */
*((Uint8 *)SEEDDM642_FLASH_BASE) = 0xf0;
}
/* Advance to next sector */
sector
显示全部