#include "SmartM_M0.h"
#define PAGE_SIZE 512
#define FLASH_START_ADDRESS 0x00000000
#define FLASH_SIZE 0x00010000
/****************************************
*函数名称:ISPTriger
*输 入:无
*输 出:无
*功 能:ISP执行
******************************************/
VOID ISPTriger(VOID)
{
ISPTRG |= ISPGO;
while((ISPTRG&ISPGO) == ISPGO);
}
/****************************************
*函数名称:ISPEnable
*输 入:无
*输 出:无
*功 能:ISP使能
******************************************/
VOID ISPEnable(VOID)
{
ISPCON |= ISPEN|CFGUEN|LDUEN;
}
/****************************************
*函数名称:ISPDisable
*输 入:无
*输 出:无
*功 能:ISP禁用
******************************************/
VOID ISPDisable(VOID)
{
ISPCON &= ~(ISPEN|CFGUEN|LDUEN);
}
/****************************************
*函数名称:FMC_Erase
*输 入:unPage 页地址
*输 出:无
*功 能:数据区擦除
******************************************/
VOID FMC_Erase(UINT32 unAddr)
{
PROTECT_REG(
ISPEnable();
ISPCMD = PAGE_ERASE;
ISPADR = unAddr;
ISPTriger();
ISPDisable();
)
}
/****************************************
*函数名称:FMC_Write
*输 入:pucBuf 写数据缓冲区
unSize 写数据大小
*输 出:无
*功 能:数据区写
******************************************/
VOID FMC_Write(UINT32 unAddr,UINT8 *pucBuf,UINT32 unSize)
{
UINT32 i;
PROTECT_REG(
ISPEnable();
ISPCMD = PROGRAM;
for(i=0; i<unSize; i+=4)
{
ISPADR = (i+unAddr);
ISPDAT = *(UINT32 *)(&pucBuf[i]);
ISPTriger();
}
ISPDisable();
)
}
/****************************************
*函数名称:FMC_Read
*输 入:pucBuf 读数据缓冲区
unSize 读数据大小
*输 出:无
*功 能:数据区读
******************************************/
VOID FMC_Read(UINT32 unAddr,UINT8 *pucBuf,UINT32 unSize)
{
UINT32 i;
PROTECT_REG(
ISPEnable();
ISPCMD = READ;
for(i=0; i<unSize; i+=4)
{
ISPADR = (i+unAddr);
ISPTriger();
*(UINT32 *)(&pucBuf[i])=ISPDAT;
}
ISPDisable();
)
}
UINT32 Read_UID(UINT32 unAddr)
{
UINT32 UIDX;
PROTECT_REG(
ISPEnable();
ISPCMD = READ_UID;
ISPADR =unAddr;
ISPTriger();
*(UINT32 *)(&UIDX)=ISPDAT;
ISPDisable();
)
return UIDX;
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
INT32 main(VOID)
{
/*1.MCU频率初始化,频率为50MHz*/
McuInit(MCU_FREQUENCY);
/*2.串口初始化,波特率为115200bps*/
UartInit(115200);
Delayms(1000);
while(1)
{
printf("\r\nCPU ID = %X\r\n",Read_UID(0X00));//全球唯一ID码64-96位
printf("\r\nCPU ID = %X\r\n",Read_UID(0X04));//全球唯一ID码32-64位
printf("\r\nCPU ID = %X\r\n",Read_UID(0X08));//全球唯一ID码0-32位
Delayms(1000);
}
}
|