1 #ifndef __SWM320_SPI_H__ 2 #define __SWM320_SPI_H__ 3 4 typedef struct { 5 uint8_t FrameFormat; //帧格式:SPI_FORMAT_SPI、SPI_FORMAT_TI_SSI 6 uint8_t SampleEdge; //在SPI帧格式下,选择数据采样边沿:SPI_FIRST_EDGE、SPI_SECOND_EDGE 7 uint8_t IdleLevel; //在SPI帧格式下,选择空闲时(无数据传输时)时钟线的电平:SPI_LOW_LEVEL、SPI_HIGH_LEVEL 8 uint8_t WordSize; //字长度, 有效值4-16 9 uint8_t Master; //1 主机模式 0 从机模式 10 uint8_t clkDiv; //SPI_CLK = SYS_CLK / clkDiv,有效值:SPI_CLKDIV_4、SPI_CLKDIV_8、... ... 、SPI_CLKDIV_512 11 12 uint8_t RXHFullIEn; //接收FIFO半满中断使能 13 uint8_t TXEmptyIEn; //发送FIFO 空中断使能 14 uint8_t TXCompleteIEn; //发送FIFO 空且发送移位寄存器空中断使能 15 } SPI_InitStructure; 16 17 #define SPI_FORMAT_SPI 0 //Motorola SPI 格式 18 #define SPI_FORMAT_TI_SSI 1 //TI SSI 格式 19 20 #define SPI_FIRST_EDGE 0 //第一个时钟沿开始采样 21 #define SPI_SECOND_EDGE 1 //第二个时钟沿开始采样 22 23 #define SPI_LOW_LEVEL 0 //空闲时时钟线保持低电平 24 #define SPI_HIGH_LEVEL 1 //空闲时时钟线保持高电平 25 26 #define SPI_CLKDIV_4 0 27 #define SPI_CLKDIV_8 1 28 #define SPI_CLKDIV_16 2 29 #define SPI_CLKDIV_32 3 30 #define SPI_CLKDIV_64 4 31 #define SPI_CLKDIV_128 5 32 #define SPI_CLKDIV_256 6 33 #define SPI_CLKDIV_512 7 34 35 36 /* Interrupt Type */ 37 #define SPI_IT_RX_OVF (1 << 0) //RX FIFO Overflow 38 #define SPI_IT_RX_FULL (1 << 1) //RX FIFO Full 39 #define SPI_IT_RX_HFULL (1 << 2) //RX FIFO Half Full 40 #define SPI_IT_TX_EMPTY (1 << 3) //TX FIFO Empty 41 #define SPI_IT_TX_HFULL (1 << 4) //TX FIFO Half Full 42 #define SPI_IT_TX_DONE (1 << 9) //TX Done(发送FIFO空且发送移位寄存器空) 43 44 45 46 void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct); //SPI初始化 47 void SPI_Open(SPI_TypeDef * SPIx); //SPI打开,允许收发 48 void SPI_Close(SPI_TypeDef * SPIx); //SPI关闭,禁止收发 49 50 uint32_t SPI_Read(SPI_TypeDef * SPIx); 51 void SPI_Write(SPI_TypeDef * SPIx, uint32_t data); 52 void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data); 53 uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data); 54 55 uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx); //接收FIFO是否空,如果不空则可以继续SPI_Read() 56 uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx); //发送FIFO是否满,如果不满则可以继续SPI_Write() 57 uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx); //发送FIFO是否空 58 59 60 void SPI_INTEn(SPI_TypeDef * SPIx, uint32_t it); //中断使能 61 void SPI_INTDis(SPI_TypeDef * SPIx, uint32_t it); //中断禁止 62 void SPI_INTClr(SPI_TypeDef * SPIx, uint32_t it); //中断标志清除 63 uint32_t SPI_INTStat(SPI_TypeDef * SPIx, uint32_t it); //中断状态查询 64 65 66 #endif //__SWM320_SPI_H__ 67