proteuswilliam hill官网 |仿真william hill官网
直播中

cupid8505

12年用户 22经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

有没有用proteus仿真过IAP的用例? 谁有的话发一份。

有没有用proteus仿真过IAP的用例?  我写了一个用例, 总是仿真出错。有没有高手说说原因?




//IAP.c文件
void Page_Erase(int32u addr)
{
  asm("mov r31, r25");
  asm("mov r30, r24");
   
  do{
  SPMCR = 0x03;
  asm("SPM");
  }while(SPMCR & (1 << SPMEN));
  
}

void Flash_Fill_Buffer(int32u address, int8u data1, int8u data2)
{
  
  asm("mov r0,r18");
  
  asm("mov r1,r19");            //R0R1中为一个指令字
  
  asm("mov r31,r17");             //Z寄存器中为填冲页内地址
   
  asm("mov r30,r16");
  
  
  do{
  SPMCR = 0x01;
  
  asm("SPM");
  }while(SPMCR &( 1<< SPMEN));
  
  
}

//方式1写页面
void write_one_page1(int32u address, int8u *pdata, int len)
{
  int i;
  Page_Erase(address);
  
   for(i=0;i   {
   
    Flash_Fill_Buffer( i, pdata, pdata[i+1]);
  }
  
  //开始写
   asm("mov r31, r25");
  asm("mov r30, r24");

  do{
  SPMCR = 0x05;
  
  asm("SPM");
  }while(SPMCR & (1 << SPMEN));
  
  //使能Rwww
   asm("mov r31, r25");
  asm("mov r30, r24");
  
  do{
  SPMCR = 0x011;
  
  asm("SPM");
  
  }while(SPMCR & (1 << SPMEN));
  
  return;
  
}


//main.c文件
static int8u data[SPM_PAGESIZE];
//BOOTRST 编程, BOOT的大小2048字= 4096字节
int main()
{
  
  __disable_interrupt();
  memset(data, 0xAA, SPM_PAGESIZE);
  /*将data写到FLASH为0的地方*/
  write_one_page1(0, data, SPM_PAGESIZE);
  while(1){
   
  }
}

已退回1积分

回帖(4)

0303chuan

2015-3-22 21:24:13
我来帮你顶一个  别问我为什么  叫我雷锋
举报

武力戡乱

2015-3-22 21:41:18
亲,没看到图片啊!你这个是IAR软件啊!
你仿真什么单片机!!!!
应该AVR,具体什么型号!AT90S系列,ATmega系列,ATtiny,都可以仿真的!
需要帮助,请说的在详细点。
举报

武力戡乱

2015-3-23 23:35:34
引用: xianyoudian 发表于 2015-3-23 09:37
IAP不知道是什么?

就是就是就是!!!
亲我看到你好几次了,你很活跃的!欢迎你加入Proteus仿真来!我现在也真心需要帮手。
举报

wangguiyuan1983

2015-4-21 10:23:51
应该不能吧!没试过!
举报

更多回帖

×
20
完善资料,
赚取积分