@@ -1262,19 +1262,6 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t
1262
1262
hi2c -> State = HAL_I2C_STATE_BUSY_TX ;
1263
1263
hi2c -> ErrorCode = HAL_I2C_ERROR_NONE ;
1264
1264
1265
- hi2c -> pBuffPtr = pData ;
1266
- hi2c -> XferSize = Size ;
1267
- hi2c -> XferCount = Size ;
1268
-
1269
- /* Set the I2C DMA transfert complete callback */
1270
- hi2c -> hdmatx -> XferCpltCallback = I2C_DMAMasterTransmitCplt ;
1271
-
1272
- /* Set the DMA error callback */
1273
- hi2c -> hdmatx -> XferErrorCallback = I2C_DMAError ;
1274
-
1275
- /* Enable the DMA Stream */
1276
- HAL_DMA_Start_IT (hi2c -> hdmatx , (uint32_t )pData , (uint32_t )& hi2c -> Instance -> DR , Size );
1277
-
1278
1265
/* Send Slave Address */
1279
1266
if (I2C_MasterRequestWrite (hi2c , DevAddress , I2C_TIMEOUT_FLAG ) != HAL_OK )
1280
1267
{
@@ -1292,6 +1279,22 @@ HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t
1292
1279
}
1293
1280
}
1294
1281
1282
+ /* dpgeorge: DMA initialisation is moved to after sending the address */
1283
+ {
1284
+ hi2c -> pBuffPtr = pData ;
1285
+ hi2c -> XferSize = Size ;
1286
+ hi2c -> XferCount = Size ;
1287
+
1288
+ /* Set the I2C DMA transfert complete callback */
1289
+ hi2c -> hdmatx -> XferCpltCallback = I2C_DMAMasterTransmitCplt ;
1290
+
1291
+ /* Set the DMA error callback */
1292
+ hi2c -> hdmatx -> XferErrorCallback = I2C_DMAError ;
1293
+
1294
+ /* Enable the DMA Stream */
1295
+ HAL_DMA_Start_IT (hi2c -> hdmatx , (uint32_t )pData , (uint32_t )& hi2c -> Instance -> DR , Size );
1296
+ }
1297
+
1295
1298
/* Enable DMA Request */
1296
1299
hi2c -> Instance -> CR2 |= I2C_CR2_DMAEN ;
1297
1300
@@ -1338,19 +1341,6 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D
1338
1341
hi2c -> State = HAL_I2C_STATE_BUSY_RX ;
1339
1342
hi2c -> ErrorCode = HAL_I2C_ERROR_NONE ;
1340
1343
1341
- hi2c -> pBuffPtr = pData ;
1342
- hi2c -> XferSize = Size ;
1343
- hi2c -> XferCount = Size ;
1344
-
1345
- /* Set the I2C DMA transfert complete callback */
1346
- hi2c -> hdmarx -> XferCpltCallback = I2C_DMAMasterReceiveCplt ;
1347
-
1348
- /* Set the DMA error callback */
1349
- hi2c -> hdmarx -> XferErrorCallback = I2C_DMAError ;
1350
-
1351
- /* Enable the DMA Stream */
1352
- HAL_DMA_Start_IT (hi2c -> hdmarx , (uint32_t )& hi2c -> Instance -> DR , (uint32_t )pData , Size );
1353
-
1354
1344
/* Send Slave Address */
1355
1345
if (I2C_MasterRequestRead (hi2c , DevAddress , I2C_TIMEOUT_FLAG ) != HAL_OK )
1356
1346
{
@@ -1368,6 +1358,22 @@ HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t D
1368
1358
}
1369
1359
}
1370
1360
1361
+ /* dpgeorge: DMA initialisation is moved to after sending the address */
1362
+ {
1363
+ hi2c -> pBuffPtr = pData ;
1364
+ hi2c -> XferSize = Size ;
1365
+ hi2c -> XferCount = Size ;
1366
+
1367
+ /* Set the I2C DMA transfert complete callback */
1368
+ hi2c -> hdmarx -> XferCpltCallback = I2C_DMAMasterReceiveCplt ;
1369
+
1370
+ /* Set the DMA error callback */
1371
+ hi2c -> hdmarx -> XferErrorCallback = I2C_DMAError ;
1372
+
1373
+ /* Enable the DMA Stream */
1374
+ HAL_DMA_Start_IT (hi2c -> hdmarx , (uint32_t )& hi2c -> Instance -> DR , (uint32_t )pData , Size );
1375
+ }
1376
+
1371
1377
if (Size == 1 )
1372
1378
{
1373
1379
/* Disable Acknowledge */
@@ -2050,19 +2056,6 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd
2050
2056
hi2c -> State = HAL_I2C_STATE_MEM_BUSY_TX ;
2051
2057
hi2c -> ErrorCode = HAL_I2C_ERROR_NONE ;
2052
2058
2053
- hi2c -> pBuffPtr = pData ;
2054
- hi2c -> XferSize = Size ;
2055
- hi2c -> XferCount = Size ;
2056
-
2057
- /* Set the I2C DMA transfert complete callback */
2058
- hi2c -> hdmatx -> XferCpltCallback = I2C_DMAMemTransmitCplt ;
2059
-
2060
- /* Set the DMA error callback */
2061
- hi2c -> hdmatx -> XferErrorCallback = I2C_DMAError ;
2062
-
2063
- /* Enable the DMA Stream */
2064
- HAL_DMA_Start_IT (hi2c -> hdmatx , (uint32_t )pData , (uint32_t )& hi2c -> Instance -> DR , Size );
2065
-
2066
2059
/* Send Slave Address and Memory Address */
2067
2060
if (I2C_RequestMemoryWrite (hi2c , DevAddress , MemAddress , MemAddSize , I2C_TIMEOUT_FLAG ) != HAL_OK )
2068
2061
{
@@ -2080,6 +2073,22 @@ HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAdd
2080
2073
}
2081
2074
}
2082
2075
2076
+ /* dpgeorge: DMA initialisation is moved to after sending the addresses */
2077
+ {
2078
+ hi2c -> pBuffPtr = pData ;
2079
+ hi2c -> XferSize = Size ;
2080
+ hi2c -> XferCount = Size ;
2081
+
2082
+ /* Set the I2C DMA transfert complete callback */
2083
+ hi2c -> hdmatx -> XferCpltCallback = I2C_DMAMemTransmitCplt ;
2084
+
2085
+ /* Set the DMA error callback */
2086
+ hi2c -> hdmatx -> XferErrorCallback = I2C_DMAError ;
2087
+
2088
+ /* Enable the DMA Stream */
2089
+ HAL_DMA_Start_IT (hi2c -> hdmatx , (uint32_t )pData , (uint32_t )& hi2c -> Instance -> DR , Size );
2090
+ }
2091
+
2083
2092
/* Enable DMA Request */
2084
2093
hi2c -> Instance -> CR2 |= I2C_CR2_DMAEN ;
2085
2094
@@ -2128,19 +2137,6 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr
2128
2137
hi2c -> State = HAL_I2C_STATE_MEM_BUSY_RX ;
2129
2138
hi2c -> ErrorCode = HAL_I2C_ERROR_NONE ;
2130
2139
2131
- hi2c -> pBuffPtr = pData ;
2132
- hi2c -> XferSize = Size ;
2133
- hi2c -> XferCount = Size ;
2134
-
2135
- /* Set the I2C DMA transfert complete callback */
2136
- hi2c -> hdmarx -> XferCpltCallback = I2C_DMAMemReceiveCplt ;
2137
-
2138
- /* Set the DMA error callback */
2139
- hi2c -> hdmarx -> XferErrorCallback = I2C_DMAError ;
2140
-
2141
- /* Enable the DMA Stream */
2142
- HAL_DMA_Start_IT (hi2c -> hdmarx , (uint32_t )& hi2c -> Instance -> DR , (uint32_t )pData , Size );
2143
-
2144
2140
/* Send Slave Address and Memory Address */
2145
2141
if (I2C_RequestMemoryRead (hi2c , DevAddress , MemAddress , MemAddSize , I2C_TIMEOUT_FLAG ) != HAL_OK )
2146
2142
{
@@ -2158,6 +2154,22 @@ HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddr
2158
2154
}
2159
2155
}
2160
2156
2157
+ /* dpgeorge: DMA initialisation is moved to after sending the addresses */
2158
+ {
2159
+ hi2c -> pBuffPtr = pData ;
2160
+ hi2c -> XferSize = Size ;
2161
+ hi2c -> XferCount = Size ;
2162
+
2163
+ /* Set the I2C DMA transfert complete callback */
2164
+ hi2c -> hdmarx -> XferCpltCallback = I2C_DMAMemReceiveCplt ;
2165
+
2166
+ /* Set the DMA error callback */
2167
+ hi2c -> hdmarx -> XferErrorCallback = I2C_DMAError ;
2168
+
2169
+ /* Enable the DMA Stream */
2170
+ HAL_DMA_Start_IT (hi2c -> hdmarx , (uint32_t )& hi2c -> Instance -> DR , (uint32_t )pData , Size );
2171
+ }
2172
+
2161
2173
if (Size == 1 )
2162
2174
{
2163
2175
/* Disable Acknowledge */
0 commit comments