你好,现在我有需求将一些参数保存在片内FLASH中,主要是保存通信的一些参数,可以配置,然后储存在FLASH内。我使用下面的代码进行FLASH操作,读取和擦出没有问题,现在写数据写不进去,请问下面的代码中有什么问题吗?
void FlashErase(unsigned char page)
{
FADDRH = page << 1;
FCTL |= 0x01; //启动页面擦除
while (FCTL & 0x80); //等待擦除完成
}
unsigned char DmaDesc[8]={0,0,0x62,0x73,0,0,0x12,0x42}; //定义DMA描述符
void FlashWrite(unsigned char page, unsigned int offset, unsigned char *buf, unsigned int length)
{
FADDRH = (page << 1)|((offset >> 10) & 1); //计算FLASH地址
FADDRL = (offset >> 2) & 0xFF;
DmaDesc[0] = (unsigned int)buf >> 8; //设置数据地址
DmaDesc[1] = (unsigned int)buf & 0xFF;
DmaDesc[4] = (length >> 8) & 0x1F; //设置字节数
DmaDesc[5] = length & 0xFC;
DMA0CFGH = (unsigned int)DmaDesc >> 8; //设置DMA通道0描述符地址
DMA0CFGL = (unsigned int)DmaDesc & 0xFF;
DMAIRQ = 0x01; //激活DMA通道0
DMAARM = 0x01; //使DMA通道0进入工作状态 FCTL |= 0x02; //开始DMA写入操作
while (FCTL & 0x80); //等待写入完成
}
void FlashRead(unsigned char page, unsigned int offset, unsigned char *buf, unsigned int length)
{
unsigned char *pData = (unsigned char *)(offset + (page & 0xF) * 2048 + 0x8000);
unsigned char memctr = MEMCTR; //暂存当前存储器映射状态
MEMCTR = (MEMCTR & 0xF8)|((page >> 4) & 7); //将被读FLASH映射到XDATA
while (length--)
*buf++ = *pData++; //读取数据
MEMCTR = memctr; //回复存储器映射状态
}