• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

AVR单片机IAP引导程序的FLASH页写入问题

青山奇侠 2015-10-23 浏览量:1351

一个引导程序,在擦除FLASH,执行FLASH页写入时,每页的前2个字节写入错误,其他的字节都对。何解?

采用的是ATmeag644单片机

下面是详细的程序

void boot_page_ew(uint p_address,uchar code)
{
asm("mov r30,r16n"
"mov r31,r17n"
"out 0x3b,r18n");            //将页地址放入Z寄存器和RAMPZ的Bit0中
SPMCSR = code;                //寄存器SPMCSR中为操作码
asm("spmn");                    //对指定Flash页进行操作
}
void boot_page_fill(unsigned int address1,uint data1)
{
asm("mov r30,r16n"
"mov r31,r17n"        //Z寄存器中为填冲页内地址
"mov r0,r18n"
"mov r1,r19n");       //R0R1中为一个指令字
SPMCSR = 0x01;
asm("spmn");
}
//等待一个Flash页的写完成
void wait_page_rw_ok(void)
{
while(SPMCSR & 0x40)
{
while(SPMCSR & 0x01);
SPMCSR = 0x01;//0x11;
asm("spmn");
}
}
//更新一个Flash页的完整处理
void write_one_page(uint address1)
{
uint i;
boot_page_ew(address1,0x03);           //擦除一个Flash页
wait_page_rw_ok();               //等待擦除完成

for(i=0;i<256;i++)  
{
boot_page_fill(i, data[i]+(data[i+1]<<8));
i++;
}
boot_page_ew(address1,0x05);           //将缓冲页数据写入一个Flash页

wait_page_rw_ok();               //等待写入完成
}

上面的程序都是通用的,执行write_one_page()函数后始终出现这样的问题。请高手解答。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
其他答案 数量:1
  • 你使用AVRGCC中boot.h的函数试试。
    • 发布于2015-10-23
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

AVR单片机IAP引导程序的FLASH页写入问题