rt-thread/bsp/essemi/es8p508x/libraries/Library/Source/lib_spi.c

234 lines
6.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/***************************************************************
*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**********************/