File indexing completed on 2025-05-11 08:23:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #if defined(USE_FULL_LL_DRIVER) || defined(__rtems__)
0020
0021
0022 #include "stm32h7xx_ll_bdma.h"
0023 #include "stm32h7xx_ll_bus.h"
0024 #ifdef USE_FULL_ASSERT
0025 #include "stm32_assert.h"
0026 #else
0027 #define assert_param(expr) ((void)0U)
0028 #endif
0029
0030
0031
0032
0033
0034 #if defined (BDMA) || defined (BDMA1) || defined (BDMA2)
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 #define IS_LL_BDMA_DIRECTION(__VALUE__) (((__VALUE__) == LL_BDMA_DIRECTION_PERIPH_TO_MEMORY) || \
0048 ((__VALUE__) == LL_BDMA_DIRECTION_MEMORY_TO_PERIPH) || \
0049 ((__VALUE__) == LL_BDMA_DIRECTION_MEMORY_TO_MEMORY))
0050
0051 #define IS_LL_BDMA_MODE(__VALUE__) (((__VALUE__) == LL_BDMA_MODE_NORMAL) || \
0052 ((__VALUE__) == LL_BDMA_MODE_CIRCULAR))
0053
0054 #define IS_LL_BDMA_PERIPHINCMODE(__VALUE__) (((__VALUE__) == LL_BDMA_PERIPH_INCREMENT) || \
0055 ((__VALUE__) == LL_BDMA_PERIPH_NOINCREMENT))
0056
0057 #define IS_LL_BDMA_MEMORYINCMODE(__VALUE__) (((__VALUE__) == LL_BDMA_MEMORY_INCREMENT) || \
0058 ((__VALUE__) == LL_BDMA_MEMORY_NOINCREMENT))
0059
0060 #define IS_LL_BDMA_PERIPHDATASIZE(__VALUE__) (((__VALUE__) == LL_BDMA_PDATAALIGN_BYTE) || \
0061 ((__VALUE__) == LL_BDMA_PDATAALIGN_HALFWORD) || \
0062 ((__VALUE__) == LL_BDMA_PDATAALIGN_WORD))
0063
0064 #define IS_LL_BDMA_MEMORYDATASIZE(__VALUE__) (((__VALUE__) == LL_BDMA_MDATAALIGN_BYTE) || \
0065 ((__VALUE__) == LL_BDMA_MDATAALIGN_HALFWORD) || \
0066 ((__VALUE__) == LL_BDMA_MDATAALIGN_WORD))
0067
0068 #define IS_LL_BDMA_NBDATA(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
0069
0070 #if defined(ADC3)
0071 #define IS_LL_BDMA_PERIPHREQUEST(__VALUE__) ((__VALUE__) <= LL_DMAMUX2_REQ_ADC3)
0072 #else
0073 #define IS_LL_BDMA_PERIPHREQUEST(__VALUE__) ((__VALUE__) <= LL_DMAMUX2_REQ_DFSDM2_FLT0)
0074 #endif
0075
0076 #define IS_LL_BDMA_PRIORITY(__VALUE__) (((__VALUE__) == LL_BDMA_PRIORITY_LOW) || \
0077 ((__VALUE__) == LL_BDMA_PRIORITY_MEDIUM) || \
0078 ((__VALUE__) == LL_BDMA_PRIORITY_HIGH) || \
0079 ((__VALUE__) == LL_BDMA_PRIORITY_VERYHIGH))
0080
0081 #define IS_LL_BDMA_DOUBLEBUFFER_MODE(__VALUE__) (((__VALUE__) == LL_BDMA_DOUBLEBUFFER_MODE_DISABLE) || \
0082 ((__VALUE__) == LL_BDMA_DOUBLEBUFFER_MODE_ENABLE))
0083
0084 #define IS_LL_BDMA_DOUBLEBUFFER_TARGETMEM(__VALUE__) (((__VALUE__) == LL_BDMA_CURRENTTARGETMEM0) || \
0085 ((__VALUE__) == LL_BDMA_CURRENTTARGETMEM1))
0086
0087 #define IS_LL_BDMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) ((((INSTANCE) == BDMA) && \
0088 (((CHANNEL) == LL_BDMA_CHANNEL_0) || \
0089 ((CHANNEL) == LL_BDMA_CHANNEL_1) || \
0090 ((CHANNEL) == LL_BDMA_CHANNEL_2) || \
0091 ((CHANNEL) == LL_BDMA_CHANNEL_3) || \
0092 ((CHANNEL) == LL_BDMA_CHANNEL_4) || \
0093 ((CHANNEL) == LL_BDMA_CHANNEL_5) || \
0094 ((CHANNEL) == LL_BDMA_CHANNEL_6) || \
0095 ((CHANNEL) == LL_BDMA_CHANNEL_7))))
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129 uint32_t LL_BDMA_DeInit(BDMA_TypeDef *BDMAx, uint32_t Channel)
0130 {
0131 BDMA_Channel_TypeDef *tmp ;
0132 ErrorStatus status = SUCCESS;
0133
0134
0135 assert_param(IS_LL_BDMA_ALL_CHANNEL_INSTANCE(BDMAx, Channel) || (Channel == LL_BDMA_CHANNEL_ALL));
0136
0137 if (Channel == LL_BDMA_CHANNEL_ALL)
0138 {
0139 if (BDMAx == BDMA)
0140 {
0141
0142 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA1);
0143
0144
0145 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA1);
0146 }
0147 else
0148 {
0149 status = ERROR;
0150 }
0151 }
0152 else
0153 {
0154 tmp = (BDMA_Channel_TypeDef *)(__LL_BDMA_GET_CHANNEL_INSTANCE(BDMAx, Channel));
0155
0156
0157 CLEAR_BIT(tmp->CCR, BDMA_CCR_EN);
0158
0159
0160 LL_BDMA_WriteReg(tmp, CCR, 0U);
0161
0162
0163 LL_BDMA_WriteReg(tmp, CNDTR, 0U);
0164
0165
0166 LL_BDMA_WriteReg(tmp, CPAR, 0U);
0167
0168
0169 LL_BDMA_WriteReg(tmp, CM0AR, 0U);
0170
0171
0172 LL_BDMA_WriteReg(tmp, CM1AR, 0U);
0173
0174
0175 LL_BDMA_SetPeriphRequest(BDMAx, Channel, LL_DMAMUX2_REQ_MEM2MEM);
0176
0177 if (Channel == LL_BDMA_CHANNEL_0)
0178 {
0179
0180 LL_BDMA_ClearFlag_GI0(BDMAx);
0181 }
0182 else if (Channel == LL_BDMA_CHANNEL_1)
0183 {
0184
0185 LL_BDMA_ClearFlag_GI1(BDMAx);
0186 }
0187 else if (Channel == LL_BDMA_CHANNEL_2)
0188 {
0189
0190 LL_BDMA_ClearFlag_GI2(BDMAx);
0191 }
0192 else if (Channel == LL_BDMA_CHANNEL_3)
0193 {
0194
0195 LL_BDMA_ClearFlag_GI3(BDMAx);
0196 }
0197 else if (Channel == LL_BDMA_CHANNEL_4)
0198 {
0199
0200 LL_BDMA_ClearFlag_GI4(BDMAx);
0201 }
0202 else if (Channel == LL_BDMA_CHANNEL_5)
0203 {
0204
0205 LL_BDMA_ClearFlag_GI5(BDMAx);
0206 }
0207
0208 else if (Channel == LL_BDMA_CHANNEL_6)
0209 {
0210
0211 LL_BDMA_ClearFlag_GI6(BDMAx);
0212 }
0213 else if (Channel == LL_BDMA_CHANNEL_7)
0214 {
0215
0216 LL_BDMA_ClearFlag_GI7(BDMAx);
0217 }
0218 else
0219 {
0220 status = ERROR;
0221 }
0222 }
0223
0224 return (uint32_t)status;
0225 }
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247 uint32_t LL_BDMA_Init(BDMA_TypeDef *BDMAx, uint32_t Channel, LL_BDMA_InitTypeDef *BDMA_InitStruct)
0248 {
0249
0250 assert_param(IS_LL_BDMA_ALL_CHANNEL_INSTANCE(BDMAx, Channel));
0251
0252
0253 assert_param(IS_LL_BDMA_DIRECTION(BDMA_InitStruct->Direction));
0254 assert_param(IS_LL_BDMA_MODE(BDMA_InitStruct->Mode));
0255 assert_param(IS_LL_BDMA_PERIPHINCMODE(BDMA_InitStruct->PeriphOrM2MSrcIncMode));
0256 assert_param(IS_LL_BDMA_MEMORYINCMODE(BDMA_InitStruct->MemoryOrM2MDstIncMode));
0257 assert_param(IS_LL_BDMA_PERIPHDATASIZE(BDMA_InitStruct->PeriphOrM2MSrcDataSize));
0258 assert_param(IS_LL_BDMA_MEMORYDATASIZE(BDMA_InitStruct->MemoryOrM2MDstDataSize));
0259 assert_param(IS_LL_BDMA_NBDATA(BDMA_InitStruct->NbData));
0260 assert_param(IS_LL_BDMA_PERIPHREQUEST(BDMA_InitStruct->PeriphRequest));
0261 assert_param(IS_LL_BDMA_PRIORITY(BDMA_InitStruct->Priority));
0262 assert_param(IS_LL_BDMA_DOUBLEBUFFER_MODE(BDMA_InitStruct->DoubleBufferMode));
0263 assert_param(IS_LL_BDMA_DOUBLEBUFFER_TARGETMEM(BDMA_InitStruct->TargetMemInDoubleBufferMode));
0264
0265
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276
0277
0278
0279 LL_BDMA_ConfigTransfer(BDMAx, Channel,
0280 BDMA_InitStruct->Direction | \
0281 BDMA_InitStruct->Mode | \
0282 BDMA_InitStruct->PeriphOrM2MSrcIncMode | \
0283 BDMA_InitStruct->MemoryOrM2MDstIncMode | \
0284 BDMA_InitStruct->PeriphOrM2MSrcDataSize | \
0285 BDMA_InitStruct->MemoryOrM2MDstDataSize | \
0286 BDMA_InitStruct->Priority | \
0287 BDMA_InitStruct->DoubleBufferMode | \
0288 BDMA_InitStruct->TargetMemInDoubleBufferMode);
0289
0290
0291
0292
0293
0294 LL_BDMA_SetMemoryAddress(BDMAx, Channel, BDMA_InitStruct->MemoryOrM2MDstAddress);
0295
0296
0297
0298
0299
0300 LL_BDMA_SetPeriphAddress(BDMAx, Channel, BDMA_InitStruct->PeriphOrM2MSrcAddress);
0301
0302
0303
0304
0305
0306 LL_BDMA_SetDataLength(BDMAx, Channel, BDMA_InitStruct->NbData);
0307
0308
0309
0310
0311
0312 LL_BDMA_SetPeriphRequest(BDMAx, Channel, BDMA_InitStruct->PeriphRequest);
0313
0314 return (uint32_t)SUCCESS;
0315 }
0316
0317
0318
0319
0320
0321
0322 void LL_BDMA_StructInit(LL_BDMA_InitTypeDef *BDMA_InitStruct)
0323 {
0324
0325 BDMA_InitStruct->PeriphOrM2MSrcAddress = 0x00000000U;
0326 BDMA_InitStruct->MemoryOrM2MDstAddress = 0x00000000U;
0327 BDMA_InitStruct->Direction = LL_BDMA_DIRECTION_PERIPH_TO_MEMORY;
0328 BDMA_InitStruct->Mode = LL_BDMA_MODE_NORMAL;
0329 BDMA_InitStruct->PeriphOrM2MSrcIncMode = LL_BDMA_PERIPH_NOINCREMENT;
0330 BDMA_InitStruct->MemoryOrM2MDstIncMode = LL_BDMA_MEMORY_NOINCREMENT;
0331 BDMA_InitStruct->PeriphOrM2MSrcDataSize = LL_BDMA_PDATAALIGN_BYTE;
0332 BDMA_InitStruct->MemoryOrM2MDstDataSize = LL_BDMA_MDATAALIGN_BYTE;
0333 BDMA_InitStruct->NbData = 0x00000000U;
0334 BDMA_InitStruct->PeriphRequest = LL_DMAMUX2_REQ_MEM2MEM;
0335 BDMA_InitStruct->Priority = LL_BDMA_PRIORITY_LOW;
0336 BDMA_InitStruct->DoubleBufferMode = LL_BDMA_DOUBLEBUFFER_MODE_DISABLE;
0337 BDMA_InitStruct->TargetMemInDoubleBufferMode = LL_BDMA_CURRENTTARGETMEM0;
0338 }
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352 #endif
0353
0354
0355
0356
0357
0358 #endif
0359