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

📄 spi.c

📁 周立功2103开发板CD资料
💻 C
字号:
/******************************************************************************************
** 文件名称: SPI .c
** 文件描述: SPI操作软件包。
** 文件说明: 软件包采用查询方式。
******************************************************************************************/
#include "config.h"
/*定义SPI的管脚*/
#define	SCK0	(1<<8)		// SCK0  为P0.4的第二功能
#define	MISO0	(1<<10)		// MISO0 为P0.5的第二功能
#define	MOSI0	(1<<12)		// MOSI0 为P0.6的第二功能
#define	SSEL0	(1<<14)		// SSEL0 为P0.7的第二功能

/*********************************************************************************************************
**函数名称:SPI_Init(uint8 MODE,uint32	F_spi,uint8	INT_En)
**函数功能:初始化SPI接口
**入口参数:MODE 	SPI模式选择,0--从机,1--主机
**			F_spi	SPI通信速率,最大为Fpclk/8.该参数在从机模式下是无效的	
**			INT_En	中断使能位,0--中断禁止,1--中断使能
**出口参数:1--操作正确
**			0--操作失败
**说明:初始化函数设置:CPHA=0,CPOL=1,LSBF=0
********************************************************************************************************/
uint8	SPI_Init(uint8 MODE,uint32	F_spi,uint8	INT_En)
{
	if((MODE != 0)&&(MODE != 1)) return(0);
	PINSEL0 = (PINSEL0 & (~(0xff<<8)))|SCK0|MISO0|MOSI0|SSEL0;	//设置管脚连接SPI
	if(F_spi > (Fpclk/8))	F_spi = Fpclk/8; 
	SPI_SPCCR = Fpclk/F_spi;	//设置SPI时钟分频
	SPI_SPCR = 	(0<<3)|			//CPHA=0,数据在SCK的第一个跳变沿采样
				(1<<4)|			//CPOL=1,时钟为低有效
				(MODE<<5)|		//MODE=1,设置为主机
				(0<<6)|			//LSBF=0,数据传输MSB在先
				(INT_En<<7);	//设置中断使能位
	MODE = S0PSR;				//清除SPI传输完成标志
	S0PINT = 0x01;				//清除SPI中断标志位
	return(1);				
}
/*********************************************************************************************************
**函数名称:SPI_SendByte()
**函数功能:向SPI总线发送1字节数据
**入口参数:data	待发送的数据
**出口参数:返回值为读取的数据
**说明:调用函数前要先选中SPI从机
********************************************************************************************************/
uint8	SPI_SendByte(uint8	data)
{
	SPI_SPDR = data;	
	while((SPI_SPSR & 0x80) ==0);	//等待SPIF置位,即等待数据发送完毕
	
	return(SPI_SPDR);
}
/*********************************************************************************************************
**函数名称:SPI_RcvData()
**函数功能:从SPI总线上接收1字节数据
**入口参数:无
**出口参数:返回值为接收到的数据
**说明:采用查询方式接收数据,故存在死等待情况
********************************************************************************************************/
uint8	SPI_RcvData(void)
{
	while((SPI_SPSR & 0x80) ==0);	//等待SPIF置位,即等待接收到有效的数据
	return(SPI_SPDR);
}

⌨️ 快捷键说明

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