Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: Hobbyking_Cheetah_Compact Hobbyking_Cheetah_Compact_DRV8323_14bit Hobbyking_Cheetah_Compact_DRV8323_V51_201907 HKC_MiniCheetah ... more
Fork of mbed-dev by
targets/TARGET_NUVOTON/TARGET_NANO100/device/StdDriver/nano100_spi.c@181:36facd806e4a, 2018-07-30 (annotated)
- Committer:
- benkatz
- Date:
- Mon Jul 30 20:31:44 2018 +0000
- Revision:
- 181:36facd806e4a
- Parent:
- 174:b96e65c34a4d
going on the robot. fixed a dumb bug in float_to_uint
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 174:b96e65c34a4d | 1 | /****************************************************************************//** |
AnnaBridge | 174:b96e65c34a4d | 2 | * @file spi.c |
AnnaBridge | 174:b96e65c34a4d | 3 | * @version V0.10 |
AnnaBridge | 174:b96e65c34a4d | 4 | * $Revision: 7 $ |
AnnaBridge | 174:b96e65c34a4d | 5 | * $Date: 15/05/28 1:33p $ |
AnnaBridge | 174:b96e65c34a4d | 6 | * @brief NANO100 series SPI driver source file |
AnnaBridge | 174:b96e65c34a4d | 7 | * |
AnnaBridge | 174:b96e65c34a4d | 8 | * @note |
AnnaBridge | 174:b96e65c34a4d | 9 | * Copyright (C) 2014 Nuvoton Technology Corp. All rights reserved. |
AnnaBridge | 174:b96e65c34a4d | 10 | *****************************************************************************/ |
AnnaBridge | 174:b96e65c34a4d | 11 | |
AnnaBridge | 174:b96e65c34a4d | 12 | #include "Nano100Series.h" |
AnnaBridge | 174:b96e65c34a4d | 13 | |
AnnaBridge | 174:b96e65c34a4d | 14 | /** @addtogroup NANO100_Device_Driver NANO100 Device Driver |
AnnaBridge | 174:b96e65c34a4d | 15 | @{ |
AnnaBridge | 174:b96e65c34a4d | 16 | */ |
AnnaBridge | 174:b96e65c34a4d | 17 | |
AnnaBridge | 174:b96e65c34a4d | 18 | /** @addtogroup NANO100_SPI_Driver SPI Driver |
AnnaBridge | 174:b96e65c34a4d | 19 | @{ |
AnnaBridge | 174:b96e65c34a4d | 20 | */ |
AnnaBridge | 174:b96e65c34a4d | 21 | |
AnnaBridge | 174:b96e65c34a4d | 22 | |
AnnaBridge | 174:b96e65c34a4d | 23 | /** @addtogroup NANO100_SPI_EXPORTED_FUNCTIONS SPI Exported Functions |
AnnaBridge | 174:b96e65c34a4d | 24 | @{ |
AnnaBridge | 174:b96e65c34a4d | 25 | */ |
AnnaBridge | 174:b96e65c34a4d | 26 | |
AnnaBridge | 174:b96e65c34a4d | 27 | /** |
AnnaBridge | 174:b96e65c34a4d | 28 | * @brief This function make SPI module be ready to transfer. |
AnnaBridge | 174:b96e65c34a4d | 29 | * By default, the SPI transfer sequence is MSB first and |
AnnaBridge | 174:b96e65c34a4d | 30 | * the automatic slave select function is disabled. In |
AnnaBridge | 174:b96e65c34a4d | 31 | * Slave mode, the u32BusClock must be NULL and the SPI clock |
AnnaBridge | 174:b96e65c34a4d | 32 | * divider setting will be 0. |
AnnaBridge | 174:b96e65c34a4d | 33 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 34 | * @param[in] u32MasterSlave decides the SPI module is operating in master mode or in slave mode. Valid values are: |
AnnaBridge | 174:b96e65c34a4d | 35 | * - \ref SPI_MASTER |
AnnaBridge | 174:b96e65c34a4d | 36 | * - \ref SPI_SLAVE |
AnnaBridge | 174:b96e65c34a4d | 37 | * @param[in] u32SPIMode decides the transfer timing. Valid values are: |
AnnaBridge | 174:b96e65c34a4d | 38 | * - \ref SPI_MODE_0 |
AnnaBridge | 174:b96e65c34a4d | 39 | * - \ref SPI_MODE_1 |
AnnaBridge | 174:b96e65c34a4d | 40 | * - \ref SPI_MODE_2 |
AnnaBridge | 174:b96e65c34a4d | 41 | * - \ref SPI_MODE_3 |
AnnaBridge | 174:b96e65c34a4d | 42 | * @param[in] u32DataWidth decides the data width of a SPI transaction. |
AnnaBridge | 174:b96e65c34a4d | 43 | * @param[in] u32BusClock is the expected frequency of SPI bus clock in Hz. |
AnnaBridge | 174:b96e65c34a4d | 44 | * @return Actual frequency of SPI peripheral clock. |
AnnaBridge | 174:b96e65c34a4d | 45 | */ |
AnnaBridge | 174:b96e65c34a4d | 46 | uint32_t SPI_Open(SPI_T *spi, |
AnnaBridge | 174:b96e65c34a4d | 47 | uint32_t u32MasterSlave, |
AnnaBridge | 174:b96e65c34a4d | 48 | uint32_t u32SPIMode, |
AnnaBridge | 174:b96e65c34a4d | 49 | uint32_t u32DataWidth, |
AnnaBridge | 174:b96e65c34a4d | 50 | uint32_t u32BusClock) |
AnnaBridge | 174:b96e65c34a4d | 51 | { |
AnnaBridge | 174:b96e65c34a4d | 52 | if(u32DataWidth == 32) |
AnnaBridge | 174:b96e65c34a4d | 53 | u32DataWidth = 0; |
AnnaBridge | 174:b96e65c34a4d | 54 | |
AnnaBridge | 174:b96e65c34a4d | 55 | spi->CTL = u32MasterSlave | (u32DataWidth << SPI_CTL_TX_BIT_LEN_Pos) | (u32SPIMode); |
AnnaBridge | 174:b96e65c34a4d | 56 | |
AnnaBridge | 174:b96e65c34a4d | 57 | return ( SPI_SetBusClock(spi, u32BusClock) ); |
AnnaBridge | 174:b96e65c34a4d | 58 | } |
AnnaBridge | 174:b96e65c34a4d | 59 | |
AnnaBridge | 174:b96e65c34a4d | 60 | /** |
AnnaBridge | 174:b96e65c34a4d | 61 | * @brief Reset SPI module and disable SPI peripheral clock. |
AnnaBridge | 174:b96e65c34a4d | 62 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 63 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 64 | */ |
AnnaBridge | 174:b96e65c34a4d | 65 | void SPI_Close(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 66 | { |
AnnaBridge | 174:b96e65c34a4d | 67 | /* Reset SPI */ |
AnnaBridge | 174:b96e65c34a4d | 68 | if(spi == SPI0) { |
AnnaBridge | 174:b96e65c34a4d | 69 | SYS->IPRST_CTL2 |= SYS_IPRST_CTL2_SPI0_RST_Msk; |
AnnaBridge | 174:b96e65c34a4d | 70 | SYS->IPRST_CTL2 &= ~SYS_IPRST_CTL2_SPI0_RST_Msk; |
AnnaBridge | 174:b96e65c34a4d | 71 | } else if(spi == SPI1) { |
AnnaBridge | 174:b96e65c34a4d | 72 | SYS->IPRST_CTL2 |= SYS_IPRST_CTL2_SPI1_RST_Msk; |
AnnaBridge | 174:b96e65c34a4d | 73 | SYS->IPRST_CTL2 &= ~SYS_IPRST_CTL2_SPI1_RST_Msk; |
AnnaBridge | 174:b96e65c34a4d | 74 | } else { |
AnnaBridge | 174:b96e65c34a4d | 75 | SYS->IPRST_CTL2 |= SYS_IPRST_CTL2_SPI2_RST_Msk; |
AnnaBridge | 174:b96e65c34a4d | 76 | SYS->IPRST_CTL2 &= ~SYS_IPRST_CTL2_SPI2_RST_Msk; |
AnnaBridge | 174:b96e65c34a4d | 77 | } |
AnnaBridge | 174:b96e65c34a4d | 78 | } |
AnnaBridge | 174:b96e65c34a4d | 79 | |
AnnaBridge | 174:b96e65c34a4d | 80 | /** |
AnnaBridge | 174:b96e65c34a4d | 81 | * @brief Clear Rx FIFO buffer. |
AnnaBridge | 174:b96e65c34a4d | 82 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 83 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 84 | */ |
AnnaBridge | 174:b96e65c34a4d | 85 | void SPI_ClearRxFIFO(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 86 | { |
AnnaBridge | 174:b96e65c34a4d | 87 | spi->FFCTL |= SPI_FFCTL_RX_CLR_Msk; |
AnnaBridge | 174:b96e65c34a4d | 88 | } |
AnnaBridge | 174:b96e65c34a4d | 89 | |
AnnaBridge | 174:b96e65c34a4d | 90 | /** |
AnnaBridge | 174:b96e65c34a4d | 91 | * @brief Clear Tx FIFO buffer. |
AnnaBridge | 174:b96e65c34a4d | 92 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 93 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 94 | */ |
AnnaBridge | 174:b96e65c34a4d | 95 | void SPI_ClearTxFIFO(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 96 | { |
AnnaBridge | 174:b96e65c34a4d | 97 | spi->FFCTL |= SPI_FFCTL_TX_CLR_Msk; |
AnnaBridge | 174:b96e65c34a4d | 98 | } |
AnnaBridge | 174:b96e65c34a4d | 99 | |
AnnaBridge | 174:b96e65c34a4d | 100 | /** |
AnnaBridge | 174:b96e65c34a4d | 101 | * @brief Disable the automatic slave select function. |
AnnaBridge | 174:b96e65c34a4d | 102 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 103 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 104 | */ |
AnnaBridge | 174:b96e65c34a4d | 105 | void SPI_DisableAutoSS(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 106 | { |
AnnaBridge | 174:b96e65c34a4d | 107 | spi->SSR &= ~SPI_SSR_AUTOSS_Msk; |
AnnaBridge | 174:b96e65c34a4d | 108 | } |
AnnaBridge | 174:b96e65c34a4d | 109 | |
AnnaBridge | 174:b96e65c34a4d | 110 | /** |
AnnaBridge | 174:b96e65c34a4d | 111 | * @brief Enable the automatic slave select function. Only available in Master mode. |
AnnaBridge | 174:b96e65c34a4d | 112 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 113 | * @param[in] u32SSPinMask specifies slave select pins. (SPI_SS) |
AnnaBridge | 174:b96e65c34a4d | 114 | * @param[in] u32ActiveLevel specifies the active level of slave select signal. Valid values are: |
AnnaBridge | 174:b96e65c34a4d | 115 | * - \ref SPI_SS0_ACTIVE_HIGH |
AnnaBridge | 174:b96e65c34a4d | 116 | * - \ref SPI_SS0_ACTIVE_LOW |
AnnaBridge | 174:b96e65c34a4d | 117 | * - \ref SPI_SS1_ACTIVE_HIGH |
AnnaBridge | 174:b96e65c34a4d | 118 | * - \ref SPI_SS1_ACTIVE_LOW |
AnnaBridge | 174:b96e65c34a4d | 119 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 120 | */ |
AnnaBridge | 174:b96e65c34a4d | 121 | void SPI_EnableAutoSS(SPI_T *spi, uint32_t u32SSPinMask, uint32_t u32ActiveLevel) |
AnnaBridge | 174:b96e65c34a4d | 122 | { |
AnnaBridge | 174:b96e65c34a4d | 123 | spi->SSR = (spi->SSR & ~(SPI_SSR_SS_LVL_Msk | SPI_SSR_SSR_Msk)) | (u32SSPinMask | u32ActiveLevel) | SPI_SSR_AUTOSS_Msk; |
AnnaBridge | 174:b96e65c34a4d | 124 | } |
AnnaBridge | 174:b96e65c34a4d | 125 | |
AnnaBridge | 174:b96e65c34a4d | 126 | /** |
AnnaBridge | 174:b96e65c34a4d | 127 | * @brief Set the SPI bus clock. Only available in Master mode. |
AnnaBridge | 174:b96e65c34a4d | 128 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 129 | * @param[in] u32BusClock is the expected frequency of SPI bus clock. |
AnnaBridge | 174:b96e65c34a4d | 130 | * @return Actual frequency of SPI peripheral clock. |
AnnaBridge | 174:b96e65c34a4d | 131 | */ |
AnnaBridge | 174:b96e65c34a4d | 132 | uint32_t SPI_SetBusClock(SPI_T *spi, uint32_t u32BusClock) |
AnnaBridge | 174:b96e65c34a4d | 133 | { |
AnnaBridge | 174:b96e65c34a4d | 134 | uint32_t u32ClkSrc, u32Div = 0; |
AnnaBridge | 174:b96e65c34a4d | 135 | |
AnnaBridge | 174:b96e65c34a4d | 136 | if(spi == SPI0) { |
AnnaBridge | 174:b96e65c34a4d | 137 | if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0_S_Msk) == CLK_CLKSEL2_SPI0_S_HCLK) |
AnnaBridge | 174:b96e65c34a4d | 138 | u32ClkSrc = CLK_GetHCLKFreq(); |
AnnaBridge | 174:b96e65c34a4d | 139 | else |
AnnaBridge | 174:b96e65c34a4d | 140 | u32ClkSrc = CLK_GetPLLClockFreq(); |
AnnaBridge | 174:b96e65c34a4d | 141 | } else if(spi == SPI1) { |
AnnaBridge | 174:b96e65c34a4d | 142 | if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1_S_Msk) == CLK_CLKSEL2_SPI1_S_HCLK) |
AnnaBridge | 174:b96e65c34a4d | 143 | u32ClkSrc = CLK_GetHCLKFreq(); |
AnnaBridge | 174:b96e65c34a4d | 144 | else |
AnnaBridge | 174:b96e65c34a4d | 145 | u32ClkSrc = CLK_GetPLLClockFreq(); |
AnnaBridge | 174:b96e65c34a4d | 146 | } else { |
AnnaBridge | 174:b96e65c34a4d | 147 | if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2_S_Msk) == CLK_CLKSEL2_SPI2_S_HCLK) |
AnnaBridge | 174:b96e65c34a4d | 148 | u32ClkSrc = CLK_GetHCLKFreq(); |
AnnaBridge | 174:b96e65c34a4d | 149 | else |
AnnaBridge | 174:b96e65c34a4d | 150 | u32ClkSrc = CLK_GetPLLClockFreq(); |
AnnaBridge | 174:b96e65c34a4d | 151 | } |
AnnaBridge | 174:b96e65c34a4d | 152 | |
AnnaBridge | 174:b96e65c34a4d | 153 | if(u32BusClock > u32ClkSrc) |
AnnaBridge | 174:b96e65c34a4d | 154 | u32BusClock = u32ClkSrc; |
AnnaBridge | 174:b96e65c34a4d | 155 | |
AnnaBridge | 174:b96e65c34a4d | 156 | if(u32BusClock != 0 ) { |
AnnaBridge | 174:b96e65c34a4d | 157 | u32Div = (u32ClkSrc / u32BusClock) - 1; |
AnnaBridge | 174:b96e65c34a4d | 158 | if(u32Div > SPI_CLKDIV_DIVIDER1_Msk) |
AnnaBridge | 174:b96e65c34a4d | 159 | u32Div = SPI_CLKDIV_DIVIDER1_Msk; |
AnnaBridge | 174:b96e65c34a4d | 160 | } else |
AnnaBridge | 174:b96e65c34a4d | 161 | u32Div = 0; |
AnnaBridge | 174:b96e65c34a4d | 162 | |
AnnaBridge | 174:b96e65c34a4d | 163 | spi->CLKDIV = (spi->CLKDIV & ~SPI_CLKDIV_DIVIDER1_Msk) | u32Div; |
AnnaBridge | 174:b96e65c34a4d | 164 | |
AnnaBridge | 174:b96e65c34a4d | 165 | return ( u32ClkSrc / (u32Div+1) ); |
AnnaBridge | 174:b96e65c34a4d | 166 | } |
AnnaBridge | 174:b96e65c34a4d | 167 | |
AnnaBridge | 174:b96e65c34a4d | 168 | /** |
AnnaBridge | 174:b96e65c34a4d | 169 | * @brief Enable FIFO mode with user-specified Tx FIFO threshold and Rx FIFO threshold configurations. |
AnnaBridge | 174:b96e65c34a4d | 170 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 171 | * @param[in] u32TxThreshold decides the Tx FIFO threshold. |
AnnaBridge | 174:b96e65c34a4d | 172 | * @param[in] u32RxThreshold decides the Rx FIFO threshold. |
AnnaBridge | 174:b96e65c34a4d | 173 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 174 | */ |
AnnaBridge | 174:b96e65c34a4d | 175 | void SPI_EnableFIFO(SPI_T *spi, uint32_t u32TxThreshold, uint32_t u32RxThreshold) |
AnnaBridge | 174:b96e65c34a4d | 176 | { |
AnnaBridge | 174:b96e65c34a4d | 177 | spi->FFCTL = (spi->FFCTL & ~(SPI_FFCTL_TX_THRESHOLD_Msk | SPI_FFCTL_RX_THRESHOLD_Msk) | |
AnnaBridge | 174:b96e65c34a4d | 178 | (u32TxThreshold << SPI_FFCTL_TX_THRESHOLD_Pos) | |
AnnaBridge | 174:b96e65c34a4d | 179 | (u32RxThreshold << SPI_FFCTL_RX_THRESHOLD_Pos)); |
AnnaBridge | 174:b96e65c34a4d | 180 | |
AnnaBridge | 174:b96e65c34a4d | 181 | spi->CTL |= SPI_CTL_FIFOM_Msk; |
AnnaBridge | 174:b96e65c34a4d | 182 | } |
AnnaBridge | 174:b96e65c34a4d | 183 | |
AnnaBridge | 174:b96e65c34a4d | 184 | /** |
AnnaBridge | 174:b96e65c34a4d | 185 | * @brief Disable FIFO mode. |
AnnaBridge | 174:b96e65c34a4d | 186 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 187 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 188 | */ |
AnnaBridge | 174:b96e65c34a4d | 189 | void SPI_DisableFIFO(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 190 | { |
AnnaBridge | 174:b96e65c34a4d | 191 | spi->CTL &= ~SPI_CTL_FIFOM_Msk; |
AnnaBridge | 174:b96e65c34a4d | 192 | } |
AnnaBridge | 174:b96e65c34a4d | 193 | |
AnnaBridge | 174:b96e65c34a4d | 194 | /** |
AnnaBridge | 174:b96e65c34a4d | 195 | * @brief Get the actual frequency of SPI bus clock. Only available in Master mode. |
AnnaBridge | 174:b96e65c34a4d | 196 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 197 | * @return Actual SPI bus clock frequency. |
AnnaBridge | 174:b96e65c34a4d | 198 | */ |
AnnaBridge | 174:b96e65c34a4d | 199 | uint32_t SPI_GetBusClock(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 200 | { |
AnnaBridge | 174:b96e65c34a4d | 201 | uint32_t u32Div; |
AnnaBridge | 174:b96e65c34a4d | 202 | uint32_t u32ClkSrc; |
AnnaBridge | 174:b96e65c34a4d | 203 | |
AnnaBridge | 174:b96e65c34a4d | 204 | if(spi == SPI0) { |
AnnaBridge | 174:b96e65c34a4d | 205 | if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0_S_Msk) == CLK_CLKSEL2_SPI0_S_HCLK) |
AnnaBridge | 174:b96e65c34a4d | 206 | u32ClkSrc = CLK_GetHCLKFreq(); |
AnnaBridge | 174:b96e65c34a4d | 207 | else |
AnnaBridge | 174:b96e65c34a4d | 208 | u32ClkSrc = CLK_GetPLLClockFreq(); |
AnnaBridge | 174:b96e65c34a4d | 209 | } else if(spi == SPI1) { |
AnnaBridge | 174:b96e65c34a4d | 210 | if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1_S_Msk) == CLK_CLKSEL2_SPI1_S_HCLK) |
AnnaBridge | 174:b96e65c34a4d | 211 | u32ClkSrc = CLK_GetHCLKFreq(); |
AnnaBridge | 174:b96e65c34a4d | 212 | else |
AnnaBridge | 174:b96e65c34a4d | 213 | u32ClkSrc = CLK_GetPLLClockFreq(); |
AnnaBridge | 174:b96e65c34a4d | 214 | } else { |
AnnaBridge | 174:b96e65c34a4d | 215 | if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2_S_Msk) == CLK_CLKSEL2_SPI2_S_HCLK) |
AnnaBridge | 174:b96e65c34a4d | 216 | u32ClkSrc = CLK_GetHCLKFreq(); |
AnnaBridge | 174:b96e65c34a4d | 217 | else |
AnnaBridge | 174:b96e65c34a4d | 218 | u32ClkSrc = CLK_GetPLLClockFreq(); |
AnnaBridge | 174:b96e65c34a4d | 219 | } |
AnnaBridge | 174:b96e65c34a4d | 220 | |
AnnaBridge | 174:b96e65c34a4d | 221 | u32Div = spi->CLKDIV & SPI_CLKDIV_DIVIDER1_Msk; |
AnnaBridge | 174:b96e65c34a4d | 222 | return (u32ClkSrc / (u32Div + 1)); |
AnnaBridge | 174:b96e65c34a4d | 223 | } |
AnnaBridge | 174:b96e65c34a4d | 224 | |
AnnaBridge | 174:b96e65c34a4d | 225 | /** |
AnnaBridge | 174:b96e65c34a4d | 226 | * @brief Enable FIFO related interrupts specified by u32Mask parameter. |
AnnaBridge | 174:b96e65c34a4d | 227 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 228 | * @param[in] u32Mask is the combination of all related interrupt enable bits. |
AnnaBridge | 174:b96e65c34a4d | 229 | * Each bit corresponds to a interrupt bit. |
AnnaBridge | 174:b96e65c34a4d | 230 | * This parameter decides which interrupts will be enabled. Valid values are: |
AnnaBridge | 174:b96e65c34a4d | 231 | * - \ref SPI_IE_MASK |
AnnaBridge | 174:b96e65c34a4d | 232 | * - \ref SPI_SSTA_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 233 | * - \ref SPI_FIFO_TX_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 234 | * - \ref SPI_FIFO_RX_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 235 | * - \ref SPI_FIFO_RXOVR_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 236 | * - \ref SPI_FIFO_TIMEOUT_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 237 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 238 | */ |
AnnaBridge | 174:b96e65c34a4d | 239 | void SPI_EnableInt(SPI_T *spi, uint32_t u32Mask) |
AnnaBridge | 174:b96e65c34a4d | 240 | { |
AnnaBridge | 174:b96e65c34a4d | 241 | if((u32Mask & SPI_IE_MASK) == SPI_IE_MASK) |
AnnaBridge | 174:b96e65c34a4d | 242 | spi->CTL |= SPI_CTL_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 243 | |
AnnaBridge | 174:b96e65c34a4d | 244 | if((u32Mask & SPI_SSTA_INTEN_MASK) == SPI_SSTA_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 245 | spi->SSR |= SPI_SSR_SSTA_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 246 | |
AnnaBridge | 174:b96e65c34a4d | 247 | if((u32Mask & SPI_FIFO_TX_INTEN_MASK) == SPI_FIFO_TX_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 248 | spi->FFCTL |= SPI_FFCTL_TX_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 249 | |
AnnaBridge | 174:b96e65c34a4d | 250 | if((u32Mask & SPI_FIFO_RX_INTEN_MASK) == SPI_FIFO_RX_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 251 | spi->FFCTL |= SPI_FFCTL_RX_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 252 | |
AnnaBridge | 174:b96e65c34a4d | 253 | if((u32Mask & SPI_FIFO_RXOVR_INTEN_MASK) == SPI_FIFO_RXOVR_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 254 | spi->FFCTL |= SPI_FFCTL_RXOVR_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 255 | |
AnnaBridge | 174:b96e65c34a4d | 256 | if((u32Mask & SPI_FIFO_TIMEOUT_INTEN_MASK) == SPI_FIFO_TIMEOUT_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 257 | spi->FFCTL |= SPI_FFCTL_TIMEOUT_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 258 | } |
AnnaBridge | 174:b96e65c34a4d | 259 | |
AnnaBridge | 174:b96e65c34a4d | 260 | /** |
AnnaBridge | 174:b96e65c34a4d | 261 | * @brief Disable FIFO related interrupts specified by u32Mask parameter. |
AnnaBridge | 174:b96e65c34a4d | 262 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 263 | * @param[in] u32Mask is the combination of all related interrupt enable bits. |
AnnaBridge | 174:b96e65c34a4d | 264 | * Each bit corresponds to a interrupt bit. |
AnnaBridge | 174:b96e65c34a4d | 265 | * This parameter decides which interrupts will be enabled. Valid values are: |
AnnaBridge | 174:b96e65c34a4d | 266 | * - \ref SPI_IE_MASK |
AnnaBridge | 174:b96e65c34a4d | 267 | * - \ref SPI_SSTA_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 268 | * - \ref SPI_FIFO_TX_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 269 | * - \ref SPI_FIFO_RX_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 270 | * - \ref SPI_FIFO_RXOVR_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 271 | * - \ref SPI_FIFO_TIMEOUT_INTEN_MASK |
AnnaBridge | 174:b96e65c34a4d | 272 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 273 | */ |
AnnaBridge | 174:b96e65c34a4d | 274 | void SPI_DisableInt(SPI_T *spi, uint32_t u32Mask) |
AnnaBridge | 174:b96e65c34a4d | 275 | { |
AnnaBridge | 174:b96e65c34a4d | 276 | if((u32Mask & SPI_IE_MASK) == SPI_IE_MASK) |
AnnaBridge | 174:b96e65c34a4d | 277 | spi->CTL &= ~SPI_CTL_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 278 | |
AnnaBridge | 174:b96e65c34a4d | 279 | if((u32Mask & SPI_SSTA_INTEN_MASK) == SPI_SSTA_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 280 | spi->SSR &= ~SPI_SSR_SSTA_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 281 | |
AnnaBridge | 174:b96e65c34a4d | 282 | if((u32Mask & SPI_FIFO_TX_INTEN_MASK) == SPI_FIFO_TX_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 283 | spi->FFCTL &= ~SPI_FFCTL_TX_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 284 | |
AnnaBridge | 174:b96e65c34a4d | 285 | if((u32Mask & SPI_FIFO_RX_INTEN_MASK) == SPI_FIFO_RX_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 286 | spi->FFCTL &= ~SPI_FFCTL_RX_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 287 | |
AnnaBridge | 174:b96e65c34a4d | 288 | if((u32Mask & SPI_FIFO_RXOVR_INTEN_MASK) == SPI_FIFO_RXOVR_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 289 | spi->FFCTL &= ~SPI_FFCTL_RXOVR_INTEN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 290 | |
AnnaBridge | 174:b96e65c34a4d | 291 | if((u32Mask & SPI_FIFO_TIMEOUT_INTEN_MASK) == SPI_FIFO_TIMEOUT_INTEN_MASK) |
AnnaBridge | 174:b96e65c34a4d | 292 | spi->FFCTL &= ~SPI_FFCTL_TIMEOUT_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 293 | } |
AnnaBridge | 174:b96e65c34a4d | 294 | |
AnnaBridge | 174:b96e65c34a4d | 295 | /** |
AnnaBridge | 174:b96e65c34a4d | 296 | * @brief Enable wake-up function. |
AnnaBridge | 174:b96e65c34a4d | 297 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 298 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 299 | */ |
AnnaBridge | 174:b96e65c34a4d | 300 | void SPI_EnableWakeup(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 301 | { |
AnnaBridge | 174:b96e65c34a4d | 302 | spi->CTL |= SPI_CTL_WKEUP_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 303 | } |
AnnaBridge | 174:b96e65c34a4d | 304 | |
AnnaBridge | 174:b96e65c34a4d | 305 | /** |
AnnaBridge | 174:b96e65c34a4d | 306 | * @brief Disable wake-up function. |
AnnaBridge | 174:b96e65c34a4d | 307 | * @param[in] spi is the base address of SPI module. |
AnnaBridge | 174:b96e65c34a4d | 308 | * @return none |
AnnaBridge | 174:b96e65c34a4d | 309 | */ |
AnnaBridge | 174:b96e65c34a4d | 310 | void SPI_DisableWakeup(SPI_T *spi) |
AnnaBridge | 174:b96e65c34a4d | 311 | { |
AnnaBridge | 174:b96e65c34a4d | 312 | spi->CTL &= ~SPI_CTL_WKEUP_EN_Msk; |
AnnaBridge | 174:b96e65c34a4d | 313 | } |
AnnaBridge | 174:b96e65c34a4d | 314 | |
AnnaBridge | 174:b96e65c34a4d | 315 | /*@}*/ /* end of group NANO100_SPI_EXPORTED_FUNCTIONS */ |
AnnaBridge | 174:b96e65c34a4d | 316 | |
AnnaBridge | 174:b96e65c34a4d | 317 | /*@}*/ /* end of group NANO100_SPI_Driver */ |
AnnaBridge | 174:b96e65c34a4d | 318 | |
AnnaBridge | 174:b96e65c34a4d | 319 | /*@}*/ /* end of group NANO100_Device_Driver */ |
AnnaBridge | 174:b96e65c34a4d | 320 | |
AnnaBridge | 174:b96e65c34a4d | 321 | /*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/ |