查看: 2106|回复: 0

基于MS9S08LL16的flash模拟eeprom,程序如下,求高手指点迷津

[复制链接]

该用户从未签到

1

主题

8

帖子

0

新手上路

Rank: 1

积分
0
最后登录
1970-1-1
发表于 2012-1-29 10:28:11 | 显示全部楼层 |阅读模式
弄了一个月了,都弄不出来。
 
      因为ll16芯片有FLASH A和FLASH B两个局域,说明书上注明读写A区域时可以调用B区域的代码,因此我的做法是:
1、初始化读写频率为200khz:FCDIV = 19; (该步骤已写入成功)
2、定义需要保护的区域:C200-FFFF    const unsigned char NVPROT_INIT @0x0000FFBD = 0xC0;
3、修改PRM文件:   
    FLASH_EMULATION          =  READ_WRITE   0xC000 TO 0xC1FF;    //512字节用于保存EEPROM数据
    FLASH_B                                         =  READ_ONLY         0xFD00 TO 0xFFAD; //该区域用于装载flash处理代码
PLACEMENT
FLASH_RUNING                       INTO  FLASH_B;
4、擦写代码(装在flash B,该实验代码用于擦写C005地址的实验):
 
#pragma                CONST_SEG        FLASH_RUNING
static void  FlashErase()               
{
        *(volatile uchar *)(0xC005) = 0x55;
         FCMD = 0x40;                   /* Initiate command */
    FSTAT_FCBEF = 1; 
      NOP();
      NOP();
      NOP();
      NOP();  
                    /* Launch the command */
    if(FSTAT & 0X30)      /* Protection violation or access error detected ? */
     {  
        return;          /* Wait to command complete */
     }
     while(!FSTAT_FCCF) {;} 
}
static void  FlashWrite()                       
{
    *(volatile uchar *) (0xC005) = 28;
      FCMD = 0X20;        /* Initiate burst write command */
      FSTAT_FCBEF = 1;  
      NOP();
      NOP();
      NOP();
      NOP();                   /* Launch the command */    
      if(FSTAT & 0X30)     /* Error detected? */
       {  
         return;                  
       }
    while(!FSTAT_FCCF) {;}         
}
 
5、读取flash:
TmP = *(volatile uchar *)(0xC005);
 
弄了一个多月了都不能成功,也试过把代码复制到ram中运行,也试过把代码直接固化在ram上,试过使用官方例程上的机器码数组,就是不成功,恳求高手帮忙分析下问题到底出在哪里,不胜感激!
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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

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

GMT+8, 2025-8-3 17:58 , Processed in 0.076713 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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