00001
00002
00003
00004
00005
00006
00007
00008
00016
00017
00018
00019
00020
00021
00022
00032 #ifndef _CSL_SPI_H_
00033 #define _CSL_SPI_H_
00034
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00040 #include "soc.h"
00041 #include "csl_error.h"
00042 #include "csl_types.h"
00043 #include "csl_general.h"
00044
00070
00071
00072
00078 #define CSL_SPI_SPICR1_FIRQ_DISABLE (Uint16)0
00079
00080 #define CSL_SPI_SPICR1_FIRQ_ENABLE (Uint16)1
00081
00082 #define SPI_READ_CMD (Uint16)1
00083
00084 #define SPI_WRITE_CMD (Uint16)2
00085
00086 #define SPI_DISABLE (0)
00087
00088 #define SPI_ENABLE (1)
00089
00090 #define SPI_ACTIVE (0)
00091
00094
00095
00096
00107 typedef enum
00108 {
00109 SPI_CS_NUM_0,
00110 SPI_CS_NUM_1,
00111 SPI_CS_NUM_2,
00112 SPI_CS_NUM_3,
00113 SPI_CS_NUM_INVALID
00114 }SPI_HwMode;
00115
00122 typedef enum
00123 {
00124 SPI_WORD_LENGTH_1 = 0,
00125 SPI_WORD_LENGTH_2,
00126 SPI_WORD_LENGTH_3,
00127 SPI_WORD_LENGTH_4,
00128 SPI_WORD_LENGTH_5,
00129 SPI_WORD_LENGTH_6,
00130 SPI_WORD_LENGTH_7,
00131 SPI_WORD_LENGTH_8,
00132 SPI_WORD_LENGTH_9,
00133 SPI_WORD_LENGTH_10,
00134 SPI_WORD_LENGTH_11,
00135 SPI_WORD_LENGTH_12,
00136 SPI_WORD_LENGTH_13,
00137 SPI_WORD_LENGTH_14,
00138 SPI_WORD_LENGTH_15,
00139 SPI_WORD_LENGTH_16,
00140 SPI_WORD_LENGTH_17,
00141 SPI_WORD_LENGTH_18,
00142 SPI_WORD_LENGTH_19,
00143 SPI_WORD_LENGTH_20,
00144 SPI_WORD_LENGTH_21,
00145 SPI_WORD_LENGTH_22,
00146 SPI_WORD_LENGTH_23,
00147 SPI_WORD_LENGTH_24,
00148 SPI_WORD_LENGTH_25,
00149 SPI_WORD_LENGTH_26,
00150 SPI_WORD_LENGTH_27,
00151 SPI_WORD_LENGTH_28,
00152 SPI_WORD_LENGTH_29,
00153 SPI_WORD_LENGTH_30,
00154 SPI_WORD_LENGTH_31,
00155 SPI_WORD_LENGTH_32,
00156 SPI_MAX_WORD_LEN
00157 }SPI_WordLen;
00158
00164 typedef enum
00165 {
00166 SPI_WORD_IRQ_DISABLE,
00167 SPI_WORD_IRQ_ENABLE
00168 }SPI_WordCntEnb;
00169
00175 typedef enum
00176 {
00177 SPI_FRAME_IRQ_DISABLE,
00178 SPI_FRAME_IRQ_ENABLE
00179 }SPI_FrameCntEnb;
00180
00186 typedef enum SPI_Command
00187 {
00188 SPI_RSVD_CMD = 0,
00189 SPI_READ,
00190 SPI_WRITE,
00191 SPI_RSVD1_CMD
00192 } SPI_Command;
00193
00199 typedef enum
00200 {
00201 SPI_DATA_DLY_0 = 0,
00202 SPI_DATA_DLY_1,
00203 SPI_DATA_DLY_2,
00204 SPI_DATA_DLY_3,
00205 SPI_DATA_DLY_UNKNOWN
00206 } SPI_DataDly;
00207
00213 typedef enum
00214 {
00215 SPI_CLKP_LOW_AT_IDLE = 0,
00216 SPI_CLKP_HIGH_AT_IDLE
00217 }SPI_ClkPolarity;
00218
00224 typedef enum
00225 {
00226 SPI_CSP_ACTIVE_LOW = 0,
00227 SPI_CSP_ACTIVE_HIGH
00228 } SPI_ChipSelPol;
00229
00235 typedef enum
00236 {
00237 SPI_CLK_PH_FALL_EDGE = 0,
00238 SPI_CLK_PH_RISE_EDGE
00239 } SPI_ClkPh;
00240
00246 typedef enum
00247 {
00248 SPI_POLLING_MODE,
00249 SPI_INTERRUPT_MODE
00250 }SPI_OperMode;
00255
00256
00257
00268 typedef struct
00269 {
00270 Uint16 configured;
00271 SPI_HwMode mode;
00272 SPI_OperMode opMode;
00273 }CSL_SpiObj;
00274
00281 typedef struct
00282 {
00283 Uint16 spiClkDiv;
00284 SPI_WordLen wLen;
00286 Uint16 frLen;
00287 SPI_WordCntEnb wcEnable;
00288 SPI_FrameCntEnb fcEnable;
00289 SPI_HwMode csNum;
00290 SPI_DataDly dataDelay;
00291 SPI_ClkPolarity clkPol;
00292 SPI_ChipSelPol csPol;
00293 SPI_ClkPh clkPh;
00294 }SPI_Config;
00295
00301 typedef CSL_SpiObj *CSL_SpiHandle;
00308
00309
00310
00311
00348 CSL_Status SPI_init(void);
00349
00384 CSL_Status SPI_deInit(void);
00385
00428 CSL_SpiHandle SPI_open(SPI_HwMode csNum, SPI_OperMode opMode);
00429
00463 CSL_Status SPI_close(CSL_SpiHandle hSpi);
00464
00507 CSL_Status SPI_config (CSL_SpiHandle hSpi, SPI_Config *spiHwConfig);
00508
00546 CSL_Status SPI_read (CSL_SpiHandle hSpi, Uint16 *readBuffer, Uint16 bufLen);
00547
00585 CSL_Status SPI_write (CSL_SpiHandle hSpi, Uint16 *writeBuffer, Uint16 bufLen);
00586
00629 CSL_Status SPI_dataTransaction(CSL_SpiHandle hSpi,
00630 Uint16 *rwBuffer,
00631 Uint16 rwBufLen,
00632 SPI_Command readOrWrite);
00633
00637
00638
00639
00642 static CSL_SpiObj SPI_Instance;
00648 #ifdef __cplusplus
00649 }
00650 #endif
00651 #endif
00652