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