小磷光一

BF533的SPI接口通讯的底层配置功能

0
阅读(3101)

 

#include "dm_bf5xx.h"

/****************************************************************************
* 名称 :Drv_Config_slave_read
* 功能 :将SPI接口配置寄存器配置为从机读模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_Config_slave_read(void)
{	
	*pSPI_CTL = (((*pSPI_CTL)&0xFFFC)|TIMOD_R);
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_Config_slave_read_with_DMA
* 功能 :将SPI接口配置寄存器配置为从机DMA读模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_Config_slave_read_with_DMA(void)
{
	*pSPI_CTL = (((*pSPI_CTL)&0xFFFC)|TIMOD_RDMA);
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_config_slave_write
* 功能 :将SPI接口配置寄存器配置为从机写模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_config_slave_write(void)
{
	*pSPI_CTL |= (((*pSPI_CTL)&0xFFFC)|TIMOD_T)|EMISO;
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_Config_master_read
* 功能 :将SPI接口配置寄存器配置为主机读模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_Config_master_read(void)
{
	*pSPI_CTL = (((*pSPI_CTL)&0xFFFC)|TIMOD_R)|EMISO;
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_config_master_write
* 功能 :将SPI接口配置寄存器配置为主机写模式
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_config_master_write(void)
{
	*pSPI_CTL |= (((*pSPI_CTL)&0xFFFC)|TIMOD_T);
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_config_to_master
* 功能 :将SPI接口配置成主设备
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_config_to_master(void)
{
	*pSPI_FLG = FLS2;		// Set baud rate SPI_SCK = HCLK/(2*SPIBAUD) SCK
	asm("ssync;");
	*pSPI_BAUD = 6000;		//SPI_CLK = 30MHz
	asm("ssync;");
	*pSPI_CTL = MSTR ;		//主模式
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_config_to_slave
* 功能 :将SPI接口配置成从设备
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_config_to_slave(void)
{
	*pSPI_CTL = PSSE;
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_SPI_enable
* 功能 :使能SPI接口
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_SPI_enable(void)
{
	*pSPI_CTL |= SPE;
	asm("ssync;");	
}
/****************************************************************************
* 名称 :Drv_SPI_disable
* 功能 :关闭SPI接口
* 入口参数 :无
* 出口参数 :无
****************************************************************************/ 
void Drv_SPI_disable(void)
{
	*pSPI_CTL &= ~SPE;
	asm("ssync;");
}
/****************************************************************************
* 名称 :Drv_clean_revbuf
* 功能 :清除SPI缓存中的数据
* 入口参数 :无
* 出口参数 :无
****************************************************************************/
void Drv_clean_revbuf(void)
{
	int temp;   	
    temp = *pSPI_RDBR;
    asm("ssync;");
}
/****************************************************************************
* 名称 :SPI_tdbr
* 功能 :传输SPI数据
* 入口参数 :dat:传输的数据
* 出口参数 :无
****************************************************************************/

void SPI_tdbr(uint8_t dat)
{
	*pSPI_TDBR = dat;
	asm("ssync;");
	while(*pSPI_STAT & TXS);
}

/****************************************************************************
* 名称 :SPI_rdbr
* 功能 :读取SPI接口数据
* 入口参数 :无
* 出口参数 :*pSPI_RDBR:将数据返回
****************************************************************************/

uint8_t SPI_rdbr(void)
{
	while(!(*pSPI_STAT & RXS));
	return *pSPI_RDBR;
}