📄 bspi.c
字号:
/****************************************Copyright (c)**************************************************
**
** STR710 development team
**
**
** http://www.appchip.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: tim.c
** 创 建 人: lhl
** 创建日期: 2006年5月11日
** 描 述: 该文件包含了timer的基本功能函数
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: lhl
** 版 本: V1.0
** 日 期: 2006年5月11日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "bspi.h"
#if EN_ARM_BSPI > 0 /* 决定是否编译该文件 */
/******************************************* 全局变量定义 ***********************************************/
/******************************************* 局部函数声明 ***********************************************/
/*********************************************************************************************************
;** 函数名称: BSPI_Reset
;** 功能描述: 复位指定的SPI接口为复位值
;**
;** 参 数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_Reset(BSPI_TYPES_T bspi)
{
BSPIx_CSR2(bspi) = 0x41;
BSPIx_CSR1(bspi) = 0x00;
BSPIx_CLK(bspi) = 0x06;
}
/*********************************************************************************************************
;** 函数名称: BSPI_TransmitItCfg
;** 功能描述: 配置BSPI接口传送时中断类型
;**
;** 参 数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;** tr_it_src:中断类型(BSPI_TR_DIS, BSPI_TR_FE, BSPI_TR_UFL, BSPI_TR_FF)
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_TransmitItCfg(BSPI_TYPES_T bspi, BSPI_TR_IT_SRCS_T tr_it_src)
{
switch (tr_it_src)
{
case BSPI_TR_DIS:
BSPIx_CSR2(bspi) &= ~0xC000;
break;
case BSPI_TR_FE:
BSPIx_CSR2(bspi) &= ~0x8000;
BSPIx_CSR2(bspi) |= 0x4000;
break;
case BSPI_TR_UFL:
BSPIx_CSR2(bspi) &= ~0x4000;
BSPIx_CSR2(bspi) |= 0x8000;
break;
case BSPI_TR_FF:
BSPIx_CSR2(bspi) |= 0xC000;
break;
}
}
/*********************************************************************************************************
;** 函数名称: BSPI_ReceiveItCfg
;** 功能描述: 配置BSPI接口接收时中断类型
;**
;** 参 数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;** rec_it_src:中断类型(BSPI_RC_DIS, BSPI_RC_FNE, BSPI_RC_FF)
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_ReceiveItCfg(BSPI_TYPES_T bspi, BSPI_RC_IR_SRCS_T rec_it_src)
{
switch (rec_it_src)
{
case BSPI_RC_DIS:
BSPIx_CSR1(bspi) &= ~0x000C;
break;
case BSPI_RC_FNE:
BSPIx_CSR1(bspi) &= ~0x0008;
BSPIx_CSR1(bspi) |= 0x0004;
break;
case BSPI_RC_FF:
BSPIx_CSR1(bspi) |= 0x000C;
break;
}
}
/*********************************************************************************************************
;** 函数名称: BSPI_TransmitFifoCfg
;** 功能描述: 配置BSPI接口发送缓冲区深度
;**
;** 参 数: bspi :指定的SPI类型(BSPI0, BSPI1)
;** depth:缓冲区(FIFO)长度
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_TransmitFifoCfg(BSPI_TYPES_T bspi, UWORD8 depth)
{
if (depth > 0 && depth < 10)
{
depth--;
BSPIx_CSR2(bspi) &= (depth * 0x400) | ~0x3C00;
BSPIx_CSR2(bspi) |= depth * 0x400;
}
else
BSPIx_CSR2(bspi) &= ~0x3C00;
}
/*********************************************************************************************************
;** 函数名称: BSPI_ReceiveFifoCfg
;** 功能描述: 配置BSPI接口接收缓冲区深度
;**
;** 参 数: bspi :指定的SPI类型(BSPI0, BSPI1)
;** depth:缓冲区(FIFO)长度
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_ReceiveFifoCfg(BSPI_TYPES_T bspi, UWORD8 depth)
{
if (depth > 0 && depth < 10)
{
depth--;
BSPIx_CSR1(bspi) &= (depth * 0x1000) | ~0xF000;
BSPIx_CSR1(bspi) |= depth * 0x1000;
}
else
BSPIx_CSR1(bspi) &= ~0xF000;
}
/*********************************************************************************************************
;** 函数名称: BSPI_BufferSend
;** 功能描述: BSPI 从指定的FIFO发送数据
;**
;** 参 数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;** ptr_buffer: 指向发送缓冲区的指针
;** word_number:发送数据长度
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_BufferSend(BSPI_TYPES_T bspi, UWORD8 *ptr_buffer, UWORD8 word_number)
{
volatile UWORD8 send_word = 0;
while (send_word < word_number)
{
BSPI_SalveWordSend(bspi, (UWORD16)*(ptr_buffer + send_word));
send_word++;
}
}
/*********************************************************************************************************
;** 函数名称: BSPI_BufferReceive
;** 功能描述: BSPI 从指定的FIFO接收数据
;**
;** 参 数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;** ptr_buffer: 指向接收缓冲区的指针
;** word_number:接收数据长度
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_BufferReceive(BSPI_TYPES_T bspi, UWORD8 *ptr_buffer, UWORD8 word_number)
{
volatile UWORD16 receive_word = 0;
while (receive_word < word_number)
{
*(ptr_buffer+receive_word) = BSPI_SalveWordReceive(bspi);
receive_word++;
}
}
/*********************************************************************************************************
;** 函数名称: BSPI_Init
;** 功能描述: 初始化SPI接口
;**
;** 参 数: bspi: 指定的SPI类型(BSPI0, BSPI1)
;** mode: BSPI模式选择--MASTER, SLAVE
;**
;** 返 回 值: None
;**
;** 作 者: lhl
;** 日 期: 2006年5月23日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void BSPI_Init(BSPI_TYPES_T bspi, BSPI_MODES_T mode)
{
if(bspi == BSPI0) /* 配置指定BSPI对应的GIPO模式 */
{
BSPI_Reset(bspi); /* 复位指定的BSPI */
BSPI_ClockDividerConfig(bspi, 8); /* 配置BSPI波特率为APB1/8 */
BSPI_Enable(bspi, ENABLE); /* 允许指定类型的BSPI */
BSPI_MasterEnable(bspi, DISABLE); /* 配置指定的BSPI为SLAVE模式 */
BSPI_ClkActiveHigh(bspi, ENABLE); /* 配置SCK为高激活 */
BSPI_ClkFEdge(bspi, DISABLE); /* 允许捕捉的第一个数据在SCK的第一个边沿 */
BSPI_8bLEn(bspi, ENABLE); /* 设置数据宽度为8位 */
BSPI_ReceiveFifoCfg(bspi, 5); /* 配置发送FIFO的长度为5 WORDS */
BSPI_BSPI0Config(ENABLE); /* 允许BSPI0接口 */
}
else
{
BSPI_Reset(bspi); /* 复位指定的BSPI */
BSPI_ClockDividerConfig(bspi,6); /* 配置BSPI波特率为APB1/6 */
BSPI_Enable(bspi, ENABLE); /* 允许指定类型的BSPI */
if(mode == MASTER) /* 指定BSPI模式为MASTER */
BSPI_MasterEnable(bspi, ENABLE); /* 配置指定的BSPI为MASTER模式 */
else /* 指定BSPI模式为SLAVE */
BSPI_MasterEnable(bspi, DISABLE); /* 配置指定的BSPI为MASTER模式 */
BSPI_ClkActiveHigh(bspi, ENABLE);
BSPI_ClkFEdge(bspi,DISABLE ); /* 允许捕捉的第一个数据在SCK的第一个边沿 */
BSPI_8bLEn(bspi, ENABLE); /* 设置数据宽度为8位 */
BSPI_TransmitFifoCfg(bspi, 1); /* 配置发送FIFO的长度为1 WORDS */
BSPI_ReceiveFifoCfg(bspi, 1); /* 配置发送FIFO的长度为8 WORDS */
//BSPI_FifoDisable(bspi);
}
}
#endif //EN_ARM_BSPI > 0
/********************************************* end of file **********************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -