新唐M051單片機config配置程序如下:
#include "Config.h"
#define DEBUGMSG printf
#define CONFIG_START_ADDR 0x00300000
#define PAGE_SIZE 512
/****************************************
*函數(shù)名稱:ISPEnable
*輸 入:無
*輸 出:無
*功 能:ISP使能
******************************************/
VOID ISPEnable(VOID)
{
Un_Lock_Reg();
ISPCON |= ISPEN;
}
/****************************************
*函數(shù)名稱:ISPDisable
*輸 入:無
*輸 出:無
*功 能:ISP禁能
******************************************/
VOID ISPDisable(VOID)
{
Un_Lock_Reg();
ISPCON &= ~ISPEN;
}
/****************************************
*函數(shù)名稱:ISPTriger
*輸 入:無
*輸 出:無
*功 能:ISP觸發(fā)
******************************************/
VOID ISPTriger(VOID)
{
ISPTRG |= ISPGO;
while((ISPTRG&ISPGO) == ISPGO);
}
/****************************************
*函數(shù)名稱:ConfigEnable
*輸 入:無
*輸 出:無
*功 能:Config使能
******************************************/
VOID ConfigEnable(VOID)
{
Un_Lock_Reg();
ISPCON |= CFGUEN;
}
/****************************************
*函數(shù)名稱:ConfigErase
*輸 入:無
*輸 出:無
*功 能:Config區(qū) 擦除
******************************************/
VOID ConfigErase(VOID)
{
ISPEnable();
ConfigEnable();
ISPCMD = PAGE_ERASE;
ISPADR = CONFIG_START_ADDR;
ISPTriger();
ISPDisable();
}
/****************************************
*函數(shù)名稱:Config0Write
*輸 入:無
*輸 出:無
*功 能:Config0區(qū) 寫
******************************************/
VOID Config0Write(UINT32 unData)
{
ISPEnable();
ConfigEnable();
ISPCMD = PROGRAM;
ISPADR = CONFIG_START_ADDR+0x00;
ISPDAT = unData;
ISPTriger();
ISPDisable();
}
/****************************************
*函數(shù)名稱:Config1Write
*輸 入:無
*輸 出:無
*功 能:Config1區(qū) 寫
******************************************/
VOID Config1Write(UINT32 unData)
{
ISPEnable();
ConfigEnable();
ISPCMD = PROGRAM;
ISPADR = CONFIG_START_ADDR+0x04;
ISPDAT = unData;
ISPTriger();
ISPDisable();
}
/****************************************
*函數(shù)名稱:Config0Read
*輸 入:無
*輸 出:無
*功 能:Config0區(qū) 讀
******************************************/
UINT32 Config0Read(VOID)
{
UINT32 unData;
ISPEnable();
ISPCMD = READ;
ISPADR = CONFIG_START_ADDR+0x00;
ISPTriger();
unData = ISPDAT;
ISPDisable();
return unData;
}
/****************************************
*函數(shù)名稱:Config1Read
*輸 入:無
*輸 出:無
*功 能:Config1區(qū) 讀
******************************************/
UINT32 Config1Read(VOID)
{
UINT32 unData;
ISPEnable();
ISPCMD = READ;
ISPADR = CONFIG_START_ADDR+0x04;
ISPTriger();
unData = ISPDAT;
ISPDisable();
return unData;
}
#include "Config.h"
/****************************************
*函數(shù)名稱:main
*輸 入:無
*輸 出:無
*功 能:函數(shù)主體
******************************************/
INT32 main(VOID)
{
UINT32 unConfig0Read,unConfig1Read;
PROTECT_REG
(
PWRCON |= XTL12M_EN; //默認時鐘源為外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz時鐘穩(wěn)定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //設(shè)置外部晶振為系統(tǒng)時鐘
)
UartInit(12000000UL,9600);
while(1)
{
DEBUGMSG("Config wirte and read test\r\n");
ConfigErase(); //配置區(qū)擦除
Config0Write(0xF8FFFF7F); //配置區(qū)寫
Config1Write(0xEFFFFFFF);
DEBUGMSG("Config0 wirte 0xF8FFFF7F\r\n");
DEBUGMSG("Config1 wirte 0xEFFFFFFF\r\n");
unConfig0Read=Config0Read(); //配置區(qū)讀
unConfig1Read=Config1Read();
DEBUGMSG("Config0 read %X\r\n",unConfig0Read);
DEBUGMSG("Config1 read %X\r\n",unConfig1Read);
DEBUGMSG("\r\n\r\n");
Delayms(1000);
}
}