The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /**
AnnaBridge 171:3a7713b1edbc 2 * @file
AnnaBridge 171:3a7713b1edbc 3 * @brief Registers, Bit Masks and Bit Positions for the SPI Master module.
AnnaBridge 171:3a7713b1edbc 4 */
AnnaBridge 171:3a7713b1edbc 5 /* ****************************************************************************
AnnaBridge 171:3a7713b1edbc 6 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
AnnaBridge 171:3a7713b1edbc 7 *
AnnaBridge 171:3a7713b1edbc 8 * Permission is hereby granted, free of charge, to any person obtaining a
AnnaBridge 171:3a7713b1edbc 9 * copy of this software and associated documentation files (the "Software"),
AnnaBridge 171:3a7713b1edbc 10 * to deal in the Software without restriction, including without limitation
AnnaBridge 171:3a7713b1edbc 11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
AnnaBridge 171:3a7713b1edbc 12 * and/or sell copies of the Software, and to permit persons to whom the
AnnaBridge 171:3a7713b1edbc 13 * Software is furnished to do so, subject to the following conditions:
AnnaBridge 171:3a7713b1edbc 14 *
AnnaBridge 171:3a7713b1edbc 15 * The above copyright notice and this permission notice shall be included
AnnaBridge 171:3a7713b1edbc 16 * in all copies or substantial portions of the Software.
AnnaBridge 171:3a7713b1edbc 17 *
AnnaBridge 171:3a7713b1edbc 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
AnnaBridge 171:3a7713b1edbc 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
AnnaBridge 171:3a7713b1edbc 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
AnnaBridge 171:3a7713b1edbc 21 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
AnnaBridge 171:3a7713b1edbc 22 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
AnnaBridge 171:3a7713b1edbc 23 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
AnnaBridge 171:3a7713b1edbc 24 * OTHER DEALINGS IN THE SOFTWARE.
AnnaBridge 171:3a7713b1edbc 25 *
AnnaBridge 171:3a7713b1edbc 26 * Except as contained in this notice, the name of Maxim Integrated
AnnaBridge 171:3a7713b1edbc 27 * Products, Inc. shall not be used except as stated in the Maxim Integrated
AnnaBridge 171:3a7713b1edbc 28 * Products, Inc. Branding Policy.
AnnaBridge 171:3a7713b1edbc 29 *
AnnaBridge 171:3a7713b1edbc 30 * The mere transfer of this software does not imply any licenses
AnnaBridge 171:3a7713b1edbc 31 * of trade secrets, proprietary technology, copyrights, patents,
AnnaBridge 171:3a7713b1edbc 32 * trademarks, maskwork rights, or any other form of intellectual
AnnaBridge 171:3a7713b1edbc 33 * property whatsoever. Maxim Integrated Products, Inc. retains all
AnnaBridge 171:3a7713b1edbc 34 * ownership rights.
AnnaBridge 171:3a7713b1edbc 35 *
AnnaBridge 171:3a7713b1edbc 36 * $Date: 2016-10-10 19:42:44 -0500 (Mon, 10 Oct 2016) $
AnnaBridge 171:3a7713b1edbc 37 * $Revision: 24672 $
AnnaBridge 171:3a7713b1edbc 38 *
AnnaBridge 171:3a7713b1edbc 39 **************************************************************************** */
AnnaBridge 171:3a7713b1edbc 40
AnnaBridge 171:3a7713b1edbc 41 /* **** Includes **** */
AnnaBridge 171:3a7713b1edbc 42 #include "mxc_config.h"
AnnaBridge 171:3a7713b1edbc 43 #include "mxc_sys.h"
AnnaBridge 171:3a7713b1edbc 44 #include "spim_regs.h"
AnnaBridge 171:3a7713b1edbc 45
AnnaBridge 171:3a7713b1edbc 46 /* Define to prevent redundant inclusion */
AnnaBridge 171:3a7713b1edbc 47 #ifndef _SPIM_H_
AnnaBridge 171:3a7713b1edbc 48 #define _SPIM_H_
AnnaBridge 171:3a7713b1edbc 49
AnnaBridge 171:3a7713b1edbc 50 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 51 extern "C" {
AnnaBridge 171:3a7713b1edbc 52 #endif
AnnaBridge 171:3a7713b1edbc 53 /**
AnnaBridge 171:3a7713b1edbc 54 * @ingroup commperipherals
AnnaBridge 171:3a7713b1edbc 55 * @defgroup spi_comm SPI
AnnaBridge 171:3a7713b1edbc 56 * @brief SPI Master and Slave Communication Peripherals
AnnaBridge 171:3a7713b1edbc 57 */
AnnaBridge 171:3a7713b1edbc 58
AnnaBridge 171:3a7713b1edbc 59 /**
AnnaBridge 171:3a7713b1edbc 60 * @ingroup spi_comm
AnnaBridge 171:3a7713b1edbc 61 * @defgroup spim SPI Master
AnnaBridge 171:3a7713b1edbc 62 * @brief Serial Peripheral Interface Master (SPIM) Communications
AnnaBridge 171:3a7713b1edbc 63 * Interface.
AnnaBridge 171:3a7713b1edbc 64 * @{
AnnaBridge 171:3a7713b1edbc 65 */
AnnaBridge 171:3a7713b1edbc 66
AnnaBridge 171:3a7713b1edbc 67 /* **** Definitions **** */
AnnaBridge 171:3a7713b1edbc 68
AnnaBridge 171:3a7713b1edbc 69 /**
AnnaBridge 171:3a7713b1edbc 70 * Enumeration type for selecting the active levels for the SPI Master Slave Select (SS) lines.
AnnaBridge 171:3a7713b1edbc 71 */
AnnaBridge 171:3a7713b1edbc 72 typedef enum {
AnnaBridge 171:3a7713b1edbc 73 SPIM_SSEL0_HIGH = (0x1 << 0), /**< Slave Select 0 High. */
AnnaBridge 171:3a7713b1edbc 74 SPIM_SSEL0_LOW = 0, /**< Slave Select 0 Low. */
AnnaBridge 171:3a7713b1edbc 75 SPIM_SSEL1_HIGH = (0x1 << 1), /**< Slave Select 1 High. */
AnnaBridge 171:3a7713b1edbc 76 SPIM_SSEL1_LOW = 0, /**< Slave Select 1 Low. */
AnnaBridge 171:3a7713b1edbc 77 SPIM_SSEL2_HIGH = (0x1 << 2), /**< Slave Select 2 High. */
AnnaBridge 171:3a7713b1edbc 78 SPIM_SSEL2_LOW = 0, /**< Slave Select 2 Low. */
AnnaBridge 171:3a7713b1edbc 79 SPIM_SSEL3_HIGH = (0x1 << 3), /**< Slave Select 3 High. */
AnnaBridge 171:3a7713b1edbc 80 SPIM_SSEL3_LOW = 0, /**< Slave Select 3 Low. */
AnnaBridge 171:3a7713b1edbc 81 SPIM_SSEL4_HIGH = (0x1 << 4), /**< Slave Select 4 High. */
AnnaBridge 171:3a7713b1edbc 82 SPIM_SSEL4_LOW = 0 /**< Slave Select 4 Low. */
AnnaBridge 171:3a7713b1edbc 83 }
AnnaBridge 171:3a7713b1edbc 84 spim_ssel_t;
AnnaBridge 171:3a7713b1edbc 85
AnnaBridge 171:3a7713b1edbc 86 /**
AnnaBridge 171:3a7713b1edbc 87 * Enumeration type for setting the number data lines to use for communication.
AnnaBridge 171:3a7713b1edbc 88 */
AnnaBridge 171:3a7713b1edbc 89 typedef enum {
AnnaBridge 171:3a7713b1edbc 90 SPIM_WIDTH_1 = 0, /**< 1 Data Line. */
AnnaBridge 171:3a7713b1edbc 91 SPIM_WIDTH_2 = 1, /**< 2 Data Lines (x2). */
AnnaBridge 171:3a7713b1edbc 92 SPIM_WIDTH_4 = 2 /**< 4 Data Lines (x4). */
AnnaBridge 171:3a7713b1edbc 93 } spim_width_t;
AnnaBridge 171:3a7713b1edbc 94
AnnaBridge 171:3a7713b1edbc 95 /**
AnnaBridge 171:3a7713b1edbc 96 * Structure type for configuring a SPIM port.
AnnaBridge 171:3a7713b1edbc 97 */
AnnaBridge 171:3a7713b1edbc 98 typedef struct {
AnnaBridge 171:3a7713b1edbc 99 uint8_t mode; /**< SPIM mode selection, 0 to 3. */
AnnaBridge 171:3a7713b1edbc 100 uint32_t ssel_pol; /**< Mask of active levels for the slave select signals, see #spim_ssel_t. */
AnnaBridge 171:3a7713b1edbc 101 uint32_t baud; /**< Baud rate in Hz. */
AnnaBridge 171:3a7713b1edbc 102 } spim_cfg_t;
AnnaBridge 171:3a7713b1edbc 103
AnnaBridge 171:3a7713b1edbc 104 /**
AnnaBridge 171:3a7713b1edbc 105 * Structure type representing a SPI Master Transaction request.
AnnaBridge 171:3a7713b1edbc 106 */
AnnaBridge 171:3a7713b1edbc 107 typedef struct spim_req spim_req_t;
AnnaBridge 171:3a7713b1edbc 108
AnnaBridge 171:3a7713b1edbc 109 /**
AnnaBridge 171:3a7713b1edbc 110 * @brief Callback function type used in asynchromous SPIM communications requests.
AnnaBridge 171:3a7713b1edbc 111 * @details The function declaration for the SPIM callback is:
AnnaBridge 171:3a7713b1edbc 112 * @code
AnnaBridge 171:3a7713b1edbc 113 * void callback(spim_req_t * req, int error_code);
AnnaBridge 171:3a7713b1edbc 114 * @endcode
AnnaBridge 171:3a7713b1edbc 115 * | | |
AnnaBridge 171:3a7713b1edbc 116 * | -----: | :----------------------------------------- |
AnnaBridge 171:3a7713b1edbc 117 * | \p req | Pointer to a #spim_req object representing the active SPIM active transaction. |
AnnaBridge 171:3a7713b1edbc 118 * | \p error_code | An error code if the active transaction had a failure or #E_NO_ERROR if successful. |
AnnaBridge 171:3a7713b1edbc 119 * @addtogroup spim_async
AnnaBridge 171:3a7713b1edbc 120 */
AnnaBridge 171:3a7713b1edbc 121 typedef void (*spim_callback_fn)(spim_req_t * req, int error_code);
AnnaBridge 171:3a7713b1edbc 122
AnnaBridge 171:3a7713b1edbc 123 /**
AnnaBridge 171:3a7713b1edbc 124 * @brief Structure definition for an SPI Master Transaction request.
AnnaBridge 171:3a7713b1edbc 125 * @note When using this structure for an asynchronous operation, the
AnnaBridge 171:3a7713b1edbc 126 * structure must remain allocated until the callback is completed.
AnnaBridge 171:3a7713b1edbc 127 * @addtogroup spim_async
AnnaBridge 171:3a7713b1edbc 128 */
AnnaBridge 171:3a7713b1edbc 129 struct spim_req {
AnnaBridge 171:3a7713b1edbc 130 uint8_t ssel; /**< Number of the Slave Select to use. */
AnnaBridge 171:3a7713b1edbc 131 uint8_t deass; /**< Set to de-assert slave select at the completions of the transaction.*/
AnnaBridge 171:3a7713b1edbc 132 const uint8_t *tx_data; /**< Pointer to a buffer to transmit data from. */
AnnaBridge 171:3a7713b1edbc 133 uint8_t *rx_data; /**< Pointer to a buffer to store data received. */
AnnaBridge 171:3a7713b1edbc 134 spim_width_t width; /**< Number of data lines to use, see #spim_width_t. */
AnnaBridge 171:3a7713b1edbc 135 unsigned len; /**< Number of bytes to send from the \p tx_data buffer. */
AnnaBridge 171:3a7713b1edbc 136 unsigned read_num; /**< Number of bytes read and stored in \p rx_data buffer. */
AnnaBridge 171:3a7713b1edbc 137 unsigned write_num; /**< Number of bytes sent from the \p tx_data buffer, this will be filled by the driver after up to \p len bytes have been transmitted. */
AnnaBridge 171:3a7713b1edbc 138 spim_callback_fn callback; /**< Function pointer to a callback function if desired, NULL otherwise */
AnnaBridge 171:3a7713b1edbc 139 };
AnnaBridge 171:3a7713b1edbc 140
AnnaBridge 171:3a7713b1edbc 141 /* **** Globals **** */
AnnaBridge 171:3a7713b1edbc 142
AnnaBridge 171:3a7713b1edbc 143 /* **** Function Prototypes **** */
AnnaBridge 171:3a7713b1edbc 144
AnnaBridge 171:3a7713b1edbc 145 /**
AnnaBridge 171:3a7713b1edbc 146 * @brief Initialize the SPIM peripheral module.
AnnaBridge 171:3a7713b1edbc 147 *
AnnaBridge 171:3a7713b1edbc 148 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 149 * @param cfg Pointer to an SPIM configuration object.
AnnaBridge 171:3a7713b1edbc 150 * @param sys_cfg Pointer to a system configuration object to select the
AnnaBridge 171:3a7713b1edbc 151 * peripheral clock rate and assign the requested GPIO.
AnnaBridge 171:3a7713b1edbc 152 *
AnnaBridge 171:3a7713b1edbc 153 * @return #E_NO_ERROR if the SPIM port is initialized successfully, @ref MXC_Error_Codes
AnnaBridge 171:3a7713b1edbc 154 * "error" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 155 */
AnnaBridge 171:3a7713b1edbc 156 int SPIM_Init(mxc_spim_regs_t *spim, const spim_cfg_t *cfg, const sys_cfg_spim_t *sys_cfg);
AnnaBridge 171:3a7713b1edbc 157
AnnaBridge 171:3a7713b1edbc 158 /**
AnnaBridge 171:3a7713b1edbc 159 * @brief Shutdown the SPIM peripheral module instance represented by the
AnnaBridge 171:3a7713b1edbc 160 * @p spim parameter.
AnnaBridge 171:3a7713b1edbc 161 *
AnnaBridge 171:3a7713b1edbc 162 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 163 *
AnnaBridge 171:3a7713b1edbc 164 * @return #E_NO_ERROR if the SPIM is shutdown successfully, @ref
AnnaBridge 171:3a7713b1edbc 165 * MXC_Error_Codes "error" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 166 */
AnnaBridge 171:3a7713b1edbc 167 int SPIM_Shutdown(mxc_spim_regs_t *spim);
AnnaBridge 171:3a7713b1edbc 168
AnnaBridge 171:3a7713b1edbc 169 /**
AnnaBridge 171:3a7713b1edbc 170 * @brief Send Clock cycles on SCK without reading or writing.
AnnaBridge 171:3a7713b1edbc 171 *
AnnaBridge 171:3a7713b1edbc 172 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 173 * @param len Number of clock cycles to send.
AnnaBridge 171:3a7713b1edbc 174 * @param ssel Slave select number.
AnnaBridge 171:3a7713b1edbc 175 * @param deass De-assert slave select at the end of the transaction.
AnnaBridge 171:3a7713b1edbc 176 *
AnnaBridge 171:3a7713b1edbc 177 * @return Cycles transacted if everything is successful, @ref
AnnaBridge 171:3a7713b1edbc 178 * MXC_Error_Codes "error" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 179 */
AnnaBridge 171:3a7713b1edbc 180 int SPIM_Clocks(mxc_spim_regs_t *spim, uint32_t len, uint8_t ssel, uint8_t deass);
AnnaBridge 171:3a7713b1edbc 181
AnnaBridge 171:3a7713b1edbc 182 /**
AnnaBridge 171:3a7713b1edbc 183 * @brief Read/write SPIM data. This function will block until the
AnnaBridge 171:3a7713b1edbc 184 * transaction is complete.
AnnaBridge 171:3a7713b1edbc 185 *
AnnaBridge 171:3a7713b1edbc 186 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 187 * @param req Request for a SPIM transaction.
AnnaBridge 171:3a7713b1edbc 188 * @note If a callback function is registered it will not be called when using a blocking function.
AnnaBridge 171:3a7713b1edbc 189 *
AnnaBridge 171:3a7713b1edbc 190 * @return Bytes transacted if everything is successful, error if
AnnaBridge 171:3a7713b1edbc 191 * unsuccessful.
AnnaBridge 171:3a7713b1edbc 192 */
AnnaBridge 171:3a7713b1edbc 193 int SPIM_Trans(mxc_spim_regs_t *spim, spim_req_t *req);
AnnaBridge 171:3a7713b1edbc 194 /**
AnnaBridge 171:3a7713b1edbc 195 * @defgroup spim_async SPIM Asynchrous Functions
AnnaBridge 171:3a7713b1edbc 196 * @{
AnnaBridge 171:3a7713b1edbc 197 */
AnnaBridge 171:3a7713b1edbc 198 /**
AnnaBridge 171:3a7713b1edbc 199 * @brief Asynchronously read/write SPIM data.
AnnaBridge 171:3a7713b1edbc 200 *
AnnaBridge 171:3a7713b1edbc 201 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 202 * @param req Request for a SPIM transaction.
AnnaBridge 171:3a7713b1edbc 203 * @note Request struct must remain allocated until callback.
AnnaBridge 171:3a7713b1edbc 204 *
AnnaBridge 171:3a7713b1edbc 205 * @return #E_NO_ERROR if everything is successful, @ref MXC_Error_Codes
AnnaBridge 171:3a7713b1edbc 206 * "error" if unsuccessful.
AnnaBridge 171:3a7713b1edbc 207 */
AnnaBridge 171:3a7713b1edbc 208 int SPIM_TransAsync(mxc_spim_regs_t *spim, spim_req_t *req);
AnnaBridge 171:3a7713b1edbc 209
AnnaBridge 171:3a7713b1edbc 210 /**
AnnaBridge 171:3a7713b1edbc 211 * @brief Abort asynchronous request.
AnnaBridge 171:3a7713b1edbc 212 *
AnnaBridge 171:3a7713b1edbc 213 * @param req Pointer to a request structure for a SPIM transaction.
AnnaBridge 171:3a7713b1edbc 214 *
AnnaBridge 171:3a7713b1edbc 215 * @return #E_NO_ERROR if request aborted, , @ref MXC_Error_Codes "error" if
AnnaBridge 171:3a7713b1edbc 216 * unsuccessful.
AnnaBridge 171:3a7713b1edbc 217 */
AnnaBridge 171:3a7713b1edbc 218 int SPIM_AbortAsync(spim_req_t *req);
AnnaBridge 171:3a7713b1edbc 219
AnnaBridge 171:3a7713b1edbc 220 /**
AnnaBridge 171:3a7713b1edbc 221 * @brief SPIM interrupt handler.
AnnaBridge 171:3a7713b1edbc 222 * @details This function should be called by the application from the
AnnaBridge 171:3a7713b1edbc 223 * interrupt handler if SPIM interrupts are enabled. Alternately,
AnnaBridge 171:3a7713b1edbc 224 * this function can be periodically polled by the application if
AnnaBridge 171:3a7713b1edbc 225 * SPIM interrupts are disabled.
AnnaBridge 171:3a7713b1edbc 226 *
AnnaBridge 171:3a7713b1edbc 227 * @param spim Base address of the SPIM module.
AnnaBridge 171:3a7713b1edbc 228 */
AnnaBridge 171:3a7713b1edbc 229 void SPIM_Handler(mxc_spim_regs_t *spim);
AnnaBridge 171:3a7713b1edbc 230
AnnaBridge 171:3a7713b1edbc 231 /**
AnnaBridge 171:3a7713b1edbc 232 * @brief Check the SPIM to see if it's busy.
AnnaBridge 171:3a7713b1edbc 233 *
AnnaBridge 171:3a7713b1edbc 234 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 235 *
AnnaBridge 171:3a7713b1edbc 236 * @retval #E_NO_ERROR if idle.
AnnaBridge 171:3a7713b1edbc 237 * @retval #E_BUSY if in use.
AnnaBridge 171:3a7713b1edbc 238 */
AnnaBridge 171:3a7713b1edbc 239 int SPIM_Busy(mxc_spim_regs_t *spim);
AnnaBridge 171:3a7713b1edbc 240 /**@} end of spim_async define group */
AnnaBridge 171:3a7713b1edbc 241
AnnaBridge 171:3a7713b1edbc 242 /**
AnnaBridge 171:3a7713b1edbc 243 * @brief Attempts to prepare the SPIM for Low Power Sleep Modes.
AnnaBridge 171:3a7713b1edbc 244 * @details Checks for any ongoing transactions. Disables interrupts if the
AnnaBridge 171:3a7713b1edbc 245 * SPIM is idle.
AnnaBridge 171:3a7713b1edbc 246 *
AnnaBridge 171:3a7713b1edbc 247 * @param spim The spim
AnnaBridge 171:3a7713b1edbc 248 *
AnnaBridge 171:3a7713b1edbc 249 * @return #E_NO_ERROR if ready to sleep.
AnnaBridge 171:3a7713b1edbc 250 * @return #E_BUSY if not able to sleep at this time.
AnnaBridge 171:3a7713b1edbc 251 */
AnnaBridge 171:3a7713b1edbc 252 int SPIM_PrepForSleep(mxc_spim_regs_t *spim);
AnnaBridge 171:3a7713b1edbc 253
AnnaBridge 171:3a7713b1edbc 254 /**
AnnaBridge 171:3a7713b1edbc 255 * @brief Enables the SPIM without overwriting the existing configuration.
AnnaBridge 171:3a7713b1edbc 256 *
AnnaBridge 171:3a7713b1edbc 257 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 258 */
AnnaBridge 171:3a7713b1edbc 259 __STATIC_INLINE void SPIM_Enable(mxc_spim_regs_t *spim)
AnnaBridge 171:3a7713b1edbc 260 {
AnnaBridge 171:3a7713b1edbc 261 spim->gen_ctrl |= (MXC_F_SPIM_GEN_CTRL_SPI_MSTR_EN |
AnnaBridge 171:3a7713b1edbc 262 MXC_F_SPIM_GEN_CTRL_TX_FIFO_EN | MXC_F_SPIM_GEN_CTRL_RX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 263 }
AnnaBridge 171:3a7713b1edbc 264
AnnaBridge 171:3a7713b1edbc 265 /**
AnnaBridge 171:3a7713b1edbc 266 * @brief Drains/empties the data in the RX FIFO.
AnnaBridge 171:3a7713b1edbc 267 *
AnnaBridge 171:3a7713b1edbc 268 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 269 */
AnnaBridge 171:3a7713b1edbc 270 __STATIC_INLINE void SPIM_DrainRX(mxc_spim_regs_t *spim)
AnnaBridge 171:3a7713b1edbc 271 {
AnnaBridge 171:3a7713b1edbc 272 uint32_t ctrl_save = spim->gen_ctrl;
AnnaBridge 171:3a7713b1edbc 273 spim->gen_ctrl = (ctrl_save & ~MXC_F_SPIM_GEN_CTRL_RX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 274 spim->gen_ctrl = ctrl_save;
AnnaBridge 171:3a7713b1edbc 275 }
AnnaBridge 171:3a7713b1edbc 276
AnnaBridge 171:3a7713b1edbc 277 /**
AnnaBridge 171:3a7713b1edbc 278 * @brief Drains/empties the data in the TX FIFO.
AnnaBridge 171:3a7713b1edbc 279 *
AnnaBridge 171:3a7713b1edbc 280 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 281 */
AnnaBridge 171:3a7713b1edbc 282 __STATIC_INLINE void SPIM_DrainTX(mxc_spim_regs_t *spim)
AnnaBridge 171:3a7713b1edbc 283 {
AnnaBridge 171:3a7713b1edbc 284 uint32_t ctrl_save = spim->gen_ctrl;
AnnaBridge 171:3a7713b1edbc 285 spim->gen_ctrl = (ctrl_save & ~MXC_F_SPIM_GEN_CTRL_TX_FIFO_EN);
AnnaBridge 171:3a7713b1edbc 286 spim->gen_ctrl = ctrl_save;
AnnaBridge 171:3a7713b1edbc 287 }
AnnaBridge 171:3a7713b1edbc 288
AnnaBridge 171:3a7713b1edbc 289 /**
AnnaBridge 171:3a7713b1edbc 290 * @brief Returns the number of bytes free in the TX FIFO.
AnnaBridge 171:3a7713b1edbc 291 *
AnnaBridge 171:3a7713b1edbc 292 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 293 *
AnnaBridge 171:3a7713b1edbc 294 * @return Number of bytes free in Transmit FIFO.
AnnaBridge 171:3a7713b1edbc 295 */
AnnaBridge 171:3a7713b1edbc 296 __STATIC_INLINE unsigned SPIM_NumWriteAvail(mxc_spim_regs_t *spim)
AnnaBridge 171:3a7713b1edbc 297 {
AnnaBridge 171:3a7713b1edbc 298 return (MXC_CFG_SPIM_FIFO_DEPTH - ((spim->fifo_ctrl &
AnnaBridge 171:3a7713b1edbc 299 MXC_F_SPIM_FIFO_CTRL_TX_FIFO_USED) >> MXC_F_SPIM_FIFO_CTRL_TX_FIFO_USED_POS));
AnnaBridge 171:3a7713b1edbc 300 }
AnnaBridge 171:3a7713b1edbc 301
AnnaBridge 171:3a7713b1edbc 302 /**
AnnaBridge 171:3a7713b1edbc 303 * @brief Returns the number of bytes available to read in the RX FIFO.
AnnaBridge 171:3a7713b1edbc 304 *
AnnaBridge 171:3a7713b1edbc 305 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 306 *
AnnaBridge 171:3a7713b1edbc 307 * @return Number of bytes in RX FIFO.
AnnaBridge 171:3a7713b1edbc 308 */
AnnaBridge 171:3a7713b1edbc 309 __STATIC_INLINE unsigned SPIM_NumReadAvail(mxc_spim_regs_t *spim)
AnnaBridge 171:3a7713b1edbc 310 {
AnnaBridge 171:3a7713b1edbc 311 return ((spim->fifo_ctrl & MXC_F_SPIM_FIFO_CTRL_RX_FIFO_USED) >>
AnnaBridge 171:3a7713b1edbc 312 MXC_F_SPIM_FIFO_CTRL_RX_FIFO_USED_POS);
AnnaBridge 171:3a7713b1edbc 313 }
AnnaBridge 171:3a7713b1edbc 314
AnnaBridge 171:3a7713b1edbc 315 /**
AnnaBridge 171:3a7713b1edbc 316 * @brief Clear the SPIM interrupt flags.
AnnaBridge 171:3a7713b1edbc 317 *
AnnaBridge 171:3a7713b1edbc 318 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 319 * @param mask Mask of the SPIM interrupt flags to clear, see @ref
AnnaBridge 171:3a7713b1edbc 320 * SPIM_INTFL_Register Register for the SPIM interrupt flag
AnnaBridge 171:3a7713b1edbc 321 * bit masks.
AnnaBridge 171:3a7713b1edbc 322 */
AnnaBridge 171:3a7713b1edbc 323 __STATIC_INLINE void SPIM_ClearFlags(mxc_spim_regs_t *spim, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 324 {
AnnaBridge 171:3a7713b1edbc 325 spim->intfl = mask;
AnnaBridge 171:3a7713b1edbc 326 }
AnnaBridge 171:3a7713b1edbc 327
AnnaBridge 171:3a7713b1edbc 328 /**
AnnaBridge 171:3a7713b1edbc 329 * @brief Read the current SPIM interrupt flags.
AnnaBridge 171:3a7713b1edbc 330 *
AnnaBridge 171:3a7713b1edbc 331 * @param spim Pointer to the SPIM register structure.
AnnaBridge 171:3a7713b1edbc 332 *
AnnaBridge 171:3a7713b1edbc 333 * @return Mask of currently set SPIM interrupt flags, see @ref
AnnaBridge 171:3a7713b1edbc 334 * SPIM_INTFL_Register Register for the SPIM interrupt flag bit
AnnaBridge 171:3a7713b1edbc 335 * masks.
AnnaBridge 171:3a7713b1edbc 336 */
AnnaBridge 171:3a7713b1edbc 337 __STATIC_INLINE unsigned SPIM_GetFlags(mxc_spim_regs_t *spim)
AnnaBridge 171:3a7713b1edbc 338 {
AnnaBridge 171:3a7713b1edbc 339 return (spim->intfl);
AnnaBridge 171:3a7713b1edbc 340 }
AnnaBridge 171:3a7713b1edbc 341
AnnaBridge 171:3a7713b1edbc 342 /**@} end of group spim_comm */
AnnaBridge 171:3a7713b1edbc 343 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 344 }
AnnaBridge 171:3a7713b1edbc 345 #endif
AnnaBridge 171:3a7713b1edbc 346
AnnaBridge 171:3a7713b1edbc 347 #endif /* _SPIM_H_ */