1 /****************************************************************************** 2 * Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. 3 * 4 * This software is owned and published by: 5 * Huada Semiconductor Co.,Ltd ("HDSC"). 6 * 7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND 8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. 9 * 10 * This software contains source code for use with HDSC 11 * components. This software is licensed by HDSC to be adapted only 12 * for use in systems utilizing HDSC components. HDSC shall not be 13 * responsible for misuse or illegal use of this software for devices not 14 * supported herein. HDSC is providing this software "AS IS" and will 15 * not be responsible for issues arising from incorrect user implementation 16 * of the software. 17 * 18 * Disclaimer: 19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED , ARISING BY LAW OR OTHERWISE, 20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), 21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, 22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED 23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED 24 * WARRANTY OF NONINFRINGEMENT. 25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, 26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT 27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, 28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR 29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, 30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, 31 * SAVINGS OR PROFITS, 32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR 34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED 35 * FROM, THE SOFTWARE. 36 * 37 * This software may be replicated in part or whole for the licensed use, 38 * with the restriction that this Disclaimer and Copyright notice must be 39 * included with each copy of this software, whether used in part or whole, 40 * at all times. 41 */ 42 /*****************************************************************************/ 43 /** \file spi.h 44 ** 45 ** Headerfile for SPI functions 46 ** 47 ** 48 ** History: 49 ** - 2017-05-17 1.0 Devi First Version 50 ** 51 *****************************************************************************/ 52 #ifndef __SPI_H__ 53 #define __SPI_H__ 54 55 /****************************************************************************** 56 * Include files 57 *****************************************************************************/ 58 #include "ddl.h" 59 #include "interrupts_hc32l136.h" 60 61 /* C binding of definitions if building with C++ compiler */ 62 #ifdef __cplusplus 63 extern "C" 64 { 65 #endif 66 67 //@{ 68 69 /****************************************************************************** 70 * Global type definitions 71 *****************************************************************************/ 72 /** 73 ****************************************************************************** 74 ** \brief SPI 功能通道选择设置 75 ******************************************************************************/ 76 typedef enum en_spi_channel 77 { 78 Spi0 = 0u, ///< SPI通道0 79 Spi1 = 1u, ///< SPI通道1 80 }en_spi_channel_t; 81 /** 82 ****************************************************************************** 83 ** \brief SPI 功能使能设置 84 ******************************************************************************/ 85 typedef enum en_spi_en 86 { 87 SpiEnable = 1u, ///< SPI模块使能 88 SpiDisable = 0u, ///< SPI模块禁止 89 }en_spi_en_t; 90 /** 91 ****************************************************************************** 92 ** \brief SPI 模式配置 93 ******************************************************************************/ 94 typedef enum en_spi_mode 95 { 96 SpiMaster = 1u, ///<主机 97 SpiSlave = 0u, ///<从机 98 }en_spi_mode_t; 99 /** 100 ****************************************************************************** 101 ** \brief SPI 时钟极性设置 102 ******************************************************************************/ 103 typedef enum en_spi_cpol 104 { 105 Spicpollow = 0u, ///<极性为低 106 Spicpolhigh = 1u, ///<极性为高 107 }en_spi_cpol_t; 108 /** 109 ****************************************************************************** 110 ** \brief SPI 时钟相位设置 111 ******************************************************************************/ 112 typedef enum en_spi_cpha 113 { 114 Spicphafirst = 0u, ///<第一边沿采样 115 Spicphasecond = 1u, ///<第二边沿采样 116 }en_spi_cpha_t; 117 /** 118 ****************************************************************************** 119 ** \brief SPI 时钟分频配置 120 *****************************************************************************/ 121 typedef enum en_spi_clk_div 122 { 123 SpiClkDiv2 = 0u, ///<2分频 124 SpiClkDiv4 = 1u, ///<4分频 125 SpiClkDiv8 = 2u, ///<8分频 126 SpiClkDiv16 = 3u, ///<16分频 127 SpiClkDiv32 = 4u, ///<32分频 128 SpiClkDiv64 = 5u, ///<64分频 129 SpiClkDiv128 = 6u, ///<128分频 130 }en_spi_clk_div_t; 131 132 /** 133 ****************************************************************************** 134 ** \brief SPI 片选脚电平选择 135 *****************************************************************************/ 136 typedef enum en_spi_cspin 137 { 138 SpiCsLow = 0u, ///<片选低电平 139 SpiCsHigh = 1u, ///<片选高电平 140 }en_spi_cspin_t; 141 142 /** 143 ****************************************************************************** 144 ** \brief SPI 状态 145 *****************************************************************************/ 146 typedef enum en_spi_status 147 { 148 SpiIf = 0x80, ///<传输结束中断标志 149 SpiSserr = 0x20, ///<从机模式错误标志 150 SpiMdf = 0x10, ///<主机模式错误标志 151 SpiBusy = 0x08, ///<SPI总线忙标志 152 SpiTxe = 0x04, ///<发送缓冲器器空标志 153 SpiRxne = 0x02, ///<接受缓冲器非空标志 154 }en_spi_status_t; 155 /** 156 ****************************************************************************** 157 ** \brief SPI 功能开启函数 158 *****************************************************************************/ 159 typedef enum en_spi_func 160 { 161 SpiRxNeIe = 0x40, ///<接收缓冲器非空中断使能 162 SpiTxEIe = 0x20, ///<发送缓冲器空中断使能 163 SpiDmaTxEn = 0x10, ///<DMA硬件访问发送使能 164 SpiDmaRxEn = 0x08, ///<DMA硬件访问接收使能 165 }en_spi_func_t; 166 /** 167 ****************************************************************************** 168 ** \brief SPI 总体配置结构体 169 *****************************************************************************/ 170 typedef struct stc_spi_config 171 { 172 boolean_t bMasterMode; ///< 主从模式选择 173 uint8_t u8BaudRate; ///< 波特率设置 174 boolean_t bCPOL; ///< 时钟极性选择 175 boolean_t bCPHA; ///< 时钟相位选择 176 boolean_t bIrqEn; ///< 中断使能 177 func_ptr_t pfnSpi0IrqCb; ///< 中断回调函数 178 func_ptr_t pfnSpi1IrqCb; ///< 中断回调函数 179 }stc_spi_config_t; 180 181 //SPI 中断 182 void Spi_IRQHandler(en_spi_channel_t enCh); 183 184 //SPI 获取状态 185 uint8_t Spi_GetState(en_spi_channel_t enCh); 186 boolean_t Spi_GetStatus(en_spi_channel_t enCh,en_spi_status_t enStatus); 187 //SPI 清除中断标记 188 en_result_t Spi_ClearStatus(en_spi_channel_t enCh); 189 //SPI初始化函数 190 en_result_t Spi_Init(en_spi_channel_t enCh,stc_spi_config_t* pstcSpiConfig); 191 //SPI 功能使能禁止函数 192 en_result_t Spi_FuncEn(en_spi_channel_t enCh,en_spi_func_t enFunc,boolean_t bFlag); 193 //SPI关闭函数 194 en_result_t Spi_DeInit(en_spi_channel_t enCh); 195 //SPI 配置主发送的电平 196 void Spi_SetCS(en_spi_channel_t enCh,boolean_t bFlag); 197 //SPI 发送数据 198 en_result_t Spi_SendData(en_spi_channel_t enCh,uint8_t u8Data); 199 //SPI 主机接收数据 200 uint8_t Spi_ReceiveData(en_spi_channel_t enCh,boolean_t bMasterOrSlave); 201 202 //@} // Spi Group 203 204 #ifdef __cplusplus 205 } 206 #endif 207 208 #endif /* __SPI_H__ */ 209 /****************************************************************************** 210 * EOF (not truncated) 211 *****************************************************************************/ 212 213