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