179 #ifdef HAL_SMBUS_MODULE_ENABLED 186 #define TIMING_CLEAR_MASK (0xF0FFFFFFUL) 187 #define HAL_TIMEOUT_ADDR (10000U) 188 #define HAL_TIMEOUT_BUSY (25U) 189 #define HAL_TIMEOUT_DIR (25U) 190 #define HAL_TIMEOUT_RXNE (25U) 191 #define HAL_TIMEOUT_STOPF (25U) 192 #define HAL_TIMEOUT_TC (25U) 193 #define HAL_TIMEOUT_TCR (25U) 194 #define HAL_TIMEOUT_TXIS (25U) 195 #define MAX_NBYTE_SIZE 255U 295 if (hsmbus->
State == HAL_SMBUS_STATE_RESET)
300 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 322 hsmbus->
State = HAL_SMBUS_STATE_BUSY;
325 __HAL_SMBUS_DISABLE(hsmbus);
333 hsmbus->
Instance->TIMEOUTR &= ~I2C_TIMEOUTR_TIMOUTEN;
334 hsmbus->
Instance->TIMEOUTR &= ~I2C_TIMEOUTR_TEXTEN;
339 hsmbus->
Instance->OAR1 &= ~I2C_OAR1_OA1EN;
357 hsmbus->
Instance->CR2 = (I2C_CR2_ADD10);
361 hsmbus->
Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK);
375 hsmbus->
Instance->CR1 |= I2C_CR1_SBC;
379 __HAL_SMBUS_ENABLE(hsmbus);
381 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
383 hsmbus->
State = HAL_SMBUS_STATE_READY;
405 hsmbus->
State = HAL_SMBUS_STATE_BUSY;
408 __HAL_SMBUS_DISABLE(hsmbus);
410 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 423 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
425 hsmbus->
State = HAL_SMBUS_STATE_RESET;
480 if (hsmbus->
State == HAL_SMBUS_STATE_READY)
485 hsmbus->
State = HAL_SMBUS_STATE_BUSY;
488 __HAL_SMBUS_DISABLE(hsmbus);
491 hsmbus->
Instance->CR1 &= ~(I2C_CR1_ANFOFF);
494 hsmbus->
Instance->CR1 |= AnalogFilter;
496 __HAL_SMBUS_ENABLE(hsmbus);
498 hsmbus->
State = HAL_SMBUS_STATE_READY;
526 if (hsmbus->
State == HAL_SMBUS_STATE_READY)
531 hsmbus->
State = HAL_SMBUS_STATE_BUSY;
534 __HAL_SMBUS_DISABLE(hsmbus);
540 tmpreg &= ~(I2C_CR1_DNF);
543 tmpreg |= DigitalFilter << I2C_CR1_DNF_Pos;
548 __HAL_SMBUS_ENABLE(hsmbus);
550 hsmbus->
State = HAL_SMBUS_STATE_READY;
563 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 584 HAL_StatusTypeDef status =
HAL_OK;
586 if (pCallback == NULL)
589 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
597 if (HAL_SMBUS_STATE_READY == hsmbus->
State)
635 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
642 else if (HAL_SMBUS_STATE_RESET == hsmbus->
State)
656 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
666 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
697 HAL_StatusTypeDef status =
HAL_OK;
702 if (HAL_SMBUS_STATE_READY == hsmbus->
State)
740 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
747 else if (HAL_SMBUS_STATE_RESET == hsmbus->
State)
761 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
771 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
792 HAL_StatusTypeDef status =
HAL_OK;
794 if (pCallback == NULL)
797 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
804 if (HAL_SMBUS_STATE_READY == hsmbus->
State)
811 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
831 HAL_StatusTypeDef status =
HAL_OK;
836 if (HAL_SMBUS_STATE_READY == hsmbus->
State)
843 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK;
919 assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions));
921 if (hsmbus->
State == HAL_SMBUS_STATE_READY)
926 hsmbus->
State = HAL_SMBUS_STATE_MASTER_BUSY_TX;
927 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
940 if (Size > MAX_NBYTE_SIZE)
963 if ((hsmbus->
PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) && (IS_SMBUS_TRANSFER_OTHER_OPTIONS_REQUEST(tmp) == 0))
979 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL)
1018 assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions));
1020 if (hsmbus->
State == HAL_SMBUS_STATE_READY)
1025 hsmbus->
State = HAL_SMBUS_STATE_MASTER_BUSY_RX;
1026 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
1040 if (Size > MAX_NBYTE_SIZE)
1063 if ((hsmbus->
PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) && (IS_SMBUS_TRANSFER_OTHER_OPTIONS_REQUEST(tmp) == 0))
1105 if (hsmbus->
State == HAL_SMBUS_STATE_READY)
1112 if (hsmbus->
PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX)
1114 hsmbus->
State = HAL_SMBUS_STATE_MASTER_BUSY_TX;
1116 else if (hsmbus->
PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX)
1118 hsmbus->
State = HAL_SMBUS_STATE_MASTER_BUSY_RX;
1126 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
1138 if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_TX)
1142 else if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_RX)
1171 assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions));
1173 if ((hsmbus->
State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN)
1175 if ((pData == NULL) || (Size == 0UL))
1177 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_INVALID_PARAM;
1187 hsmbus->
State = (HAL_SMBUS_STATE_SLAVE_BUSY_TX | HAL_SMBUS_STATE_LISTEN);
1188 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
1191 hsmbus->
Instance->CR1 |= I2C_CR1_SBC;
1194 hsmbus->
Instance->CR2 &= ~I2C_CR2_NACK;
1204 if (Size > MAX_NBYTE_SIZE)
1225 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL)
1234 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR);
1265 assert_param(IS_SMBUS_TRANSFER_OPTIONS_REQUEST(XferOptions));
1267 if ((hsmbus->
State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN)
1269 if ((pData == NULL) || (Size == 0UL))
1271 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_INVALID_PARAM;
1281 hsmbus->
State = (HAL_SMBUS_STATE_SLAVE_BUSY_RX | HAL_SMBUS_STATE_LISTEN);
1282 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
1285 hsmbus->
Instance->CR1 |= I2C_CR1_SBC;
1288 hsmbus->
Instance->CR2 &= ~I2C_CR2_NACK;
1304 if (((SMBUS_GET_PEC_MODE(hsmbus) != 0UL) && (hsmbus->
XferSize == 2U)) || (hsmbus->
XferSize == 1U))
1315 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR);
1342 hsmbus->
State = HAL_SMBUS_STATE_LISTEN;
1359 if (hsmbus->
State == HAL_SMBUS_STATE_LISTEN)
1361 hsmbus->
State = HAL_SMBUS_STATE_READY;
1383 hsmbus->
Instance->CR1 |= I2C_CR1_ALERTEN;
1386 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT);
1402 hsmbus->
Instance->CR1 &= ~I2C_CR1_ALERTEN;
1424 __IO uint32_t SMBUS_Trials = 0UL;
1429 if (hsmbus->
State == HAL_SMBUS_STATE_READY)
1431 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_BUSY) != RESET)
1439 hsmbus->
State = HAL_SMBUS_STATE_BUSY;
1440 hsmbus->
ErrorCode = HAL_SMBUS_ERROR_NONE;
1451 tmp1 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1452 tmp2 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF);
1454 while ((tmp1 == RESET) && (tmp2 == RESET))
1456 if (Timeout != HAL_MAX_DELAY)
1458 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0UL))
1461 hsmbus->
State = HAL_SMBUS_STATE_READY;
1464 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_HALTIMEOUT;
1472 tmp1 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1473 tmp2 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF);
1477 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) == RESET)
1486 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1489 hsmbus->
State = HAL_SMBUS_STATE_READY;
1505 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF);
1508 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1512 if (SMBUS_Trials == Trials)
1515 hsmbus->
Instance->CR2 |= I2C_CR2_STOP;
1524 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1530 while (SMBUS_Trials < Trials);
1532 hsmbus->
State = HAL_SMBUS_STATE_READY;
1535 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_HALTIMEOUT;
1565 uint32_t tmpisrvalue = READ_REG(hsmbus->
Instance->ISR);
1566 uint32_t tmpcr1value = READ_REG(hsmbus->
Instance->CR1);
1569 if ((SMBUS_CHECK_IT_SOURCE(tmpcr1value, (SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_TXI)) != RESET) && ((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TXIS) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TCR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TC) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)))
1572 if ((hsmbus->
State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX)
1577 else if ((hsmbus->
State & HAL_SMBUS_STATE_MASTER_BUSY_TX) == HAL_SMBUS_STATE_MASTER_BUSY_TX)
1588 if ((SMBUS_CHECK_IT_SOURCE(tmpcr1value, (SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_RXI)) != RESET) && ((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_RXNE) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TCR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_TC) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)))
1591 if ((hsmbus->
State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX)
1596 else if ((hsmbus->
State & HAL_SMBUS_STATE_MASTER_BUSY_RX) == HAL_SMBUS_STATE_MASTER_BUSY_RX)
1607 if (((SMBUS_CHECK_IT_SOURCE(tmpcr1value, SMBUS_IT_ADDRI) != RESET) || (SMBUS_CHECK_IT_SOURCE(tmpcr1value, SMBUS_IT_STOPI) != RESET) || (SMBUS_CHECK_IT_SOURCE(tmpcr1value, SMBUS_IT_NACKI) != RESET)) && ((SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_ADDR) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_STOPF) != RESET) || (SMBUS_CHECK_FLAG(tmpisrvalue, SMBUS_FLAG_AF) != RESET)))
1609 if ((hsmbus->
State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN)
1702 UNUSED(TransferDirection);
1703 UNUSED(AddrMatchCode);
1770 return hsmbus->
State;
1806 uint16_t DevAddress;
1811 if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_AF) != RESET)
1814 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF);
1818 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_ACKF;
1824 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 1830 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_STOPF) != RESET)
1836 if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_TX)
1842 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1845 SMBUS_RESET_CR2(hsmbus);
1849 __HAL_SMBUS_DISABLE(hsmbus);
1852 hsmbus->
State = HAL_SMBUS_STATE_READY;
1858 __HAL_SMBUS_ENABLE(hsmbus);
1861 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 1867 else if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_RX)
1870 if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_RXNE) != RESET)
1889 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF);
1892 SMBUS_RESET_CR2(hsmbus);
1895 hsmbus->
State = HAL_SMBUS_STATE_READY;
1901 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 1912 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_RXNE) != RESET)
1924 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_TXIS) != RESET)
1936 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_TCR) != RESET)
1940 DevAddress = (uint16_t)(hsmbus->
Instance->CR2 & I2C_CR2_SADD);
1953 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL)
1963 if (SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE)
1966 if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_TX)
1971 hsmbus->
State = HAL_SMBUS_STATE_READY;
1977 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 1983 else if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_RX)
1987 hsmbus->
State = HAL_SMBUS_STATE_READY;
1993 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2010 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_TC) != RESET)
2018 hsmbus->
Instance->CR2 |= I2C_CR2_STOP;
2021 else if (SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE)
2027 if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_TX)
2032 hsmbus->
State = HAL_SMBUS_STATE_READY;
2038 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2044 else if (hsmbus->
State == HAL_SMBUS_STATE_MASTER_BUSY_RX)
2048 hsmbus->
State = HAL_SMBUS_STATE_READY;
2054 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2090 uint8_t TransferDirection;
2091 uint16_t SlaveAddrCode;
2096 if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_AF) != RESET)
2105 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF);
2114 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF);
2119 hsmbus->
State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_TX);
2120 hsmbus->
State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_RX);
2126 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_ACKF;
2132 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2139 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_ADDR) != RESET)
2141 TransferDirection = (uint8_t)(SMBUS_GET_DIR(hsmbus));
2142 SlaveAddrCode = (uint16_t)(SMBUS_GET_ADDR_MATCH(hsmbus));
2146 __HAL_SMBUS_DISABLE_IT(hsmbus, SMBUS_IT_ADDRI);
2152 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2153 hsmbus->
AddrCallback(hsmbus, TransferDirection, SlaveAddrCode);
2158 else if ((SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_RXNE) != RESET) || (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_TCR) != RESET))
2160 if ((hsmbus->
State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX)
2186 hsmbus->
State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_RX);
2192 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2204 hsmbus->
Instance->CR2 &= ~I2C_CR2_NACK;
2207 else if ((hsmbus->
State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX)
2222 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL)
2235 else if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_TXIS) != RESET)
2259 hsmbus->
State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_TX);
2265 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2278 if (SMBUS_CHECK_FLAG(StatusFlags, SMBUS_FLAG_STOPF) != RESET)
2280 if ((hsmbus->
State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN)
2283 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET)
2305 hsmbus->
Instance->CR2 |= I2C_CR2_NACK;
2308 SMBUS_RESET_CR2(hsmbus);
2311 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF);
2314 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR);
2318 hsmbus->
State = HAL_SMBUS_STATE_READY;
2324 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2346 uint32_t tmpisr = 0UL;
2348 if ((InterruptRequest & SMBUS_IT_ALERT) == SMBUS_IT_ALERT)
2351 tmpisr |= SMBUS_IT_ERRI;
2354 if ((InterruptRequest & SMBUS_IT_ADDR) == SMBUS_IT_ADDR)
2357 tmpisr |= SMBUS_IT_ADDRI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_ERRI;
2360 if ((InterruptRequest & SMBUS_IT_TX) == SMBUS_IT_TX)
2363 tmpisr |= SMBUS_IT_ERRI | SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_TXI;
2366 if ((InterruptRequest & SMBUS_IT_RX) == SMBUS_IT_RX)
2369 tmpisr |= SMBUS_IT_ERRI | SMBUS_IT_TCI | SMBUS_IT_STOPI | SMBUS_IT_NACKI | SMBUS_IT_RXI;
2375 __HAL_SMBUS_ENABLE_IT(hsmbus, tmpisr);
2386 uint32_t tmpisr = 0UL;
2387 uint32_t tmpstate = hsmbus->
State;
2389 if ((tmpstate == HAL_SMBUS_STATE_READY) && ((InterruptRequest & SMBUS_IT_ALERT) == SMBUS_IT_ALERT))
2392 tmpisr |= SMBUS_IT_ERRI;
2395 if ((InterruptRequest & SMBUS_IT_TX) == SMBUS_IT_TX)
2398 tmpisr |= SMBUS_IT_TCI | SMBUS_IT_TXI;
2400 if ((SMBUS_GET_ALERT_ENABLED(hsmbus) == 0UL)
2401 && ((tmpstate & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN))
2404 tmpisr |= SMBUS_IT_ERRI;
2407 if ((tmpstate & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN)
2410 tmpisr |= SMBUS_IT_STOPI | SMBUS_IT_NACKI;
2414 if ((InterruptRequest & SMBUS_IT_RX) == SMBUS_IT_RX)
2417 tmpisr |= SMBUS_IT_TCI | SMBUS_IT_RXI;
2419 if ((SMBUS_GET_ALERT_ENABLED(hsmbus) == 0UL)
2420 && ((tmpstate & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN))
2423 tmpisr |= SMBUS_IT_ERRI;
2426 if ((tmpstate & HAL_SMBUS_STATE_LISTEN) != HAL_SMBUS_STATE_LISTEN)
2429 tmpisr |= SMBUS_IT_STOPI | SMBUS_IT_NACKI;
2433 if ((InterruptRequest & SMBUS_IT_ADDR) == SMBUS_IT_ADDR)
2436 tmpisr |= SMBUS_IT_ADDRI | SMBUS_IT_STOPI | SMBUS_IT_NACKI;
2438 if (SMBUS_GET_ALERT_ENABLED(hsmbus) == 0UL)
2441 tmpisr |= SMBUS_IT_ERRI;
2448 __HAL_SMBUS_DISABLE_IT(hsmbus, tmpisr);
2458 uint32_t itflags = READ_REG(hsmbus->
Instance->ISR);
2459 uint32_t itsources = READ_REG(hsmbus->
Instance->CR1);
2464 if (((itflags & SMBUS_FLAG_BERR) == SMBUS_FLAG_BERR) && ((itsources & SMBUS_IT_ERRI) == SMBUS_IT_ERRI))
2466 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_BERR;
2469 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_BERR);
2473 if (((itflags & SMBUS_FLAG_OVR) == SMBUS_FLAG_OVR) && ((itsources & SMBUS_IT_ERRI) == SMBUS_IT_ERRI))
2475 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_OVR;
2478 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_OVR);
2482 if (((itflags & SMBUS_FLAG_ARLO) == SMBUS_FLAG_ARLO) && ((itsources & SMBUS_IT_ERRI) == SMBUS_IT_ERRI))
2484 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_ARLO;
2487 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ARLO);
2491 if (((itflags & SMBUS_FLAG_TIMEOUT) == SMBUS_FLAG_TIMEOUT) && ((itsources & SMBUS_IT_ERRI) == SMBUS_IT_ERRI))
2493 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_BUSTIMEOUT;
2496 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_TIMEOUT);
2500 if (((itflags & SMBUS_FLAG_ALERT) == SMBUS_FLAG_ALERT) && ((itsources & SMBUS_IT_ERRI) == SMBUS_IT_ERRI))
2502 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_ALERT;
2505 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT);
2509 if (((itflags & SMBUS_FLAG_PECERR) == SMBUS_FLAG_PECERR) && ((itsources & SMBUS_IT_ERRI) == SMBUS_IT_ERRI))
2511 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_PECERR;
2514 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_PECERR);
2521 if ((tmperror != HAL_SMBUS_ERROR_NONE) && (tmperror != HAL_SMBUS_ERROR_ACKF))
2524 if ((tmperror & HAL_SMBUS_ERROR_ALERT) != HAL_SMBUS_ERROR_ALERT)
2527 tmpstate = hsmbus->
State;
2529 if (((tmpstate & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX)
2530 || ((tmpstate & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX))
2535 hsmbus->
State = HAL_SMBUS_STATE_LISTEN;
2540 #if (USE_HAL_SMBUS_REGISTER_CALLBACKS == 1) 2562 while ((FlagStatus)(__HAL_SMBUS_GET_FLAG(hsmbus, Flag)) == Status)
2565 if (Timeout != HAL_MAX_DELAY)
2567 if (((
HAL_GetTick() - tickstart) > Timeout) || (Timeout == 0UL))
2570 hsmbus->
State = HAL_SMBUS_STATE_READY;
2573 hsmbus->
ErrorCode |= HAL_SMBUS_ERROR_HALTIMEOUT;
2614 MODIFY_REG(hsmbus->
Instance->CR2, ((I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | (I2C_CR2_RD_WRN & (uint32_t)(Request >> (31UL - I2C_CR2_RD_WRN_Pos))) | I2C_CR2_START | I2C_CR2_STOP | I2C_CR2_PECBYTE)), \
2615 (uint32_t)(((uint32_t)DevAddress & I2C_CR2_SADD) | (((uint32_t)Size << I2C_CR2_NBYTES_Pos) & I2C_CR2_NBYTES) | (uint32_t)Mode | (uint32_t)Request));
2628 if (hsmbus->
XferOptions == SMBUS_OTHER_FRAME_NO_PEC)
2635 else if (hsmbus->
XferOptions == SMBUS_OTHER_FRAME_WITH_PEC)
2637 hsmbus->
XferOptions = SMBUS_FIRST_FRAME | SMBUS_SENDPEC_MODE;
2643 else if (hsmbus->
XferOptions == SMBUS_OTHER_AND_LAST_FRAME_NO_PEC)
2645 hsmbus->
XferOptions = SMBUS_FIRST_AND_LAST_FRAME_NO_PEC;
2651 else if (hsmbus->
XferOptions == SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC)
2653 hsmbus->
XferOptions = SMBUS_FIRST_AND_LAST_FRAME_WITH_PEC;
HAL_StatusTypeDef HAL_SMBUS_DeInit(SMBUS_HandleTypeDef *hsmbus)
DeInitialize the SMBUS peripheral.
void HAL_SMBUS_SlaveTxCpltCallback(SMBUS_HandleTypeDef *hsmbus)
Slave Tx Transfer completed callback.
void HAL_SMBUS_MspInit(SMBUS_HandleTypeDef *hsmbus)
Initialize the SMBUS MSP.
HAL_SMBUS_CallbackIDTypeDef
HAL SMBUS Callback ID enumeration definition.
HAL_StatusTypeDef HAL_SMBUS_DisableAlert_IT(SMBUS_HandleTypeDef *hsmbus)
Disable the SMBUS alert mode with Interrupt.
HAL_StatusTypeDef HAL_SMBUS_ConfigAnalogFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t AnalogFilter)
Configure Analog noise filter.
HAL_StatusTypeDef HAL_SMBUS_RegisterCallback(SMBUS_HandleTypeDef *hsmbus, HAL_SMBUS_CallbackIDTypeDef CallbackID, pSMBUS_CallbackTypeDef pCallback)
Register a User SMBUS Callback To be used instead of the weak predefined callback.
uint32_t OwnAddress2Masks
__IO uint32_t PreviousState
This file contains all the functions prototypes for the HAL module driver.
HAL_StatusTypeDef HAL_SMBUS_EnableAlert_IT(SMBUS_HandleTypeDef *hsmbus)
Enable the SMBUS alert mode with Interrupt.
static void SMBUS_ITErrorHandler(struct __SMBUS_HandleTypeDef *hsmbus)
SMBUS interrupts error handler.
static void SMBUS_TransferConfig(struct __SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t Size, uint32_t Mode, uint32_t Request)
Handle SMBUSx communication when starting transfer or during transfer (TC or TCR flag are set)...
void HAL_SMBUS_MasterTxCpltCallback(SMBUS_HandleTypeDef *hsmbus)
Master Tx Transfer completed callback.
HAL_StatusTypeDef HAL_SMBUS_EnableListen_IT(SMBUS_HandleTypeDef *hsmbus)
Enable the Address listen mode with Interrupt.
HAL_StatusTypeDef HAL_SMBUS_RegisterAddrCallback(SMBUS_HandleTypeDef *hsmbus, pSMBUS_AddrCallbackTypeDef pCallback)
Register the Slave Address Match SMBUS Callback To be used instead of the weak HAL_SMBUS_AddrCallback...
uint32_t PacketErrorCheckMode
uint32_t HAL_SMBUS_GetError(SMBUS_HandleTypeDef *hsmbus)
Return the SMBUS error code.
uint32_t HAL_GetTick(void)
Provide a tick value in millisecond.
void(* ListenCpltCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
uint32_t HAL_SMBUS_GetState(SMBUS_HandleTypeDef *hsmbus)
Return the SMBUS handle state.
void HAL_SMBUS_AddrCallback(SMBUS_HandleTypeDef *hsmbus, uint8_t TransferDirection, uint16_t AddrMatchCode)
Slave Address Match callback.
HAL_StatusTypeDef HAL_SMBUS_Master_Abort_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress)
Abort a master/host SMBUS process communication with Interrupt.
void(* pSMBUS_CallbackTypeDef)(SMBUS_HandleTypeDef *hsmbus)
HAL SMBUS Callback pointer definition.
void HAL_SMBUS_ListenCpltCallback(SMBUS_HandleTypeDef *hsmbus)
Listen Complete callback.
void HAL_SMBUS_MasterRxCpltCallback(SMBUS_HandleTypeDef *hsmbus)
Master Rx Transfer completed callback.
HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus)
Initialize the SMBUS according to the specified parameters in the SMBUS_InitTypeDef and initialize th...
void(* MspInitCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
HAL_StatusTypeDef HAL_SMBUS_UnRegisterCallback(SMBUS_HandleTypeDef *hsmbus, HAL_SMBUS_CallbackIDTypeDef CallbackID)
Unregister an SMBUS Callback SMBUS callback is redirected to the weak predefined callback.
void(* SlaveTxCpltCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
void HAL_SMBUS_EV_IRQHandler(SMBUS_HandleTypeDef *hsmbus)
Handle SMBUS event interrupt request.
void(* ErrorCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Receive in slave/device SMBUS mode an amount of data in non-blocking mode with Interrupt.
static void SMBUS_Enable_IRQ(struct __SMBUS_HandleTypeDef *hsmbus, uint32_t InterruptRequest)
Manage the enabling of Interrupts.
void(* MasterTxCpltCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
HAL_StatusTypeDef HAL_SMBUS_DisableListen_IT(SMBUS_HandleTypeDef *hsmbus)
Disable the Address listen mode with Interrupt.
HAL_StatusTypeDef HAL_SMBUS_IsDeviceReady(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)
Check if target device is ready for communication.
void(* MspDeInitCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
void HAL_SMBUS_SlaveRxCpltCallback(SMBUS_HandleTypeDef *hsmbus)
Slave Rx Transfer completed callback.
static HAL_StatusTypeDef SMBUS_Slave_ISR(struct __SMBUS_HandleTypeDef *hsmbus, uint32_t StatusFlags)
Interrupt Sub-Routine which handle the Interrupt Flags Slave Mode.
static void SMBUS_Disable_IRQ(struct __SMBUS_HandleTypeDef *hsmbus, uint32_t InterruptRequest)
Manage the disabling of Interrupts.
HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t DigitalFilter)
Configure Digital noise filter.
void HAL_SMBUS_ErrorCallback(SMBUS_HandleTypeDef *hsmbus)
SMBUS error callback.
static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(struct __SMBUS_HandleTypeDef *hsmbus, uint32_t Flag, FlagStatus Status, uint32_t Timeout)
Handle SMBUS Communication Timeout.
void HAL_SMBUS_MspDeInit(SMBUS_HandleTypeDef *hsmbus)
DeInitialize the SMBUS MSP.
void(* pSMBUS_AddrCallbackTypeDef)(SMBUS_HandleTypeDef *hsmbus, uint8_t TransferDirection, uint16_t AddrMatchCode)
void HAL_SMBUS_ER_IRQHandler(SMBUS_HandleTypeDef *hsmbus)
Handle SMBUS error interrupt request.
static HAL_StatusTypeDef SMBUS_Master_ISR(struct __SMBUS_HandleTypeDef *hsmbus, uint32_t StatusFlags)
Interrupt Sub-Routine which handle the Interrupt Flags Master Mode.
HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Transmit in slave/device SMBUS mode an amount of data in non-blocking mode with Interrupt.
HAL_StatusTypeDef HAL_SMBUS_Master_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Receive in master/host SMBUS mode an amount of data in non-blocking mode with Interrupt.
void(* MasterRxCpltCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
MODIFY_REG(hrtc->Instance->CR, RTC_CR_WUCKSEL,(uint32_t) WakeUpClock)
HAL_StatusTypeDef HAL_SMBUS_UnRegisterAddrCallback(SMBUS_HandleTypeDef *hsmbus)
UnRegister the Slave Address Match SMBUS Callback Info Ready SMBUS Callback is redirected to the weak...
HAL_StatusTypeDef HAL_SMBUS_Master_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions)
Transmit in master/host SMBUS mode an amount of data in non-blocking mode with Interrupt.
static void SMBUS_ConvertOtherXferOptions(struct __SMBUS_HandleTypeDef *hsmbus)
Convert SMBUSx OTHER_xxx XferOptions to functionnal XferOptions.
void(* SlaveRxCpltCallback)(struct __SMBUS_HandleTypeDef *hsmbus)
assert_param(IS_RTC_WAKEUP_CLOCK(WakeUpClock))
void(* AddrCallback)(struct __SMBUS_HandleTypeDef *hsmbus, uint8_t TransferDirection, uint16_t AddrMatchCode)
__IO uint32_t XferOptions