|
/*************************************************
** 版权: 杭州利尔达科技有限公司
** 文件名: LSD-TEST430F5438-01-flash_segment-erase1.C
** 版本: IAR 4.11
** 工作环境:
** 作者:
** 生成日期:
** 功能: 对FLASH实现块擦除
** 相关文件:
** 修改日志
**相关说明:
*************************************************************/
#include "msp430x54x.h"
void Seg_Erase(void); //块檫除
void Init_System(void); //系统初始化
void Init_Clk(void); //时钟初始化
void Init_PMM(void); //电源配置初始化
__root const char Test_Date[10]@0x8000 = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00};
//*************************************************************
void main( void )
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; //关看门狗
Init_System(); //系统初始化
while(1)
{
P1OUT ^= BIT0;
for( i = 0;i < 60000;i++);
}
}
/*************************************************
函数(模块)名称:void Seg_Erase(void)
功能: 系统初始化
本函数(模块)调用的函数(模块)清单:
调用本函数(模块)的函数(模块)清单:
输入参数:
输出参数:
函数返回值说明:
使用的资源
其它说明:
*************************************************/
void Init_System(void)
{
P1DIR |= BIT0; //P1.0为输出
P1OUT |= BIT0;
Init_PMM(); //PMM初始化
Init_Clk(); //时钟系统初始化
Seg_Erase(); //块擦除初始化
}
/*************************************************
函数(模块)名称:void Seg_Erase(void)
功能: 完成FLASH块檫写
本函数(模块)调用的函数(模块)清单:
调用本函数(模块)的函数(模块)清单:
输入参数:
输出参数:
函数返回值说明:
使用的资源
其它说明: 注意:子程序为存储在FLASH中,不需要检查BUSY
*************************************************/
void Seg_Erase(void)
{
char *flase_erase;
flase_erase = (char *)0X8000; //指向要檫写的段地址
FCTL3 = FWKEY; //清除LOCK
FCTL1 = FWKEY + ERASE; //段檫除
*flase_erase = 0; //空写将0写为1
FCTL3 = FWKEY + LOCK; //LOCK置1,上锁
}
/*************************************************
函数(模块)名称:void Init_Clk(void)
功能: 时钟初始化 MCLK = 2MHZ ,ACLK = XT1,SMCLK = 1MHZ
本函数(模块)调用的函数(模块)清单:
调用本函数(模块)的函数(模块)清单:
输入参数:
输出参数:
函数返回值说明:
使用的资源
其它说明:
*************************************************/
void Init_Clk(void)
{
P7SEL |= 0x03; // XT1起振
UCSCTL1 = DCORSEL_2; // 设置 DCO 范围
UCSCTL3 |= SELREF_2; // 配置 Fll参考频率 REFO
UCSCTL4 = SELM_3 + SELA_0 + SELS_4; // 配置 MCLK = DCOC,SMCLK =DCODIV,ACLK=XT1
while (SFRIFG1 & OFIFG) //清除 OFIFG,and XT1OFFG ,DCOFFG
{
UCSCTL7 &= ~( XT1LFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}
}
/*************************************************
函数(模块)名称:void Init_PMM(void)
功能: F5XX 电源管理初始化
本函数(模块)调用的函数(模块)清单:
调用本函数(模块)的函数(模块)清单:
输入参数: void
输出参数: void
函数返回值说明 :void
使用的资源
其它说明: 注意: SVSMLRRLX ,PMMCOREVX
*************************************************/
void Init_PMM(void)
{
PMMCTL0_H = 0xA5;
//开PMM电源管理
SVSMLCTL |= SVSMLRRL_2 + SVMLE;
//配置SVML电压级别
PMMCTL0 = PMMPW + PMMCOREV_2;
//配置内核电压
while((PMMIFG & SVSMLDLYIFG ) == 0);
//等待设置完成
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);
if((PMMIFG & SVMLIFG) != 0)
//判断内核电压是否上升到VSVML
while((PMMIFG & SVMLVLRIFG) == 0);
//如果没有等待
SVSMLCTL &= ~SVMLE;
//关掉SVML模块
PMMCTL0_H = 0X00;
//锁存配置
}
|
|