mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
Parent:
targets/TARGET_Realtek/TARGET_AMEBA/TARGET_RTL8195A/spi_ex_api.h@188:bcfe06ba3d64
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 188:bcfe06ba3d64 1 /* mbed Microcontroller Library
AnnaBridge 188:bcfe06ba3d64 2 * Copyright (c) 2013-2016 Realtek Semiconductor Corp.
AnnaBridge 188:bcfe06ba3d64 3 *
AnnaBridge 188:bcfe06ba3d64 4 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 188:bcfe06ba3d64 5 * you may not use this file except in compliance with the License.
AnnaBridge 188:bcfe06ba3d64 6 * You may obtain a copy of the License at
AnnaBridge 188:bcfe06ba3d64 7 *
AnnaBridge 188:bcfe06ba3d64 8 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 188:bcfe06ba3d64 9 *
AnnaBridge 188:bcfe06ba3d64 10 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 188:bcfe06ba3d64 11 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 188:bcfe06ba3d64 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 188:bcfe06ba3d64 13 * See the License for the specific language governing permissions and
AnnaBridge 188:bcfe06ba3d64 14 * limitations under the License.
AnnaBridge 188:bcfe06ba3d64 15 */
AnnaBridge 188:bcfe06ba3d64 16
AnnaBridge 188:bcfe06ba3d64 17 #ifndef MBED_SPI_EXT_API_H
AnnaBridge 188:bcfe06ba3d64 18 #define MBED_SPI_EXT_API_H
AnnaBridge 188:bcfe06ba3d64 19
AnnaBridge 188:bcfe06ba3d64 20 #include "device.h"
AnnaBridge 188:bcfe06ba3d64 21
AnnaBridge 188:bcfe06ba3d64 22 #ifdef __cplusplus
AnnaBridge 188:bcfe06ba3d64 23 extern "C" {
AnnaBridge 188:bcfe06ba3d64 24 #endif
AnnaBridge 188:bcfe06ba3d64 25
AnnaBridge 188:bcfe06ba3d64 26 /** @addtogroup spi_ex SPI_EX
AnnaBridge 188:bcfe06ba3d64 27 * @ingroup hal
AnnaBridge 188:bcfe06ba3d64 28 * @brief spi extended functions
AnnaBridge 188:bcfe06ba3d64 29 * @{
AnnaBridge 188:bcfe06ba3d64 30 */
AnnaBridge 188:bcfe06ba3d64 31
AnnaBridge 188:bcfe06ba3d64 32 ///@name Ameba Common
AnnaBridge 188:bcfe06ba3d64 33 ///@{
AnnaBridge 188:bcfe06ba3d64 34
AnnaBridge 188:bcfe06ba3d64 35 #define SPI_DMA_RX_EN (1<<0)
AnnaBridge 188:bcfe06ba3d64 36 #define SPI_DMA_TX_EN (1<<1)
AnnaBridge 188:bcfe06ba3d64 37
AnnaBridge 188:bcfe06ba3d64 38 enum {
AnnaBridge 188:bcfe06ba3d64 39 SPI_SCLK_IDLE_LOW=0, // the SCLK is Low when SPI is inactive
AnnaBridge 188:bcfe06ba3d64 40 SPI_SCLK_IDLE_HIGH=2 // the SCLK is High when SPI is inactive
AnnaBridge 188:bcfe06ba3d64 41 };
AnnaBridge 188:bcfe06ba3d64 42
AnnaBridge 188:bcfe06ba3d64 43 // SPI Master mode: for continuous transfer, how the CS toggle:
AnnaBridge 188:bcfe06ba3d64 44 enum {
AnnaBridge 188:bcfe06ba3d64 45 SPI_CS_TOGGLE_EVERY_FRAME=0, // let SCPH=0 then the CS toggle every frame
AnnaBridge 188:bcfe06ba3d64 46 SPI_CS_TOGGLE_START_STOP=1 // let SCPH=1 the CS toggle at start and stop
AnnaBridge 188:bcfe06ba3d64 47 };
AnnaBridge 188:bcfe06ba3d64 48
AnnaBridge 188:bcfe06ba3d64 49 enum {
AnnaBridge 188:bcfe06ba3d64 50 SPI_SCLK_TOGGLE_MIDDLE=0, // Serial Clk toggle at middle of 1st data bit and latch data at 1st Clk edge
AnnaBridge 188:bcfe06ba3d64 51 SPI_SCLK_TOGGLE_START=1 // Serial Clk toggle at start of 1st data bit and latch data at 2nd Clk edge
AnnaBridge 188:bcfe06ba3d64 52 };
AnnaBridge 188:bcfe06ba3d64 53
AnnaBridge 188:bcfe06ba3d64 54 typedef enum {
AnnaBridge 188:bcfe06ba3d64 55 CS_0 = 0,
AnnaBridge 188:bcfe06ba3d64 56 CS_1 = 1,
AnnaBridge 188:bcfe06ba3d64 57 CS_2 = 2,
AnnaBridge 188:bcfe06ba3d64 58 CS_3 = 3,
AnnaBridge 188:bcfe06ba3d64 59 CS_4 = 4,
AnnaBridge 188:bcfe06ba3d64 60 CS_5 = 5,
AnnaBridge 188:bcfe06ba3d64 61 CS_6 = 6,
AnnaBridge 188:bcfe06ba3d64 62 CS_7 = 7
AnnaBridge 188:bcfe06ba3d64 63 }ChipSelect;
AnnaBridge 188:bcfe06ba3d64 64
AnnaBridge 188:bcfe06ba3d64 65
AnnaBridge 188:bcfe06ba3d64 66 #define SPI_STATE_READY 0x00
AnnaBridge 188:bcfe06ba3d64 67 #define SPI_STATE_RX_BUSY (1<<1)
AnnaBridge 188:bcfe06ba3d64 68 #define SPI_STATE_TX_BUSY (1<<2)
AnnaBridge 188:bcfe06ba3d64 69
AnnaBridge 188:bcfe06ba3d64 70 typedef enum {
AnnaBridge 188:bcfe06ba3d64 71 SpiRxIrq,
AnnaBridge 188:bcfe06ba3d64 72 SpiTxIrq
AnnaBridge 188:bcfe06ba3d64 73 } SpiIrq;
AnnaBridge 188:bcfe06ba3d64 74
AnnaBridge 188:bcfe06ba3d64 75 typedef void (*spi_irq_handler)(uint32_t id, SpiIrq event);
AnnaBridge 188:bcfe06ba3d64 76
AnnaBridge 188:bcfe06ba3d64 77 /**
AnnaBridge 188:bcfe06ba3d64 78 * @brief Set SPI interrupt handler if needed.
AnnaBridge 188:bcfe06ba3d64 79 * @param obj: spi object define in application software.
AnnaBridge 188:bcfe06ba3d64 80 * @param handler: interrupt callback function
AnnaBridge 188:bcfe06ba3d64 81 * @param id: interrupt callback parameter
AnnaBridge 188:bcfe06ba3d64 82 * @retval none
AnnaBridge 188:bcfe06ba3d64 83 */
AnnaBridge 188:bcfe06ba3d64 84 void spi_irq_hook(spi_t *obj, spi_irq_handler handler, uint32_t id);
AnnaBridge 188:bcfe06ba3d64 85
AnnaBridge 188:bcfe06ba3d64 86 /**
AnnaBridge 188:bcfe06ba3d64 87 * @brief Set SPI interrupt bus tx done handler if needed.
AnnaBridge 188:bcfe06ba3d64 88 * @param obj: spi object define in application software.
AnnaBridge 188:bcfe06ba3d64 89 * @param handler: interrupt bus tx done callback function
AnnaBridge 188:bcfe06ba3d64 90 * @param id: interrupt callback parameter
AnnaBridge 188:bcfe06ba3d64 91 * @retval none
AnnaBridge 188:bcfe06ba3d64 92 */
AnnaBridge 188:bcfe06ba3d64 93 void spi_bus_tx_done_irq_hook(spi_t *obj, spi_irq_handler handler, uint32_t id);
AnnaBridge 188:bcfe06ba3d64 94
AnnaBridge 188:bcfe06ba3d64 95 /**
AnnaBridge 188:bcfe06ba3d64 96 * @brief Slave device to flush tx fifo.
AnnaBridge 188:bcfe06ba3d64 97 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 98 * @note : It will discard all data in both tx fifo and rx fifo
AnnaBridge 188:bcfe06ba3d64 99 */
AnnaBridge 188:bcfe06ba3d64 100 void spi_slave_flush_fifo(spi_t * obj);
AnnaBridge 188:bcfe06ba3d64 101
AnnaBridge 188:bcfe06ba3d64 102 /**
AnnaBridge 188:bcfe06ba3d64 103 * @brief slave recv target length data use interrupt mode.
AnnaBridge 188:bcfe06ba3d64 104 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 105 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 106 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 107 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 108 */
AnnaBridge 188:bcfe06ba3d64 109 int32_t spi_slave_read_stream(spi_t *obj, char *rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 110
AnnaBridge 188:bcfe06ba3d64 111 /**
AnnaBridge 188:bcfe06ba3d64 112 * @brief slave send target length data use interrupt mode.
AnnaBridge 188:bcfe06ba3d64 113 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 114 * @param tx_buffer: buffer to be written to Tx FIFO.
AnnaBridge 188:bcfe06ba3d64 115 * @param length: number of data bytes to be send.
AnnaBridge 188:bcfe06ba3d64 116 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 117 */
AnnaBridge 188:bcfe06ba3d64 118 int32_t spi_slave_write_stream(spi_t *obj, char *tx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 119
AnnaBridge 188:bcfe06ba3d64 120 /**
AnnaBridge 188:bcfe06ba3d64 121 * @brief master recv target length data use interrupt mode.
AnnaBridge 188:bcfe06ba3d64 122 * @param obj: spi master object define in application software.
AnnaBridge 188:bcfe06ba3d64 123 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 124 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 125 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 126 */
AnnaBridge 188:bcfe06ba3d64 127 int32_t spi_master_read_stream(spi_t *obj, char *rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 128
AnnaBridge 188:bcfe06ba3d64 129 /**
AnnaBridge 188:bcfe06ba3d64 130 * @brief master send target length data use interrupt mode.
AnnaBridge 188:bcfe06ba3d64 131 * @param obj: spi master object define in application software.
AnnaBridge 188:bcfe06ba3d64 132 * @param tx_buffer: buffer to be written to Tx FIFO.
AnnaBridge 188:bcfe06ba3d64 133 * @param length: number of data bytes to be send.
AnnaBridge 188:bcfe06ba3d64 134 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 135 */
AnnaBridge 188:bcfe06ba3d64 136 int32_t spi_master_write_stream(spi_t *obj, char *tx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 137
AnnaBridge 188:bcfe06ba3d64 138 /**
AnnaBridge 188:bcfe06ba3d64 139 * @brief master send & recv target length data use interrupt mode.
AnnaBridge 188:bcfe06ba3d64 140 * @param obj: spi master object define in application software.
AnnaBridge 188:bcfe06ba3d64 141 * @param tx_buffer: buffer to be written to Tx FIFO.
AnnaBridge 188:bcfe06ba3d64 142 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 143 * @param length: number of data bytes to be send & recv.
AnnaBridge 188:bcfe06ba3d64 144 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 145 */
AnnaBridge 188:bcfe06ba3d64 146 int32_t spi_master_write_read_stream(spi_t *obj, char *tx_buffer, char *rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 147
AnnaBridge 188:bcfe06ba3d64 148 /**
AnnaBridge 188:bcfe06ba3d64 149 * @brief slave recv target length data use interrupt mode and timeout mechanism.
AnnaBridge 188:bcfe06ba3d64 150 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 151 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 152 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 153 * @param timeout_ms: timeout waiting time.
AnnaBridge 188:bcfe06ba3d64 154 * @retval : number of bytes read already
AnnaBridge 188:bcfe06ba3d64 155 */
AnnaBridge 188:bcfe06ba3d64 156 int32_t spi_slave_read_stream_timeout(spi_t *obj, char *rx_buffer, uint32_t length, uint32_t timeout_ms);
AnnaBridge 188:bcfe06ba3d64 157
AnnaBridge 188:bcfe06ba3d64 158 /**
AnnaBridge 188:bcfe06ba3d64 159 * @brief slave recv target length data use interrupt mode and stop if the spi bus is idle.
AnnaBridge 188:bcfe06ba3d64 160 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 161 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 162 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 163 * @retval : number of bytes read already
AnnaBridge 188:bcfe06ba3d64 164 */
AnnaBridge 188:bcfe06ba3d64 165 int32_t spi_slave_read_stream_terminate(spi_t *obj, char *rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 166
AnnaBridge 188:bcfe06ba3d64 167 //#ifdef CONFIG_GDMA_EN
AnnaBridge 188:bcfe06ba3d64 168 /**
AnnaBridge 188:bcfe06ba3d64 169 * @brief slave recv target length data use DMA mode.
AnnaBridge 188:bcfe06ba3d64 170 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 171 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 172 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 173 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 174 */
AnnaBridge 188:bcfe06ba3d64 175 int32_t spi_slave_read_stream_dma(spi_t *obj, char *rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 176
AnnaBridge 188:bcfe06ba3d64 177 /**
AnnaBridge 188:bcfe06ba3d64 178 * @brief slave send target length data use DMA mode.
AnnaBridge 188:bcfe06ba3d64 179 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 180 * @param tx_buffer: buffer to be written to Tx FIFO.
AnnaBridge 188:bcfe06ba3d64 181 * @param length: number of data bytes to be send.
AnnaBridge 188:bcfe06ba3d64 182 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 183 */
AnnaBridge 188:bcfe06ba3d64 184 int32_t spi_slave_write_stream_dma(spi_t *obj, char *tx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 185
AnnaBridge 188:bcfe06ba3d64 186 /**
AnnaBridge 188:bcfe06ba3d64 187 * @brief master send & recv target length data use DMA mode.
AnnaBridge 188:bcfe06ba3d64 188 * @param obj: spi master object define in application software.
AnnaBridge 188:bcfe06ba3d64 189 * @param tx_buffer: buffer to be written to Tx FIFO.
AnnaBridge 188:bcfe06ba3d64 190 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 191 * @param length: number of data bytes to be send & recv.
AnnaBridge 188:bcfe06ba3d64 192 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 193 */
AnnaBridge 188:bcfe06ba3d64 194 int32_t spi_master_write_read_stream_dma(spi_t * obj, char * tx_buffer, char * rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 195
AnnaBridge 188:bcfe06ba3d64 196 /**
AnnaBridge 188:bcfe06ba3d64 197 * @brief master recv target length data use DMA mode.
AnnaBridge 188:bcfe06ba3d64 198 * @param obj: spi master object define in application software.
AnnaBridge 188:bcfe06ba3d64 199 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 200 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 201 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 202 * @note : DMA or Interrupt mode can be used to TX dummy data
AnnaBridge 188:bcfe06ba3d64 203 */
AnnaBridge 188:bcfe06ba3d64 204 int32_t spi_master_read_stream_dma(spi_t *obj, char *rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 205
AnnaBridge 188:bcfe06ba3d64 206 /**
AnnaBridge 188:bcfe06ba3d64 207 * @brief master send target length data use DMA mode.
AnnaBridge 188:bcfe06ba3d64 208 * @param obj: spi master object define in application software.
AnnaBridge 188:bcfe06ba3d64 209 * @param tx_buffer: buffer to be written to Tx FIFO.
AnnaBridge 188:bcfe06ba3d64 210 * @param length: number of data bytes to be send.
AnnaBridge 188:bcfe06ba3d64 211 * @retval : stream init status
AnnaBridge 188:bcfe06ba3d64 212 */
AnnaBridge 188:bcfe06ba3d64 213 int32_t spi_master_write_stream_dma(spi_t *obj, char *tx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 214
AnnaBridge 188:bcfe06ba3d64 215 /**
AnnaBridge 188:bcfe06ba3d64 216 * @brief slave recv target length data use DMA mode and timeout mechanism.
AnnaBridge 188:bcfe06ba3d64 217 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 218 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 219 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 220 * @param timeout_ms: timeout waiting time.
AnnaBridge 188:bcfe06ba3d64 221 * @retval : number of bytes read already
AnnaBridge 188:bcfe06ba3d64 222 */
AnnaBridge 188:bcfe06ba3d64 223 int32_t spi_slave_read_stream_dma_timeout(spi_t *obj, char *rx_buffer, uint32_t length, uint32_t timeout_ms);
AnnaBridge 188:bcfe06ba3d64 224
AnnaBridge 188:bcfe06ba3d64 225 /**
AnnaBridge 188:bcfe06ba3d64 226 * @brief slave recv target length data use DMA mode and stop if the spi bus is idle.
AnnaBridge 188:bcfe06ba3d64 227 * @param obj: spi slave object define in application software.
AnnaBridge 188:bcfe06ba3d64 228 * @param rx_buffer: buffer to save data read from SPI FIFO.
AnnaBridge 188:bcfe06ba3d64 229 * @param length: number of data bytes to be read.
AnnaBridge 188:bcfe06ba3d64 230 * @retval : number of bytes read already
AnnaBridge 188:bcfe06ba3d64 231 */
AnnaBridge 188:bcfe06ba3d64 232 int32_t spi_slave_read_stream_dma_terminate(spi_t * obj, char * rx_buffer, uint32_t length);
AnnaBridge 188:bcfe06ba3d64 233 //#endif
AnnaBridge 188:bcfe06ba3d64 234
AnnaBridge 188:bcfe06ba3d64 235 ///@}
AnnaBridge 188:bcfe06ba3d64 236
AnnaBridge 188:bcfe06ba3d64 237 /*\@}*/
AnnaBridge 188:bcfe06ba3d64 238
AnnaBridge 188:bcfe06ba3d64 239 #ifdef __cplusplus
AnnaBridge 188:bcfe06ba3d64 240 }
AnnaBridge 188:bcfe06ba3d64 241 #endif
AnnaBridge 188:bcfe06ba3d64 242
AnnaBridge 188:bcfe06ba3d64 243
AnnaBridge 188:bcfe06ba3d64 244 #endif