⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exflash.c

📁 MSP430系列16位超低功耗单片机实践与系统
💻 C
字号:
/*****************************************************************
*  文件名称:
*            exflash.c
*  文件说明:
*          对扩展FlashAT45DB041进行读写操作
*
******************************************************************
*                  MSP430F449
*             -----------------
*            |                 |  
*            |                 |
*            |                 |   ________
*            |                 |   |        |
*            |             P6.0|-->|   A    |
*            |             P6.1| . |   T    |
*            |             P6.2| . |   4    |
*            |             P6.3| . |   5    |
*            |             P6.4| . |   D    |
*            |             P6.5| . |   B    |
*            |             P6.6|-->|   0    |
*            |                 |   |   4    |        
*            |                 |   |   1    |
*                                  |________|
*
****************************************************************/

#ifndef MSP430F449_H
#include <msp430x44x.h>
#endif

unsigned char write_Buf,//发送数据的缓存
              read_Buf; // 接收数据的缓存
              
              
/*****************************************************************
*    初始化AT45DB041B
******************************************************************/              
void init_EXFlash()
{    
     FLL_CTL1 |= SELM_A + FLL_DIV_8;
     P6DIR &= 0x80; //si,so,wp,reset,rd_Busy,sck,cs 输入模式
     P6SEL &= 0x80; 
     P6DIR |= 0x63; //wp,rset,sck,cs =1
     P6OUT |= 0x63; //wp,rset,sck,cs=1
}
/***************************************************************
*  读写期间的时延
****************************************************************/
void flash_Delay()
{
    _NOP();
    _NOP();
    _NOP();
}
/***************************************************************
*  发送“1”到AT45DB041
***************************************************************/
void write_ONE()
{
     P6OUT |= 0x10;//si=1
     P6OUT |= 0x20;//sck=1
}
/***************************************************************
*  发送“0”到AT45DB041
****************************************************************/
void write_ZERO()
{
    P6OUT &= 0xEF; //si=0
    P6OUT |= 0x20; //sck=1
     
}
/****************************************************************
* 发送一个Byte到AT45DB041
*****************************************************************/
void write_Data()
{
     char tmp,tmpv=0x80;
     for(tmp=0;tmp<8;tmp++)
     {
         P6OUT &= 0xdf;              //sck=0
         if ((write_Buf&tmpv)==0x00)
         {                           //检查相应的位是0还是1
             write_ZERO();           // 发送0
         }else{
             write_ONE();            // 发送1
         }
         tmpv /= 2;
     }
}           
/**************************************************************
*  停止对AT45DB041的操作
**************************************************************/
void op_Stop()
{
     P6OUT |= 0x40; //cs=1,去除片选
}
/*************************************************************
*  为对AT45DB041做好准备工作
**************************************************************/
void  op_Start()
{
      P6DIR |= 0x40;
      P6OUT &= 0xbf;   //cs=0
      flash_Delay();
      P6DIR &= 0xCF;  //reset
      P6DIR |= 0x10;  //Si=1
      P6DIR |= 0x20;  //sck=1
      P6OUT  |= 0x20; //sck=1
      flash_Delay();
}

/************************************************************
* 读数据之前,进行IO端口的调整
************************************************************/
void opr_Start()
{
     P6DIR &= 0xF7;//so=0 输入模式
     P6DIR |= 0x20;//sck =1  
     flash_Delay(); 
};      
/**********************************************************
*  从AT45DB041读一个Byte
***********************************************************/
void read_Data()
{
     unsigned char tmp,tmpv;
     tmpv = 0x80;
     read_Buf = 0x00;            //清空read_Buf
     for(tmp=0;tmp<8;tmp++)
     {    
        P6OUT &= 0xdf;           //sck=0 
        flash_Delay();
        P6OUT |= 0x20;           //sck=1
        if((P6IN & 0x08)!=0x00)
        {
             read_Buf |= tmpv;   //读取数据
        }
        tmpv/=2;
    }     
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -