新唐M051 ISP(LDROM、FMC,相当于8位机EEPROM操作)程序

新唐M051 ISP(LDROM、FMC,相当于8位机EEPROM操作)程序

发一个M051单片机的 ISP操作程序(LDROM、FMC,相当于8位机EEPROM操作)

#include "SmartM_M0.h"
#define DEBUGMSG printf

#define PAGE_SIZE 512
#define DATAFLASH_START_ADDRESS0x0001F000
#define DATAFLASH_SIZE 0x00001000
#define RW_SIZE 0x20 STATIC UINT8 g_unDataFlashWRBuf[10]; //全局读写缓冲区 /****************************************
*函数名称:ISPTriger
*输 入:无
*输 出:无
*功 能:ISP执行
******************************************/
VOID ISPTriger(VOID)
{
ISPTRG |= ISPGO;
while((ISPTRG&ISPGO) == ISPGO);
}
/****************************************
*函数名称:ISPEnable
*输 入:无
*输 出:无
*功 能:ISP使能
******************************************/
VOID ISPEnable(VOID)
{
Un_Lock_Reg();
ISPCON |= ISPEN;
}
/****************************************
*函数名称:ISPDisable
*输 入:无
*输 出:无
*功 能:ISP禁用
******************************************/
VOID ISPDisable(VOID)
{
Un_Lock_Reg();
ISPCON &= ~ISPEN;
}
/****************************************
*函数名称:DataFlashRWEnable
*输 入:无
*输 出:无
*功 能:数据区读写使能
******************************************/
VOID DataFlashRWEnable(VOID)
{
Un_Lock_Reg();
ISPCON |= LDUEN;
}
/****************************************
*函数名称:DataFlashErase
*输 入:unPage 页地址
*输 出:无
*功 能:数据区擦除
******************************************/
VOID DataFlashErase(UINT32 unPage)
{
ISPEnable();
DataFlashRWEnable();
ISPCMD = PAGE_ERASE; ISPADR = (unPage*PAGE_SIZE+DATAFLASH_START_ADDRESS);
ISPTriger(); ISPDisable();
}
/****************************************
*函数名称:DataFlashWrite
*输 入:pucBuf 写数据缓冲区
unSize 写数据大小
*输 出:无
*功 能:数据区写
******************************************/
VOID DataFlashWrite(UINT8 *pucBuf,UINT32 unSize)//unSize要为4的倍数
{
UINT32 i; ISPEnable();
DataFlashRWEnable();
ISPCMD = PROGRAM; for(i=0; i<unSize; i+=4)
{
ISPADR = (i*4+DATAFLASH_START_ADDRESS);
ISPDAT = *(UINT32 *)(pucBuf+i);
ISPTriger();
} ISPDisable();
}
/****************************************
*函数名称:DataFlashRead
*输 入:pucBuf 读数据缓冲区
unSize 读数据大小
*输 出:无
*功 能:数据区读
******************************************/
VOID DataFlashRead(UINT8 *pucBuf,UINT32 unSize)
{
UINT32 i; ISPEnable();
DataFlashRWEnable();
ISPCMD = READ; for(i=0; i<unSize; i+=4)
{
ISPADR = (i*4+DATAFLASH_START_ADDRESS);
ISPTriger();
*(UINT32 *)(pucBuf+i)=ISPDAT;
}
ISPDisable();
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
INT32 main(VOID)
{
UINT32 i;
PROTECT_REG//ISP下载时保护FLASH存储器
(
PWRCON |= XTL12M_EN;//默认时钟源为外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定

CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;//设置外部晶振为系统时钟
) UartInit(12000000,9600);//串口0波特率为9600 while(1)
{
//擦除第0页
DataFlashErase(0); DEBUGMSG("\r\nData Flash Write:\r\n"); //初始化缓冲区,所有数值全为0x11
memset(g_unDataFlashWRBuf,0x11,sizeof(g_unDataFlashWRBuf));
for(i=0; i<sizeof(g_unDataFlashWRBuf); i++)
{
DEBUGMSG("%02X ",g_unDataFlashWRBuf[i]);
} //数据区写
DataFlashWrite(g_unDataFlashWRBuf,sizeof(g_unDataFlashWRBuf)); DEBUGMSG("\r\nData Flash Read:\r\n");
//清零缓冲区
memset(g_unDataFlashWRBuf,0,sizeof(g_unDataFlashWRBuf));
//数据区读
DataFlashRead(g_unDataFlashWRBuf,sizeof(g_unDataFlashWRBuf));
for(i=0; i<sizeof(g_unDataFlashWRBuf); i++)
{
DEBUGMSG("%02X ",g_unDataFlashWRBuf[i]);
}

Delayms(500);
}
}


唯样商城-电子元器件采购网(www.oneyac.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。唯样自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
本文由网络整理转载自单片机教程网,原文标题为:新唐M051 ISP(LDROM、FMC,相当于8位机EEPROM操作)程序,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

上一篇:新唐M051 UART0使用程序

下一篇:新唐M051 IIC使用程序

唯样头条公众号
最新最热
行业资讯
领先元件
技术方案
订阅栏目
效率阅读
品牌专区
相关文章
最新入库
编号 分类 库存
TPS65287RHAR
TI
DC-DC转换器 0
VZT151M1VTR-0607
LELON
未分类 0
VZT101M1ETR-0605
LELON
未分类 0
LBZT52MB24T1G
LRC
通用二极管 0
AF0201FR-0769K8L
Yageo
未分类 0
AB08000001
TXC
未分类 0