/******************************************************************************* 函数名称:Flash_Write_Word 功 能:字,写Flash 参 数:addr--写地址 buf--要写数据的首地址 len--数据长度 返回值 :无 调用模块: *******************************************************************************/ void Flash_Write_Word(int *addr, int *buf, int len) { unsigned int cnt; while(FCTL3 & BUSY); // 等待空闲 FCTL3 = FWKEY; // 清除 "Lock" FCTL1 = FWKEY + ERASE; // 准备擦除 *addr = 0; // 擦除,写任意数均可 FCTL3 = FWKEY + LOCK; // 置“LOCK” while(FCTL3 & BUSY); // 等待Flash空闲 FCTL3 = FWKEY; // 清除“LOCK”标识 FCTL1 = FWKEY + WRT; // 准备写 for(cnt=0; cnt<len; cnt++) { *(addr + cnt) = *(buf + cnt); // 写数据 } FCTL3 = FWKEY + LOCK; // Lock }
/******************************************************************************* 函数名称:Flash_Read_Word 功 能:字,读Flash 参 数:addr--读地址 wordbuf--存储读取的数据 len--数据长度 返回值 :无 调用模块: *******************************************************************************/ void Flash_Read_Word(int *addr, int *wordbuf, int len) { unsigned int cnt; while(FCTL3 & BUSY); // 等待flash空闲 for(cnt = 0; cnt < len; cnt++) { *(wordbuf + cnt) = *(addr + cnt); // 读数据 } FCTL3 = FWKEY + LOCK; // Lock }
/******************************************************************************* 函数名称:Flash_Write_Byte 功 能:字节,写Flash 参 数:addr--写地址 buf--要写数据的首地址 len--数据长度 返回值 :无 调用模块: *******************************************************************************/ void Flash_Write_Byte(char *addr, char *buf, int len) { unsigned int cnt; while(FCTL3 & BUSY); // 等待空闲 FCTL3 = FWKEY; // 清除 "Lock" FCTL1 = FWKEY + ERASE; // 准备擦除 *addr = 0; // 擦除,写任意数均可 FCTL3 = FWKEY + LOCK; // 置“LOCK” while(FCTL3 & BUSY); // 等待Flash空闲 FCTL3 = FWKEY; // 清除“LOCK”标识 FCTL1 = FWKEY + WRT; // 准备写 for(cnt=0; cnt<len; cnt++) { *(addr + cnt) = *(buf + cnt); // 写数据 } FCTL3 = FWKEY + LOCK; // Lock }
/******************************************************************************* 函数名称:Flash_Read_Byte 功 能:字节,读Flash 参 数:addr--读地址 wordbuf--存储读取的数据 len--数据长度 返回值 :无 调用模块: *******************************************************************************/ void Flash_Read_Byte(char *addr, char *bytebuf, int len) { unsigned int cnt; while(FCTL3 & BUSY); // 等待flash空闲 for(cnt=0; cnt<len; cnt++) { *(bytebuf+ cnt) = *(addr + cnt); // 读数据 } FCTL3 = FWKEY + LOCK; // Lock }
|