zoukankan      html  css  js  c++  java
  • xs128 DFlash读写

    #include "includes.h"  
      
    uint16   Buffer[]={0x1111,0x2222,0x3333,0x4444};//数据缓存区,只能一次写入四个数据  
    uint16   data_Address = 0x0000;  
    uint16   date_read[4];  
      
    /*********************************************************** 
    ** 名      称:void DFlash_Init(void) 
    ** 功      能:DFlash初始化  
    ** 入口参数:无 
    ** 出口参数:无 
    ** 使用说明:无 
    ************************************************************/  
    void DFlash_Init(void)  
    {  
            while(FSTAT_CCIF==0);            //等待正在处理的FLASH操作完成  
            FCLKDIV=0x4E;                    //外部晶振为16M.FLASH时钟不超过1M,具体参照手册  
            FCNFG=0x00;                      //禁止中断  
            while(FCLKDIV_FDIVLD==0);        //等待时钟设置成功  
    }  
      
    /*********************************************************** 
    ** 名      称:void DFlash_Write(uint16 ADDR16) 
    ** 功      能:向DFLASH写入数据  
    ** 入口参数:无 
    ** 出口参数:无 
    ** 使用说明:无 
    ************************************************************/  
    void DFlash_Write(uint16 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); //等待执行完毕  
    }  
      
    /*********************************************************** 
    ** 名      称:uint16 DFlash_Read (uint16 destination) 
    ** 功      能:由DFLASH读取数据 
    ** 入口参数:无 
    ** 出口参数:无 
    ** 使用说明:无 
    ************************************************************/  
    uint16 DFlash_Read (uint16 destination)  
    {  
        uint8   lastepage;          //用于存储EPAGE的值  
        uint8   epage;              //用于计算EPAGE的值  
        uint16 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);  
    }  
      
    /*********************************************************** 
    ** 名      称:void DFlash_Erase(uint16 ADDR16) 
    ** 功      能:擦除DFLASH的一个分区 
    ** 入口参数:无 
    ** 出口参数:无 
    ** 使用说明:无 
    ************************************************************/  
    void DFlash_Erase(uint16 ADDR16)  
    {     
      while(FSTAT_CCIF==0);  
      if(FSTAT_ACCERR)           //判断并清除标志位;  
          FSTAT_ACCERR=1;  
      if(FSTAT_FPVIOL)           //判断并清除标志位;  
          FSTAT_FPVIOL=1;  
        
      FCCOBIX_CCOBIX=0x00;  
      FCCOB=0x1210;           //写入擦除命令和高位地址  
      FCCOBIX_CCOBIX=0x01;     
      FCCOB=ADDR16;           //写入低16位的地址  
      FSTAT_CCIF=1;           //启动执行命令  
      while(FSTAT_CCIF==0);   //等待执行完成  
    }  
    /***************************************************************** 
    **  函数说明:飞思卡尔xs128   DFlash 
    **  版      本: V0.99                                         
    **  修      改: 庞辉    芜湖联大飞思卡尔工作室                                                         
    **  修改日期:2011年09月26日                                
    **                                                          
    **  说      明:无      
    **                                                           
    **  版本更新:无                                                         
    ****************************************************************** 
    **注        意: LED          PB0 
    **                  BUTTON   PM1     
    ******************************************************************/  
      
    #include "includes.h"  
      
    /*********************************************************** 
    ** 名        称:void main(void) 
    ** 功        能:主函数 
    ** 入口参数:无 
    ** 出口参数:无 
    ** 使用说明:无 
    ************************************************************/   
    void main(void)   
    {  
        Start();  
        Start_go();  
        EnableInterrupts;  
          
        //设置PB0口LED灯作为指示,读取DFlash正确则亮,否则不亮  
        DDRB_DDRB0 = 1;  
        PORTB_PB0 = 1;  
          
        DDRM_DDRM1 = 0;  
          
        FOREVER()  
        {  
                    if(PTM_PTM1 == 0)  
                    {  
                            //确保先擦除后写入  
                            DFlash_Erase(data_Address);       
                            DFlash_Write(data_Address);          
                    }   
                    //读取DFlash数据     
                    date_read[0]=DFlash_Read(data_Address);   
                    date_read[1]=DFlash_Read(data_Address+2);   
                    date_read[2]=DFlash_Read(data_Address+4);   
                    date_read[3]=DFlash_Read(data_Address+6);   
                    //判断读取数据是否正确  
                    if(date_read[0]==0x1111&&date_read[1]==0x2222&&date_read[2]==0x3333&&date_read[3]==0x4444)  //判断数据是否正确  
                    {  
                            PORTB_PB0 = 0;  
                    }   
        }  
       
    }  
  • 相关阅读:
    java 06 作业代码
    java 06 abstract 抽象类
    java 06 重写(覆盖) final 内部类
    java 06 重写和final
    java 06 继承
    java 05 this static构造函数
    java 05 构造函数-构造代码块
    java 05 heap satck 堆和栈
    java 05 成员变量和成员函数-封装
    BJFU-207-基于顺序存储结构的图书信息表的逆序存储
  • 原文地址:https://www.cnblogs.com/pang123hui/p/2309843.html
Copyright © 2011-2022 走看看