文档详情

【原创】DSP_FLASH操作.doc

发布:2017-12-24约3.42千字共3页下载文档
文本预览下载声明
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
显示全部
相似文档