打印
[PIC®/AVR®/dsPIC®产品]

执行擦除操作后需要重新初始化串口?

[复制链接]
1290|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
astudent|  楼主 | 2014-12-27 07:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 astudent 于 2014-12-27 08:01 编辑

新用PIC24F256GB206,发现执行片内FLASH某个扇区擦除操作后,都需要重新初始化串口配置。不重新初始化,串口通信失效。会是什么原因?

FLASH操作代码是网上找的,如下:

#define FLASH_ERASEPAGE 0x4042
#define FLASH_PROGLINE  0x4001

//写周期函数
void FlashWriteCycle(void)
{
  NVMKEY = 0x55;
  NVMKEY = 0xaa;
  _WR = 1;
  Nop();
  Nop();
}

//一次擦除8行块,512条指令,1536字节的函数
void FlashErasePage(UINT32 FlashAddr)
{  
  NVMCON = FLASH_ERASEPAGE;

  TBLPAG = ((FlashAddr & 0x7F0000)>>16);
  FlashAddr = (FlashAddr & 0x00FFFF);
  asm("tblwtl w0,[w0]");
  FlashWriteCycle();
}

//一次写1行块,64条指令,192字节的函数
void FlashWriteBlock(UINT32 FlashAddr,UINT8 *Dest)
{
  UINT16 i;

  NVMCON = FLASH_PROGLINE;
  TBLPAG = ((FlashAddr & 0x7F0000)>>16);
  FlashAddr = (FlashAddr & 0x00FFFF);

  for(i=0; i<64; i++)
  {
    asm("tblwtl.b %0,[%1]"::"r"(*Dest),"d"(FlashAddr));
    Dest++;
    asm("tblwtl.b %0,[%1]"::"r"(*Dest),"d"(FlashAddr+1));
    Dest++;
    asm("tblwth.b %0,[%1]"::"r"(*Dest),"d"(FlashAddr));
    Dest++;
    // 跳过
    Dest++;
    FlashAddr += 2;
  }
  FlashWriteCycle();
}

//一次读1行块,64条指令,192字节的函数
void FlashReadBlock(UINT32 FlashAddr,UINT8 *Dest)
{
  UINT16 i;

  TBLPAG = ((FlashAddr & 0x7F0000)>>16);
  FlashAddr = (FlashAddr & 0x00FFFF);

  for(i=0; i<64; i++)
  {
    asm("tblrdl.b [%1],%0":"=r"(*Dest):"r"(FlashAddr));
    Dest++;
    asm("tblrdl.b [%1],%0":"=r"(*Dest):"r"(FlashAddr+1));
    Dest++;
    asm("tblrdh.b [%1],%0":"=r"(*Dest):"r"(FlashAddr));
    Dest++;
    // 跳过
    Dest++;   
    FlashAddr += 2;
  }
}

芯片配置如下:

// These are the same config settings used by the bootloader and must not be changed here.
_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF & ICS_PGx3)
_CONFIG2( IESO_OFF & FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMOD_NONE & FNOSC_FRCPLL & PLLDIV_NODIV & IOL1WAY_ON)
_CONFIG3( SOSCSEL_EC & WPCFG_WPCFGDIS & WPDIS_WPDIS)                //Disable erase/write protect of all memory regions.



沙发
yewuyi| | 2014-12-27 13:09 | 只看该作者
没听说

使用特权

评论回复
板凳
astudent|  楼主 | 2014-12-27 13:58 | 只看该作者
yewuyi 发表于 2014-12-27 13:09
没听说

也觉得很奇怪,所以才发帖求助。

使用特权

评论回复
地板
XIEYUANBIN| | 2014-12-27 16:37 | 只看该作者
有可能是擦除或者写操作过程中WDT溢出复位了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

509

帖子

0

粉丝