📄 exflash.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 + -