#include "Config.h"
#define DEBUGMSG printf
#define CONFIG_START_ADDR 0x00300000
#define PAGE_SIZE 512
/****************************************
*函数名称:ISPEnable
*输 入:无
*输 出:无
*功 能:ISP使能
******************************************/
VOID ISPEnable(VOID)
{
Un_Lock_Reg();
ISPCON |= ISPEN;
}
/****************************************
*函数名称:ISPDisable
*输 入:无
*输 出:无
*功 能:ISP禁能
******************************************/
VOID ISPDisable(VOID)
{
Un_Lock_Reg();
ISPCON &= ~ISPEN;
}
/****************************************
*函数名称:ISPTriger
*输 入:无
*输 出:无
*功 能:ISP触发
******************************************/
VOID ISPTriger(VOID)
{
ISPTRG |= ISPGO;
while((ISPTRG&ISPGO) == ISPGO);
}
/****************************************
*函数名称:ConfigEnable
*输 入:无
*输 出:无
*功 能:Config使能
******************************************/
VOID ConfigEnable(VOID)
{
Un_Lock_Reg();
ISPCON |= CFGUEN;
}
/****************************************
*函数名称:ConfigErase
*输 入:无
*输 出:无
*功 能:Config区 擦除
******************************************/
VOID ConfigErase(VOID)
{
ISPEnable();
ConfigEnable();
ISPCMD = PAGE_ERASE;
ISPADR = CONFIG_START_ADDR;
ISPTriger();
ISPDisable();
}
/****************************************
*函数名称:Config0Write
*输 入:无
*输 出:无
*功 能:Config0区 写
******************************************/
VOID Config0Write(UINT32 unData)
{
ISPEnable();
ConfigEnable();
ISPCMD = PROGRAM;
ISPADR = CONFIG_START_ADDR+0x00;
ISPDAT = unData;
ISPTriger();
ISPDisable();
}
/****************************************
*函数名称:Config1Write
*输 入:无
*输 出:无
*功 能:Config1区 写
******************************************/
VOID Config1Write(UINT32 unData)
{
ISPEnable();
ConfigEnable();
ISPCMD = PROGRAM;
ISPADR = CONFIG_START_ADDR+0x04;
ISPDAT = unData;
ISPTriger();
ISPDisable();
}
/****************************************
*函数名称:Config0Read
*输 入:无
*输 出:无
*功 能:Config0区 读
******************************************/
UINT32 Config0Read(VOID)
{
UINT32 unData;
ISPEnable();
ISPCMD = READ;
ISPADR = CONFIG_START_ADDR+0x00;
ISPTriger();
unData = ISPDAT;
ISPDisable();
return unData;
}
/****************************************
*函数名称:Config1Read
*输 入:无
*输 出:无
*功 能:Config1区 读
******************************************/
UINT32 Config1Read(VOID)
{
UINT32 unData;
ISPEnable();
ISPCMD = READ;
ISPADR = CONFIG_START_ADDR+0x04;
ISPTriger();
unData = ISPDAT;
ISPDisable();
return unData;
}
#include "Config.h"
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
INT32 main(VOID)
{
UINT32 unConfig0Read,unConfig1Read;
PROTECT_REG
(
PWRCON |= XTL12M_EN; //默认时钟源为外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
)
UartInit(12000000UL,9600);
while(1)
{
DEBUGMSG("Config wirte and read test\r\n");
ConfigErase(); //配置区擦除
Config0Write(0xF8FFFF7F); //配置区写
Config1Write(0xEFFFFFFF);
DEBUGMSG("Config0 wirte 0xF8FFFF7F\r\n");
DEBUGMSG("Config1 wirte 0xEFFFFFFF\r\n");
unConfig0Read=Config0Read(); //配置区读
unConfig1Read=Config1Read();
DEBUGMSG("Config0 read %X\r\n",unConfig0Read);
DEBUGMSG("Config1 read %X\r\n",unConfig1Read);
DEBUGMSG("\r\n\r\n");
Delayms(1000);
}
}
|