1 /**
2 ******************************************************************************
3 * @file stm32wb0x_ll_dmamux.h
4 * @author MCD Application Team
5 * @brief Header file of DMAMUX LL module.
6 ******************************************************************************
7 * @attention
8 *
9 * Copyright (c) 2024 STMicroelectronics.
10 * All rights reserved.
11 *
12 * This software is licensed under terms that can be found in the LICENSE file
13 * in the root directory of this software component.
14 * If no LICENSE file comes with this software, it is provided AS-IS.
15 *
16 ******************************************************************************
17 */
18
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32WB0x_LL_DMAMUX_H
21 #define STM32WB0x_LL_DMAMUX_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32wb0x.h"
29
30 /** @addtogroup STM32WB0x_LL_Driver
31 * @{
32 */
33
34 #if defined (DMAMUX1)
35
36 /** @defgroup DMAMUX_LL DMAMUX
37 * @{
38 */
39
40 /* Private types -------------------------------------------------------------*/
41 /* Private variables ---------------------------------------------------------*/
42 /* Private constants ---------------------------------------------------------*/
43 /** @defgroup DMAMUX_LL_Private_Constants DMAMUX Private Constants
44 * @{
45 */
46 /* Define used to get DMAMUX CCR register size */
47 #define DMAMUX_CCR_SIZE 0x00000004UL
48 /**
49 * @}
50 */
51
52 /* Private macros ------------------------------------------------------------*/
53 /* Exported types ------------------------------------------------------------*/
54 /* Exported constants --------------------------------------------------------*/
55 /** @defgroup DMAMUX_LL_Exported_Constants DMAMUX Exported Constants
56 * @{
57 */
58
59 /** @defgroup DMAMUX_LL_EC_REQUEST Transfer request
60 * @{
61 */
62 #define LL_DMAMUX_REQ_MEM2MEM 0x00000000U /*!< Memory to Memory transfer */
63 #ifdef SPI3
64 #define LL_DMAMUX_REQ_SPI3_RX 0x00000002U /*!< DMAMUX SPI3 RX request */
65 #define LL_DMAMUX_REQ_SPI3_TX 0x00000003U /*!< DMAMUX SPI3 TX request */
66 #endif /* SPI3 */
67 #ifdef SPI1
68 #define LL_DMAMUX_REQ_SPI1_RX 0x00000004U /*!< DMAMUX SPI1 RX request */
69 #define LL_DMAMUX_REQ_SPI1_TX 0x00000005U /*!< DMAMUX SPI1 TX request */
70 #endif /* SPI1 */
71 #ifdef SPI2
72 #define LL_DMAMUX_REQ_SPI2_RX 0x00000006U /*!< DMAMUX SPI2 RX request */
73 #define LL_DMAMUX_REQ_SPI2_TX 0x00000007U /*!< DMAMUX SPI2 TX request */
74 #endif /* SPI2 */
75 #ifdef I2C1
76 #define LL_DMAMUX_REQ_I2C1_RX 0x00000008U /*!< DMAMUX I2C1 RX request */
77 #define LL_DMAMUX_REQ_I2C1_TX 0x00000009U /*!< DMAMUX I2C1 TX request */
78 #endif /* I2C1 */
79 #ifdef I2C2
80 #define LL_DMAMUX_REQ_I2C2_RX 0x0000000AU /*!< DMAMUX I2C2 RX request */
81 #define LL_DMAMUX_REQ_I2C2_TX 0x0000000BU /*!< DMAMUX I2C2 TX request */
82 #endif /* I2C2 */
83 #define LL_DMAMUX_REQ_USART1_RX 0x0000000CU /*!< DMAMUX USART1 RX request */
84 #define LL_DMAMUX_REQ_USART1_TX 0x0000000DU /*!< DMAMUX USART1 TX request */
85 #define LL_DMAMUX_REQ_LPUART1_RX 0x0000000EU /*!< DMAMUX LPUART1 RX request */
86 #define LL_DMAMUX_REQ_LPUART1_TX 0x0000000FU /*!< DMAMUX LPUART1 TX request */
87 #define LL_DMAMUX_REQ_ADC1_DS 0x00000010U /*!< DMAMUX ADC DS output request */
88 #ifdef ADC_DF_DATAOUT_DF_DATA
89 #define LL_DMAMUX_REQ_ADC1_DF 0x00000011U /*!< DMAMUX ADC DF output request */
90 #endif /* ADC_DF_DATAOUT_DF_DATA */
91 #ifdef TIM2
92 #define LL_DMAMUX_REQ_TIM2_CH1 0x00000012U /*!< DMAMUX TIM2 CH1 request */
93 #define LL_DMAMUX_REQ_TIM2_CH2 0x00000013U /*!< DMAMUX TIM2 CH3 request */
94 #define LL_DMAMUX_REQ_TIM2_CH3 0x00000014U /*!< DMAMUX TIM2 CH3 request */
95 #define LL_DMAMUX_REQ_TIM2_CH4 0x00000015U /*!< DMAMUX TIM2 CH4 request */
96 #define LL_DMAMUX_REQ_TIM2_UP 0x00000016U /*!< DMAMUX TIM2 UP request */
97 #endif /* TIM2 */
98 #ifdef TIM16
99 #define LL_DMAMUX_REQ_TIM16_CH1 0x00000017U /*!< DMAMUX TIM16 CH1 request */
100 #define LL_DMAMUX_REQ_TIM16_UP 0x00000018U /*!< DMAMUX TIM16 UP request */
101 #endif /* TIM16 */
102 #ifdef TIM17
103 #define LL_DMAMUX_REQ_TIM17_CH1 0x00000019U /*!< DMAMUX TIM17 CH1 request */
104 #define LL_DMAMUX_REQ_TIM17_UP 0x0000001AU /*!< DMAMUX TIM17 UP request */
105 #endif /* TIM17 */
106
107
108 #if defined(STM32WB06) || defined(STM32WB07)
109 #define LL_DMAMUX_MAX_REQ LL_DMAMUX_REQ_ADC1_DF
110 #endif
111 #if defined (STM32WB05) || defined(STM32WB09)
112 #define LL_DMAMUX_MAX_REQ LL_DMAMUX_REQ_TIM17_UP
113 #endif
114 /**
115 * @}
116 */
117
118 /** @defgroup DMAMUX_LL_EC_CHANNEL DMAMUX Channel
119 * @{
120 */
121 #define LL_DMAMUX_CHANNEL_0 0x00000000U /*!< DMAMUX Channel 0 connected to DMA1 Channel 1 */
122 #define LL_DMAMUX_CHANNEL_1 0x00000001U /*!< DMAMUX Channel 1 connected to DMA1 Channel 2 */
123 #define LL_DMAMUX_CHANNEL_2 0x00000002U /*!< DMAMUX Channel 2 connected to DMA1 Channel 3 */
124 #define LL_DMAMUX_CHANNEL_3 0x00000003U /*!< DMAMUX Channel 3 connected to DMA1 Channel 4 */
125 #define LL_DMAMUX_CHANNEL_4 0x00000004U /*!< DMAMUX Channel 4 connected to DMA1 Channel 5 */
126 #define LL_DMAMUX_CHANNEL_5 0x00000005U /*!< DMAMUX Channel 5 connected to DMA1 Channel 6 */
127 #define LL_DMAMUX_CHANNEL_6 0x00000006U /*!< DMAMUX Channel 6 connected to DMA1 Channel 7 */
128 #define LL_DMAMUX_CHANNEL_7 0x00000007U /*!< DMAMUX Channel 7 connected to DMA1 Channel 8 */
129 /**
130 * @}
131 */
132
133 /**
134 * @}
135 */
136
137 /* Exported macro ------------------------------------------------------------*/
138 /** @defgroup DMAMUX_LL_Exported_Macros DMAMUX Exported Macros
139 * @{
140 */
141
142 /** @defgroup DMAMUX_LL_EM_WRITE_READ Common Write and read registers macros
143 * @{
144 */
145 /**
146 * @brief Write a value in DMAMUX register
147 * @param __INSTANCE__ DMAMUX Instance
148 * @param __REG__ Register to be written
149 * @param __VALUE__ Value to be written in the register
150 * @retval None
151 */
152 #define LL_DMAMUX_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
153
154 /**
155 * @brief Read a value in DMAMUX register
156 * @param __INSTANCE__ DMAMUX Instance
157 * @param __REG__ Register to be read
158 * @retval Register value
159 */
160 #define LL_DMAMUX_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
161 /**
162 * @}
163 */
164
165 /**
166 * @}
167 */
168
169 /* Exported functions --------------------------------------------------------*/
170 /** @defgroup DMAMUX_LL_Exported_Functions DMAMUX Exported Functions
171 * @{
172 */
173
174 /** @defgroup DMAMUX_LL_EF_Configuration Configuration
175 * @{
176 */
177 /**
178 * @brief Set DMAMUX request ID for DMAMUX Channel x.
179 * @note DMAMUX channel 0 to 7 are mapped to DMA1 channel 1 to 8.
180 * @rmtoll CxCR DMAREQ_ID LL_DMAMUX_SetRequestID
181 * @param DMAMUXx DMAMUXx Instance
182 * @param Channel This parameter can be one of the following values:
183 * @arg LL_DMAMUX_CHANNEL_0
184 * @arg LL_DMAMUX_CHANNEL_1
185 * @arg LL_DMAMUX_CHANNEL_2
186 * @arg LL_DMAMUX_CHANNEL_3
187 * @arg LL_DMAMUX_CHANNEL_4
188 * @arg LL_DMAMUX_CHANNEL_5
189 * @arg LL_DMAMUX_CHANNEL_6
190 * @arg LL_DMAMUX_CHANNEL_7
191 * @param Request This parameter can be one of the following values:
192 * @arg LL_DMAMUX_REQ_MEM2MEM
193 * @arg LL_DMAMUX_REQ_SPI3_RX
194 * @arg LL_DMAMUX_REQ_SPI3_TX
195 * @arg LL_DMAMUX_REQ_SPI1_RX
196 * @arg LL_DMAMUX_REQ_SPI1_TX
197 * @arg LL_DMAMUX_REQ_SPI2_RX
198 * @arg LL_DMAMUX_REQ_SPI2_TX
199 * @arg LL_DMAMUX_REQ_I2C1_RX
200 * @arg LL_DMAMUX_REQ_I2C1_TX
201 * @arg LL_DMAMUX_REQ_I2C2_RX
202 * @arg LL_DMAMUX_REQ_I2C2_TX
203 * @arg LL_DMAMUX_REQ_USART1_RX
204 * @arg LL_DMAMUX_REQ_USART1_TX
205 * @arg LL_DMAMUX_REQ_LPUART1_RX
206 * @arg LL_DMAMUX_REQ_LPUART1_TX
207 * @arg LL_DMAMUX_REQ_ADC1_DS
208 * @arg LL_DMAMUX_REQ_ADC1_DF
209 * @retval None
210 */
LL_DMAMUX_SetRequestID(DMAMUX_Channel_TypeDef * DMAMUXx,uint32_t Channel,uint32_t Request)211 __STATIC_INLINE void LL_DMAMUX_SetRequestID(DMAMUX_Channel_TypeDef* DMAMUXx, uint32_t Channel, uint32_t Request)
212 {
213 (void)(DMAMUXx);
214 MODIFY_REG((DMAMUX1_Channel0 + Channel)->CxCR, DMAMUX_CxCR_DMAREQ_ID, Request);
215 }
216
217 /**
218 * @brief Get DMAMUX request ID for DMAMUX Channel x.
219 * @note DMAMUX channel 0 to 7 are mapped to DMA1 channel 1 to 8.
220 * @rmtoll CxCR DMAREQ_ID LL_DMAMUX_GetRequestID
221 * @param DMAMUXx DMAMUXx Instance
222 * @param Channel This parameter can be one of the following values:
223 * @arg LL_DMAMUX_CHANNEL_0
224 * @arg LL_DMAMUX_CHANNEL_1
225 * @arg LL_DMAMUX_CHANNEL_2
226 * @arg LL_DMAMUX_CHANNEL_3
227 * @arg LL_DMAMUX_CHANNEL_4
228 * @arg LL_DMAMUX_CHANNEL_5
229 * @arg LL_DMAMUX_CHANNEL_6
230 * @arg LL_DMAMUX_CHANNEL_7
231 * @retval Returned value can be one of the following values:
232 * @arg LL_DMAMUX_REQ_MEM2MEM
233 * @arg LL_DMAMUX_REQ_SPI3_RX
234 * @arg LL_DMAMUX_REQ_SPI3_TX
235 * @arg LL_DMAMUX_REQ_SPI1_RX
236 * @arg LL_DMAMUX_REQ_SPI1_TX
237 * @arg LL_DMAMUX_REQ_SPI2_RX
238 * @arg LL_DMAMUX_REQ_SPI2_TX
239 * @arg LL_DMAMUX_REQ_I2C1_RX
240 * @arg LL_DMAMUX_REQ_I2C1_TX
241 * @arg LL_DMAMUX_REQ_I2C2_RX
242 * @arg LL_DMAMUX_REQ_I2C2_TX
243 * @arg LL_DMAMUX_REQ_USART1_RX
244 * @arg LL_DMAMUX_REQ_USART1_TX
245 * @arg LL_DMAMUX_REQ_LPUART1_RX
246 * @arg LL_DMAMUX_REQ_LPUART1_TX
247 * @arg LL_DMAMUX_REQ_ADC1_DS
248 * @arg LL_DMAMUX_REQ_ADC1_DF
249 */
LL_DMAMUX_GetRequestID(DMAMUX_Channel_TypeDef * DMAMUXx,uint32_t Channel)250 __STATIC_INLINE uint32_t LL_DMAMUX_GetRequestID(DMAMUX_Channel_TypeDef *DMAMUXx, uint32_t Channel)
251 {
252 (void)(DMAMUXx);
253 return (uint32_t)(READ_BIT((DMAMUX1_Channel0 + Channel)->CxCR, DMAMUX_CxCR_DMAREQ_ID));
254 }
255
256 /**
257 * @}
258 */
259
260 /**
261 * @}
262 */
263
264 /**
265 * @}
266 */
267
268 #endif /* DMAMUX1 */
269
270 /**
271 * @}
272 */
273
274 #ifdef __cplusplus
275 }
276 #endif
277
278 #endif /* STM32WB0x_LL_DMAMUX_H */
279