1 /* 2 * @ : Copyright (c) 2021 Phytium Information Technology, Inc. 3 * 4 * SPDX-License-Identifier: Apache-2.0. 5 * 6 * @Date: 2021-04-25 13:59:05 7 * @LastEditTime: 2021-04-30 16:11:46 8 * @Description: This files is for 9 * 10 * @Modify History: 11 * Ver Who Date Changes 12 * ----- ------ -------- -------------------------------------- 13 */ 14 15 #ifndef FT_BSP_SPI_H 16 #define FT_BSP_SPI_H 17 18 #ifdef __cplusplus 19 extern "C" 20 { 21 #endif 22 23 #include "ft_types.h" 24 #include "ft_spi_hw.h" 25 #include "ft_error_code.h" 26 #include "ft_debug.h" 27 28 typedef struct 29 { 30 u8 WorkMode; 31 #define SPI_CTRL_MASTER_MODE (u8)0x0 32 #define SPI_CTRL_SLAVE_MODE (u8)0x1 33 u8 DevAddrLen; 34 #define SPI_3_BYTE_ADDR (u8)0x3 35 #define SPI_4_BYTE_ADDR (u8)0x4 36 u8 Cpol; 37 #define SPI_CTRL_CPOL_LOW (u8)0x0 38 #define SPI_CTRL_CPOL_HIGH (u8)0x1 39 u8 Cpha; 40 #define SPI_CTRL_CPHA_1EDGE (u8)0x0 41 #define SPI_CTRL_CPHA_2EDGE (u8)0x1 42 u8 DevAddr[4]; 43 u32 BaudRDiv; 44 } FSpi_Conf_t; 45 46 typedef struct 47 { 48 FSpi_Conf_t Config; 49 FSpi_CtrlId_t CtrlId; 50 FSpi_DevId_t DevId; /* support only one slave at the moment */ 51 bool_t IsReady; 52 u16 CsPin; /* cs pin in gpio group A */ 53 } FSpi_Ctrl_t; 54 55 /* misc marco */ 56 #define SPI_TIMEOUT 5000 57 #define SPI_DUMMY_TX_DATA 0xFF 58 59 /* ctrl member shortcut */ 60 #define FSPI_DEV_ADDR_LEN(pCtrl) (pCtrl->Config.DevAddrLen) 61 #define FSPI_IS_3_BYTE_ADDR(pCtrl) (SPI_3_BYTE_ADDR == FSPI_DEV_ADDR_LEN(pCtrl)) 62 #define FSPI_DEV_ADDR(pCtrl) (pCtrl->Config.DevAddr) 63 64 /* define error code */ 65 #define ERR_SPI_OK ERR_SUCCESS 66 #define ERR_SPI_GENERAL FT_CODE_ERR(ERR_MODE_SPI, 0, 1) 67 #define ERR_SPI_NOT_READY FT_CODE_ERR(ERR_MODE_SPI, 0, 2) 68 #define ERR_SPI_TX_TIMEOUT FT_CODE_ERR(ERR_MODE_SPI, 0, 3) 69 #define ERR_SPI_RX_TIMEOUT FT_CODE_ERR(ERR_MODE_SPI, 0, 4) 70 71 /* spi flash error code */ 72 #define ERR_SPI_WAIT_TIMEOUT FT_CODE_ERR(ERR_MODE_SPI, 1, 1) 73 74 /* define debug utilities */ 75 #define FT_SPI_DEBUG_TAG "FT_SPI" 76 #define FT_SPI_ENABLE_DEBUG 77 #define FT_SPI_ERROR(format, ...) FT_DEBUG_PRINT_E(FT_SPI_DEBUG_TAG, format, ##__VA_ARGS__) 78 #ifdef FT_SPI_ENABLE_DEBUG 79 #define FT_SPI_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FT_SPI_DEBUG_TAG, format, ##__VA_ARGS__) 80 #define FT_SPI_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FT_SPI_DEBUG_TAG, format, ##__VA_ARGS__) 81 #else 82 #define FT_SPI_DEBUG_I(format, ...) 83 #define FT_SPI_DEBUG_W(format, ...) 84 #endif 85 86 u32 FSpi_Init(FT_INOUT FSpi_Ctrl_t *pCtrl); 87 u32 FSpi_ReadWriteByte(FT_INOUT FSpi_Ctrl_t *pCtrl, FT_IN u8 TxData, 88 FT_OUT u8 *pRxData); 89 void FSpi_SelectSlave(FT_INOUT FSpi_Ctrl_t *pCtrl, FT_IN FSpi_DevId_t DevId, 90 FT_IN bool_t select); 91 #ifdef __cplusplus 92 } 93 #endif 94 95 #endif 96