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

📄 spi45db041.c

📁 车载GPS监控终端的完整代码,与监控中心的通讯采用GPRS.
💻 C
📖 第 1 页 / 共 2 页
字号:

/********************************************************\
*	文件名:  SPI45DB041.C
*	创建时间:2004年12月7日
*	创建人:  
*	版本号:  1.00
*	功能:	  实现针对串行FLASH,SPI45DB041的相关操作,读,写
*	文件属性:公共文件
*	修改历史:(每条详述)
\********************************************************/
#include <msp430x14x.h>
#include "SPI45DB041.H"

#define NOP() { _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); }

void delay(unsigned int t);//时间延迟
void SPI45D041_WriteBits(unsigned int byte,unsigned char num_of_bits);//写
unsigned char SPI45D041_ReadByte(void);//一个字节的读取

//void ReadOnePage(unsigned int PageAddress);//不通过两个缓冲而读Flash指定页的整个数据
//void WriteOnePage(unsigned int PageAddress);//通过buffer1将一个页的数据写入Flash指定页中

//void SI_To_Buffer1(void);  //写一个页的数据到buffer1中
//void SO_From_Buffer1(void);//读取整个buffer1中的数据

//unsigned char SPI_Flash_Buffer[256];
//void ReadOnePageToBuffer1(unsigned int PageAddress);//读主存储区一个页的数据到buffer1
//void ReadOnePageToBuffer2(unsigned int PageAddress);//读主存储区一个页的数据到buffer2

//unsigned char ReadByteFromBuffer1(unsigned int ByteAddress); //读buffer1中的一个指定地址的字节
//unsigned char ReadByteFromBuffer2(unsigned int ByteAddress); //读buffer2中的一个指定地址的字节

//unsigned char ReadNextFromBuffer1(void);//读buffer1中的下一个地址的字节数据
//unsigned char ReadNextFromBuffer2(void);//读buffer2中的下一个地址的字节数据

//void WriteOneByteToBuffer1(unsigned int ByteAddress,unsigned char WriteOneByte );//在buffer1中的一个指定的地址写一个字节
//void WriteOneByteToBuffer2(unsigned int ByteAddress,unsigned char WriteOneByte );//在buffer2中的一个指定的地址写一个字节

//void WriteNextByteToBuffer1(unsigned char WriteNextOne);//写buffer1中的下一个地址
//void WriteNextByteToBuffer2(unsigned char WriteNextOne);//写buffer2中的下一个地址

//void WriteBuffer1ToPage(unsigned int PageAddress);//将buffer1中的数据写入主存储区一个指定的页
//void WriteBuffer2ToPage(unsigned int PageAddress);//将buffer2中的数据写入主存储区一个指定的页

//void OperateSPIEnd(void);


/********************************************************\
*	函数名:delay
	作用域:本文件调用
*	功能:  时间延迟
*	参数:  t
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
void delay(unsigned int t)
{
	while(t--){};
}

/********************************************************\
*	函数名:SPI45D041_WriteBits
	作用域:本文件调用
*	功能:  对一个int型的数据(16位)依次右移,并放在FLASH的输入脚上
*	参数:  byte 		一个int的数
			num_of_bits	针对上面的int型的数据,依次向右移出的bit数
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)

	SPI_SCK上升沿数据有效
	针对bit的数据操作:通过SI口,写入一个字节的多少bit
\********************************************************/
void SPI45D041_WriteBits(unsigned int byte,unsigned char num_of_bits)
{
	unsigned char count;
	unsigned int Temp;
	byte=byte<<(16-num_of_bits);
	for(count=0;count<num_of_bits;count++)
	{
		Temp=byte&0x8000;
		P2OUT&=~SPI45DB041_SCK;
		NOP();
		if(Temp==0x8000)
		{
			P2OUT|=SPI45DB041_SI;
		}
		else
		{
			P2OUT&=~SPI45DB041_SI;
		}
		P2OUT|=SPI45DB041_SCK;
		NOP();
		byte<<=1;
	}
}

/********************************************************\
*	函数名:SPI45D041_ReadByte
	作用域:本文件调用
*	功能:  SPI_SCK下降沿数据有效,读一个字节数据
*	参数:  无
*	返回值:byte 从FLASH中读取的一个字节
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
unsigned char SPI45D041_ReadByte(void)
{
	unsigned char count,byte;
	for(count=0;count<8;count++)
	{
		P2OUT|=SPI45DB041_SCK;
		NOP();
		byte<<=1;
		P2OUT&=~SPI45DB041_SCK;
		NOP();
		if(P2IN&SPI45DB041_SO) byte++;
		NOP();
	}
	return(byte);
}

/********************************************************\
*	函数名:ReadOnePage
	作用域:此文件在此项目中不使用
*	功能:  Main Memory的一个页的读操作:不通过两个buffer,直接读取主存储区一个页的数据
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
/*
void ReadOnePage(unsigned int PageAddress)
{
	unsigned int i;
	P2OUT|=SPI45DB041_SCK;
	NOP();
	P2OUT&=~SPI45DB041_CS;
	NOP();

	SPI45D041_WriteBits(0x52,8);        //送8 bit 的命令字
	SPI45D041_WriteBits(0x00,4);        //送4 bit 的保留位
	SPI45D041_WriteBits(PageAddress,11);//送11位的页地址
	SPI45D041_WriteBits(0x00,9);        //送9位的页内地址
	SPI45D041_WriteBits(0x00,16);
	SPI45D041_WriteBits(0x00,16);       //送32位的NOP操作
	NOP();
	for(i=0;i<256;i++)
	{
	   // SPI_Flash_Buffer[i]=SPI45D041_ReadByte();
	}
	NOP();
	P2OUT|=SPI45DB041_CS;
}
*/
/********************************************************\
*	函数名:SI_To_Buffer1
	作用域:此文件在此项目中不使用
*	功能:  SI 数据写到buffer1中:直接写一个页的数据在buffer1中。
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
/*
void SI_To_Buffer1(void)
{
	unsigned int i;
	P2OUT|=SPI45DB041_SCK;
	NOP();
	P2OUT&=~SPI45DB041_CS;
	NOP();

	SPI45D041_WriteBits(0x84,8);        //送8 bit 的命令字
	SPI45D041_WriteBits(0x00,15);       //送15 bit 的NOP
	SPI45D041_WriteBits(0x00,9);        //送9 bit 的页内地址

	for(i=0;i<256;i++)
	{
//		SPI45D041_WriteBits(SPI_Flash_Buffer[i],8);
	}

	NOP();
	P2OUT|=SPI45DB041_CS;
	NOP();
}
*/
/********************************************************\
*	函数名:SO_From_Buffer1
	作用域:此文件在此项目中不使用
*	功能:  读取整个Buffer1中的数据
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
/*
void SO_From_Buffer1(void)
{
	unsigned int i;
	P2OUT|=SPI45DB041_SCK;
	NOP();
	P2OUT&=~SPI45DB041_CS;
	NOP();

	SPI45D041_WriteBits(0x54,8);        //送8 bit 的命令字
	SPI45D041_WriteBits(0x00,15);       //送15 bit 的NOP
	SPI45D041_WriteBits(0x00,9);        //送9 bit 的页内地址
	SPI45D041_WriteBits(0x00,8);       //送8bit 的NOP
	NOP();
	for(i=0;i<256;i++)
	{
//	    SPI_Flash_Buffer[i]=SPI45D041_ReadByte();
	}
	NOP();
	P2OUT|=SPI45DB041_CS;

}
*/
/********************************************************\
*	函数名:WriteOnePage
	作用域:此文件在此项目中不使用
*	功能:  Main Memory的一个页的写操作:通过buffer1将一个页的数据写入主存储区的一个指定的页中。
*	参数:
*	返回值:
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
/*
void WriteOnePage(unsigned int PageAddress)
{
	SI_To_Buffer1();                    //先将数据写到Buffer1中

	P2OUT|=SPI45DB041_SCK;
	NOP();
	P2OUT&=~SPI45DB041_CS;
	NOP();
	SPI45D041_WriteBits(0x83,8);        //送8 bit 的命令字
	SPI45D041_WriteBits(0x00,4);        //送4 bit 的保留位
	SPI45D041_WriteBits(PageAddress,11);//送11 bit 的页地址
    SPI45D041_WriteBits(0x00,9);        //送9 bit 的NOP
    P2OUT|=SPI45DB041_CS;
    NOP();
    delay(80000);
}
*/
/********************************************************\
*	函数名:ReadOnePageToBuffer1
	作用域:外部文件调用
*	功能:  读主存储区一个页的数据到buffer1。
*	参数:  PageAddress 需要读的主存储区的页地址
*	返回值:无
*	创建人:
*
*	修改历史:(每条详述)
\********************************************************/
/*
void ReadOnePageToBuffer1(unsigned int PageAddress)
{
	P2OUT|=SPI45DB041_SCK;
	NOP();
	P2OUT&=~SPI45DB041_CS;
	NOP();

	SPI45D041_WriteBits(0x53,8);        //送8 bit 的命令字
	SPI45D041_WriteBits(0x00,4);        //送4 bit 的保留位
	SPI45D041_WriteBits(PageAddress,11);//送11位的页地址
	SPI45D041_WriteBits(0x00,9);        //送9位的页内地址
	P2OUT|=SPI45DB041_CS;
	NOP();
	delay(10000);
}
*/
/********************************************************\
*	函数名:ReadOnePageToBuffer2
	作用域:外部文件调用

⌨️ 快捷键说明

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