/****************************************************************************** 文 件 名:SPI_Master.c 功能描述:SPI 主机模式驱动库头文件 作 者:张暄 版 本:V1.0 日 期:2017.04.02 ******************************************************************************/ #ifndef _SPI_MASTER_H_ #define _SPI_MASTER_H_ #include "stdint.h" #include "mc9s12xhy128.h" #include "CRG.h" /****************************************************************************** SPI 配置 ******************************************************************************/ #define SPI_GPIO_SELECT SPI_PS4_PS7 #define SPI_BAUD_RATE 4000000 //无法自动计算,在SPI_Master_Start函数内定义 #define SPI_DATA_BUFFER_SIZE 16 #define SPI_CALL_DATA_BLOCK_TX_ISR 1 //使用数据块传输完成中断函数 #define SPI_DUMMY_BYTE 0xFF #define SPI_DUMMY_WORD 0xFFFF /****************************************************************************** SPI可用的GPIO ******************************************************************************/ #define SPI_PS4_PS7 0x00 #define SPI_PH0_PH3 0x10 #define SPI_PHV_PV3 0x20 /****************************************************************************** SPI工作模式 ******************************************************************************/ #define SPI_MODE_0 0x00 #define SPI_MODE_1 0x04 #define SPI_MODE_2 0x08 #define SPI_MODE_3 0x0C /****************************************************************************** SPI首位定义 ******************************************************************************/ #define SPI_MSB_FIRST 0x00 #define SPI_LSB_FIRST 0x01 /****************************************************************************** SPI写状态 ******************************************************************************/ #define SPI_WRITE_COMPLETE 0x00 #define SPI_UNWRITABLE 0x01 #define SPI_WRITE_NOT_COMPLETE 0x01 /****************************************************************************** SPI读取结果 ******************************************************************************/ #define SPI_READ_COMPLETE 0x00 #define SPI_READ_REQ_COMPLETE 0x00 #define SPI_READ_NOT_COMPLETE 0x01 /****************************************************************************** SPI数据块状态 ******************************************************************************/ #define SPI_DATA_BLOCK_IDLE 0x00 #define SPI_DATA_BLOCK_WRITE 0x01 #define SPI_DATA_BLOCK_READ 0x02 /****************************************************************************** SPI数据块结构 ******************************************************************************/ typedef struct { uint8_t Status; uint8_t ReadComplete; uint8_t Ptr; uint8_t Len; uint8_t Data[SPI_DATA_BUFFER_SIZE]; } SPIDataBlockStruct; /****************************************************************************** 函数声明 ******************************************************************************/ void SPI_Master_Start(uint8_t Mode, uint8_t FirstBit); void SPI_Master_Stop(void); uint8_t SPI_Master_Get_Write_Status(void); uint8_t SPI_Master_Byte_Write(uint8_t Data); uint8_t SPI_Master_Byte_Read_Req(void); uint8_t SPI_Master_Get_Read_Byte(uint8_t *pData); uint8_t SPI_Master_Word_Write(uint16_t Data); uint8_t SPI_Master_Word_Read_Req(void); uint8_t SPI_Master_Get_Read_Word(uint16_t *pData); uint8_t SPI_Master_Block_Write(uint8_t *pData, uint8_t Len); uint8_t SPI_Master_Block_Read_Req(uint8_t Len); uint8_t SPI_Master_Get_Read_Block(uint8_t *pData, uint8_t Len); #if SPI_CALL_DATA_BLOCK_TX_ISR void SPI_Master_Block_Transmit_ISR(void); #endif #endif