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_SPIXR_SPIXR_REVA_H_
22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_SPIXR_SPIXR_REVA_H_
23 
24 /****** Includes *******/
25 #include "mxc_device.h"
26 #include "mxc_sys.h"
27 #include "spixr_reva_regs.h"
28 #include "spixr.h"
29 
30 /* **** Definitions **** */
31 /**
32  * @brief       Structure type for configuring a SPIXR port.
33  */
34 
35 /**
36  * @brief       Data Width, # of data I/O used to rcv data
37  */
38 typedef enum {
39     MXC_SPIXR_REVA_SINGLE_SDIO = 0,
40     MXC_SPIXR_REVA_DUAL_SDIO,
41     MXC_SPIXR_REVA_QUAD_SDIO,
42     MXC_SPIXR_REVA_INVALID,
43 } mxc_spixr_reva_width_t;
44 
45 /**
46  * @brief       SPIXF mode.
47  * @note        modes 1 and 2 are not supported
48  */
49 typedef enum {
50     MXC_SPIXR_REVA_MODE_0,
51     MXC_SPIXR_REVA_MODE_1,
52     MXC_SPIXR_REVA_MODE_2,
53     MXC_SPIXR_REVA_MODE_3,
54 } mxc_spixr_reva_mode_t;
55 
56 /**
57  * @brief       Configuration parameters of SPIXR
58  */
59 typedef struct {
60     uint32_t
61         numbits; ///< Number of Bits per character. In slave mode 9-bit character length is not supported.
62     mxc_spixr_reva_width_t data_width; ///< SPI Data width
63 
64     uint32_t ssel_act_1; ///< Slave Select Action delay 1
65     uint32_t ssel_act_2; ///< Slave Select Action delay 2
66     uint32_t ssel_inact; ///< Slave Select Inactive delay
67 
68     uint32_t baud_freq; ///< Desired frequency
69 } mxc_spixr_reva_cfg_t;
70 
71 /***** Function Prototypes *****/
72 
73 int MXC_SPIXR_RevA_ReadRXFIFO(mxc_spixr_reva_regs_t *spixr, uint8_t *buf, int len);
74 int MXC_SPIXR_RevA_WriteTXFIFO(mxc_spixr_reva_regs_t *spixr, uint8_t *buf, int len);
75 void MXC_SPIXR_RevA_SetSS(mxc_spixr_reva_regs_t *spixr, int ssIdx);
76 int MXC_SPIXR_RevA_GetSS(mxc_spixr_reva_regs_t *spixr);
77 void MXC_SPIXR_RevA_SetSSCtrl(mxc_spixr_reva_regs_t *spixr, int stayActive);
78 int MXC_SPIXR_RevA_GetSSCtrl(mxc_spixr_reva_regs_t *spixr);
79 void MXC_SPIXR_RevA_Enable(mxc_spixr_reva_regs_t *spixr);
80 void MXC_SPIXR_RevA_Disable(mxc_spixr_reva_regs_t *spixr);
81 int MXC_SPIXR_RevA_IsEnabled(mxc_spixr_reva_regs_t *spixr);
82 void MXC_SPIXR_RevA_ThreeWireModeEnable(mxc_spixr_reva_regs_t *spixr);
83 void MXC_SPIXR_RevA_ThreeWireModeDisable(mxc_spixr_reva_regs_t *spixr);
84 int MXC_SPIXR_RevA_ThreeWireModeIsEnabled(mxc_spixr_reva_regs_t *spixr);
85 int MXC_SPIXR_RevA_GetTXFIFOCount(mxc_spixr_reva_regs_t *spixr);
86 int MXC_SPIXR_RevA_GetRXFIFOCount(mxc_spixr_reva_regs_t *spixr);
87 int MXC_SPIXR_RevA_SetWidth(mxc_spixr_reva_regs_t *spixr, mxc_spixr_reva_width_t width);
88 int MXC_SPIXR_RevA_SetSPIMode(mxc_spixr_reva_regs_t *spixr, mxc_spixr_reva_mode_t mode);
89 int MXC_SPIXR_RevA_SetSSPolarity(mxc_spixr_reva_regs_t *spixr, int active);
90 void MXC_SPIXR_RevA_SetSSTiming(mxc_spixr_reva_regs_t *spixr, unsigned int ssIActDelay,
91                                 unsigned int postActive, unsigned int preActive);
92 int MXC_SPIXR_RevA_SetFrequency(mxc_spixr_reva_regs_t *spixr, int hz);
93 int MXC_SPIXR_RevA_GetFrequency(mxc_spixr_reva_regs_t *spixr);
94 int MXC_SPIXR_RevA_GetIntFlags(mxc_spixr_reva_regs_t *spixr);
95 void MXC_SPIXR_RevA_EnableInt(mxc_spixr_reva_regs_t *spixr, int flags);
96 void MXC_SPIXR_RevA_DisableInt(mxc_spixr_reva_regs_t *spixr, int flags);
97 int MXC_SPIXR_RevA_GetWakeUpFlags(mxc_spixr_reva_regs_t *spixr);
98 void MXC_SPIXR_RevA_EnableWakeUp(mxc_spixr_reva_regs_t *spixr, int flags);
99 void MXC_SPIXR_RevA_DisableWakeUp(mxc_spixr_reva_regs_t *spixr, int flags);
100 void MXC_SPIXR_RevA_ExMemEnable(mxc_spixr_reva_regs_t *spixr);
101 void MXC_SPIXR_RevA_ExMemDisable(mxc_spixr_reva_regs_t *spixr);
102 void MXC_SPIXR_RevA_ExMemUseDummy(mxc_spixr_reva_regs_t *spixr, int delay255);
103 void MXC_SPIXR_RevA_ExMemSetWriteCommand(mxc_spixr_reva_regs_t *spixr, uint8_t command);
104 uint8_t MXC_SPIXR_RevA_ExMemGetWriteCommand(mxc_spixr_reva_regs_t *spixr);
105 void MXC_SPIXR_RevA_ExMemSetReadCommand(mxc_spixr_reva_regs_t *spixr, uint8_t command);
106 uint8_t MXC_SPIXR_RevA_ExMemGetReadCommand(mxc_spixr_reva_regs_t *spixr);
107 int MXC_SPIXR_RevA_Busy(mxc_spixr_reva_regs_t *spixr);
108 int MXC_SPIXR_RevA_Init(mxc_spixr_reva_regs_t *spixr, mxc_spixr_reva_cfg_t *cfg);
109 int MXC_SPIXR_RevA_Shutdown(mxc_spixr_reva_regs_t *spixr);
110 void MXC_SPIXR_RevA_SendCommand(mxc_spixr_reva_regs_t *spixr, uint8_t *cmd, uint32_t length,
111                                 uint32_t tx_num_char);
112 void MXC_SPIXR_RevA_TXFIFOEnable(mxc_spixr_reva_regs_t *spixr);
113 void MXC_SPIXR_RevA_TXFIFODisable(mxc_spixr_reva_regs_t *spixr);
114 int MXC_SPIXR_RevA_TXFIFOIsEnabled(mxc_spixr_reva_regs_t *spixr);
115 void MXC_SPIXR_RevA_DmaTXFIFOEnable(mxc_spixr_reva_regs_t *spixr);
116 void MXC_SPIXR_RevA_DmaTXFIFODisable(mxc_spixr_reva_regs_t *spixr);
117 int MXC_SPIXR_RevA_DmaTXFIFOIsEnabled(mxc_spixr_reva_regs_t *spixr);
118 void MXC_SPIXR_RevA_RXFIFOEnable(mxc_spixr_reva_regs_t *spixr);
119 void MXC_SPIXR_RevA_RXFIFODisable(mxc_spixr_reva_regs_t *spixr);
120 int MXC_SPIXR_RevA_RXFIFOIsEnabled(mxc_spixr_reva_regs_t *spixr);
121 void MXC_SPIXR_RevA_DmaRXFIFOEnable(mxc_spixr_reva_regs_t *spixr);
122 void MXC_SPIXR_RevA_DmaRXFIFODisable(mxc_spixr_reva_regs_t *spixr);
123 int MXC_SPIXR_RevA_DmaRXFIFOIsEnabled(mxc_spixr_reva_regs_t *spixr);
124 void MXC_SPIXR_RevA_TXFIFOClear(mxc_spixr_reva_regs_t *spixr);
125 void MXC_SPIXR_RevA_RXFIFOClear(mxc_spixr_reva_regs_t *spixr);
126 
127 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_SPIXR_SPIXR_REVA_H_
128