查看: 2817|回复: 3

[其他] QG4 FLASH

[复制链接]

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
12
最后登录
1970-1-1
发表于 2011-3-25 17:30:56 | 显示全部楼层 |阅读模式
以下的是对FLASH操作,当我单步执行时,能正确读写FLASH,当我全速度执行时,PC却走到了0X100出去,为什么呢?在unsigned char ROM_PGM(unsigned int address,unsigned char data,unsigned char cmd) 有一个指针,    (*((volatile unsigned char *)(address))) = data;//write to somewhere in flash  ,当我删了,程序可执行,问题就出在这里,请高手指点帮我讲解下,谢谢

 
#define FLASH_CMD_BYTEPROG 0x20
#define FLASH_CMD_PAGEERASE 0x40
void  pagehandle()
{
  flash_page_erase(0xf800);
  flash_byte_prog(0xf800,0x55);
  flash_byte_prog(0xf801,0xaa);
  flash_byte_prog(0xf802,0xa5); 
  tab[0] = flash_byte_read(0xf800);
  tab[1] = flash_byte_read(0xf801);
  tab[2] = flash_byte_read(0xf802);
}
unsigned char ROM_PGM(unsigned int address,unsigned char data,unsigned char cmd)
  {
   
    __RESET_WATCHDOG();
    DisableInterrupts;    
    if (FSTAT&0x10)
      {                     //Check to see if FACCERR is set
        FSTAT = FSTAT|0x10;            //write a 1 to FACCERR to clear
      }   
    (*((volatile unsigned char *)(address))) = data;//write to somewhere in flash   
    FCMD = cmd;   
    FSTAT = FSTAT|0x80;                //Put FCBEF at 1.
    asm  nop
    asm  nop
    asm  nop
    asm  nop
    if(FSTAT&0x30)
     {                     //check to see if FACCERR or FVIOL are set
      EnableInterrupts;
      return (0xFF);                         //if so, error.
     }    
     while ((FSTAT&0x40)==0);    
     EnableInterrupts;
     return(0);    
  }   

void flash_byte_prog(unsigned int addr, unsigned char data)
{
  //FCMD = 0X20;
  ROM_PGM(addr,data,FLASH_CMD_BYTEPROG);
}
static  void flash_page_erase(unsigned int addr)
{
  //FCMD = 0X40;
  ROM_PGM(addr,0,FLASH_CMD_PAGEERASE);
}
static unsigned char flash_byte_read(unsigned int addr)
{
  return *(unsigned char *)addr;
}
我知道答案 目前已有2人回答
回复

使用道具 举报

该用户从未签到

6

主题

171

帖子

0

新手上路

Rank: 1

积分
356
最后登录
1970-1-1
发表于 2011-3-25 22:32:22 | 显示全部楼层

RE:QG4 FLASH

做读/写FLASH操作时,FLASH时钟要调低,大约在175KHZ左右.

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
12
最后登录
1970-1-1
 楼主| 发表于 2011-3-26 09:00:03 | 显示全部楼层

RE:QG4 FLASH

我用的是166.7K,不是时钟问题
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-3-26 11:01:45 | 显示全部楼层

    RE:QG4 FLASH

    要先写命令,后写入数据。如果先写入数据就进入死循环了。所以你不能操作。
    该会员没有填写今日想说内容.
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 06:32 , Processed in 0.092333 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表