sspi.h 6.02 KB
Newer Older
时昊's avatar
时昊 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
#ifndef __SSPI_H__
#define __SSPI_H__
#include "sci_common.h"

#define SSPI00_SDR      SCI0->SCI.SIO00
#define SSPI01_SDR      SCI0->SCI.SIO01
#define SSPI10_SDR      SCI0->SCI.SIO10
#define SSPI11_SDR      SCI0->SCI.SIO11
#define SSPI20_SDR      SCI1->SCI.SIO20
#define SSPI21_SDR      SCI1->SCI.SIO21

#if defined(BAT32G1XX_80PIN) || defined(BAT32G1XX_100PIN)
#define IS_SSPI_ALL_PERIPH(PERIPH)       (((PERIPH) == SSPI00) || ((PERIPH) == SSPI01) || ((PERIPH) == SSPI10) || \
							((PERIPH) == SSPI11) || ((PERIPH) == SSPI20) || ((PERIPH) == SSPI21)|| ((PERIPH) == SSPI30)|| ((PERIPH) == SSPI31))

#else
#define IS_SSPI_ALL_PERIPH(PERIPH)       (((PERIPH) == SSPI00) || ((PERIPH) == SSPI01) || ((PERIPH) == SSPI10) || \
                                        ((PERIPH) == SSPI11) || ((PERIPH) == SSPI20) || ((PERIPH) == SSPI21))
 
#endif
typedef struct
{

	uint16_t SPI_Mode;				  /*!< Specifies the SPI operating mode.
										   This parameter can be a value of @ref SPI_mode */

	uint16_t SPI_DataSize;			  /*!< Specifies the SPI data size.
										   This parameter can be a value of @ref SPI_data_size */
										   
	uint32_t SPI_ClockSpeed;  /*!< Specifies the Baud Rate which will transmit and receive clock.*/
											 
	uint16_t SPI_Bitorder;			  /*!< Specifies whether data transfers start from MSB or LSB bit.*/

	uint16_t SPI_Phase_Mode;          /*!< Specifies  data transfers starts before operation clock and its phase.*/

	uint16_t SPI_Int_Source;          /*!< Specifies interrupt source of channel n.*/
	  
}SPI_InitTypeDef;

/** 
  * @brief  SCI unit ST register  
  */
#define SSPI_STOP_EN						((uint16_t)0x0001)

/** 
  * @brief  SCI unit SS register  
  */
#define SSPI_START_EN					((uint16_t)0x0001)
#define SSPI_START_DIS					((uint16_t)0x0000)

/** 
  * @brief  SCI unit SPS register  
  */
#define SSPI_SPS_MAX_VALUE				((uint16_t)0x000F)
#define SSPI_SPS_MIN_VALUE				((uint16_t)0x0000)

/** 
  * @brief  SCI unit SSR register to read flags
  */
#define SSPI_FLAG_TSF					((uint16_t)0x0040)
#define SSPI_FLAG_BEF					((uint16_t)0x0020)
#define SSPI_FLAG_OVERRUN				((uint16_t)0x0001)
#define IS_SSPI_FLAG(FLAG)				((((FLAG) & (uint16_t)0xFF9E) == 0x00) && ((FLAG) != (uint16_t)0x00))
										
										
/** 
  * @brief  SCI unit SIR register to clear flags
  */
#define SSPI_CLEAR_FLAG_FEF				((uint16_t)0x0004)
#define SSPI_CLEAR_FLAG_PEF				((uint16_t)0x0002)
#define SSPI_CLEAR_FLAG_OVF				((uint16_t)0x0001)
#define IS_SSPI_CLEAR_FLAG(FLAG)         ((((FLAG) & (uint16_t)0x0007) == 0x00) && ((FLAG) != (uint16_t)0x00))

/** 
  * @brief  SCI unit SCR setting register
  */
#define SSPI_DATA_LENGTH_9               ((uint16_t)0x0001)
#define SSPI_DATA_LENGTH_7               ((uint16_t)0x0002)
#define SSPI_DATA_LENGTH_8               ((uint16_t)0x0003)

#define SSPI_DATA_STOPBIT_NONE			((uint16_t)0x0000)
#define SSPI_DATA_STOPBIT_1              ((uint16_t)0x0010)
#define SSPI_DATA_STOPBIT_2              ((uint16_t)0x0020)
#define SSPI_DATA_STOPBIT_INVALID		((uint16_t)0x0030)

#define SSPI_DIR_MSB                     ((uint16_t)0x0000)
#define SSPI_DIR_LSB                     ((uint16_t)0x0080)

#define SSPI_PARITY_NONE                 ((uint16_t)0x0000)
#define SSPI_INTSRE_NONE                 ((uint16_t)0x0000)
#define SSPI_PHASE_NONE                  ((uint16_t)0x0000)
/** 
  * @brief  SCI unit SO setting register
  */
#define SSPI_BusLevel_Low                ((uint16_t)0x0000)
#define SSPI_BusLevel_High               ((uint16_t)0x0001)
#define IS_SSPI_BUS_LEVEL(LEVEL)         (((LEVEL) == SSPI_BusLevel_Low) || \
                                        ((LEVEL) == SSPI_BusLevel_High))
#define SSPI_TransmitMode_Recv			((uint8_t)0x01)
#define SSPI_TransmitMode_Send			((uint8_t)0x02)
#define SSPI_TransmitMode_TxRx			((uint8_t)0x03)
#define SSPI_TransmitMode_Mask			((uint8_t)0x03)
#define IS_SSPI_TRANSMIT_MODE(MODE)		(((MODE) == SSPI_TransmitMode_Send) || \
                                        ((MODE) == SSPI_TransmitMode_Recv))



#define SPI_Phase_Mode0                 ((uint16_t)0x3000)//11: DAP_1: data sampling on first edge,data change on second edge;  CKP_1: Clock polarity is low when idle
#define SPI_Phase_Mode1                 ((uint16_t)0x1000)//01: DAP_0: Data sampling on second edge;  data change on first edge CKP_1: Clock polarity is low when idle
#define SPI_Phase_Mode2                 ((uint16_t)0x2000)//10: DAP_1: data sampling on first edge;                            CKP_0: Clock polarity is high when idle
#define SPI_Phase_Mode3                 ((uint16_t)0x0000)//00: DAP_0: Data sampling on second edge;                           CKP_0: Clock polarity is high when idle

#define SPI_Mode_Master                 ((uint16_t)0x0000)
#define SPI_Mode_Slave                  ((uint16_t)0x0001)

#define SPI_Data_Bits_8                 ((uint16_t)0x0007)
#define SPI_Data_Bits_7                 ((uint16_t)0x0006)
#define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_Data_Bits_8) || ((DATASIZE) == SPI_Data_Bits_7)))

#define SPI_Bit_Msb				        ((uint16_t)0x0000)
#define SPI_Bit_Lsb                     ((uint16_t)0x0080)

#define SPI_Interrupt_TransferEnd		((uint16_t)0x0000)
#define SPI_Interrupt_BufferEmpty 		((uint16_t)0x0002)


typedef void (*NSS_Func)(void);

typedef struct
{
	void(*Active)(void);
	void(*Inactive)(void);
}NSS_FUNC_T;
extern NSS_FUNC_T NSS;

extern uint8_t g_spi_tx_end,g_spi_rx_end;
void SSPI_Set_TransmitMode(SCIAFSelect_TypeDef SSPIx, uint8_t Mode);
uint8_t SSPI_Get_MasterMode(SCIAFSelect_TypeDef SSPIx);
uint8_t SSPI_Get_TransmitMode(SCIAFSelect_TypeDef SSPIx);
uint8_t SSPI_TransmitData(SCIAFSelect_TypeDef SSPIx, uint8_t Data);

void SSPI_Start(SCIAFSelect_TypeDef func);
void SSPI_Stop(SCIAFSelect_TypeDef func);
int8_t SSPI_Init(SCIAFSelect_TypeDef func, SPI_InitTypeDef * SPI_InitStruct);
void SSPI_SendByte(SCIAFSelect_TypeDef SPIx, uint8_t Data);
uint8_t SSPI_ReceiveByte(SCIAFSelect_TypeDef SPIx);
FlagStatus SSPI_GetErrStaus(SCIAFSelect_TypeDef SSPIx, uint16_t SSPI_FLAG);
void SSPI_ClearFlag(SCIAFSelect_TypeDef SSPIx, uint16_t SSPI_FLAG);
uint8_t SSPI_TransmitData(SCIAFSelect_TypeDef SSPIx, uint8_t Data);

#endif