#ifndef __SWM100_SSI_H__
#define __SWM100_SSI_H__

typedef struct {
	uint8_t len;		//SSI帧长度,可取值4-16
	uint8_t CPOL;		//0 无数据收发时时钟线为低电平		1 无数据收发时时钟线为高电平
	uint8_t CPHA;		//0 第一个时钟沿采集输入数据		1 第二个时钟沿采集输入数据
	uint32_t clkDiv;	//系统时钟除以clkDiv作为SSI时钟
	uint8_t INT_RXFEN;	//接收FIFO满中断使能
	uint8_t INT_TXEEN;	//发送FIFO空中断使能
	uint8_t LVL_RFIFO;	//当接收FIFO中的字节数增多到LVL_RFIFO定义的个数时产生接收FIFO满中断	000 0个		001 1个		010 2个		...		111 7个
	uint8_t LVL_TFIFO;	//当发送FIFO中的字节数减少到LVL_TFIFO定义的个数时产生发送FIFO空中断	000 0个		001 1个		010 2个		...		111 7个	
} SSI_InitStructure;

void SSI_Init(SSI_T * SSIx,SSI_InitStructure * initStruct);		//SSI同步串行接口初始化，包括帧长度设定、时序设定、速度设定、中断设定、FIFO触发设定
void SSI_Open(SSI_T * SSIx);									//SSI同步串行接口使能，使能是指给SSI模块提供工作时钟
void SSI_Close(SSI_T * SSIx);									//SSI同步串行接口禁能，禁能是指切断SSI模块的时钟供给，从而减小能耗
uint32_t SSI_ReadWrite(SSI_T * SSIx,uint32_t byt);				//通过SSI向从机写入一个数据并同时返回从机发送来的一个数据
void SSI_WriteBytes(SSI_T * SSIx,uint8_t buf[],uint32_t cnt);	//通过SSI向从机写入cnt个字节数据
void SSI_ReadBytes(SSI_T * SSIx,uint8_t buf[],uint32_t cnt);	//通过SSI从从机读回cnt个字节数据

uint32_t SSI_IsBUSY(SSI_T * SSIx);		//SSI是否正在进行数据传输				
uint32_t SSI_IsTFNF(SSI_T * SSIx);		//is Transmit FIFO Not Full，是否发送FIFO未满 
uint32_t SSI_IsTFE(SSI_T * SSIx);		//is Transmit FIFO Empty，是否发送FIFO为空
uint32_t SSI_IsRFNE(SSI_T * SSIx);		//is Receive FIFO Not Empty，是否接收FIFO不空（即有数据）
uint32_t SSI_IsRFF(SSI_T * SSIx);		//is Receive FIFO Full，是否接收FIFO已满	
uint32_t SSI_IsTXE(SSI_T * SSIx);		//is Transceiving Error，是否发生传输错误
uint32_t SSI_IsDCOL(SSI_T * SSIx);		//is Data Collision Error，是否发生数据冲突错误

void SSI_IntTXEEn(SSI_T * SSIx);		//TX FIFO空中断使能
void SSI_IntTXEDis(SSI_T * SSIx);		//TX FIFO空中断禁能
void SSI_IntTXOEn(SSI_T * SSIx);		//TX FIFO上溢中断使能
void SSI_IntTXODis(SSI_T * SSIx);		//TX FIFO上溢中断禁能
void SSI_IntTXOClr(SSI_T * SSIx);		//TX FIFO上溢中断标志清除
void SSI_IntRXUEn(SSI_T * SSIx);		//RX FIFO下溢中断使能
void SSI_IntRXUDis(SSI_T * SSIx);		//RX FIFO下溢中断禁能
void SSI_IntRXUClr(SSI_T * SSIx);		//RX FIFO下溢中断标志清除
void SSI_IntRXOEn(SSI_T * SSIx);		//RX FIFO上溢中断使能
void SSI_IntRXODis(SSI_T * SSIx);		//RX FIFO上溢中断禁能
void SSI_IntRXOClr(SSI_T * SSIx);		//RX FIFO上溢中断标志清除
void SSI_IntRXFEn(SSI_T * SSIx);		//RX FIFO满中断使能
void SSI_IntRXFDis(SSI_T * SSIx); 		//RX FIFO满中断禁能
void SSI_IntAllClr(SSI_T * SSIx);		//所有中断标志清除，包括TX FIFO上溢中断标志、RX FIFO下溢中断标志、RX FIFO上溢中断标志

#endif //__SWM100_SSI_H__
