打印
[DemoCode下载]

新唐M051 CONFIG 程序

[复制链接]
836|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wahahaheihei|  楼主 | 2016-8-13 18:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新唐M051单片机config配置程序如下:

#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);  
  }
}

沙发
gejigeji521| | 2016-8-13 21:46 | 只看该作者
多种配置程序。

使用特权

评论回复
板凳
huangcunxiake| | 2016-8-13 22:14 | 只看该作者
无法理解这种配置的实际意义。

使用特权

评论回复
地板
玛尼玛尼哄| | 2016-8-14 11:05 | 只看该作者
喂狗间隔由WDT 控制寄存器WTIS决定。

使用特权

评论回复
5
Jessicakjdsl| | 2016-8-15 21:40 | 只看该作者
这个程序用来做什么的啊,是配置的吗

使用特权

评论回复
6
huangcunxiake| | 2016-8-16 15:58 | 只看该作者
/****************************************
*函数名称:ConfigEnable
*输    入:无
*输    出:无
*功    能:Config使能
******************************************/
VOID ConfigEnable(VOID)
{
    Un_Lock_Reg();
    ISPCON |= CFGUEN;

}
很难懂这个,不过确实是更改寄存器要解除保护。

使用特权

评论回复
7
huangcunxiake| | 2016-8-16 16:20 | 只看该作者
M051为Cortex™-M0 32位微控制器系列,其特点为宽电压工作范围2.5V至5.5V与-40℃ ~ 85℃工作温度、内建22.1184 MHz 高精度RC晶振(±1%精确度,25℃ 5V)、并内建Data Flash、欠压检测、丰富周边、整合多种多组串行传输接口、高抗干扰能力(8KV ESD/4KV EFT)、支持在线系统更新(ISP)、在线电路更新(ICP)与在线应用程序更新(IAP),提供封装有QFN33与LQFP48。
应用领域 :
门禁系统/警报器、温度传感设备、直流无刷马达应用等等
关键特性 :

• 内核(Core)

- Cortex™-M0 32 位微处理器

- 工作频率可达 50 MHz

- 工作电压:2.5V to 5.5V

- 工作温度:-40℃ ~ 85℃

• 内存(Memory)

- 64 KB应用程序

- 内嵌4 KB SRAM

- 内嵌4 KB Data Flash

- 在线系统更新ISP(In-System Programming)

- 在线电路更新ICP(In-Circuit Programming)

- 在线应用程序更新IAP(In-Application Programming)

• 模拟转数字转换器(ADC)

- 提供 8 通道

- 12 位分辨率

- 每秒采样率可达 800 kSPS

- PWM输出可以触发A/D转换

- 提供误差±1℃温度传感器

• 脉波宽度调变(PWM)

- 最多 8 通道PWM输出或互补式PWM输出

- PWM时间与周期可触发A/D转换

• 通讯接口(Connectivity)

- 提供最多二组SPI(可达36 MHz)

- 提供最多二组I²C(可达 400 kHz)

- 提供最多二组UART

- 提供一组 16/8 位外扩接口(EBI)

• 时钟控制(Clock control)

- 外部晶振4 to 24 MHz

- 内置22.1184 MHz高精度RC晶振,常温5V下±1%误差



使用特权

评论回复
8
天灵灵地灵灵| | 2016-8-16 21:18 | 只看该作者
VOID Config1Write(UINT32 unData)
{
    ISPEnable();
    ConfigEnable();
    ISPCMD = PROGRAM;
    ISPADR = CONFIG_START_ADDR+0x04;
    ISPDAT = unData;
    ISPTriger();
    ISPDisable();

}
不是很懂。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

216

主题

3027

帖子

12

粉丝