5xx-超出64 k地址的flash 读和写和segment A 的读写理解
__disable_interrupt(); // 5xx Workaround: Disable global // interrupt while erasing. Re-Enable // GIE if needed FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY+ERASE; // Set Erase bit
*(unsigned int *)Flash_ptrD = 0; // Dummy write to erase Flash seg D FCTL1 = FWKEY+WRT; // Set WRT bit for write operation
for (i = 0; i < 128; i++) {
*Flash_ptrD++ = *Flash_ptrC++; }
FCTL1 = FWKEY; FCTL3 = FWKEY+LOCK; }
void write_Seg_1(char value) {
unsigned int i;
char * Flash_ptr; Flash_ptr = (char *) 0x10000;
__disable_interrupt(); FCTL3 = FWKEY; FCTL1 = FWKEY+ERASE; *(unsigned int *)Flash_ptr = 0; FCTL1 = FWKEY+WRT;
for (i = 0; i < 128; i++) {
*Flash_ptr++ = value++; }
FCTL1 = FWKEY; FCTL3 = FWKEY+LOCK; }
调试截图如下: 初始化时LOCKA=1
// copy value segment C to seg D // Clear WRT bit // Set LOCK bit // Initialize Flash pointer // 5xx Workaround: Disable global // interrupt while erasing. Re-Enable // GIE if needed // Clear Lock bit // Set Erase bit
// Dummy write to erase Flash seg // Set WRT bit for write operation // Write value to flash // Clear WRT bit // Set LOCK bit