BF533的SPI接口通讯的底层配置功能
0赞
发表于 3/3/2012 11:27:03 AM
阅读(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;
}
