1 /****************************************************************************** 2 * 3 * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by 4 * Analog Devices, Inc.), 5 * Copyright (C) 2023-2024 Analog Devices, Inc. 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 ******************************************************************************/ 20 21 #ifndef LIBRARIES_PERIPHDRIVERS_SOURCE_SPI_SPI_REVA2_H_ 22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_SPI_SPI_REVA2_H_ 23 24 #include <stdio.h> 25 #include <stddef.h> 26 #include <stdint.h> 27 #include "mxc_device.h" 28 #include "mxc_assert.h" 29 #include "mxc_lock.h" 30 #include "mxc_sys.h" 31 #include "mxc_delay.h" 32 #include "spi_regs.h" 33 #include "spi_reva_regs.h" 34 #include "spi.h" 35 #include "dma.h" 36 #include "dma_reva_regs.h" 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 /* **** Functions **** */ 43 44 int MXC_SPI_RevA2_Init(mxc_spi_reva_regs_t *spi, mxc_spi_type_t controller_target, 45 mxc_spi_interface_t if_mode, uint32_t freq, uint8_t ts_active_pol_mask); 46 47 int MXC_SPI_RevA2_Config(mxc_spi_cfg_t *cfg); 48 49 int MXC_SPI_RevA2_Shutdown(mxc_spi_reva_regs_t *spi); 50 51 uint32_t MXC_SPI_RevA2_GetFlags(mxc_spi_reva_regs_t *spi); 52 53 void MXC_SPI_RevA2_ClearFlags(mxc_spi_reva_regs_t *spi); 54 55 void MXC_SPI_RevA2_EnableInt(mxc_spi_reva_regs_t *spi, uint32_t en); 56 57 void MXC_SPI_RevA2_DisableInt(mxc_spi_reva_regs_t *spi, uint32_t dis); 58 59 int MXC_SPI_RevA2_SetTSControl(mxc_spi_reva_regs_t *spi, mxc_spi_tscontrol_t ts_control); 60 61 mxc_spi_tscontrol_t MXC_SPI_RevA2_GetTSControl(mxc_spi_reva_regs_t *spi); 62 63 int MXC_SPI_RevA2_SetFrequency(mxc_spi_reva_regs_t *spi, uint32_t freq); 64 65 int MXC_SPI_RevA2_GetFrequency(mxc_spi_reva_regs_t *spi); 66 67 int MXC_SPI_RevA2_SetFrameSize(mxc_spi_reva_regs_t *spi, int frame_size); 68 69 int MXC_SPI_RevA2_GetFrameSize(mxc_spi_reva_regs_t *spi); 70 71 int MXC_SPI_RevA2_SetInterface(mxc_spi_reva_regs_t *spi, mxc_spi_interface_t if_mode); 72 73 mxc_spi_interface_t MXC_SPI_RevA2_GetInterface(mxc_spi_reva_regs_t *spi); 74 75 int MXC_SPI_RevA2_SetClkMode(mxc_spi_reva_regs_t *spi, mxc_spi_clkmode_t clk_mode); 76 77 mxc_spi_clkmode_t MXC_SPI_RevA2_GetClkMode(mxc_spi_reva_regs_t *spi); 78 79 int MXC_SPI_RevA2_SetCallback(mxc_spi_reva_regs_t *spi, mxc_spi_callback_t callback, void *data); 80 81 int MXC_SPI_RevA2_GetActive(mxc_spi_reva_regs_t *spi); 82 83 int MXC_SPI_RevA2_ReadyForSleep(mxc_spi_reva_regs_t *spi); 84 85 int MXC_SPI_RevA2_SetDummyTX(mxc_spi_reva_regs_t *spi, uint16_t tx_value); 86 87 int MXC_SPI_RevA2_StartTransmission(mxc_spi_reva_regs_t *spi); 88 89 int MXC_SPI_RevA2_AbortTransmission(mxc_spi_reva_regs_t *spi); 90 91 uint8_t MXC_SPI_RevA2_GetTXFIFOAvailable(mxc_spi_reva_regs_t *spi); 92 93 uint8_t MXC_SPI_RevA2_GetRXFIFOAvailable(mxc_spi_reva_regs_t *spi); 94 95 int MXC_SPI_RevA2_ClearTXFIFO(mxc_spi_reva_regs_t *spi); 96 97 int MXC_SPI_RevA2_ClearRXFIFO(mxc_spi_reva_regs_t *spi); 98 99 int MXC_SPI_RevA2_SetTXThreshold(mxc_spi_reva_regs_t *spi, uint8_t thd_val); 100 101 int MXC_SPI_RevA2_SetRXThreshold(mxc_spi_reva_regs_t *spi, uint8_t thd_val); 102 103 uint8_t MXC_SPI_RevA2_GetTXThreshold(mxc_spi_reva_regs_t *spi); 104 105 uint8_t MXC_SPI_RevA2_GetRXThreshold(mxc_spi_reva_regs_t *spi); 106 107 /* ** DMA-Specific Functions ** */ 108 109 int MXC_SPI_RevA2_DMA_Init(mxc_spi_reva_regs_t *spi, mxc_dma_reva_regs_t *dma, bool use_dma_tx, 110 bool use_dma_rx); 111 112 bool MXC_SPI_RevA2_DMA_GetInitialized(mxc_spi_reva_regs_t *spi); 113 114 int MXC_SPI_RevA2_DMA_GetTXChannel(mxc_spi_reva_regs_t *spi); 115 116 int MXC_SPI_RevA2_DMA_GetRXChannel(mxc_spi_reva_regs_t *spi); 117 118 int MXC_SPI_RevA2_DMA_SetRequestSelect(mxc_spi_reva_regs_t *spi, uint32_t tx_reqsel, 119 uint32_t rx_reqsel); 120 121 void MXC_SPI_RevA2_DMA_SwapByte(uint8_t *buffer, uint32_t len_bytes); 122 123 /* ** Transaction Functions ** */ 124 125 int MXC_SPI_RevA2_ControllerTransaction(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer, 126 uint32_t tx_length_frames, uint8_t *rx_buffer, 127 uint32_t rx_length_frames, uint8_t deassert, 128 uint8_t hw_ts_index); 129 130 int MXC_SPI_RevA2_ControllerTransactionAsync(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer, 131 uint32_t tx_length_frames, uint8_t *rx_buffer, 132 uint32_t rx_length_frames, uint8_t deassert, 133 uint8_t hw_ts_index); 134 135 int MXC_SPI_RevA2_ControllerTransactionDMA(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer, 136 uint32_t tx_length_frames, uint8_t *rx_buffer, 137 uint32_t rx_length_frames, uint8_t deassert, 138 uint8_t hw_ts_index, mxc_dma_reva_regs_t *dma); 139 140 int MXC_SPI_RevA2_TargetTransaction(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer, 141 uint32_t tx_length_frames, uint8_t *rx_buffer, 142 uint32_t rx_length_frames); 143 144 int MXC_SPI_RevA2_TargetTransactionAsync(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer, 145 uint32_t tx_length_frames, uint8_t *rx_buffer, 146 uint32_t rx_length_frames); 147 148 int MXC_SPI_RevA2_TargetTransactionDMA(mxc_spi_reva_regs_t *spi, uint8_t *tx_buffer, 149 uint32_t tx_length_frames, uint8_t *rx_buffer, 150 uint32_t rx_length_frames, mxc_dma_reva_regs_t *dma); 151 152 /* ** Handler Functions ** */ 153 154 void MXC_SPI_RevA2_Handler(mxc_spi_reva_regs_t *spi); 155 156 void MXC_SPI_RevA2_DMA_TX_Handler(mxc_spi_reva_regs_t *spi); 157 158 void MXC_SPI_RevA2_DMA_RX_Handler(mxc_spi_reva_regs_t *spi); 159 160 #ifdef __cplusplus 161 } 162 #endif 163 164 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_SPI_SPI_REVA2_H_ 165