334 #ifdef HAL_FMPI2C_MODULE_ENABLED
335 #if defined(FMPI2C_CR1_PE)
343 #define TIMING_CLEAR_MASK (0xF0FFFFFFU)
344 #define FMPI2C_TIMEOUT_ADDR (10000U)
345 #define FMPI2C_TIMEOUT_BUSY (25U)
346 #define FMPI2C_TIMEOUT_DIR (25U)
347 #define FMPI2C_TIMEOUT_RXNE (25U)
348 #define FMPI2C_TIMEOUT_STOPF (25U)
349 #define FMPI2C_TIMEOUT_TC (25U)
350 #define FMPI2C_TIMEOUT_TCR (25U)
351 #define FMPI2C_TIMEOUT_TXIS (25U)
352 #define FMPI2C_TIMEOUT_FLAG (25U)
354 #define MAX_NBYTE_SIZE 255U
355 #define SLAVE_ADDR_SHIFT 7U
356 #define SLAVE_ADDR_MSK 0x06U
359 #define FMPI2C_STATE_MSK ((uint32_t)((uint32_t)((uint32_t)HAL_FMPI2C_STATE_BUSY_TX | \
360 (uint32_t)HAL_FMPI2C_STATE_BUSY_RX) & \
361 (uint32_t)(~((uint32_t)HAL_FMPI2C_STATE_READY))))
363 #define FMPI2C_STATE_NONE ((uint32_t)(HAL_FMPI2C_MODE_NONE))
365 #define FMPI2C_STATE_MASTER_BUSY_TX ((uint32_t)(((uint32_t)HAL_FMPI2C_STATE_BUSY_TX & FMPI2C_STATE_MSK) | \
366 (uint32_t)HAL_FMPI2C_MODE_MASTER))
368 #define FMPI2C_STATE_MASTER_BUSY_RX ((uint32_t)(((uint32_t)HAL_FMPI2C_STATE_BUSY_RX & FMPI2C_STATE_MSK) | \
369 (uint32_t)HAL_FMPI2C_MODE_MASTER))
371 #define FMPI2C_STATE_SLAVE_BUSY_TX ((uint32_t)(((uint32_t)HAL_FMPI2C_STATE_BUSY_TX & FMPI2C_STATE_MSK) | \
372 (uint32_t)HAL_FMPI2C_MODE_SLAVE))
374 #define FMPI2C_STATE_SLAVE_BUSY_RX ((uint32_t)(((uint32_t)HAL_FMPI2C_STATE_BUSY_RX & FMPI2C_STATE_MSK) | \
375 (uint32_t)HAL_FMPI2C_MODE_SLAVE))
377 #define FMPI2C_STATE_MEM_BUSY_TX ((uint32_t)(((uint32_t)HAL_FMPI2C_STATE_BUSY_TX & FMPI2C_STATE_MSK) | \
378 (uint32_t)HAL_FMPI2C_MODE_MEM))
380 #define FMPI2C_STATE_MEM_BUSY_RX ((uint32_t)(((uint32_t)HAL_FMPI2C_STATE_BUSY_RX & FMPI2C_STATE_MSK) | \
381 (uint32_t)HAL_FMPI2C_MODE_MEM))
386 #define FMPI2C_XFER_TX_IT (uint16_t)(0x0001U)
388 #define FMPI2C_XFER_RX_IT (uint16_t)(0x0002U)
390 #define FMPI2C_XFER_LISTEN_IT (uint16_t)(0x8000U)
393 #define FMPI2C_XFER_ERROR_IT (uint16_t)(0x0010U)
395 #define FMPI2C_XFER_CPLT_IT (uint16_t)(0x0020U)
396 #define FMPI2C_XFER_RELOAD_IT (uint16_t)(0x0040U)
399 #define FMPI2C_NO_OPTION_FRAME (0xFFFF0000U)
409 #define FMPI2C_GET_DMA_REMAIN_DATA(__HANDLE__) __HAL_DMA_GET_COUNTER(__HANDLE__)
439 static HAL_StatusTypeDef FMPI2C_RequestMemoryWrite(
FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress,
440 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
442 static HAL_StatusTypeDef FMPI2C_RequestMemoryRead(
FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress,
443 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
461 static HAL_StatusTypeDef FMPI2C_WaitOnFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Flag, FlagStatus Status,
462 uint32_t Timeout, uint32_t Tickstart);
463 static HAL_StatusTypeDef FMPI2C_WaitOnTXISFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
465 static HAL_StatusTypeDef FMPI2C_WaitOnRXNEFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
467 static HAL_StatusTypeDef FMPI2C_WaitOnSTOPFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
469 static HAL_StatusTypeDef FMPI2C_IsErrorOccurred(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
483 static void FMPI2C_TransferConfig(
FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode,
545 assert_param(IS_FMPI2C_ALL_INSTANCE(hfmpi2c->
Instance));
557 hfmpi2c->
Lock = HAL_UNLOCKED;
559 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
588 __HAL_FMPI2C_DISABLE(hfmpi2c);
596 hfmpi2c->
Instance->OAR1 &= ~FMPI2C_OAR1_OA1EN;
612 SET_BIT(hfmpi2c->
Instance->CR2, FMPI2C_CR2_ADD10);
617 CLEAR_BIT(hfmpi2c->
Instance->CR2, FMPI2C_CR2_ADD10);
620 hfmpi2c->
Instance->CR2 |= (FMPI2C_CR2_AUTOEND | FMPI2C_CR2_NACK);
624 hfmpi2c->
Instance->OAR2 &= ~FMPI2C_DUALADDRESS_ENABLE;
635 __HAL_FMPI2C_ENABLE(hfmpi2c);
637 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
660 assert_param(IS_FMPI2C_ALL_INSTANCE(hfmpi2c->
Instance));
665 __HAL_FMPI2C_DISABLE(hfmpi2c);
667 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
680 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
686 __HAL_UNLOCK(hfmpi2c);
723 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
750 HAL_StatusTypeDef status = HAL_OK;
752 if (pCallback == NULL)
755 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
810 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
831 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
841 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
875 HAL_StatusTypeDef status = HAL_OK;
927 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
948 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
958 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
977 HAL_StatusTypeDef status = HAL_OK;
979 if (pCallback == NULL)
982 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
994 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
1012 HAL_StatusTypeDef status = HAL_OK;
1021 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_INVALID_CALLBACK;
1121 uint16_t Size, uint32_t Timeout)
1129 __HAL_LOCK(hfmpi2c);
1134 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_BUSY, SET, FMPI2C_TIMEOUT_BUSY, tickstart) != HAL_OK)
1141 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1148 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1150 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
1151 xfermode = FMPI2C_RELOAD_MODE;
1156 xfermode = FMPI2C_AUTOEND_MODE;
1173 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)(hfmpi2c->
XferSize + 1U), xfermode,
1174 FMPI2C_GENERATE_START_WRITE);
1180 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode,
1181 FMPI2C_GENERATE_START_WRITE);
1187 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1203 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK)
1208 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1210 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
1211 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE,
1212 FMPI2C_NO_STARTSTOP);
1217 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
1218 FMPI2C_NO_STARTSTOP);
1225 if (FMPI2C_WaitOnSTOPFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1231 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
1234 FMPI2C_RESET_CR2(hfmpi2c);
1240 __HAL_UNLOCK(hfmpi2c);
1262 uint16_t Size, uint32_t Timeout)
1269 __HAL_LOCK(hfmpi2c);
1274 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_BUSY, SET, FMPI2C_TIMEOUT_BUSY, tickstart) != HAL_OK)
1281 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1290 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1293 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE,
1294 FMPI2C_GENERATE_START_READ);
1299 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
1300 FMPI2C_GENERATE_START_READ);
1306 if (FMPI2C_WaitOnRXNEFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1323 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK)
1328 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1330 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
1331 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE,
1332 FMPI2C_NO_STARTSTOP);
1337 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
1338 FMPI2C_NO_STARTSTOP);
1345 if (FMPI2C_WaitOnSTOPFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1351 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
1354 FMPI2C_RESET_CR2(hfmpi2c);
1360 __HAL_UNLOCK(hfmpi2c);
1383 uint16_t tmpXferCount;
1384 HAL_StatusTypeDef error;
1388 if ((pData == NULL) || (Size == 0U))
1390 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
1394 __HAL_LOCK(hfmpi2c);
1401 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1409 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
1412 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK)
1415 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1433 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
1439 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK)
1442 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1447 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
1451 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_DIR, RESET, Timeout, tickstart) != HAL_OK)
1454 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1461 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1464 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1478 error = FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_AF, RESET, Timeout, tickstart);
1480 if (error != HAL_OK)
1487 if ((hfmpi2c->
ErrorCode == HAL_FMPI2C_ERROR_AF) && (tmpXferCount == 0U))
1490 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1495 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1502 FMPI2C_Flush_TXDR(hfmpi2c);
1505 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
1508 if (FMPI2C_WaitOnSTOPFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1511 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1517 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
1521 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK)
1524 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1529 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1535 __HAL_UNLOCK(hfmpi2c);
1561 if ((pData == NULL) || (Size == 0U))
1563 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
1567 __HAL_LOCK(hfmpi2c);
1574 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1583 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
1586 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_ADDR, RESET, Timeout, tickstart) != HAL_OK)
1589 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1594 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
1597 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_DIR, SET, Timeout, tickstart) != HAL_OK)
1600 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1607 if (FMPI2C_WaitOnRXNEFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1610 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1613 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_RXNE) == SET)
1639 if (FMPI2C_WaitOnSTOPFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
1642 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1647 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
1650 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_BUSY, SET, Timeout, tickstart) != HAL_OK)
1653 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1658 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
1664 __HAL_UNLOCK(hfmpi2c);
1691 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
1697 __HAL_LOCK(hfmpi2c);
1701 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1707 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
1709 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1711 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
1712 xfermode = FMPI2C_RELOAD_MODE;
1717 xfermode = FMPI2C_AUTOEND_MODE;
1734 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)(hfmpi2c->
XferSize + 1U), xfermode,
1735 FMPI2C_GENERATE_START_WRITE);
1739 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode,
1740 FMPI2C_GENERATE_START_WRITE);
1744 __HAL_UNLOCK(hfmpi2c);
1754 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
1781 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
1787 __HAL_LOCK(hfmpi2c);
1791 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1797 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
1799 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1802 xfermode = FMPI2C_RELOAD_MODE;
1807 xfermode = FMPI2C_AUTOEND_MODE;
1812 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, FMPI2C_GENERATE_START_READ);
1815 __HAL_UNLOCK(hfmpi2c);
1825 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
1848 __HAL_LOCK(hfmpi2c);
1852 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1855 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
1862 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_IT;
1879 __HAL_UNLOCK(hfmpi2c);
1889 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT | FMPI2C_XFER_LISTEN_IT);
1912 __HAL_LOCK(hfmpi2c);
1916 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1919 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
1926 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_IT;
1929 __HAL_UNLOCK(hfmpi2c);
1939 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT | FMPI2C_XFER_LISTEN_IT);
1963 HAL_StatusTypeDef dmaxferstatus;
1964 uint32_t sizetoxfer = 0U;
1968 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
1974 __HAL_LOCK(hfmpi2c);
1978 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
1984 hfmpi2c->
XferISR = FMPI2C_Master_ISR_DMA;
1986 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
1988 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
1989 xfermode = FMPI2C_RELOAD_MODE;
1994 xfermode = FMPI2C_AUTOEND_MODE;
2013 if (hfmpi2c->
hdmatx != NULL)
2036 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
2039 __HAL_UNLOCK(hfmpi2c);
2044 if (dmaxferstatus == HAL_OK)
2048 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)(hfmpi2c->
XferSize + 1U),
2049 xfermode, FMPI2C_GENERATE_START_WRITE);
2055 __HAL_UNLOCK(hfmpi2c);
2061 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_ERROR_IT);
2064 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
2073 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
2076 __HAL_UNLOCK(hfmpi2c);
2084 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
2088 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)sizetoxfer, FMPI2C_AUTOEND_MODE,
2089 FMPI2C_GENERATE_START_WRITE);
2092 __HAL_UNLOCK(hfmpi2c);
2101 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
2126 HAL_StatusTypeDef dmaxferstatus;
2130 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
2136 __HAL_LOCK(hfmpi2c);
2140 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2146 hfmpi2c->
XferISR = FMPI2C_Master_ISR_DMA;
2148 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
2151 xfermode = FMPI2C_RELOAD_MODE;
2156 xfermode = FMPI2C_AUTOEND_MODE;
2161 if (hfmpi2c->
hdmarx != NULL)
2184 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
2187 __HAL_UNLOCK(hfmpi2c);
2192 if (dmaxferstatus == HAL_OK)
2196 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, FMPI2C_GENERATE_START_READ);
2202 __HAL_UNLOCK(hfmpi2c);
2208 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_ERROR_IT);
2211 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
2220 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
2223 __HAL_UNLOCK(hfmpi2c);
2231 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
2235 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
2236 FMPI2C_GENERATE_START_READ);
2239 __HAL_UNLOCK(hfmpi2c);
2248 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
2269 HAL_StatusTypeDef dmaxferstatus;
2273 if ((pData == NULL) || (Size == 0U))
2279 __HAL_LOCK(hfmpi2c);
2283 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2290 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_DMA;
2308 if (hfmpi2c->
hdmatx != NULL)
2332 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
2335 __HAL_UNLOCK(hfmpi2c);
2340 if (dmaxferstatus == HAL_OK)
2343 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
2346 __HAL_UNLOCK(hfmpi2c);
2352 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
2355 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
2364 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
2367 __HAL_UNLOCK(hfmpi2c);
2375 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
2378 __HAL_UNLOCK(hfmpi2c);
2384 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
2405 HAL_StatusTypeDef dmaxferstatus;
2409 if ((pData == NULL) || (Size == 0U))
2415 __HAL_LOCK(hfmpi2c);
2419 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2426 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_DMA;
2428 if (hfmpi2c->
hdmarx != NULL)
2451 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
2454 __HAL_UNLOCK(hfmpi2c);
2459 if (dmaxferstatus == HAL_OK)
2462 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
2465 __HAL_UNLOCK(hfmpi2c);
2471 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
2474 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
2483 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
2486 __HAL_UNLOCK(hfmpi2c);
2513 uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2518 assert_param(IS_FMPI2C_MEMADD_SIZE(MemAddSize));
2522 if ((pData == NULL) || (Size == 0U))
2524 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
2529 __HAL_LOCK(hfmpi2c);
2534 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_BUSY, SET, FMPI2C_TIMEOUT_BUSY, tickstart) != HAL_OK)
2541 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2549 if (FMPI2C_RequestMemoryWrite(hfmpi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK)
2552 __HAL_UNLOCK(hfmpi2c);
2557 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
2559 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
2560 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE, FMPI2C_NO_STARTSTOP);
2565 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE, FMPI2C_NO_STARTSTOP);
2571 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
2588 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK)
2593 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
2595 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
2596 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE,
2597 FMPI2C_NO_STARTSTOP);
2602 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
2603 FMPI2C_NO_STARTSTOP);
2611 if (FMPI2C_WaitOnSTOPFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
2617 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
2620 FMPI2C_RESET_CR2(hfmpi2c);
2626 __HAL_UNLOCK(hfmpi2c);
2650 uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
2655 assert_param(IS_FMPI2C_MEMADD_SIZE(MemAddSize));
2659 if ((pData == NULL) || (Size == 0U))
2661 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
2666 __HAL_LOCK(hfmpi2c);
2671 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_BUSY, SET, FMPI2C_TIMEOUT_BUSY, tickstart) != HAL_OK)
2678 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2686 if (FMPI2C_RequestMemoryRead(hfmpi2c, DevAddress, MemAddress, MemAddSize, Timeout, tickstart) != HAL_OK)
2689 __HAL_UNLOCK(hfmpi2c);
2695 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
2698 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE,
2699 FMPI2C_GENERATE_START_READ);
2704 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
2705 FMPI2C_GENERATE_START_READ);
2711 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_RXNE, RESET, Timeout, tickstart) != HAL_OK)
2728 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_TCR, RESET, Timeout, tickstart) != HAL_OK)
2733 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
2736 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t) hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE,
2737 FMPI2C_NO_STARTSTOP);
2742 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
2743 FMPI2C_NO_STARTSTOP);
2750 if (FMPI2C_WaitOnSTOPFlagUntilTimeout(hfmpi2c, Timeout, tickstart) != HAL_OK)
2756 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
2759 FMPI2C_RESET_CR2(hfmpi2c);
2765 __HAL_UNLOCK(hfmpi2c);
2787 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
2790 assert_param(IS_FMPI2C_MEMADD_SIZE(MemAddSize));
2794 if ((pData == NULL) || (Size == 0U))
2796 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
2800 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
2806 __HAL_LOCK(hfmpi2c);
2810 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2817 hfmpi2c->
XferISR = FMPI2C_Mem_ISR_IT;
2821 if (MemAddSize == FMPI2C_MEMADD_SIZE_8BIT)
2824 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
2833 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_MSB(MemAddress);
2836 hfmpi2c->
Memaddress = FMPI2C_MEM_ADD_LSB(MemAddress);
2839 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)MemAddSize, FMPI2C_RELOAD_MODE, FMPI2C_GENERATE_START_WRITE);
2842 __HAL_UNLOCK(hfmpi2c);
2852 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
2875 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
2878 assert_param(IS_FMPI2C_MEMADD_SIZE(MemAddSize));
2882 if ((pData == NULL) || (Size == 0U))
2884 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
2888 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
2894 __HAL_LOCK(hfmpi2c);
2898 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2904 hfmpi2c->
XferISR = FMPI2C_Mem_ISR_IT;
2908 if (MemAddSize == FMPI2C_MEMADD_SIZE_8BIT)
2911 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
2920 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_MSB(MemAddress);
2923 hfmpi2c->
Memaddress = FMPI2C_MEM_ADD_LSB(MemAddress);
2926 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)MemAddSize, FMPI2C_SOFTEND_MODE, FMPI2C_GENERATE_START_WRITE);
2929 __HAL_UNLOCK(hfmpi2c);
2939 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
2962 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
2964 HAL_StatusTypeDef dmaxferstatus;
2967 assert_param(IS_FMPI2C_MEMADD_SIZE(MemAddSize));
2971 if ((pData == NULL) || (Size == 0U))
2973 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
2977 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
2983 __HAL_LOCK(hfmpi2c);
2987 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
2993 hfmpi2c->
XferISR = FMPI2C_Mem_ISR_DMA;
2996 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
2998 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
3006 if (MemAddSize == FMPI2C_MEMADD_SIZE_8BIT)
3009 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
3018 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_MSB(MemAddress);
3021 hfmpi2c->
Memaddress = FMPI2C_MEM_ADD_LSB(MemAddress);
3024 if (hfmpi2c->
hdmatx != NULL)
3047 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
3050 __HAL_UNLOCK(hfmpi2c);
3055 if (dmaxferstatus == HAL_OK)
3058 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)MemAddSize, FMPI2C_RELOAD_MODE, FMPI2C_GENERATE_START_WRITE);
3061 __HAL_UNLOCK(hfmpi2c);
3070 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
3079 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
3082 __HAL_UNLOCK(hfmpi2c);
3108 uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
3110 HAL_StatusTypeDef dmaxferstatus;
3113 assert_param(IS_FMPI2C_MEMADD_SIZE(MemAddSize));
3117 if ((pData == NULL) || (Size == 0U))
3119 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
3123 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
3129 __HAL_LOCK(hfmpi2c);
3133 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3139 hfmpi2c->
XferISR = FMPI2C_Mem_ISR_DMA;
3142 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
3144 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
3152 if (MemAddSize == FMPI2C_MEMADD_SIZE_8BIT)
3155 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
3164 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_MSB(MemAddress);
3167 hfmpi2c->
Memaddress = FMPI2C_MEM_ADD_LSB(MemAddress);
3170 if (hfmpi2c->
hdmarx != NULL)
3193 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
3196 __HAL_UNLOCK(hfmpi2c);
3201 if (dmaxferstatus == HAL_OK)
3204 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)MemAddSize, FMPI2C_SOFTEND_MODE, FMPI2C_GENERATE_START_WRITE);
3207 __HAL_UNLOCK(hfmpi2c);
3216 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
3225 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
3228 __HAL_UNLOCK(hfmpi2c);
3257 __IO uint32_t FMPI2C_Trials = 0UL;
3264 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) == SET)
3270 __HAL_LOCK(hfmpi2c);
3273 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3284 tmp1 = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
3285 tmp2 = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
3287 while ((tmp1 == RESET) && (tmp2 == RESET))
3289 if (Timeout != HAL_MAX_DELAY)
3291 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
3297 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_TIMEOUT;
3300 __HAL_UNLOCK(hfmpi2c);
3306 tmp1 = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
3307 tmp2 = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
3311 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_AF) == RESET)
3314 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK)
3320 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
3326 __HAL_UNLOCK(hfmpi2c);
3333 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_STOPF, RESET, Timeout, tickstart) != HAL_OK)
3339 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
3342 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
3347 }
while (FMPI2C_Trials < Trials);
3353 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_TIMEOUT;
3356 __HAL_UNLOCK(hfmpi2c);
3379 uint16_t Size, uint32_t XferOptions)
3382 uint32_t xferrequest = FMPI2C_GENERATE_START_WRITE;
3383 uint32_t sizetoxfer = 0U;
3386 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3391 __HAL_LOCK(hfmpi2c);
3395 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3401 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
3404 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
3406 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
3407 xfermode = FMPI2C_RELOAD_MODE;
3415 if ((hfmpi2c->
XferSize > 0U) && ((XferOptions == FMPI2C_FIRST_FRAME) || \
3416 (XferOptions == FMPI2C_FIRST_AND_LAST_FRAME)))
3433 if ((hfmpi2c->
PreviousState == FMPI2C_STATE_MASTER_BUSY_TX) && \
3434 (IS_FMPI2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3436 xferrequest = FMPI2C_NO_STARTSTOP;
3441 FMPI2C_ConvertOtherXferOptions(hfmpi2c);
3444 if (hfmpi2c->
XferCount <= MAX_NBYTE_SIZE)
3451 if ((XferOptions == FMPI2C_FIRST_FRAME) || (XferOptions == FMPI2C_FIRST_AND_LAST_FRAME))
3453 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)sizetoxfer, xfermode, xferrequest);
3457 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, xferrequest);
3461 __HAL_UNLOCK(hfmpi2c);
3470 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
3493 uint16_t Size, uint32_t XferOptions)
3496 uint32_t xferrequest = FMPI2C_GENERATE_START_WRITE;
3497 HAL_StatusTypeDef dmaxferstatus;
3498 uint32_t sizetoxfer = 0U;
3501 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3506 __HAL_LOCK(hfmpi2c);
3510 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3516 hfmpi2c->
XferISR = FMPI2C_Master_ISR_DMA;
3519 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
3521 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
3522 xfermode = FMPI2C_RELOAD_MODE;
3530 if ((hfmpi2c->
XferSize > 0U) && ((XferOptions == FMPI2C_FIRST_FRAME) || \
3531 (XferOptions == FMPI2C_FIRST_AND_LAST_FRAME)))
3548 if ((hfmpi2c->
PreviousState == FMPI2C_STATE_MASTER_BUSY_TX) && \
3549 (IS_FMPI2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3551 xferrequest = FMPI2C_NO_STARTSTOP;
3556 FMPI2C_ConvertOtherXferOptions(hfmpi2c);
3559 if (hfmpi2c->
XferCount <= MAX_NBYTE_SIZE)
3567 if (hfmpi2c->
hdmatx != NULL)
3590 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
3593 __HAL_UNLOCK(hfmpi2c);
3598 if (dmaxferstatus == HAL_OK)
3601 if ((XferOptions == FMPI2C_FIRST_FRAME) || (XferOptions == FMPI2C_FIRST_AND_LAST_FRAME))
3603 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)sizetoxfer, xfermode, xferrequest);
3607 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, xferrequest);
3614 __HAL_UNLOCK(hfmpi2c);
3620 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_ERROR_IT);
3623 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
3632 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
3635 __HAL_UNLOCK(hfmpi2c);
3643 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
3647 if ((XferOptions == FMPI2C_FIRST_FRAME) || (XferOptions == FMPI2C_FIRST_AND_LAST_FRAME))
3649 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)sizetoxfer, xfermode, xferrequest);
3653 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, xferrequest);
3657 __HAL_UNLOCK(hfmpi2c);
3666 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
3690 uint16_t Size, uint32_t XferOptions)
3693 uint32_t xferrequest = FMPI2C_GENERATE_START_READ;
3696 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3701 __HAL_LOCK(hfmpi2c);
3705 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3711 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
3714 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
3716 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
3717 xfermode = FMPI2C_RELOAD_MODE;
3728 if ((hfmpi2c->
PreviousState == FMPI2C_STATE_MASTER_BUSY_RX) && \
3729 (IS_FMPI2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3731 xferrequest = FMPI2C_NO_STARTSTOP;
3736 FMPI2C_ConvertOtherXferOptions(hfmpi2c);
3739 if (hfmpi2c->
XferCount <= MAX_NBYTE_SIZE)
3746 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, xferrequest);
3749 __HAL_UNLOCK(hfmpi2c);
3754 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
3777 uint16_t Size, uint32_t XferOptions)
3780 uint32_t xferrequest = FMPI2C_GENERATE_START_READ;
3781 HAL_StatusTypeDef dmaxferstatus;
3784 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3789 __HAL_LOCK(hfmpi2c);
3793 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3799 hfmpi2c->
XferISR = FMPI2C_Master_ISR_DMA;
3802 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
3804 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
3805 xfermode = FMPI2C_RELOAD_MODE;
3816 if ((hfmpi2c->
PreviousState == FMPI2C_STATE_MASTER_BUSY_RX) && \
3817 (IS_FMPI2C_TRANSFER_OTHER_OPTIONS_REQUEST(XferOptions) == 0))
3819 xferrequest = FMPI2C_NO_STARTSTOP;
3824 FMPI2C_ConvertOtherXferOptions(hfmpi2c);
3827 if (hfmpi2c->
XferCount <= MAX_NBYTE_SIZE)
3835 if (hfmpi2c->
hdmarx != NULL)
3858 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
3861 __HAL_UNLOCK(hfmpi2c);
3866 if (dmaxferstatus == HAL_OK)
3869 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, xfermode, xferrequest);
3875 __HAL_UNLOCK(hfmpi2c);
3881 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_ERROR_IT);
3884 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
3893 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
3896 __HAL_UNLOCK(hfmpi2c);
3904 hfmpi2c->
XferISR = FMPI2C_Master_ISR_IT;
3908 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_AUTOEND_MODE,
3909 FMPI2C_GENERATE_START_READ);
3912 __HAL_UNLOCK(hfmpi2c);
3921 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
3943 uint32_t XferOptions)
3949 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
3953 if ((pData == NULL) || (Size == 0U))
3955 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
3960 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_TX_IT);
3963 __HAL_LOCK(hfmpi2c);
3970 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
3973 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_RXDMAEN) == FMPI2C_CR1_RXDMAEN)
3975 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
3977 if (hfmpi2c->
hdmarx != NULL)
3995 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
3998 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
4005 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_IT;
4007 tmp = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4008 if ((FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE) && (tmp != RESET))
4012 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4016 __HAL_UNLOCK(hfmpi2c);
4022 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT | FMPI2C_XFER_LISTEN_IT);
4043 uint32_t XferOptions)
4047 HAL_StatusTypeDef dmaxferstatus;
4050 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
4054 if ((pData == NULL) || (Size == 0U))
4056 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
4061 __HAL_LOCK(hfmpi2c);
4064 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_TX_IT);
4071 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
4073 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_RXDMAEN) == FMPI2C_CR1_RXDMAEN)
4076 if (hfmpi2c->
hdmarx != NULL)
4078 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
4095 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_TXDMAEN) == FMPI2C_CR1_TXDMAEN)
4097 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
4100 if (hfmpi2c->
hdmatx != NULL)
4122 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
4125 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
4132 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_DMA;
4134 if (hfmpi2c->
hdmatx != NULL)
4157 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
4160 __HAL_UNLOCK(hfmpi2c);
4165 if (dmaxferstatus == HAL_OK)
4180 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
4183 __HAL_UNLOCK(hfmpi2c);
4188 tmp = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4189 if ((FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE) && (tmp != RESET))
4193 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4197 __HAL_UNLOCK(hfmpi2c);
4200 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
4206 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
4227 uint32_t XferOptions)
4233 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
4237 if ((pData == NULL) || (Size == 0U))
4239 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
4244 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_RX_IT);
4247 __HAL_LOCK(hfmpi2c);
4254 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
4256 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_TXDMAEN) == FMPI2C_CR1_TXDMAEN)
4258 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
4261 if (hfmpi2c->
hdmatx != NULL)
4279 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
4282 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
4289 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_IT;
4291 tmp = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4292 if ((FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_TRANSMIT) && (tmp != RESET))
4296 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4300 __HAL_UNLOCK(hfmpi2c);
4306 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT | FMPI2C_XFER_LISTEN_IT);
4327 uint32_t XferOptions)
4331 HAL_StatusTypeDef dmaxferstatus;
4334 assert_param(IS_FMPI2C_TRANSFER_OPTIONS_REQUEST(XferOptions));
4338 if ((pData == NULL) || (Size == 0U))
4340 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_INVALID_PARAM;
4345 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_RX_IT);
4348 __HAL_LOCK(hfmpi2c);
4355 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
4357 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_TXDMAEN) == FMPI2C_CR1_TXDMAEN)
4360 if (hfmpi2c->
hdmatx != NULL)
4362 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
4379 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_RXDMAEN) == FMPI2C_CR1_RXDMAEN)
4381 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
4384 if (hfmpi2c->
hdmarx != NULL)
4406 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
4409 hfmpi2c->
Instance->CR2 &= ~FMPI2C_CR2_NACK;
4416 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_DMA;
4418 if (hfmpi2c->
hdmarx != NULL)
4432 (uint32_t)pData, hfmpi2c->
XferSize);
4441 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA_PARAM;
4444 __HAL_UNLOCK(hfmpi2c);
4449 if (dmaxferstatus == HAL_OK)
4464 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_DMA;
4467 __HAL_UNLOCK(hfmpi2c);
4472 tmp = __HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4473 if ((FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_TRANSMIT) && (tmp != RESET))
4477 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
4481 __HAL_UNLOCK(hfmpi2c);
4484 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
4490 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT | FMPI2C_XFER_LISTEN_IT);
4511 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_IT;
4514 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
4538 tmp = (uint32_t)(hfmpi2c->
State) & FMPI2C_STATE_MSK;
4545 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
4568 __HAL_LOCK(hfmpi2c);
4573 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
4578 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
4591 FMPI2C_TransferConfig(hfmpi2c, DevAddress, 1, FMPI2C_AUTOEND_MODE, FMPI2C_GENERATE_STOP);
4594 __HAL_UNLOCK(hfmpi2c);
4599 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_CPLT_IT);
4628 uint32_t itflags = READ_REG(hfmpi2c->
Instance->ISR);
4629 uint32_t itsources = READ_REG(hfmpi2c->
Instance->CR1);
4634 hfmpi2c->
XferISR(hfmpi2c, itflags, itsources);
4646 uint32_t itflags = READ_REG(hfmpi2c->
Instance->ISR);
4647 uint32_t itsources = READ_REG(hfmpi2c->
Instance->CR1);
4651 if ((FMPI2C_CHECK_FLAG(itflags, FMPI2C_FLAG_BERR) != RESET) && \
4652 (FMPI2C_CHECK_IT_SOURCE(itsources, FMPI2C_IT_ERRI) != RESET))
4654 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_BERR;
4657 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_BERR);
4661 if ((FMPI2C_CHECK_FLAG(itflags, FMPI2C_FLAG_OVR) != RESET) && \
4662 (FMPI2C_CHECK_IT_SOURCE(itsources, FMPI2C_IT_ERRI) != RESET))
4664 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_OVR;
4667 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_OVR);
4671 if ((FMPI2C_CHECK_FLAG(itflags, FMPI2C_FLAG_ARLO) != RESET) && \
4672 (FMPI2C_CHECK_IT_SOURCE(itsources, FMPI2C_IT_ERRI) != RESET))
4674 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_ARLO;
4677 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ARLO);
4684 if ((tmperror & (HAL_FMPI2C_ERROR_BERR | HAL_FMPI2C_ERROR_OVR | HAL_FMPI2C_ERROR_ARLO)) != HAL_FMPI2C_ERROR_NONE)
4686 FMPI2C_ITError(hfmpi2c, tmperror);
4765 UNUSED(TransferDirection);
4766 UNUSED(AddrMatchCode);
4881 return hfmpi2c->
State;
4892 return hfmpi2c->
Mode;
4929 uint16_t devaddress;
4930 uint32_t tmpITFlags = ITFlags;
4933 __HAL_LOCK(hfmpi2c);
4935 if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_AF) != RESET) && \
4936 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_NACKI) != RESET))
4939 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
4944 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
4947 FMPI2C_Flush_TXDR(hfmpi2c);
4949 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_RXNE) != RESET) && \
4950 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_RXI) != RESET))
4953 tmpITFlags &= ~FMPI2C_FLAG_RXNE;
4964 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TC) == RESET) && \
4965 ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TXIS) != RESET) && \
4966 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TXI) != RESET)))
4981 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TCR) != RESET) && \
4982 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
4986 devaddress = (uint16_t)(hfmpi2c->
Instance->CR2 & FMPI2C_CR2_SADD);
4988 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
4991 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
4997 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
4999 FMPI2C_TransferConfig(hfmpi2c, devaddress, (uint8_t)hfmpi2c->
XferSize, FMPI2C_RELOAD_MODE, FMPI2C_NO_STARTSTOP);
5004 if (hfmpi2c->
XferOptions != FMPI2C_NO_OPTION_FRAME)
5006 FMPI2C_TransferConfig(hfmpi2c, devaddress, (uint8_t)hfmpi2c->
XferSize,
5011 FMPI2C_TransferConfig(hfmpi2c, devaddress, (uint8_t)hfmpi2c->
XferSize,
5012 FMPI2C_AUTOEND_MODE, FMPI2C_NO_STARTSTOP);
5019 if (FMPI2C_GET_STOP_MODE(hfmpi2c) != FMPI2C_AUTOEND_MODE)
5022 FMPI2C_ITMasterSeqCplt(hfmpi2c);
5028 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_SIZE);
5032 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TC) != RESET) && \
5033 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5037 if (FMPI2C_GET_STOP_MODE(hfmpi2c) != FMPI2C_AUTOEND_MODE)
5040 if (hfmpi2c->
XferOptions == FMPI2C_NO_OPTION_FRAME)
5043 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_STOP;
5048 FMPI2C_ITMasterSeqCplt(hfmpi2c);
5056 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_SIZE);
5064 if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_STOPF) != RESET) && \
5065 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_STOPI) != RESET))
5068 FMPI2C_ITMasterCplt(hfmpi2c, tmpITFlags);
5072 __HAL_UNLOCK(hfmpi2c);
5088 uint32_t direction = FMPI2C_GENERATE_START_WRITE;
5089 uint32_t tmpITFlags = ITFlags;
5092 __HAL_LOCK(hfmpi2c);
5094 if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_AF) != RESET) && \
5095 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_NACKI) != RESET))
5098 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5103 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
5106 FMPI2C_Flush_TXDR(hfmpi2c);
5108 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_RXNE) != RESET) && \
5109 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_RXI) != RESET))
5112 tmpITFlags &= ~FMPI2C_FLAG_RXNE;
5123 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TXIS) != RESET) && \
5124 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TXI) != RESET))
5146 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TCR) != RESET) && \
5147 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5151 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
5154 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
5160 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
5162 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5163 FMPI2C_RELOAD_MODE, FMPI2C_NO_STARTSTOP);
5168 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5169 FMPI2C_AUTOEND_MODE, FMPI2C_NO_STARTSTOP);
5176 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_SIZE);
5179 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TC) != RESET) && \
5180 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5183 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
5186 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
5190 direction = FMPI2C_GENERATE_START_READ;
5193 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
5196 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
5202 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
5206 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5207 FMPI2C_RELOAD_MODE, direction);
5214 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5215 FMPI2C_AUTOEND_MODE, direction);
5223 if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_STOPF) != RESET) && \
5224 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_STOPI) != RESET))
5227 FMPI2C_ITMasterCplt(hfmpi2c, tmpITFlags);
5231 __HAL_UNLOCK(hfmpi2c);
5248 uint32_t tmpITFlags = ITFlags;
5251 __HAL_LOCK(hfmpi2c);
5254 if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_STOPF) != RESET) && \
5255 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_STOPI) != RESET))
5258 FMPI2C_ITSlaveCplt(hfmpi2c, tmpITFlags);
5260 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_AF) != RESET) && \
5261 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_NACKI) != RESET))
5274 FMPI2C_ITListenCplt(hfmpi2c, tmpITFlags);
5279 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5282 FMPI2C_Flush_TXDR(hfmpi2c);
5286 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
5291 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5298 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5301 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
5303 if ((tmpoptions == FMPI2C_FIRST_FRAME) || (tmpoptions == FMPI2C_NEXT_FRAME))
5306 FMPI2C_ITError(hfmpi2c, hfmpi2c->
ErrorCode);
5310 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_RXNE) != RESET) && \
5311 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_RXI) != RESET))
5326 (tmpoptions != FMPI2C_NO_OPTION_FRAME))
5329 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
5332 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_ADDR) != RESET) && \
5333 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_ADDRI) != RESET))
5335 FMPI2C_ITAddrCplt(hfmpi2c, tmpITFlags);
5337 else if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_TXIS) != RESET) && \
5338 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TXI) != RESET))
5357 if ((tmpoptions == FMPI2C_NEXT_FRAME) || (tmpoptions == FMPI2C_FIRST_FRAME))
5361 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
5371 __HAL_UNLOCK(hfmpi2c);
5387 uint16_t devaddress;
5391 __HAL_LOCK(hfmpi2c);
5393 if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_AF) != RESET) && \
5394 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_NACKI) != RESET))
5397 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5400 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
5405 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_CPLT_IT);
5408 FMPI2C_Flush_TXDR(hfmpi2c);
5410 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_TCR) != RESET) && \
5411 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5414 __HAL_FMPI2C_DISABLE_IT(hfmpi2c, FMPI2C_IT_TCI);
5419 devaddress = (uint16_t)(hfmpi2c->
Instance->CR2 & FMPI2C_CR2_SADD);
5422 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
5425 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
5431 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
5433 xfermode = FMPI2C_RELOAD_MODE;
5438 if (hfmpi2c->
XferOptions != FMPI2C_NO_OPTION_FRAME)
5444 xfermode = FMPI2C_AUTOEND_MODE;
5449 FMPI2C_TransferConfig(hfmpi2c, devaddress, (uint8_t)hfmpi2c->
XferSize, xfermode, FMPI2C_NO_STARTSTOP);
5457 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
5461 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
5467 if (FMPI2C_GET_STOP_MODE(hfmpi2c) != FMPI2C_AUTOEND_MODE)
5470 FMPI2C_ITMasterSeqCplt(hfmpi2c);
5476 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_SIZE);
5480 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_TC) != RESET) && \
5481 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5485 if (FMPI2C_GET_STOP_MODE(hfmpi2c) != FMPI2C_AUTOEND_MODE)
5488 if (hfmpi2c->
XferOptions == FMPI2C_NO_OPTION_FRAME)
5491 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_STOP;
5496 FMPI2C_ITMasterSeqCplt(hfmpi2c);
5504 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_SIZE);
5507 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_STOPF) != RESET) && \
5508 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_STOPI) != RESET))
5511 FMPI2C_ITMasterCplt(hfmpi2c, ITFlags);
5519 __HAL_UNLOCK(hfmpi2c);
5535 uint32_t direction = FMPI2C_GENERATE_START_WRITE;
5538 __HAL_LOCK(hfmpi2c);
5540 if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_AF) != RESET) && \
5541 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_NACKI) != RESET))
5544 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5547 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
5552 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_CPLT_IT);
5555 FMPI2C_Flush_TXDR(hfmpi2c);
5557 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_TXIS) != RESET) && \
5558 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TXI) != RESET))
5566 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_TCR) != RESET) && \
5567 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5570 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
5573 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_ERROR_IT);
5578 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
5581 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
5587 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
5589 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5590 FMPI2C_RELOAD_MODE, FMPI2C_NO_STARTSTOP);
5595 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5596 FMPI2C_AUTOEND_MODE, FMPI2C_NO_STARTSTOP);
5605 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
5609 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
5616 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_SIZE);
5619 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_TC) != RESET) && \
5620 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_TCI) != RESET))
5623 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
5626 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_ERROR_IT);
5630 direction = FMPI2C_GENERATE_START_READ;
5633 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
5636 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
5642 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
5646 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5647 FMPI2C_RELOAD_MODE, direction);
5654 FMPI2C_TransferConfig(hfmpi2c, (uint16_t)hfmpi2c->
Devaddress, (uint8_t)hfmpi2c->
XferSize,
5655 FMPI2C_AUTOEND_MODE, direction);
5664 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_RXDMAEN;
5668 hfmpi2c->
Instance->CR1 |= FMPI2C_CR1_TXDMAEN;
5671 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_STOPF) != RESET) && \
5672 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_STOPI) != RESET))
5675 FMPI2C_ITMasterCplt(hfmpi2c, ITFlags);
5683 __HAL_UNLOCK(hfmpi2c);
5700 uint32_t treatdmanack = 0U;
5704 __HAL_LOCK(hfmpi2c);
5707 if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_STOPF) != RESET) && \
5708 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_STOPI) != RESET))
5711 FMPI2C_ITSlaveCplt(hfmpi2c, ITFlags);
5713 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_AF) != RESET) && \
5714 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_NACKI) != RESET))
5720 if ((FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_CR1_TXDMAEN) != RESET) ||
5721 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_CR1_RXDMAEN) != RESET))
5724 if (hfmpi2c->
hdmarx != NULL)
5726 if (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_CR1_RXDMAEN) != RESET)
5728 if (FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmarx) == 0U)
5736 if (hfmpi2c->
hdmatx != NULL)
5738 if (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_CR1_TXDMAEN) != RESET)
5740 if (FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmatx) == 0U)
5747 if (treatdmanack == 1U)
5754 FMPI2C_ITListenCplt(hfmpi2c, ITFlags);
5759 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5762 FMPI2C_Flush_TXDR(hfmpi2c);
5766 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
5771 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5778 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5781 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
5784 tmpstate = hfmpi2c->
State;
5786 if ((tmpoptions == FMPI2C_FIRST_FRAME) || (tmpoptions == FMPI2C_NEXT_FRAME))
5802 FMPI2C_ITError(hfmpi2c, hfmpi2c->
ErrorCode);
5809 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
5812 else if ((FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_ADDR) != RESET) && \
5813 (FMPI2C_CHECK_IT_SOURCE(ITSources, FMPI2C_IT_ADDRI) != RESET))
5815 FMPI2C_ITAddrCplt(hfmpi2c, ITFlags);
5823 __HAL_UNLOCK(hfmpi2c);
5840 static HAL_StatusTypeDef FMPI2C_RequestMemoryWrite(
FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress,
5841 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
5844 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)MemAddSize, FMPI2C_RELOAD_MODE, FMPI2C_GENERATE_START_WRITE);
5847 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, Tickstart) != HAL_OK)
5853 if (MemAddSize == FMPI2C_MEMADD_SIZE_8BIT)
5856 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
5862 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_MSB(MemAddress);
5865 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, Tickstart) != HAL_OK)
5871 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
5875 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_TCR, RESET, Timeout, Tickstart) != HAL_OK)
5895 static HAL_StatusTypeDef FMPI2C_RequestMemoryRead(
FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress,
5896 uint16_t MemAddress, uint16_t MemAddSize, uint32_t Timeout,
5899 FMPI2C_TransferConfig(hfmpi2c, DevAddress, (uint8_t)MemAddSize, FMPI2C_SOFTEND_MODE, FMPI2C_GENERATE_START_WRITE);
5902 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, Tickstart) != HAL_OK)
5908 if (MemAddSize == FMPI2C_MEMADD_SIZE_8BIT)
5911 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
5917 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_MSB(MemAddress);
5920 if (FMPI2C_WaitOnTXISFlagUntilTimeout(hfmpi2c, Timeout, Tickstart) != HAL_OK)
5926 hfmpi2c->
Instance->TXDR = FMPI2C_MEM_ADD_LSB(MemAddress);
5930 if (FMPI2C_WaitOnFlagUntilTimeout(hfmpi2c, FMPI2C_FLAG_TC, RESET, Timeout, Tickstart) != HAL_OK)
5946 uint8_t transferdirection;
5947 uint16_t slaveaddrcode;
5948 uint16_t ownadd1code;
5949 uint16_t ownadd2code;
5957 transferdirection = FMPI2C_GET_DIR(hfmpi2c);
5958 slaveaddrcode = FMPI2C_GET_ADDR_MATCH(hfmpi2c);
5959 ownadd1code = FMPI2C_GET_OWN_ADDRESS1(hfmpi2c);
5960 ownadd2code = FMPI2C_GET_OWN_ADDRESS2(hfmpi2c);
5965 if ((slaveaddrcode & SLAVE_ADDR_MSK) == ((ownadd1code >> SLAVE_ADDR_SHIFT) & SLAVE_ADDR_MSK))
5967 slaveaddrcode = ownadd1code;
5975 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
5978 __HAL_UNLOCK(hfmpi2c);
5981 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
5982 hfmpi2c->
AddrCallback(hfmpi2c, transferdirection, slaveaddrcode);
5990 slaveaddrcode = ownadd2code;
5993 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
5996 __HAL_UNLOCK(hfmpi2c);
5999 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6000 hfmpi2c->
AddrCallback(hfmpi2c, transferdirection, slaveaddrcode);
6010 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT);
6013 __HAL_UNLOCK(hfmpi2c);
6016 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6017 hfmpi2c->
AddrCallback(hfmpi2c, transferdirection, slaveaddrcode);
6027 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ADDR);
6030 __HAL_UNLOCK(hfmpi2c);
6053 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
6056 __HAL_UNLOCK(hfmpi2c);
6059 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6073 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
6076 __HAL_UNLOCK(hfmpi2c);
6079 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6094 uint32_t tmpcr1value = READ_REG(hfmpi2c->
Instance->CR1);
6100 if (FMPI2C_CHECK_IT_SOURCE(tmpcr1value, FMPI2C_CR1_TXDMAEN) != RESET)
6103 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
6105 else if (FMPI2C_CHECK_IT_SOURCE(tmpcr1value, FMPI2C_CR1_RXDMAEN) != RESET)
6108 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
6122 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
6125 __HAL_UNLOCK(hfmpi2c);
6128 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6142 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
6145 __HAL_UNLOCK(hfmpi2c);
6148 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6169 uint32_t tmpITFlags = ITFlags;
6170 __IO uint32_t tmpreg;
6173 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
6178 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_TX_IT);
6183 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT);
6192 FMPI2C_RESET_CR2(hfmpi2c);
6198 if (FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_AF) != RESET)
6201 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
6204 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
6211 tmpreg = (uint8_t)hfmpi2c->
Instance->RXDR;
6216 FMPI2C_Flush_TXDR(hfmpi2c);
6225 FMPI2C_ITError(hfmpi2c, hfmpi2c->
ErrorCode);
6238 __HAL_UNLOCK(hfmpi2c);
6241 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6252 __HAL_UNLOCK(hfmpi2c);
6255 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6273 __HAL_UNLOCK(hfmpi2c);
6276 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6287 __HAL_UNLOCK(hfmpi2c);
6290 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6311 uint32_t tmpcr1value = READ_REG(hfmpi2c->
Instance->CR1);
6312 uint32_t tmpITFlags = ITFlags;
6317 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
6322 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_TX_IT);
6327 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_RX_IT);
6332 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_TX_IT | FMPI2C_XFER_RX_IT);
6341 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
6344 FMPI2C_RESET_CR2(hfmpi2c);
6347 FMPI2C_Flush_TXDR(hfmpi2c);
6350 if (FMPI2C_CHECK_IT_SOURCE(tmpcr1value, FMPI2C_CR1_TXDMAEN) != RESET)
6353 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
6355 if (hfmpi2c->
hdmatx != NULL)
6357 hfmpi2c->
XferCount = (uint16_t)FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmatx);
6360 else if (FMPI2C_CHECK_IT_SOURCE(tmpcr1value, FMPI2C_CR1_RXDMAEN) != RESET)
6363 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
6365 if (hfmpi2c->
hdmarx != NULL)
6367 hfmpi2c->
XferCount = (uint16_t)FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmarx);
6376 if (FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_RXNE) != RESET)
6379 tmpITFlags &= ~FMPI2C_FLAG_RXNE;
6398 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
6401 if ((FMPI2C_CHECK_FLAG(tmpITFlags, FMPI2C_FLAG_AF) != RESET) && \
6402 (FMPI2C_CHECK_IT_SOURCE(tmpcr1value, FMPI2C_IT_NACKI) != RESET))
6415 FMPI2C_ITListenCplt(hfmpi2c, tmpITFlags);
6420 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
6423 FMPI2C_Flush_TXDR(hfmpi2c);
6427 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
6432 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
6439 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
6442 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
6444 if ((tmpoptions == FMPI2C_FIRST_FRAME) || (tmpoptions == FMPI2C_NEXT_FRAME))
6447 FMPI2C_ITError(hfmpi2c, hfmpi2c->
ErrorCode);
6455 if (hfmpi2c->
ErrorCode != HAL_FMPI2C_ERROR_NONE)
6458 FMPI2C_ITError(hfmpi2c, hfmpi2c->
ErrorCode);
6464 FMPI2C_ITListenCplt(hfmpi2c, tmpITFlags);
6467 else if (hfmpi2c->
XferOptions != FMPI2C_NO_OPTION_FRAME)
6470 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
6477 __HAL_UNLOCK(hfmpi2c);
6480 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6493 __HAL_UNLOCK(hfmpi2c);
6496 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6508 __HAL_UNLOCK(hfmpi2c);
6511 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6535 if (FMPI2C_CHECK_FLAG(ITFlags, FMPI2C_FLAG_RXNE) != RESET)
6549 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
6554 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_RX_IT | FMPI2C_XFER_TX_IT);
6557 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
6560 __HAL_UNLOCK(hfmpi2c);
6563 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6580 uint32_t tmppreviousstate;
6596 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_RX_IT | FMPI2C_XFER_TX_IT);
6600 hfmpi2c->
XferISR = FMPI2C_Slave_ISR_IT;
6605 FMPI2C_Disable_IRQ(hfmpi2c, FMPI2C_XFER_LISTEN_IT | FMPI2C_XFER_RX_IT | FMPI2C_XFER_TX_IT);
6608 FMPI2C_Flush_TXDR(hfmpi2c);
6618 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF) == SET)
6620 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_AF) == SET)
6622 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
6623 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_AF;
6627 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
6637 if ((hfmpi2c->
hdmatx != NULL) && ((tmppreviousstate == FMPI2C_STATE_MASTER_BUSY_TX) || \
6638 (tmppreviousstate == FMPI2C_STATE_SLAVE_BUSY_TX)))
6640 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_TXDMAEN) == FMPI2C_CR1_TXDMAEN)
6642 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
6652 __HAL_UNLOCK(hfmpi2c);
6663 FMPI2C_TreatErrorCallback(hfmpi2c);
6667 else if ((hfmpi2c->
hdmarx != NULL) && ((tmppreviousstate == FMPI2C_STATE_MASTER_BUSY_RX) || \
6668 (tmppreviousstate == FMPI2C_STATE_SLAVE_BUSY_RX)))
6670 if ((hfmpi2c->
Instance->CR1 & FMPI2C_CR1_RXDMAEN) == FMPI2C_CR1_RXDMAEN)
6672 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
6682 __HAL_UNLOCK(hfmpi2c);
6693 FMPI2C_TreatErrorCallback(hfmpi2c);
6698 FMPI2C_TreatErrorCallback(hfmpi2c);
6715 __HAL_UNLOCK(hfmpi2c);
6718 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6729 __HAL_UNLOCK(hfmpi2c);
6732 #if (USE_HAL_FMPI2C_REGISTER_CALLBACKS == 1)
6749 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_TXIS) != RESET)
6755 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_TXE) == RESET)
6757 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_TXE);
6772 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
6778 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_CPLT_IT);
6787 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
6789 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
6801 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_DMA);
6806 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RELOAD_IT);
6823 if ((tmpoptions == FMPI2C_NEXT_FRAME) || (tmpoptions == FMPI2C_FIRST_FRAME))
6826 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_TXDMAEN;
6830 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
6852 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
6858 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_CPLT_IT);
6867 if (hfmpi2c->
XferCount > MAX_NBYTE_SIZE)
6870 if (FMPI2C_GET_DIR(hfmpi2c) == FMPI2C_DIRECTION_RECEIVE)
6876 hfmpi2c->
XferSize = MAX_NBYTE_SIZE;
6889 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_DMA);
6894 FMPI2C_Enable_IRQ(hfmpi2c, FMPI2C_XFER_RELOAD_IT);
6911 if ((FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmarx) == 0U) && \
6912 (tmpoptions != FMPI2C_NO_OPTION_FRAME))
6915 hfmpi2c->
Instance->CR1 &= ~FMPI2C_CR1_RXDMAEN;
6918 FMPI2C_ITSlaveSeqCplt(hfmpi2c);
6936 uint32_t treatdmaerror = 0U;
6940 if (hfmpi2c->
hdmatx != NULL)
6942 if (FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmatx) == 0U)
6948 if (hfmpi2c->
hdmarx != NULL)
6950 if (FMPI2C_GET_DMA_REMAIN_DATA(hfmpi2c->
hdmarx) == 0U)
6957 if (!((
HAL_DMA_GetError(hdma) == HAL_DMA_ERROR_FE)) && (treatdmaerror != 0U))
6960 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_NACK;
6963 FMPI2C_ITError(hfmpi2c, HAL_FMPI2C_ERROR_DMA);
6980 if (hfmpi2c->
hdmatx != NULL)
6984 if (hfmpi2c->
hdmarx != NULL)
6989 FMPI2C_TreatErrorCallback(hfmpi2c);
7004 static HAL_StatusTypeDef FMPI2C_WaitOnFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Flag, FlagStatus Status,
7005 uint32_t Timeout, uint32_t Tickstart)
7007 while (__HAL_FMPI2C_GET_FLAG(hfmpi2c, Flag) == Status)
7010 if (FMPI2C_IsErrorOccurred(hfmpi2c, Timeout, Tickstart) != HAL_OK)
7016 if (Timeout != HAL_MAX_DELAY)
7018 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
7020 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, Flag) == Status))
7022 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_TIMEOUT;
7027 __HAL_UNLOCK(hfmpi2c);
7044 static HAL_StatusTypeDef FMPI2C_WaitOnTXISFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
7047 while (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_TXIS) == RESET)
7050 if (FMPI2C_IsErrorOccurred(hfmpi2c, Timeout, Tickstart) != HAL_OK)
7056 if (Timeout != HAL_MAX_DELAY)
7058 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
7060 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_TXIS) == RESET))
7062 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_TIMEOUT;
7067 __HAL_UNLOCK(hfmpi2c);
7085 static HAL_StatusTypeDef FMPI2C_WaitOnSTOPFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
7088 while (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF) == RESET)
7091 if (FMPI2C_IsErrorOccurred(hfmpi2c, Timeout, Tickstart) != HAL_OK)
7097 if (((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U))
7099 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF) == RESET))
7101 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_TIMEOUT;
7106 __HAL_UNLOCK(hfmpi2c);
7123 static HAL_StatusTypeDef FMPI2C_WaitOnRXNEFlagUntilTimeout(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout,
7126 HAL_StatusTypeDef status = HAL_OK;
7128 while ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_RXNE) == RESET) && (status == HAL_OK))
7131 if (FMPI2C_IsErrorOccurred(hfmpi2c, Timeout, Tickstart) != HAL_OK)
7137 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF) == SET) && (status == HAL_OK))
7141 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_RXNE) == SET) && (hfmpi2c->
XferSize > 0U))
7149 if (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_AF) == SET)
7151 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
7152 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_AF;
7155 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
7158 FMPI2C_RESET_CR2(hfmpi2c);
7164 __HAL_UNLOCK(hfmpi2c);
7170 hfmpi2c->
ErrorCode = HAL_FMPI2C_ERROR_NONE;
7175 if ((((
HAL_GetTick() - Tickstart) > Timeout) || (Timeout == 0U)) && (status == HAL_OK))
7177 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_RXNE) == RESET))
7179 hfmpi2c->
ErrorCode |= HAL_FMPI2C_ERROR_TIMEOUT;
7183 __HAL_UNLOCK(hfmpi2c);
7200 static HAL_StatusTypeDef FMPI2C_IsErrorOccurred(
FMPI2C_HandleTypeDef *hfmpi2c, uint32_t Timeout, uint32_t Tickstart)
7202 HAL_StatusTypeDef status = HAL_OK;
7203 uint32_t itflag = hfmpi2c->
Instance->ISR;
7204 uint32_t error_code = 0;
7205 uint32_t tickstart = Tickstart;
7209 if (HAL_IS_BIT_SET(itflag, FMPI2C_FLAG_AF))
7212 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_AF);
7216 while ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF) == RESET) && (status == HAL_OK))
7219 if (Timeout != HAL_MAX_DELAY)
7221 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0U))
7223 tmp1 = (uint32_t)(hfmpi2c->
Instance->CR2 & FMPI2C_CR2_STOP);
7224 tmp2 = hfmpi2c->
Mode;
7227 if ((__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_BUSY) != RESET) && \
7228 (tmp1 != FMPI2C_CR2_STOP) && \
7232 hfmpi2c->
Instance->CR2 |= FMPI2C_CR2_STOP;
7238 while (__HAL_FMPI2C_GET_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF) == RESET)
7241 if ((
HAL_GetTick() - tickstart) > FMPI2C_TIMEOUT_STOPF)
7243 error_code |= HAL_FMPI2C_ERROR_TIMEOUT;
7255 if (status == HAL_OK)
7258 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_STOPF);
7261 error_code |= HAL_FMPI2C_ERROR_AF;
7271 if (HAL_IS_BIT_SET(itflag, FMPI2C_FLAG_BERR))
7273 error_code |= HAL_FMPI2C_ERROR_BERR;
7276 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_BERR);
7282 if (HAL_IS_BIT_SET(itflag, FMPI2C_FLAG_OVR))
7284 error_code |= HAL_FMPI2C_ERROR_OVR;
7287 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_OVR);
7293 if (HAL_IS_BIT_SET(itflag, FMPI2C_FLAG_ARLO))
7295 error_code |= HAL_FMPI2C_ERROR_ARLO;
7298 __HAL_FMPI2C_CLEAR_FLAG(hfmpi2c, FMPI2C_FLAG_ARLO);
7303 if (status != HAL_OK)
7306 FMPI2C_Flush_TXDR(hfmpi2c);
7309 FMPI2C_RESET_CR2(hfmpi2c);
7316 __HAL_UNLOCK(hfmpi2c);
7341 static void FMPI2C_TransferConfig(
FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t Size, uint32_t Mode,
7345 assert_param(IS_FMPI2C_ALL_INSTANCE(hfmpi2c->
Instance));
7346 assert_param(IS_TRANSFER_MODE(Mode));
7347 assert_param(IS_TRANSFER_REQUEST(Request));
7350 uint32_t tmp = ((uint32_t)(((uint32_t)DevAddress & FMPI2C_CR2_SADD) | \
7351 (((uint32_t)Size << FMPI2C_CR2_NBYTES_Pos) & FMPI2C_CR2_NBYTES) | \
7352 (uint32_t)Mode | (uint32_t)Request) & (~0x80000000U));
7355 MODIFY_REG(hfmpi2c->
Instance->CR2, \
7356 ((FMPI2C_CR2_SADD | FMPI2C_CR2_NBYTES | FMPI2C_CR2_RELOAD | FMPI2C_CR2_AUTOEND | \
7357 (FMPI2C_CR2_RD_WRN & (uint32_t)(Request >> (31U - FMPI2C_CR2_RD_WRN_Pos))) | \
7358 FMPI2C_CR2_START | FMPI2C_CR2_STOP)), tmp);
7370 uint32_t tmpisr = 0U;
7372 if ((hfmpi2c->
XferISR != FMPI2C_Master_ISR_DMA) && \
7373 (hfmpi2c->
XferISR != FMPI2C_Slave_ISR_DMA) && \
7374 (hfmpi2c->
XferISR != FMPI2C_Mem_ISR_DMA))
7376 if ((InterruptRequest & FMPI2C_XFER_LISTEN_IT) == FMPI2C_XFER_LISTEN_IT)
7379 tmpisr |= FMPI2C_IT_ADDRI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_ERRI;
7382 if ((InterruptRequest & FMPI2C_XFER_TX_IT) == FMPI2C_XFER_TX_IT)
7385 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_TCI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_TXI;
7388 if ((InterruptRequest & FMPI2C_XFER_RX_IT) == FMPI2C_XFER_RX_IT)
7391 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_TCI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_RXI;
7394 if (InterruptRequest == FMPI2C_XFER_ERROR_IT)
7397 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_NACKI;
7400 if (InterruptRequest == FMPI2C_XFER_CPLT_IT)
7403 tmpisr |= FMPI2C_IT_STOPI;
7409 if ((InterruptRequest & FMPI2C_XFER_LISTEN_IT) == FMPI2C_XFER_LISTEN_IT)
7412 tmpisr |= FMPI2C_IT_ADDRI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_ERRI;
7415 if ((InterruptRequest & FMPI2C_XFER_TX_IT) == FMPI2C_XFER_TX_IT)
7418 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_TCI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_TXI;
7421 if ((InterruptRequest & FMPI2C_XFER_RX_IT) == FMPI2C_XFER_RX_IT)
7424 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_TCI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_RXI;
7427 if (InterruptRequest == FMPI2C_XFER_ERROR_IT)
7430 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_NACKI;
7433 if (InterruptRequest == FMPI2C_XFER_CPLT_IT)
7436 tmpisr |= (FMPI2C_IT_STOPI | FMPI2C_IT_TCI);
7439 if (InterruptRequest == FMPI2C_XFER_RELOAD_IT)
7442 tmpisr |= FMPI2C_IT_TCI;
7449 __HAL_FMPI2C_ENABLE_IT(hfmpi2c, tmpisr);
7461 uint32_t tmpisr = 0U;
7463 if ((InterruptRequest & FMPI2C_XFER_TX_IT) == FMPI2C_XFER_TX_IT)
7466 tmpisr |= FMPI2C_IT_TCI | FMPI2C_IT_TXI;
7471 tmpisr |= FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_ERRI;
7475 if ((InterruptRequest & FMPI2C_XFER_RX_IT) == FMPI2C_XFER_RX_IT)
7478 tmpisr |= FMPI2C_IT_TCI | FMPI2C_IT_RXI;
7483 tmpisr |= FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_ERRI;
7487 if ((InterruptRequest & FMPI2C_XFER_LISTEN_IT) == FMPI2C_XFER_LISTEN_IT)
7490 tmpisr |= FMPI2C_IT_ADDRI | FMPI2C_IT_STOPI | FMPI2C_IT_NACKI | FMPI2C_IT_ERRI;
7493 if (InterruptRequest == FMPI2C_XFER_ERROR_IT)
7496 tmpisr |= FMPI2C_IT_ERRI | FMPI2C_IT_NACKI;
7499 if (InterruptRequest == FMPI2C_XFER_CPLT_IT)
7502 tmpisr |= FMPI2C_IT_STOPI;
7505 if (InterruptRequest == FMPI2C_XFER_RELOAD_IT)
7508 tmpisr |= FMPI2C_IT_TCI;
7514 __HAL_FMPI2C_DISABLE_IT(hfmpi2c, tmpisr);
7535 else if (hfmpi2c->
XferOptions == FMPI2C_OTHER_AND_LAST_FRAME)
7537 hfmpi2c->
XferOptions = FMPI2C_FIRST_AND_LAST_FRAME;
HAL_StatusTypeDef HAL_DMA_Abort_IT(DMA_HandleTypeDef *hdma)
Aborts the DMA Transfer in Interrupt mode.
HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
Start the DMA Transfer with interrupt enabled.
uint32_t HAL_DMA_GetError(DMA_HandleTypeDef *hdma)
Return the DMA error code.
HAL_DMA_StateTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma)
Returns the DMA state.
uint32_t OwnAddress2Masks
HAL_StatusTypeDef HAL_FMPI2C_RegisterCallback(FMPI2C_HandleTypeDef *hfmpi2c, HAL_FMPI2C_CallbackIDTypeDef CallbackID, pFMPI2C_CallbackTypeDef pCallback)
Register a User FMPI2C Callback To be used instead of the weak predefined callback.
HAL_StatusTypeDef HAL_FMPI2C_DeInit(FMPI2C_HandleTypeDef *hfmpi2c)
DeInitialize the FMPI2C peripheral.
HAL_StatusTypeDef HAL_FMPI2C_RegisterAddrCallback(FMPI2C_HandleTypeDef *hfmpi2c, pFMPI2C_AddrCallbackTypeDef pCallback)
Register the Slave Address Match FMPI2C Callback To be used instead of the weak HAL_FMPI2C_AddrCallba...
void HAL_FMPI2C_MspDeInit(FMPI2C_HandleTypeDef *hfmpi2c)
DeInitialize the FMPI2C MSP.
void HAL_FMPI2C_MspInit(FMPI2C_HandleTypeDef *hfmpi2c)
Initialize the FMPI2C MSP.
HAL_StatusTypeDef HAL_FMPI2C_UnRegisterCallback(FMPI2C_HandleTypeDef *hfmpi2c, HAL_FMPI2C_CallbackIDTypeDef CallbackID)
Unregister an FMPI2C Callback FMPI2C callback is redirected to the weak predefined callback.
HAL_StatusTypeDef HAL_FMPI2C_UnRegisterAddrCallback(FMPI2C_HandleTypeDef *hfmpi2c)
UnRegister the Slave Address Match FMPI2C Callback Info Ready FMPI2C Callback is redirected to the we...
HAL_StatusTypeDef HAL_FMPI2C_Init(FMPI2C_HandleTypeDef *hfmpi2c)
Initializes the FMPI2C according to the specified parameters in the FMPI2C_InitTypeDef and initialize...
HAL_StatusTypeDef HAL_FMPI2C_Slave_Receive_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size)
Receive in slave mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Master_Seq_Receive_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in master FMPI2C mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Receive(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receive in slave mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_FMPI2C_Master_Seq_Receive_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in master FMPI2C mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_IsDeviceReady(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)
Checks if target device is ready for communication.
HAL_StatusTypeDef HAL_FMPI2C_Mem_Read(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Read an amount of data in blocking mode from a specific memory address.
HAL_StatusTypeDef HAL_FMPI2C_Master_Transmit_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Transmit in master mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Mem_Write_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Write an amount of data in non-blocking mode with DMA to a specific memory address.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Seq_Receive_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in slave/device FMPI2C mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Receive_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size)
Receive in slave mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_EnableListen_IT(FMPI2C_HandleTypeDef *hfmpi2c)
Enable the Address listen mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Master_Transmit_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Transmit in master mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_Mem_Read_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Reads an amount of data in non-blocking mode with DMA from a specific memory address.
HAL_StatusTypeDef HAL_FMPI2C_Master_Seq_Transmit_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in master FMPI2C mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_Master_Receive_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Receive in master mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Mem_Read_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Read an amount of data in non-blocking mode with Interrupt from a specific memory address.
HAL_StatusTypeDef HAL_FMPI2C_DisableListen_IT(FMPI2C_HandleTypeDef *hfmpi2c)
Disable the Address listen mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Master_Receive(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Receives in master mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_FMPI2C_Master_Transmit(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmits in master mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Transmit(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Transmits in slave mode an amount of data in blocking mode.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Seq_Transmit_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in slave/device FMPI2C mode an amount of data in non-blocking mode with Interrupt...
HAL_StatusTypeDef HAL_FMPI2C_Master_Seq_Transmit_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in master FMPI2C mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Transmit_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size)
Transmit in slave mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Seq_Transmit_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential transmit in slave/device FMPI2C mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Transmit_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size)
Transmit in slave mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Slave_Seq_Receive_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Sequential receive in slave/device FMPI2C mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Mem_Write_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
Write an amount of data in non-blocking mode with Interrupt to a specific memory address.
HAL_StatusTypeDef HAL_FMPI2C_Master_Abort_IT(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress)
Abort a master FMPI2C IT or DMA process communication with Interrupt.
HAL_StatusTypeDef HAL_FMPI2C_Master_Receive_DMA(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
Receive in master mode an amount of data in non-blocking mode with DMA.
HAL_StatusTypeDef HAL_FMPI2C_Mem_Write(FMPI2C_HandleTypeDef *hfmpi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Write an amount of data in blocking mode to a specific memory address.
HAL_FMPI2C_StateTypeDef HAL_FMPI2C_GetState(const FMPI2C_HandleTypeDef *hfmpi2c)
Return the FMPI2C handle state.
uint32_t HAL_FMPI2C_GetError(const FMPI2C_HandleTypeDef *hfmpi2c)
Return the FMPI2C error code.
HAL_FMPI2C_ModeTypeDef HAL_FMPI2C_GetMode(const FMPI2C_HandleTypeDef *hfmpi2c)
Returns the FMPI2C Master, Slave, Memory or no mode.
void HAL_FMPI2C_ER_IRQHandler(FMPI2C_HandleTypeDef *hfmpi2c)
This function handles FMPI2C error interrupt request.
void HAL_FMPI2C_MasterTxCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Master Tx Transfer completed callback.
void HAL_FMPI2C_ListenCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Listen Complete callback.
void HAL_FMPI2C_AbortCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
FMPI2C abort callback.
void HAL_FMPI2C_MemTxCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Memory Tx Transfer completed callback.
void HAL_FMPI2C_ErrorCallback(FMPI2C_HandleTypeDef *hfmpi2c)
FMPI2C error callback.
void HAL_FMPI2C_EV_IRQHandler(FMPI2C_HandleTypeDef *hfmpi2c)
This function handles FMPI2C event interrupt request.
void HAL_FMPI2C_SlaveTxCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Slave Tx Transfer completed callback.
void HAL_FMPI2C_AddrCallback(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
Slave Address Match callback.
void HAL_FMPI2C_MasterRxCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Master Rx Transfer completed callback.
void HAL_FMPI2C_SlaveRxCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Slave Rx Transfer completed callback.
void HAL_FMPI2C_MemRxCpltCallback(FMPI2C_HandleTypeDef *hfmpi2c)
Memory Rx Transfer completed callback.
__IO uint32_t PreviousState
void(* MasterRxCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
void(* MemTxCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
__IO uint32_t AddrEventCount
void(* MspInitCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
void(* AbortCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
void(* SlaveRxCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
FMPI2C_TypeDef * Instance
void(* AddrCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
void(* SlaveTxCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
__IO HAL_FMPI2C_ModeTypeDef Mode
void(* ErrorCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
__IO HAL_FMPI2C_StateTypeDef State
__IO uint32_t XferOptions
void(* MasterTxCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
DMA_HandleTypeDef * hdmarx
HAL_StatusTypeDef(* XferISR)(struct __FMPI2C_HandleTypeDef *hfmpi2c, uint32_t ITFlags, uint32_t ITSources)
DMA_HandleTypeDef * hdmatx
void(* ListenCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
void(* MemRxCpltCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
void(* MspDeInitCallback)(struct __FMPI2C_HandleTypeDef *hfmpi2c)
void(* pFMPI2C_CallbackTypeDef)(FMPI2C_HandleTypeDef *hfmpi2c)
HAL FMPI2C Callback pointer definition.
void(* pFMPI2C_AddrCallbackTypeDef)(FMPI2C_HandleTypeDef *hfmpi2c, uint8_t TransferDirection, uint16_t AddrMatchCode)
HAL_FMPI2C_CallbackIDTypeDef
HAL FMPI2C Callback ID enumeration definition.
@ HAL_FMPI2C_MASTER_TX_COMPLETE_CB_ID
@ HAL_FMPI2C_MEM_RX_COMPLETE_CB_ID
@ HAL_FMPI2C_LISTEN_COMPLETE_CB_ID
@ HAL_FMPI2C_MSPDEINIT_CB_ID
@ HAL_FMPI2C_SLAVE_RX_COMPLETE_CB_ID
@ HAL_FMPI2C_MEM_TX_COMPLETE_CB_ID
@ HAL_FMPI2C_MASTER_RX_COMPLETE_CB_ID
@ HAL_FMPI2C_SLAVE_TX_COMPLETE_CB_ID
@ HAL_FMPI2C_MSPINIT_CB_ID
uint32_t HAL_GetTick(void)
Provides a tick value in millisecond.
@ HAL_FMPI2C_STATE_LISTEN
@ HAL_FMPI2C_STATE_BUSY_RX
@ HAL_FMPI2C_STATE_BUSY_RX_LISTEN
@ HAL_FMPI2C_STATE_BUSY_TX_LISTEN
@ HAL_FMPI2C_STATE_BUSY_TX
This file contains all the functions prototypes for the HAL module driver.
DMA handle Structure definition.
void(* XferAbortCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferCpltCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferErrorCallback)(struct __DMA_HandleTypeDef *hdma)
void(* XferHalfCpltCallback)(struct __DMA_HandleTypeDef *hdma)