添加一些关于midi播放的项目
This commit is contained in:
@@ -0,0 +1,297 @@
|
||||
/**************************************************************************!
|
||||
* 技术讨论:QQ群 123763203
|
||||
* 官网 :www.navota.com
|
||||
*
|
||||
* @file spi.c
|
||||
* @brief 串行外设接口模块(SPI)函数库
|
||||
* @author Navota
|
||||
* @date 2017-1-1
|
||||
****************************************************************************/
|
||||
#include "common.h"
|
||||
#include "spi.h"
|
||||
|
||||
/****************************************************************************!
|
||||
* @ 存放SPI回调函数接口
|
||||
****************************************************************************/
|
||||
|
||||
SPI_CallbackType SPI_Callback[MAX_SPI_NO] = {(SPI_CallbackType)NULL};
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 初始化SPI模块
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块.
|
||||
* @param[in] pConfig 指向SPI配置参数.
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
void SPI_Init(SPI_Type *pSPI, SPI_ConfigType *pConfig)
|
||||
{
|
||||
#if defined(CPU_NV32M3)
|
||||
/* sanity check */
|
||||
ASSERT((pSPI == SPI0));
|
||||
SIM->SCGC |= SIM_SCGC_SPI0_MASK;
|
||||
#else
|
||||
/* sanity check */
|
||||
ASSERT((pSPI == SPI0) || (pSPI == SPI1));
|
||||
|
||||
/*使能SPI模块总线时钟*/
|
||||
if( pSPI == SPI0)
|
||||
{
|
||||
SIM->SCGC |= SIM_SCGC_SPI0_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
SIM->SCGC |= SIM_SCGC_SPI1_MASK;
|
||||
}
|
||||
#endif
|
||||
/*配置SPI控制寄存器 */
|
||||
if( pConfig->sSettings.bIntEn) //使能SPI中断
|
||||
{
|
||||
SPI_IntEnable(pSPI);
|
||||
#if defined(CPU_NV32M3)
|
||||
NVIC_EnableIRQ(SPI0_IRQn);
|
||||
#else
|
||||
if( pSPI == SPI0 )
|
||||
{
|
||||
NVIC_EnableIRQ(SPI0_IRQn);
|
||||
}
|
||||
else
|
||||
{
|
||||
NVIC_EnableIRQ(SPI1_IRQn);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if( pConfig->sSettings.bTxIntEn) //使能SPI发送中断
|
||||
{
|
||||
SPI_TxIntEnable(pSPI);
|
||||
#if defined(CPU_NV32M3)
|
||||
NVIC_EnableIRQ(SPI0_IRQn);
|
||||
#else
|
||||
if( pSPI == SPI0 )
|
||||
{
|
||||
NVIC_EnableIRQ(SPI0_IRQn);
|
||||
}
|
||||
else
|
||||
{
|
||||
NVIC_EnableIRQ(SPI1_IRQn);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if( pConfig->sSettings.bMasterMode) //主/从机选择
|
||||
{
|
||||
SPI_SetMasterMode(pSPI); //SPI设置为主机模式
|
||||
}
|
||||
else
|
||||
{
|
||||
SPI_SetSlaveMode(pSPI); //SPI设置为从机模式
|
||||
}
|
||||
|
||||
if( pConfig->sSettings.bClkPolarityLow) //时钟极性配置
|
||||
{
|
||||
SPI_SetClockPol(pSPI,1);
|
||||
}
|
||||
if( pConfig->sSettings.bClkPhase1) //时钟相位配置
|
||||
{
|
||||
SPI_SetClockPhase(pSPI,1);
|
||||
}
|
||||
if( pConfig->sSettings.bShiftLSBFirst) //设置SPI串行数据传输开始位
|
||||
{
|
||||
SPI_SetLSBFirst(pSPI); // SPI串行数据传输从最低位开始(LSB)
|
||||
}
|
||||
if( pConfig->sSettings.bMatchIntEn)
|
||||
{
|
||||
SPI_MatchIntEnable(pSPI); //使能SPI匹配中断
|
||||
}
|
||||
if( pConfig->sSettings.bModeFaultEn)
|
||||
{
|
||||
SPI_ModfEnable(pSPI); //使能主机模式模式错误功能.
|
||||
}
|
||||
if( pConfig->sSettings.bMasterAutoDriveSS)
|
||||
{
|
||||
/*设置SSOE和MODFEN位,从机模式中SS引脚为从机输出,自动驱动从机SS引脚使能*/
|
||||
SPI_SSOutputEnable(pSPI);
|
||||
SPI_ModfEnable(pSPI);
|
||||
}
|
||||
|
||||
if( pConfig->sSettings.bPinAsOuput)
|
||||
{
|
||||
SPI_BidirPinEnable(pSPI); //使能双向引脚配置.
|
||||
}
|
||||
|
||||
if( pConfig->sSettings.bBidirectionModeEn)
|
||||
{
|
||||
SPI_BidirOutEnable(pSPI); //使能双向模式输出.
|
||||
}
|
||||
if( pConfig->sSettings.bStopInWaitMode)
|
||||
{
|
||||
SPI_ClockStopEnable(pSPI); //SPI时钟在等待模式下关闭
|
||||
}
|
||||
|
||||
if(pConfig->sSettings.bMasterMode) //设置波特率
|
||||
{
|
||||
SPI_SetBaudRate(pSPI,pConfig->u32BusClkHz,pConfig->u32BitRate);
|
||||
}
|
||||
|
||||
/*使能SPI模块*/
|
||||
if( pConfig->sSettings.bModuleEn)
|
||||
{
|
||||
SPI_Enable(pSPI);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置SPI波特率.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
* @param[in] u32BusClock 总线时钟.
|
||||
* @param[in] u32Bps SPI波特率.
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
void SPI_SetBaudRate(SPI_Type *pSPI,uint32_t u32BusClock,uint32_t u32Bps)
|
||||
{
|
||||
uint32_t u32BitRateDivisor;
|
||||
uint8_t u8Sppr;
|
||||
uint8_t u8Spr;
|
||||
uint8_t u8ReadFlag;
|
||||
u32BitRateDivisor = u32BusClock/u32Bps; /* 计算波特率因子 */
|
||||
|
||||
u8ReadFlag = 0;
|
||||
/* 计算最适合的 SPPR 和 SPR */
|
||||
for (u8Spr = 0; u8Spr <= 8; u8Spr++)
|
||||
{
|
||||
for(u8Sppr = 0; u8Sppr <= 7; u8Sppr++)
|
||||
{
|
||||
if((u32BitRateDivisor>>(u8Spr+1))<=(u8Sppr+1))
|
||||
{
|
||||
u8ReadFlag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(u8ReadFlag)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(u8Sppr >=8)
|
||||
{
|
||||
u8Sppr = 7;
|
||||
}
|
||||
if(u8Spr >8)
|
||||
{
|
||||
u8Spr = 8;
|
||||
}
|
||||
/* 设置波特率 */
|
||||
pSPI->BR = SPI_BR_SPPR(u8Sppr) | SPI_BR_SPR(u8Spr);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读/写数据寄存器.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块.
|
||||
* @param[in] pWrBuff -- 发送(写)数组指针
|
||||
* @param[in] uiLength -- 读/写数据长度.
|
||||
* @param[out] pRdBuff -- 接收(读)数组指针.
|
||||
*
|
||||
* @return if <0, means error, 0: success.
|
||||
*
|
||||
*****************************************************************************/
|
||||
ResultType SPI_TransferWait(SPI_Type *pSPI, SPI_WidthType* pRdBuff, SPI_WidthType *pWrBuff,uint32 uiLength)
|
||||
{
|
||||
ResultType err = SPI_ERR_SUCCESS;
|
||||
uint32_t i;
|
||||
|
||||
if(!uiLength)
|
||||
{
|
||||
return (err);
|
||||
}
|
||||
for(i = 0; i < uiLength; i++)
|
||||
{
|
||||
while(!SPI_IsSPTEF(pSPI));
|
||||
SPI_WriteDataReg(pSPI,pWrBuff[i]);
|
||||
while(!SPI_IsSPRF(pSPI));
|
||||
pRdBuff[i] = SPI_ReadDataReg(pSPI);
|
||||
}
|
||||
return (err);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 复位SPI模块
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
void SPI_DeInit(SPI_Type *pSPI)
|
||||
{
|
||||
int16 i;
|
||||
pSPI->C1 = SPI_C1_DEFAULT;
|
||||
pSPI->C2 = SPI_C2_DEFAULT;
|
||||
pSPI->BR = SPI_BR_DEFAULT;
|
||||
pSPI->M = SPI_M_DEFAULT;
|
||||
for(i = 0; i<100; i++); /*延时一段时间,等待SPI退出中断 */
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置SPI回调函数,在中断服务函数中调用
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
* @param[in] pfnCallback 回调函数.
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
void SPI_SetCallback(SPI_Type *pSPI,SPI_CallbackType pfnCallback)
|
||||
{
|
||||
uint32_t u32Port = ((uint32_t)pSPI-(uint32_t)SPI0)>>12;
|
||||
ASSERT(u32Port <2);
|
||||
SPI_Callback[u32Port] = pfnCallback;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI0 中断服务函数.
|
||||
*
|
||||
* @param none.
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
void SPI0_Isr(void)
|
||||
{
|
||||
if( SPI_Callback[0] )
|
||||
{
|
||||
SPI_Callback[0]();
|
||||
}
|
||||
}
|
||||
#ifndef CPU_NV32M3
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI1 中断服务函数
|
||||
*
|
||||
* @param none.
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
void SPI1_Isr(void)
|
||||
{
|
||||
if( SPI_Callback[1] )
|
||||
{
|
||||
SPI_Callback[1]();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,567 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* @brief SPI 驱动头文件.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef SPI_H_
|
||||
#define SPI_H_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "common.h"
|
||||
/******************************************************************************
|
||||
* 定义SPI模块个数
|
||||
******************************************************************************/
|
||||
#define MAX_SPI_NO 2
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 定义SPI寄存复位值
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#define SPI_C1_DEFAULT 0x04 /*!< SPI 控制寄存器1 */
|
||||
#define SPI_C2_DEFAULT 0x00 /*!< SPI 控制寄存器2 */
|
||||
#define SPI_BR_DEFAULT 0x00 /*!< SPI 波特率寄存器 */
|
||||
#define SPI_S_DEFAULT 0x20 /*!< SPI 状态寄存器 */
|
||||
#define SPI_M_DEFAULT 0x00 /*!< SPI 匹配寄存器 */
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* 定义SPI传输状态
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
#define SPI_ERR_SUCCESS 0 /*!< 成功 */
|
||||
#define SPI_ERR_CODE_BASE ((uint32)SPI0 - 0x40000000L) /*!< SPI基地址错误 */
|
||||
#define SPI_ERR_TXBUF_NOT_EMPTY (SPI_ERR_CODE_BASE+1) /*!< 失败由于发送缓冲区空时,标志位没有置位*/
|
||||
#define SPI_ERR_RXBUF_NOT_FULL (SPI_ERR_CODE_BASE+2) /*!< 失败由于接收缓冲区满时,标志位没有置位 */
|
||||
|
||||
/******************************************************************************
|
||||
* 数据类型别名定义
|
||||
******************************************************************************/
|
||||
|
||||
typedef uint8_t SPI_WidthType; /* SPI 发送数据宽度类型 */
|
||||
typedef uint32_t ResultType; /* SPI 收发返回状态数据类型 */
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* SPI回调函数声明
|
||||
*
|
||||
*******************************************************************************/
|
||||
typedef void (*SPI_CallbackType)(void);
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* SPI 结构体类型
|
||||
*
|
||||
*******************************************************************************/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t bIntEn : 1; /*!< 1: 使能中断, 0: 禁用中断*/
|
||||
uint32_t bModuleEn : 1; /*!< 1: 使能SPI模块, 0: 禁用SPI模块 */
|
||||
uint32_t bTxIntEn : 1; /*!< 1: 使能发送中断, 0: 禁用发送中断 */
|
||||
uint32_t bMasterMode : 1; /*!< 1: 主机模式, 0: 从机模式 */
|
||||
uint32_t bClkPolarityLow : 1; /*!< 设置时钟极性 */
|
||||
uint32_t bClkPhase1 : 1; /*!< 设置时钟相位 */
|
||||
uint32_t bMasterAutoDriveSS : 1; /*!< 从机选择输出使能 */
|
||||
uint32_t bShiftLSBFirst : 1; /*!< 1: LSB, 0: MSB */
|
||||
uint32_t bMatchIntEn : 1; /*!< 1: 使能匹配中断, 0: 禁用匹配中断 */
|
||||
uint32_t bModeFaultEn : 1; /*!< 使能主机模式错误功能 */
|
||||
uint32_t bBidirectionModeEn : 1; /*!< 双向模式输出控制 */
|
||||
uint32_t bPinAsOuput : 1; /*!< SPI引脚控制 */
|
||||
uint32_t bStopInWaitMode : 1; /*!< 配置SPI时钟在等待模式下的工作状态 */
|
||||
uint32_t bRsvd : 19;
|
||||
} SPI_SettingType;
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* SPI配置结构体类型
|
||||
*
|
||||
*******************************************************************************/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SPI_SettingType sSettings; /*!< SPI 结构体 */
|
||||
uint32_t u32BitRate; /*!< 设置波特率 */
|
||||
uint32_t u32BusClkHz; /*!< 输入总线时钟 */
|
||||
} SPI_ConfigType; /*!< SPI配置结构体 */
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI串行数据传输从最低位开始(LSB)
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_SetLSBFirst(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_LSBFE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI串行数据传输从最高位开始(MSB)
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_SetMSBFirst(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_LSBFE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置SPI时钟极性.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
* @param[in] u8PolLow 设置时钟极性. 1-SCK时钟有效状态为高(无效状态为低)
|
||||
* 0-SCK时钟有效状态为低(无效状态为高)
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_SetClockPol(SPI_Type *pSPI,uint8_t u8PolLow)
|
||||
{
|
||||
if( u8PolLow )
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_CPOL_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_CPOL_MASK;
|
||||
}
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置SPI时钟相位.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
* @param[in] u8Phase 设置时钟相位, 1 - 数据在SCK下降沿输出,在上升沿采样.
|
||||
* 0 - 数据在SCK上升沿采样,在下降沿输出
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_SetClockPhase(SPI_Type *pSPI,uint8_t u8Phase)
|
||||
{
|
||||
if( u8Phase )
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_CPHA_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_CPHA_MASK;
|
||||
}
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能SPI模块.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_Enable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_SPE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用SPI模块
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_Disable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_SPE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能SPI中断.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
__STATIC_INLINE void SPI_IntEnable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_SPIE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用SPI中断.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_IntDisable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_SPIE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置SPI为主机模式.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_SetMasterMode(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_MSTR_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置SPI为从机模式.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_SetSlaveMode(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_MSTR_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能SPI发送中断.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_TxIntEnable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_SPTIE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用SPI发送中断.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
* @ Pass/ Fail criteria: none
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_TxIntDisable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_SPTIE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能从机选择输出.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_SSOutputEnable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C1 |= SPI_C1_SSOE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用从机选择输出.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_SSOutputDisable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C1 &= ~SPI_C1_SSOE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能SPI匹配中断.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_MatchIntEnable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 |= SPI_C2_SPMIE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用SPI匹配中断.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_MatchIntDisable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 &= ~SPI_C2_SPMIE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用主机模式错误功能
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_ModfDisable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 &= ~SPI_C2_MODFEN_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
|
||||
*
|
||||
* @brief 使能主机模式模式错误功能.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_ModfEnable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 |= SPI_C2_MODFEN_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能双向模式输出.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_BidirOutEnable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 |= SPI_C2_BIDIROE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用双向模式输出
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_BidirOutDisable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 &= ~SPI_C2_BIDIROE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI时钟在等待模式下一直运行
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return none.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_ClockStopDisable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 &= ~SPI_C2_SPISWAI_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI时钟在等待模式下关闭
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_ClockStopEnable(SPI_Type *pSPI )
|
||||
{
|
||||
pSPI->C2 |= SPI_C2_SPISWAI_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能双向引脚配置.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_BidirPinEnable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C2 |= SPI_C2_SPC0_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief SPI使用独立的引脚用作数据的输入输出.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_BidirPinDisable(SPI_Type *pSPI)
|
||||
{
|
||||
pSPI->C2 &= ~SPI_C2_SPC0_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读取接收数据缓冲区满标准位.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return TRUE or FALSE.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t SPI_IsSPRF(SPI_Type *pSPI )
|
||||
{
|
||||
return(pSPI->S & SPI_S_SPRF_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读取SPI匹配标志位
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return TRUE or FALSE.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t SPI_IsSPMF(SPI_Type *pSPI )
|
||||
{
|
||||
return(pSPI->S & SPI_S_SPMF_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读取SPI发送数据缓冲区空标志位.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块 .
|
||||
*
|
||||
* @return TRUE or FALSE.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t SPI_IsSPTEF(SPI_Type *pSPI )
|
||||
{
|
||||
return(pSPI->S & SPI_S_SPTEF_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读取主机模式错误标志位
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return TRUE or FALSE.
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t SPI_IsMODF(SPI_Type *pSPI )
|
||||
{
|
||||
return(pSPI->S & SPI_S_MODF_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读取SPI数据寄存器.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
*
|
||||
* @return 数据寄存器的值
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t SPI_ReadDataReg(SPI_Type *pSPI )
|
||||
{
|
||||
return pSPI->D;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 写数据到SPI数据寄存器.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
* @param[in] u8WrBuff 写到SPI数据寄存器的数据缓冲区
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_WriteDataReg(SPI_Type *pSPI, uint8_t u8WrBuff )
|
||||
{
|
||||
pSPI->D = u8WrBuff;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 写数据到SPI匹配寄存器.
|
||||
*
|
||||
* @param[in] pSPI 指向SPI模块
|
||||
* @param[in] u8WrBuff 写到SPI匹配寄存器的数据缓冲区
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void SPI_WriteMatchValue(SPI_Type *pSPI, uint8_t u8WrBuff )
|
||||
{
|
||||
pSPI->M = u8WrBuff;
|
||||
}
|
||||
/******************************************************************************/
|
||||
|
||||
void SPI_Enable(SPI_Type *pSPI);
|
||||
void SPI_Disable(SPI_Type *pSPI);
|
||||
void SPI_SetLSBFirst(SPI_Type *pSPI);
|
||||
void SPI_SetMSBFirst(SPI_Type *pSPI);
|
||||
void SPI_IntEnable(SPI_Type *pSPI);
|
||||
void SPI_IntDisable(SPI_Type *pSPI);
|
||||
void SPI_SetMasterMode(SPI_Type *pSPI);
|
||||
void SPI_SetSlaveMode(SPI_Type *pSPI);
|
||||
void SPI_TxIntEnable(SPI_Type *pSPI);
|
||||
void SPI_TxIntDisable(SPI_Type *pSPI);
|
||||
void SPI_SSOutputEnable(SPI_Type *pSPI );
|
||||
void SPI_SSOutputDisable(SPI_Type *pSPI );
|
||||
void SPI_MatchIntEnable(SPI_Type *pSPI );
|
||||
void SPI_MatchIntDisable(SPI_Type *pSPI );
|
||||
void SPI_ModfDisable(SPI_Type *pSPI );
|
||||
void SPI_ModfEnable(SPI_Type *pSPI );
|
||||
void SPI_BidirOutEnable(SPI_Type *pSPI );
|
||||
void SPI_BidirOutDisable(SPI_Type *pSPI );
|
||||
void SPI_ClockStopDisable(SPI_Type *pSPI );
|
||||
void SPI_ClockStopEnable(SPI_Type *pSPI );
|
||||
void SPI_BidirPinEnable(SPI_Type *pSPI );
|
||||
void SPI_BidirPinDisable(SPI_Type *pSPI );
|
||||
void SPI_SetClockPol(SPI_Type *pSPI,uint8_t u8PolLow);
|
||||
void SPI_SetClockPhase(SPI_Type *pSPI,uint8_t u8Phase);
|
||||
void SPI_SetBaudRate(SPI_Type *pSPI,uint32_t u32BusClock,uint32_t u32Bps );
|
||||
uint8_t SPI_IsSPRF(SPI_Type *pSPI );
|
||||
uint8_t SPI_IsSPMF(SPI_Type *pSPI );
|
||||
uint8_t SPI_IsSPTEF(SPI_Type *pSPI );
|
||||
uint8_t SPI_IsMODF(SPI_Type *pSPI );
|
||||
uint8_t SPI_ReadDataReg(SPI_Type *pSPI );
|
||||
void SPI_WriteDataReg(SPI_Type *pSPI, uint8_t u8WrBuff );
|
||||
void SPI_WriteMatchValue(SPI_Type *pSPI, uint8_t u8WrBuff );
|
||||
void SPI_Init(SPI_Type *pSPI, SPI_ConfigType *pConfig);
|
||||
void SPI_DeInit(SPI_Type *pSPI);
|
||||
ResultType SPI_TransferWait(SPI_Type *pSPI, SPI_WidthType* pRdBuff, SPI_WidthType *pWrBuff,uint32 uiLength);
|
||||
void SPI_SetCallback(SPI_Type *pSPI,SPI_CallbackType pfnCallback);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user