在线时间47 小时
UID267581
注册时间2011-3-8
NXP金币0 
 
 
 
该用户从未签到 
高级会员 
  
 
	- 积分
 - 533
 
 
- 最后登录
 - 2020-8-25
  
 
 | 
 
#include <hidef.h>      /* common defines and macros */ 
#include "derivative.h"      /* derivative-specific definitions */ 
 
#define READword(address)     ((unsigned int)(*(volatile unsigned int *__near)(address))) 
 
#define DFLASH_LOWEST_START_PAGE        0x00        //定义data flash的起始页 
#define DFLASH_START                    0x00100000  //定义data flash的起始地址 
#define DFLASH_PAGE_SIZE                0x0400      //定义data flash的大小为1K. 
#define DFLASH_PAGE_WINDOW_START        0x0800      //定义data flash页面窗口的起始地址 
#define LEDCPU PORTK_PK4 
#define LEDCPU_dir DDRK_DDRK4 
 
unsigned int    Buffer[]={0x1111,0x2222,0x3333,0x4444};//数据缓存区,只能一次写入四个数据 
unsigned int    data_Address=0x0000; 
unsigned int    date_read[4]; 
 
/*************************************************************/ 
/*                      初始化DFLASH                         */ 
/*************************************************************/ 
void DFlash_Init(void) 
{ 
   while(FSTAT_CCIF==0);            //等待正在处理的FLASH操作完成 
   FCLKDIV=0x0F;                    //外部晶振为16M.FLASH时钟不超过1M,具体参照手册 
   FCNFG=0x00;                      //禁止中断 
   while(FCLKDIV_FDIVLD==0);        //等待时钟设置成功 
} 
 
/*************************************************************/ 
/*                     向DFLASH写入数据                      */ 
/*************************************************************/ 
void DFlash_Write(word ADDR16) 
{ 
    while(FSTAT_CCIF==0);  
    if(FSTAT_ACCERR)           //判断并清除标志位; 
        FSTAT_ACCERR=1; 
    if(FSTAT_FPVIOL)           //判断并清除标志位; 
        FSTAT_FPVIOL=1; 
    FCCOBIX_CCOBIX=0x00;  
    FCCOB=0x1110;         //写入命令和高位地址 
    FCCOBIX_CCOBIX=0x01;  //地址后16位 
    FCCOB=ADDR16;         //写入低16位地址 
    FCCOBIX_CCOBIX=0x02;  //写入第一个数据 
    FCCOB=Buffer[0]; 
    FCCOBIX_CCOBIX=0x03;  //写入第二个数据 
    FCCOB=Buffer[1]; 
    FCCOBIX_CCOBIX=0x04;  //写入第三个数据 
    FCCOB=Buffer[2]; 
    FCCOBIX_CCOBIX=0x05;  //写入第四个数据 
    FCCOB=Buffer[3];   
 
    FSTAT_CCIF=1;         //写入执行命令 
    while(FSTAT_CCIF==0); //等待执行完毕 
} 
 
/*************************************************************/ 
/*                     由DFLASH读取数据                      */ 
/*************************************************************/ 
word DFlash_Read (word destination) 
{ 
    byte   lastepage;          //用于存储EPAGE的值 
    byte   epage;              //用于计算EPAGE的值 
    unsigned int data;         //读取出的数据 
 
    lastepage = EPAGE;   //保存EPAGE的值 
 
    epage = (byte)((DFLASH_LOWEST_START_PAGE)+(destination >>10));   //计算EPAGE 
    EPAGE=epage;                                                     //给EPAGE赋值 
 
    data = READword((destination & (DFLASH_PAGE_SIZE - 1)) + DFLASH_PAGE_WINDOW_START);  //读取页面窗口中的数据 
 
    EPAGE= lastepage;       //恢复EPAGE的值 
 
    return(data); 
} 
 
因为我设计汽车仪表时成本控制,用D_Flash代替EEPROM。 
 
请问芯片改成了MC9S12HY64 以上程序如何修改。 
 
 
 
        
        
        
         |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |