📄 flash.c
字号:
#include <msp430x44x.h>
#include "../main/parameter.h"
#include "msp430x44x_hard.h"
#include "flash.h"
/****************************************************************************************************************
Function: unsigned char FlashBusy()
Description: 测试flash是否忙 1:忙 0:不忙
Calls:
Calls By:
Table Accessed:
Table Updated:
Input:
Output:
Return:
Others:
****************************************************************************************************************/
unsigned char FlashBusy()
{
if((FCTL3 & BUSY) == BUSY)
return 1;
else
return 0;
}
/****************************************************************************************************************
Function: void FlashInit(void)
Description: 设置adc12通道,及通道参考电压,触发中断等
Calls:
Calls By:
Table Accessed:
Table Updated:
Input:
Output:
Return:
Others:
****************************************************************************************************************/
void FlashInit(void)
{
//DCOCTL = DCO0 + DCO0;
//BCSCTL1 = DCO_470KHZ + ACLK_DIV_1 + XT2OFF;
//BCSCTL2 = DCO_ON + SMCLK_DIV_1 + SMCLK_DCOCLK + MCLK_DIV_1 + MCLK_DCOCLK;
FCTL2 = FWKEY + FSSEL_1 + (FREQ/400000 - 1); // FN3 + FN4; //mclk
FCTL3 = FWKEY;
while(FlashBusy() == 1); // 等待FLASH存储器完成操作
}
/****************************************************************************************************************
Function: void FlashErase(unsigned int flashAdr)
Description: 设置adc12通道,及通道参考电压,触发中断等
Calls:
Calls By:
Table Accessed:
Table Updated:
Input:
Output:
Return:
Others:
****************************************************************************************************************/
void FlashErase(unsigned int flashAdr)
{
unsigned char *pointer;
if (flashAdr > 0xfdff) return;
if (flashAdr < CALI_DATA_ADDR)return;
clear_WDT();
FCTL3 = FWKEY;
FCTL1 = FWKEY + ERASE;
pointer = (unsigned char *)flashAdr;
*pointer = 0; // 向段内地址任意写,启动擦除操作
FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK;
while(FlashBusy() == 1); // 等待FLASH存储器完成操作
}
/****************************************************************************************************************
Function: void FlashWW(unsigned int Adr,unsigned int DataW)
Description: 字编程
Calls:
Calls By:
Table Accessed:
Table Updated:
Input: Adr:要编程的地址,注意:不是指针类型,应当是偶地址
DataW:要编程的字
Output:
Return:
Others:
****************************************************************************************************************/
void FlashWW(unsigned int Adr, unsigned int DataW)
{
FCTL1=FWKEY+WRT;
FCTL3 = FWKEY;
*((unsigned int *)Adr) = DataW;
FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK;
while(FlashBusy() == 1); // 等待FLASH存储器完成操作
}
/****************************************************************************************************************
Function: void FlashWB(unsigned int Adr,unsigned char DataB)
Description: 字节编程
Calls:
Calls By:
Table Accessed:
Table Updated:
Input: Adr:指向要编程的地址,注意:不是指针类型
DataB:要编程的字节
Output:
Return:
Others:
****************************************************************************************************************/
void FlashWB(unsigned int Adr,unsigned char DataB)
{
FCTL1 = FWKEY+WRT;
FCTL3 = FWKEY;
*((unsigned char *)Adr) = DataB;
FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK;
while(FlashBusy() == 1); // 等待FLASH存储器完成操作
}
/****************************************************************************************************************
Function: void FlashWSegment(unsigned int SegmentAdr, unsigned char *p, unsigned char SegmentSize)
Description: 字节编程
Calls:
Calls By:
Table Accessed:
Table Updated:
Input: SegmentAdr:指向要编程的地址,注意:不是指针类型
*p : 指向带写入数据的数组,指针类型
SegmentSize:要编程的段的大小
Output:
Return:
Others:
****************************************************************************************************************/
void FlashWSegment(unsigned int SegmentAdr, unsigned char *p, unsigned char SegmentSize)
{
unsigned int i;
FCTL1 = FWKEY+WRT;
FCTL3 = FWKEY;
for (i = 0; i < SegmentSize; i++)
{
*((unsigned char *)SegmentAdr) = *p;
SegmentAdr++;
p++;
}
FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK;
while(FlashBusy() == 1); // 等待FLASH存储器完成操作
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -