專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

新唐M051 CONFIG 程序

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年09月01日   【字體:

 

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