You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

131 lines
5.1 KiB

/*********************************************************
*Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
*文件名: lib_spi.h
*作 者: AE Team
*版 本: V1.01
*日 期: 2021/06/09
*描 述: SPI模块库函数头文件
*备 注:
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
**********************************************************/
#ifndef __LIBSPI_H__
#define __LIBSPI_H__
#include "ES8P5066.h"
#include "type.h"
/* 数据发送接收方式 */
typedef enum
{
SPI_RiseSendFallRec = 0x0, /* 上升沿发送,下降沿接收 */
SPI_FallSendRiseRec = 0x1, /* 下降沿发送,上升沿接收 */
SPI_RiseRecFallSend = 0x2, /* 上升沿接收,下降沿发送 */
SPI_FallRecRiseSend = 0x3, /* 下降沿接收,上升沿发送 */
} SPI_TYPE_DFS;
/* 工作模式 */
typedef enum
{
SPI_Mode_Master = 0x0, /* 主控模式 */
SPI_Mode_Slave = 0x1, /* 从动模式 */
} SPI_TYPE_MODE;
/* 初始化结构体 */
typedef struct
{
uint32_t SPI_Freq; /* SPI频率 */
SPI_TYPE_DFS SPI_Df; /* 数据格式 */
SPI_TYPE_MODE SPI_Mode; /* 通讯模式 */
uint8_t SPI_DW; /* 发送帧位宽 */
TYPE_FUNCEN SPI_DelayRec; /* 延迟接收使能 */
TYPE_FUNCEN SPI_DelaySend; /* 发送间隔使能 */
uint8_t SPI_SendDelayPeroid;/* 发送间隔周期 */
} SPI_InitStruType;
/* 中断状态标志位 */
typedef enum
{
SPI_Flag_TB = (1 << 0), /* 发送缓冲器空中断标志 */
SPI_Flag_RB = (1 << 1), /* 接收缓冲器满中断标志 */
SPI_Flag_TE = (1 << 2), /* 发送错误中断标志,仅从动模式 */
SPI_Flag_RO = (1 << 3), /* 接收错误溢出中断标志 */
SPI_Flag_ID = (1 << 4), /* 空闲状态中断标志 */
SPI_Flag_NSSIF = (1 << 5), /* 片选变化中断标志 */
SPI_Flag_TBWE = (1 << 6), /* 发送数据写错误中断标志 */
SPI_Flag_TMS = (1 << 17), /* 发送数据写错误中断标志 */
} SPI_TYPE_FLAG;
/* 发送缓冲器空/接收缓冲器满中断类型 */
typedef enum
{
SPI_IType_BYTE = 0x0, /* 字节中断 */
SPI_IType_HALFWORD = 0x1, /* 半字中断 */
SPI_IType_WORD = 0x2, /* 字中断 */
} SPI_TYPE_TRBIM;
/* 中断使能标志位 */
typedef enum
{
SPI_IT_TB = (1 << 0), /* 发送缓冲器空中断 */
SPI_IT_RB = (1 << 1), /* 接收缓冲器满中断 */
SPI_IT_TE = (1 << 2), /* 发送数据错误中断 */
SPI_IT_RO = (1 << 3), /* 接收错误溢出中断 */
SPI_IT_ID = (1 << 4), /* 空闲状态中断 */
SPI_IT_NSS = (1 << 5), /* 片选变化中断 */
SPI_IT_TBWE = (1 << 6), /* 发送数据写错误中断 */
} SPI_TYPE_IT;
/* 清除中断标志位 */
typedef enum
{
SPI_CLR_TE = (1 << 2), /* 发送错误中断标志,仅从动模式 */
SPI_CLR_RO = (1 << 3), /* 接收错误溢出中断标志 */
SPI_CLR_ID = (1 << 4), /* 空闲状态中断标志 */
SPI_CLR_NSS = (1 << 5), /* 片选变化中断标志 */
SPI_CLR_TBWE = (1 << 6), /* 发送数据写错误中断标志 */
} SPI_CLR_IF;
/* SPI状态标志位 */
typedef enum
{
SPI_STA_NSS = (1 << 7), /* 片选标志位 */
SPI_STA_TBEF0 = (1 << 8), /* TB0空标志位 */
SPI_STA_TBEF1 = (1 << 9), /* TB1空标志位 */
SPI_STA_TBEF2 = (1 << 10), /* TB2空标志位 */
SPI_STA_TBEF3 = (1 << 11), /* TB3空标志位 */
SPI_STA_RBFF0 = (1 << 12), /* RB0满标志位 */
SPI_STA_RBFF1 = (1 << 13), /* RB1满标志位 */
SPI_STA_RBFF2 = (1 << 14), /* RB2满标志位 */
SPI_STA_RBFF3 = (1 << 15), /* RB3满标志位 */
SPI_STA_IDLE = (1 << 16), /* 空闲状态标志位 */
} SPI_TYPE_STA;
/* SPI1 */
#define SPI1_Enable() (SPI1->CON.EN = 1)
#define SPI1_Disable() (SPI1->CON.EN = 0)
#define SPI1_RecEnable() (SPI1->CON.REN = 1)
#define SPI1_RecDisable() (SPI1->CON.REN = 0)
#define SPI1_Rst() (SPI1->CON.RST = 1)
/* SPI function */
void SPI_Init(SPI_TypeDef *SPIx, SPI_InitStruType *SPI_InitStruct);
void SPI_ITConfig(SPI_TypeDef *SPIx, SPI_TYPE_IT SPI_IE, TYPE_FUNCEN NewState);
void SPI_DataFormatConfig(SPI_TypeDef *SPIx, SPI_TYPE_DFS Type);
void SPI_SendByte(SPI_TypeDef *SPIx, uint8_t Temp);
void SPI_SendHalfWord(SPI_TypeDef *SPIx, uint16_t Temp);
void SPI_SendWord(SPI_TypeDef *SPIx, uint32_t Temp);
uint8_t SPI_RecByte(SPI_TypeDef *SPIx);
uint16_t SPI_RecHalfWord(SPI_TypeDef *SPIx);
uint32_t SPI_RecWord(SPI_TypeDef *SPIx);
void SPI_TBIMConfig(SPI_TypeDef *SPIx, SPI_TYPE_TRBIM Type);
void SPI_RBIMConfig(SPI_TypeDef *SPIx, SPI_TYPE_TRBIM Type);
FlagStatus SPI_GetFlagStatus(SPI_TypeDef *SPIx, SPI_TYPE_FLAG Flag);
ITStatus SPI_GetITStatus(SPI_TypeDef *SPIx, SPI_TYPE_IT Flag);
FlagStatus SPI_GetStatus(SPI_TypeDef *SPIx, SPI_TYPE_STA Flag);
void SPI_ClearITPendingBit(SPI_TypeDef *SPIx, SPI_CLR_IF Flag);
void Clear_TBW(SPI_TypeDef *SPIx);
void Clear_RBR(SPI_TypeDef *SPIx);
#endif /* end of file */