機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
分享MSP430驅(qū)動(dòng)AT45DB041(Flash)進(jìn)行讀寫(xiě)操作例程
分享MSP430驅(qū)動(dòng)AT45DB041(Flash)進(jìn)行讀寫(xiě)操作例程
 更新時(shí)間:2009-12-7 16:47:13  點(diǎn)擊數(shù):0
【字體: 字體顏色

/*****************************************************************
*  文件名稱:
*            exflash.c
*  文件說(shuō)明:
*          對(duì)擴(kuò)展FlashAT45DB041進(jìn)行讀寫(xiě)操作
*
******************************************************************
*                  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,//發(fā)送數(shù)據(jù)的緩存
              read_Buf; // 接收數(shù)據(jù)的緩存
              
              
/*****************************************************************
*    初始化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
}
/***************************************************************
*  讀寫(xiě)期間的時(shí)延
****************************************************************/
void flash_Delay()
{
    _NOP();
    _NOP();
    _NOP();
}
/***************************************************************
*  發(fā)送“1”到AT45DB041
***************************************************************/
void write_ONE()
{
     P6OUT |= 0x10;//si=1
     P6OUT |= 0x20;//sck=1
}
/***************************************************************
*  發(fā)送“0”到AT45DB041
****************************************************************/
void write_ZERO()
{
    P6OUT &= 0xEF; //si=0
    P6OUT |= 0x20; //sck=1
     
}
/****************************************************************
* 發(fā)送一個(gè)Byte到AT45DB041
*****************************************************************/
void write_Data()
{
     char tmp,tmpv=0x80;
     for(tmp=0;tmp<8;tmp++)
     {
         P6OUT &= 0xdf;              //sck=0
         if ((write_Buf&tmpv)==0x00)
         {                           //檢查相應(yīng)的位是0還是1
             write_ZERO();           // 發(fā)送0
         }else{
             write_ONE();            // 發(fā)送1
         }
         tmpv /= 2;
     }
}          
/**************************************************************
*  停止對(duì)AT45DB041的操作
**************************************************************/
void op_Stop()
{
     P6OUT |= 0x40; //cs=1,去除片選
}
/*************************************************************
*  為對(duì)AT45DB041做好準(zhǔn)備工作
**************************************************************/
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();
}

/************************************************************
* 讀數(shù)據(jù)之前,進(jìn)行IO端口的調(diào)整
************************************************************/
void opr_Start()
{
     P6DIR &= 0xF7;//so=0 輸入模式
     P6DIR |= 0x20;//sck =1  
     flash_Delay();
};     
/**********************************************************
*  從AT45DB041讀一個(gè)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;   //讀取數(shù)據(jù)
        }
        tmpv/=2;
    }    
}

 

/***************************************************
*   文件名稱:
*           main.c
*   文件說(shuō)明:
*           對(duì)擴(kuò)展FlashAT45DB041進(jìn)行操作,在Flash的0x08
*     位置寫(xiě)0x08,寫(xiě)入數(shù)據(jù)顯示到 LED[0],讀出的數(shù)據(jù)顯示到LED[1]  
****************************************************/

#define MSP430F449_H 0
#include <msp430x44x.h>
#ifndef LED_IN_USE
#include "led.c"
#endif

#include "exflash.c"
/****************************************************
*    main函數(shù)
*****************************************************/
void main(void)
{
      char wData=0x09;                        //存放要寫(xiě)的內(nèi)容
     
      /****  初始化     ****/
      WDTCTL = WDTHOLD + WDTPW;               //關(guān)閉看門(mén)狗
      init_LED();                             //初始化LED
      init_EXFlash();                         //初始化Flash
     
      /****  寫(xiě)數(shù)據(jù)到Flash    ***/
      write_Buf = 0x84;                       //寫(xiě)緩沖區(qū)1,指令格式:84H + 15位無(wú)關(guān)位 + 9位地址位
      op_Start();                             //做操作前的準(zhǔn)備工作
      write_Data();                           //寫(xiě)操作指令到Flash
      write_Buf = 0x00;                       //設(shè)置八位無(wú)關(guān)位
      write_Data();                           //寫(xiě)八位無(wú)關(guān)位
      write_Buf = 0x00;                       //設(shè)置7位無(wú)關(guān)位和一位地址位
      write_Data();                           //寫(xiě)7位無(wú)關(guān)位和一位數(shù)據(jù)位
      write_Buf= 0x08;                        //設(shè)置地址
      write_Data();                           //寫(xiě)地址
      write_Buf = wData;                      //設(shè)置要寫(xiě)到Flash的內(nèi)容
      write_Data();                           //寫(xiě)數(shù)據(jù)到Flash
      op_Stop();                              //停止操作
     
     
      /********  讀操作  ************/
      op_Start();                             //啟動(dòng)操作
      write_Buf = 0x54;                       //讀數(shù)據(jù)的指令格式:54H + 15位無(wú)關(guān)位 + 9位地址位 + 8位無(wú)關(guān)位
      write_Data();                           //寫(xiě)讀指令到Flash
      write_Buf = 0x00;                       //設(shè)置8位無(wú)關(guān)位
      write_Data();                           //寫(xiě)數(shù)據(jù)
      write_Buf = 0x00;                       //設(shè)置7位無(wú)關(guān)位和一位地址位
      write_Data();                           //寫(xiě)數(shù)據(jù)  
      write_Buf = 0x08;                       //設(shè)置另外8位地址
      write_Data();                           //寫(xiě)地址
      write_Buf = 0xff;                       //設(shè)置8位無(wú)關(guān)位  
      write_Data();                           //寫(xiě)數(shù)據(jù)
                                              //附加脈沖
      opr_Start();                            //準(zhǔn)備接收數(shù)據(jù)
      read_Data();                            //接收數(shù)據(jù)到read_buf
      op_Stop();                              //停止操作
     
     
     /**** 把寫(xiě)的內(nèi)容和讀出的內(nèi)容顯示到LED ****/
      while(1)
      {
              led_Buf[0]= wData;
              led_Buf[1] =read_Buf;
              led_Display();                   // 顯示到LED
      };
     
}

  • 上一篇: MSP430定時(shí)器A捕捉脈實(shí)例
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1