234 lines
6.0 KiB
C
234 lines
6.0 KiB
C
/***************************************************************
|
||
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
|
||
*文件名: lib_spi.c
|
||
*作 者: Liut
|
||
*版 本: V1.00
|
||
*日 期: 2017/07/14
|
||
*描 述: SPI模块库函数
|
||
*备 注: 适用于 ES8P508x芯片
|
||
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
|
||
***************************************************************/
|
||
#include "lib_spi.h"
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_Init
|
||
描 述:SPI初始化
|
||
输入值:初始化配置结构体地址
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_Init(SPI_InitStruType* SPI_InitStruct)
|
||
{
|
||
uint32_t Temp = 0;
|
||
|
||
Temp = SystemCoreClock / (SPI_InitStruct->SPI_Freq * 2);
|
||
if(Temp > 254)
|
||
Temp = 255;
|
||
|
||
SPI0->CKS.CKS = Temp;
|
||
|
||
SPI0->CON.DFS = SPI_InitStruct->SPI_Df;
|
||
SPI0->CON.MS = SPI_InitStruct->SPI_Mode;
|
||
SPI0->CON.DW = SPI_InitStruct->SPI_DW;
|
||
SPI0->CON.DRE = SPI_InitStruct->SPI_DelayRec;
|
||
SPI0->CON.TME = SPI_InitStruct->SPI_DelaySend;
|
||
|
||
Temp = (uint32_t)SPI_InitStruct->SPI_SendDelayPeroid - 1;
|
||
if(Temp > 62)
|
||
Temp = 63;
|
||
|
||
SPI0->CON.TMP = Temp;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_ITConfig
|
||
描 述:SPI中断配置
|
||
输入值:SPI_IE:中断类型 、 NewState:使能、失能
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_ITConfig(SPI_TYPE_IT SPI_IE,TYPE_FUNCEN NewState)
|
||
{
|
||
if(NewState != DISABLE)
|
||
SPI0->IE.Word |= (uint32_t)SPI_IE;
|
||
else
|
||
SPI0->IE.Word &= ~((uint32_t)SPI_IE);
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_DataFormatConfig
|
||
描 述:SPI数据格式配置
|
||
输入值:数据格式
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_DataFormatConfig(SPI_TYPE_DFS Type)
|
||
{
|
||
SPI0->CON.DFS = Type;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_SendByte
|
||
描 述:SPI发送一个字节(8位)
|
||
输入值:要发送的数据
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_SendByte(uint8_t Temp)
|
||
{
|
||
SPI0->TBW.Byte[0] = Temp;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_SendHalfWord
|
||
描 述:SPI发送一个半字(16位)
|
||
输入值:要发送的数据
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_SendHalfWord(uint16_t Temp)
|
||
{
|
||
SPI0->TBW.HalfWord[0] = Temp;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_SendWord
|
||
描 述:SPI发送一个字(32位)
|
||
输入值:要发送的数据
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_SendWord(uint32_t Temp)
|
||
{
|
||
SPI0->TBW.Word = Temp;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_RecByte
|
||
描 述:SPI接收一个字节
|
||
输入值:无
|
||
输出值:无
|
||
返回值:接收的数据
|
||
***************************************************************/
|
||
uint8_t SPI_RecByte(void)
|
||
{
|
||
return SPI0->RBR.Byte[0];
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_RecHalfWord
|
||
描 述:SPI接收一个半字
|
||
输入值:无
|
||
输出值:无
|
||
返回值:接收的数据
|
||
***************************************************************/
|
||
uint16_t SPI_RecHalfWord(void)
|
||
{
|
||
return SPI0->RBR.HalfWord[0];
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_RecWord
|
||
描 述:SPI接收一个字
|
||
输入值:无
|
||
输出值:无
|
||
返回值:接收的数据
|
||
***************************************************************/
|
||
uint32_t SPI_RecWord(void)
|
||
{
|
||
return SPI0->RBR.Word;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_TBIMConfig
|
||
描 述:SPI发送缓冲器空中断模式选择
|
||
输入值:空中断模式
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_TBIMConfig(SPI_TYPE_TRBIM Type)
|
||
{
|
||
SPI0->IE.TBIM = Type;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_RBIMConfig
|
||
描 述:SPI接收缓冲器满中断模式选择
|
||
输入值:满中断模式
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_RBIMConfig(SPI_TYPE_TRBIM Type)
|
||
{
|
||
SPI0->IE.RBIM = Type;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_GetFlagStatus
|
||
描 述:SPI检查标志位状态
|
||
输入值:标志位
|
||
输出值:无
|
||
返回值:SET/RESET
|
||
***************************************************************/
|
||
FlagStatus SPI_GetFlagStatus(SPI_TYPE_FLAG Flag)
|
||
{
|
||
FlagStatus bitstatus = RESET;
|
||
|
||
/* 读取寄存器 */
|
||
if((uint32_t)Flag <= 0x00000040)
|
||
{
|
||
if ((SPI0->IF.Word & Flag) != (uint32_t)RESET)
|
||
bitstatus = SET;
|
||
else
|
||
bitstatus = RESET;
|
||
}
|
||
|
||
else
|
||
{
|
||
if ((SPI0->STA.Word & Flag) != (uint32_t)RESET)
|
||
bitstatus = SET;
|
||
else
|
||
bitstatus = RESET;
|
||
}
|
||
|
||
return bitstatus;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_GetITStatus
|
||
描 述:SPI检查中断状态,未使能相应中断时不会返回SET
|
||
输入值:中断标志位
|
||
输出值:无
|
||
返回值:SET/RESET
|
||
***************************************************************/
|
||
ITStatus SPI_GetITStatus(SPI_TYPE_IT Flag)
|
||
{
|
||
FlagStatus bitstatus = RESET;
|
||
uint32_t itstatus = 0x0, itenable = 0x0;
|
||
|
||
itstatus = SPI0->IF.Word & (uint32_t)Flag;
|
||
itenable = SPI0->IE.Word & (uint32_t)Flag;
|
||
|
||
if ((itstatus != (uint32_t)RESET) && (itenable != (uint32_t)RESET))
|
||
bitstatus = SET;
|
||
else
|
||
bitstatus = RESET;
|
||
|
||
return bitstatus;
|
||
}
|
||
|
||
/***************************************************************
|
||
函数名:SPI0_ClearITPendingBit
|
||
描 述:SPI中断标志清除
|
||
输入值:标志位
|
||
输出值:无
|
||
返回值:无
|
||
***************************************************************/
|
||
void SPI_ClearITPendingBit(SPI_CLR_IF Flag)
|
||
{
|
||
SPI0->IF.Word = (uint32_t)Flag;
|
||
}
|
||
|
||
/*************************END OF FILE**********************/
|
||
|