void ISP_Triger(void)//ISP触发
{
ISPTRG |= ISPGO; //触发ISP
while((ISPTRG&ISPGO) == ISPGO); //等待
}
void ISP_Enable(void)//ISP使能
{
Un_Lock_Reg(); //开锁
ISPCON |= ISPEN; //打开ISP功能
}
void ISP_Disable(void)//关闭ISP
{
Un_Lock_Reg(); //开锁
ISPCON &= ~ISPEN;//关闭ISP功能
}
uint32_t FLASH_Read(uint32_t addr)
{
uint32_t ulTmp;
ISP_Enable();//ISP使能
ISPCMD = READ;//读命令
ISPADR=addr; //需要读出数据的地址
ISP_Triger(); //触发ISP
ulTmp = ISPDAT; //读取数据
ISP_Disable(); //ISP关闭
return ulTmp; //返回数据
}
void FLASH_Erase(uint32_t addr)//擦除
{ ISP_Enable();//ISP使能
ISPCMD = PAGE_ERASE;//整页擦除命令
ISPADR = addr;//ISP擦除首地址,每次擦除512字节
ISP_Triger();//触发ISP
ISP_Disable();//关闭ISP
}
void FLASH_Program(uint32_t DATA,uint32_t addr)
{ ISP_Enable();//使能ISP
ISPCMD = PROGRAM;//编程命令
ISPADR = addr;//编程地址,累加
ISPDAT = DATA; //把数据送ISP地址寄存器
ISP_Triger();//触发ISP
ISP_Disable();//关闭ISP
}
怎么就不能正常读写呢?
芯片是m058,我在主程序中把一个数据存入内部flash,再开机的时候读这个数据,每次读出的都是0,不知道是怎么回事啊? |