Lines Matching refs:hsmbus

212 static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(SMBUS_HandleTypeDef *hsmbus, uint32_t Flag,
216 static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus, uint32_t StatusFlags);
217 static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus, uint32_t StatusFlags);
218 static void SMBUS_ITErrorHandler(SMBUS_HandleTypeDef *hsmbus);
221 static void SMBUS_Enable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint32_t InterruptRequest);
222 static void SMBUS_Disable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint32_t InterruptRequest);
225 static void SMBUS_Flush_TXDR(SMBUS_HandleTypeDef *hsmbus);
228 static void SMBUS_TransferConfig(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t Size,
232 static void SMBUS_ConvertOtherXferOptions(SMBUS_HandleTypeDef *hsmbus);
289 HAL_StatusTypeDef HAL_SMBUS_Init(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_Init() argument
292 if (hsmbus == NULL) in HAL_SMBUS_Init()
298 assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); in HAL_SMBUS_Init()
299 assert_param(IS_SMBUS_ANALOG_FILTER(hsmbus->Init.AnalogFilter)); in HAL_SMBUS_Init()
300 assert_param(IS_SMBUS_OWN_ADDRESS1(hsmbus->Init.OwnAddress1)); in HAL_SMBUS_Init()
301 assert_param(IS_SMBUS_ADDRESSING_MODE(hsmbus->Init.AddressingMode)); in HAL_SMBUS_Init()
302 assert_param(IS_SMBUS_DUAL_ADDRESS(hsmbus->Init.DualAddressMode)); in HAL_SMBUS_Init()
303 assert_param(IS_SMBUS_OWN_ADDRESS2(hsmbus->Init.OwnAddress2)); in HAL_SMBUS_Init()
304 assert_param(IS_SMBUS_OWN_ADDRESS2_MASK(hsmbus->Init.OwnAddress2Masks)); in HAL_SMBUS_Init()
305 assert_param(IS_SMBUS_GENERAL_CALL(hsmbus->Init.GeneralCallMode)); in HAL_SMBUS_Init()
306 assert_param(IS_SMBUS_NO_STRETCH(hsmbus->Init.NoStretchMode)); in HAL_SMBUS_Init()
307 assert_param(IS_SMBUS_PEC(hsmbus->Init.PacketErrorCheckMode)); in HAL_SMBUS_Init()
308 assert_param(IS_SMBUS_PERIPHERAL_MODE(hsmbus->Init.PeripheralMode)); in HAL_SMBUS_Init()
310 if (hsmbus->State == HAL_SMBUS_STATE_RESET) in HAL_SMBUS_Init()
313 hsmbus->Lock = HAL_UNLOCKED; in HAL_SMBUS_Init()
316hsmbus->MasterTxCpltCallback = HAL_SMBUS_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback… in HAL_SMBUS_Init()
317hsmbus->MasterRxCpltCallback = HAL_SMBUS_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback… in HAL_SMBUS_Init()
318hsmbus->SlaveTxCpltCallback = HAL_SMBUS_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback … in HAL_SMBUS_Init()
319hsmbus->SlaveRxCpltCallback = HAL_SMBUS_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback … in HAL_SMBUS_Init()
320hsmbus->ListenCpltCallback = HAL_SMBUS_ListenCpltCallback; /* Legacy weak ListenCpltCallback … in HAL_SMBUS_Init()
321hsmbus->ErrorCallback = HAL_SMBUS_ErrorCallback; /* Legacy weak ErrorCallback … in HAL_SMBUS_Init()
322hsmbus->AddrCallback = HAL_SMBUS_AddrCallback; /* Legacy weak AddrCallback … in HAL_SMBUS_Init()
324 if (hsmbus->MspInitCallback == NULL) in HAL_SMBUS_Init()
326 hsmbus->MspInitCallback = HAL_SMBUS_MspInit; /* Legacy weak MspInit */ in HAL_SMBUS_Init()
330 hsmbus->MspInitCallback(hsmbus); in HAL_SMBUS_Init()
333 HAL_SMBUS_MspInit(hsmbus); in HAL_SMBUS_Init()
337 hsmbus->State = HAL_SMBUS_STATE_BUSY; in HAL_SMBUS_Init()
340 __HAL_SMBUS_DISABLE(hsmbus); in HAL_SMBUS_Init()
344 hsmbus->Instance->TIMINGR = hsmbus->Init.Timing & TIMING_CLEAR_MASK; in HAL_SMBUS_Init()
348 hsmbus->Instance->TIMEOUTR &= ~I2C_TIMEOUTR_TIMOUTEN; in HAL_SMBUS_Init()
349 hsmbus->Instance->TIMEOUTR &= ~I2C_TIMEOUTR_TEXTEN; in HAL_SMBUS_Init()
350 hsmbus->Instance->TIMEOUTR = hsmbus->Init.SMBusTimeout; in HAL_SMBUS_Init()
354 hsmbus->Instance->OAR1 &= ~I2C_OAR1_OA1EN; in HAL_SMBUS_Init()
356 if (hsmbus->Init.OwnAddress1 != 0UL) in HAL_SMBUS_Init()
358 if (hsmbus->Init.AddressingMode == SMBUS_ADDRESSINGMODE_7BIT) in HAL_SMBUS_Init()
360 hsmbus->Instance->OAR1 = (I2C_OAR1_OA1EN | hsmbus->Init.OwnAddress1); in HAL_SMBUS_Init()
364 hsmbus->Instance->OAR1 = (I2C_OAR1_OA1EN | I2C_OAR1_OA1MODE | hsmbus->Init.OwnAddress1); in HAL_SMBUS_Init()
370 if (hsmbus->Init.AddressingMode == SMBUS_ADDRESSINGMODE_10BIT) in HAL_SMBUS_Init()
372 hsmbus->Instance->CR2 = (I2C_CR2_ADD10); in HAL_SMBUS_Init()
376 hsmbus->Instance->CR2 |= (I2C_CR2_AUTOEND | I2C_CR2_NACK); in HAL_SMBUS_Init()
380 hsmbus->Instance->OAR2 = (hsmbus->Init.DualAddressMode | hsmbus->Init.OwnAddress2 | \ in HAL_SMBUS_Init()
381 (hsmbus->Init.OwnAddress2Masks << 8U)); in HAL_SMBUS_Init()
385 hsmbus->Instance->CR1 = (hsmbus->Init.GeneralCallMode | hsmbus->Init.NoStretchMode | \ in HAL_SMBUS_Init()
386 hsmbus->Init.PacketErrorCheckMode | hsmbus->Init.PeripheralMode | \ in HAL_SMBUS_Init()
387 hsmbus->Init.AnalogFilter); in HAL_SMBUS_Init()
391 if ((hsmbus->Init.PacketErrorCheckMode == SMBUS_PEC_ENABLE) && \ in HAL_SMBUS_Init()
392 ((hsmbus->Init.PeripheralMode == SMBUS_PERIPHERAL_MODE_SMBUS_SLAVE) || \ in HAL_SMBUS_Init()
393 (hsmbus->Init.PeripheralMode == SMBUS_PERIPHERAL_MODE_SMBUS_SLAVE_ARP))) in HAL_SMBUS_Init()
395 hsmbus->Instance->CR1 |= I2C_CR1_SBC; in HAL_SMBUS_Init()
399 __HAL_SMBUS_ENABLE(hsmbus); in HAL_SMBUS_Init()
401 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_Init()
402 hsmbus->PreviousState = HAL_SMBUS_STATE_READY; in HAL_SMBUS_Init()
403 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_Init()
414 HAL_StatusTypeDef HAL_SMBUS_DeInit(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_DeInit() argument
417 if (hsmbus == NULL) in HAL_SMBUS_DeInit()
423 assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); in HAL_SMBUS_DeInit()
425 hsmbus->State = HAL_SMBUS_STATE_BUSY; in HAL_SMBUS_DeInit()
428 __HAL_SMBUS_DISABLE(hsmbus); in HAL_SMBUS_DeInit()
431 if (hsmbus->MspDeInitCallback == NULL) in HAL_SMBUS_DeInit()
433 hsmbus->MspDeInitCallback = HAL_SMBUS_MspDeInit; /* Legacy weak MspDeInit */ in HAL_SMBUS_DeInit()
437 hsmbus->MspDeInitCallback(hsmbus); in HAL_SMBUS_DeInit()
440 HAL_SMBUS_MspDeInit(hsmbus); in HAL_SMBUS_DeInit()
443 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_DeInit()
444 hsmbus->PreviousState = HAL_SMBUS_STATE_RESET; in HAL_SMBUS_DeInit()
445 hsmbus->State = HAL_SMBUS_STATE_RESET; in HAL_SMBUS_DeInit()
448 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_DeInit()
459 __weak void HAL_SMBUS_MspInit(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_MspInit() argument
462 UNUSED(hsmbus); in HAL_SMBUS_MspInit()
475 __weak void HAL_SMBUS_MspDeInit(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_MspDeInit() argument
478 UNUSED(hsmbus); in HAL_SMBUS_MspDeInit()
494 HAL_StatusTypeDef HAL_SMBUS_ConfigAnalogFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t AnalogFilter) in HAL_SMBUS_ConfigAnalogFilter() argument
497 assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); in HAL_SMBUS_ConfigAnalogFilter()
500 if (hsmbus->State == HAL_SMBUS_STATE_READY) in HAL_SMBUS_ConfigAnalogFilter()
503 __HAL_LOCK(hsmbus); in HAL_SMBUS_ConfigAnalogFilter()
505 hsmbus->State = HAL_SMBUS_STATE_BUSY; in HAL_SMBUS_ConfigAnalogFilter()
508 __HAL_SMBUS_DISABLE(hsmbus); in HAL_SMBUS_ConfigAnalogFilter()
511 hsmbus->Instance->CR1 &= ~(I2C_CR1_ANFOFF); in HAL_SMBUS_ConfigAnalogFilter()
514 hsmbus->Instance->CR1 |= AnalogFilter; in HAL_SMBUS_ConfigAnalogFilter()
516 __HAL_SMBUS_ENABLE(hsmbus); in HAL_SMBUS_ConfigAnalogFilter()
518 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_ConfigAnalogFilter()
521 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_ConfigAnalogFilter()
538 HAL_StatusTypeDef HAL_SMBUS_ConfigDigitalFilter(SMBUS_HandleTypeDef *hsmbus, uint32_t DigitalFilter) in HAL_SMBUS_ConfigDigitalFilter() argument
543 assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); in HAL_SMBUS_ConfigDigitalFilter()
546 if (hsmbus->State == HAL_SMBUS_STATE_READY) in HAL_SMBUS_ConfigDigitalFilter()
549 __HAL_LOCK(hsmbus); in HAL_SMBUS_ConfigDigitalFilter()
551 hsmbus->State = HAL_SMBUS_STATE_BUSY; in HAL_SMBUS_ConfigDigitalFilter()
554 __HAL_SMBUS_DISABLE(hsmbus); in HAL_SMBUS_ConfigDigitalFilter()
557 tmpreg = hsmbus->Instance->CR1; in HAL_SMBUS_ConfigDigitalFilter()
566 hsmbus->Instance->CR1 = tmpreg; in HAL_SMBUS_ConfigDigitalFilter()
568 __HAL_SMBUS_ENABLE(hsmbus); in HAL_SMBUS_ConfigDigitalFilter()
570 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_ConfigDigitalFilter()
573 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_ConfigDigitalFilter()
605 HAL_StatusTypeDef HAL_SMBUS_RegisterCallback(SMBUS_HandleTypeDef *hsmbus, in HAL_SMBUS_RegisterCallback() argument
614 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_RegisterCallback()
619 if (HAL_SMBUS_STATE_READY == hsmbus->State) in HAL_SMBUS_RegisterCallback()
624 hsmbus->MasterTxCpltCallback = pCallback; in HAL_SMBUS_RegisterCallback()
628 hsmbus->MasterRxCpltCallback = pCallback; in HAL_SMBUS_RegisterCallback()
632 hsmbus->SlaveTxCpltCallback = pCallback; in HAL_SMBUS_RegisterCallback()
636 hsmbus->SlaveRxCpltCallback = pCallback; in HAL_SMBUS_RegisterCallback()
640 hsmbus->ListenCpltCallback = pCallback; in HAL_SMBUS_RegisterCallback()
644 hsmbus->ErrorCallback = pCallback; in HAL_SMBUS_RegisterCallback()
648 hsmbus->MspInitCallback = pCallback; in HAL_SMBUS_RegisterCallback()
652 hsmbus->MspDeInitCallback = pCallback; in HAL_SMBUS_RegisterCallback()
657 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_RegisterCallback()
664 else if (HAL_SMBUS_STATE_RESET == hsmbus->State) in HAL_SMBUS_RegisterCallback()
669 hsmbus->MspInitCallback = pCallback; in HAL_SMBUS_RegisterCallback()
673 hsmbus->MspDeInitCallback = pCallback; in HAL_SMBUS_RegisterCallback()
678 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_RegisterCallback()
688 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_RegisterCallback()
718 HAL_StatusTypeDef HAL_SMBUS_UnRegisterCallback(SMBUS_HandleTypeDef *hsmbus, in HAL_SMBUS_UnRegisterCallback() argument
723 if (HAL_SMBUS_STATE_READY == hsmbus->State) in HAL_SMBUS_UnRegisterCallback()
728hsmbus->MasterTxCpltCallback = HAL_SMBUS_MasterTxCpltCallback; /* Legacy weak MasterTxCpltCallback… in HAL_SMBUS_UnRegisterCallback()
732hsmbus->MasterRxCpltCallback = HAL_SMBUS_MasterRxCpltCallback; /* Legacy weak MasterRxCpltCallback… in HAL_SMBUS_UnRegisterCallback()
736hsmbus->SlaveTxCpltCallback = HAL_SMBUS_SlaveTxCpltCallback; /* Legacy weak SlaveTxCpltCallback … in HAL_SMBUS_UnRegisterCallback()
740hsmbus->SlaveRxCpltCallback = HAL_SMBUS_SlaveRxCpltCallback; /* Legacy weak SlaveRxCpltCallback … in HAL_SMBUS_UnRegisterCallback()
744hsmbus->ListenCpltCallback = HAL_SMBUS_ListenCpltCallback; /* Legacy weak ListenCpltCallback … in HAL_SMBUS_UnRegisterCallback()
748hsmbus->ErrorCallback = HAL_SMBUS_ErrorCallback; /* Legacy weak ErrorCallback … in HAL_SMBUS_UnRegisterCallback()
752hsmbus->MspInitCallback = HAL_SMBUS_MspInit; /* Legacy weak MspInit … in HAL_SMBUS_UnRegisterCallback()
756hsmbus->MspDeInitCallback = HAL_SMBUS_MspDeInit; /* Legacy weak MspDeInit … in HAL_SMBUS_UnRegisterCallback()
761 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_UnRegisterCallback()
768 else if (HAL_SMBUS_STATE_RESET == hsmbus->State) in HAL_SMBUS_UnRegisterCallback()
773hsmbus->MspInitCallback = HAL_SMBUS_MspInit; /* Legacy weak MspInit … in HAL_SMBUS_UnRegisterCallback()
777hsmbus->MspDeInitCallback = HAL_SMBUS_MspDeInit; /* Legacy weak MspDeInit … in HAL_SMBUS_UnRegisterCallback()
782 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_UnRegisterCallback()
792 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_UnRegisterCallback()
809 HAL_StatusTypeDef HAL_SMBUS_RegisterAddrCallback(SMBUS_HandleTypeDef *hsmbus, in HAL_SMBUS_RegisterAddrCallback() argument
817 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_RegisterAddrCallback()
822 if (HAL_SMBUS_STATE_READY == hsmbus->State) in HAL_SMBUS_RegisterAddrCallback()
824 hsmbus->AddrCallback = pCallback; in HAL_SMBUS_RegisterAddrCallback()
829 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_RegisterAddrCallback()
845 HAL_StatusTypeDef HAL_SMBUS_UnRegisterAddrCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_UnRegisterAddrCallback() argument
849 if (HAL_SMBUS_STATE_READY == hsmbus->State) in HAL_SMBUS_UnRegisterAddrCallback()
851 hsmbus->AddrCallback = HAL_SMBUS_AddrCallback; /* Legacy weak AddrCallback */ in HAL_SMBUS_UnRegisterAddrCallback()
856 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_INVALID_CALLBACK; in HAL_SMBUS_UnRegisterAddrCallback()
925 HAL_StatusTypeDef HAL_SMBUS_Master_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, in HAL_SMBUS_Master_Transmit_IT() argument
934 if (hsmbus->State == HAL_SMBUS_STATE_READY) in HAL_SMBUS_Master_Transmit_IT()
937 __HAL_LOCK(hsmbus); in HAL_SMBUS_Master_Transmit_IT()
939 hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_TX; in HAL_SMBUS_Master_Transmit_IT()
940 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_Master_Transmit_IT()
942 hsmbus->pBuffPtr = pData; in HAL_SMBUS_Master_Transmit_IT()
943 hsmbus->XferCount = Size; in HAL_SMBUS_Master_Transmit_IT()
944 hsmbus->XferOptions = XferOptions; in HAL_SMBUS_Master_Transmit_IT()
948 if (hsmbus->pBuffPtr == NULL) in HAL_SMBUS_Master_Transmit_IT()
950 hsmbus->XferOptions &= ~SMBUS_AUTOEND_MODE; in HAL_SMBUS_Master_Transmit_IT()
955 hsmbus->XferSize = MAX_NBYTE_SIZE; in HAL_SMBUS_Master_Transmit_IT()
959 hsmbus->XferSize = Size; in HAL_SMBUS_Master_Transmit_IT()
962 sizetoxfer = hsmbus->XferSize; in HAL_SMBUS_Master_Transmit_IT()
968 if (hsmbus->pBuffPtr != NULL) in HAL_SMBUS_Master_Transmit_IT()
972 hsmbus->Instance->TXDR = *hsmbus->pBuffPtr; in HAL_SMBUS_Master_Transmit_IT()
975 hsmbus->pBuffPtr++; in HAL_SMBUS_Master_Transmit_IT()
977 hsmbus->XferCount--; in HAL_SMBUS_Master_Transmit_IT()
978 hsmbus->XferSize--; in HAL_SMBUS_Master_Transmit_IT()
988 if ((sizetoxfer < hsmbus->XferCount) && (sizetoxfer == MAX_NBYTE_SIZE)) in HAL_SMBUS_Master_Transmit_IT()
990 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)sizetoxfer, in HAL_SMBUS_Master_Transmit_IT()
991 SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), in HAL_SMBUS_Master_Transmit_IT()
1000 tmp = hsmbus->XferOptions; in HAL_SMBUS_Master_Transmit_IT()
1002 if ((hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) && \ in HAL_SMBUS_Master_Transmit_IT()
1005 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)sizetoxfer, hsmbus->XferOptions, in HAL_SMBUS_Master_Transmit_IT()
1012 SMBUS_ConvertOtherXferOptions(hsmbus); in HAL_SMBUS_Master_Transmit_IT()
1015 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)sizetoxfer, in HAL_SMBUS_Master_Transmit_IT()
1016 hsmbus->XferOptions, in HAL_SMBUS_Master_Transmit_IT()
1022 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL) in HAL_SMBUS_Master_Transmit_IT()
1024 if (hsmbus->XferSize > 0U) in HAL_SMBUS_Master_Transmit_IT()
1026 hsmbus->XferSize--; in HAL_SMBUS_Master_Transmit_IT()
1027 hsmbus->XferCount--; in HAL_SMBUS_Master_Transmit_IT()
1037 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_Master_Transmit_IT()
1042 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_TX); in HAL_SMBUS_Master_Transmit_IT()
1063 HAL_StatusTypeDef HAL_SMBUS_Master_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uin… in HAL_SMBUS_Master_Receive_IT() argument
1071 if (hsmbus->State == HAL_SMBUS_STATE_READY) in HAL_SMBUS_Master_Receive_IT()
1074 __HAL_LOCK(hsmbus); in HAL_SMBUS_Master_Receive_IT()
1076 hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_RX; in HAL_SMBUS_Master_Receive_IT()
1077 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_Master_Receive_IT()
1080 hsmbus->pBuffPtr = pData; in HAL_SMBUS_Master_Receive_IT()
1081 hsmbus->XferCount = Size; in HAL_SMBUS_Master_Receive_IT()
1082 hsmbus->XferOptions = XferOptions; in HAL_SMBUS_Master_Receive_IT()
1086 if (hsmbus->pBuffPtr == NULL) in HAL_SMBUS_Master_Receive_IT()
1088 hsmbus->XferOptions &= ~SMBUS_AUTOEND_MODE; in HAL_SMBUS_Master_Receive_IT()
1093 hsmbus->XferSize = MAX_NBYTE_SIZE; in HAL_SMBUS_Master_Receive_IT()
1097 hsmbus->XferSize = Size; in HAL_SMBUS_Master_Receive_IT()
1102 if ((hsmbus->XferSize < hsmbus->XferCount) && (hsmbus->XferSize == MAX_NBYTE_SIZE)) in HAL_SMBUS_Master_Receive_IT()
1104 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)hsmbus->XferSize, in HAL_SMBUS_Master_Receive_IT()
1105 SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), in HAL_SMBUS_Master_Receive_IT()
1114 tmp = hsmbus->XferOptions; in HAL_SMBUS_Master_Receive_IT()
1116 if ((hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) && \ in HAL_SMBUS_Master_Receive_IT()
1119 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)hsmbus->XferSize, hsmbus->XferOptions, in HAL_SMBUS_Master_Receive_IT()
1126 SMBUS_ConvertOtherXferOptions(hsmbus); in HAL_SMBUS_Master_Receive_IT()
1129 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)hsmbus->XferSize, in HAL_SMBUS_Master_Receive_IT()
1130 hsmbus->XferOptions, in HAL_SMBUS_Master_Receive_IT()
1136 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_Master_Receive_IT()
1141 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_RX); in HAL_SMBUS_Master_Receive_IT()
1160 HAL_StatusTypeDef HAL_SMBUS_Master_Abort_IT(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress) in HAL_SMBUS_Master_Abort_IT() argument
1162 if (hsmbus->State == HAL_SMBUS_STATE_READY) in HAL_SMBUS_Master_Abort_IT()
1165 __HAL_LOCK(hsmbus); in HAL_SMBUS_Master_Abort_IT()
1169 if (hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_TX) in HAL_SMBUS_Master_Abort_IT()
1171 hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_TX; in HAL_SMBUS_Master_Abort_IT()
1173 else if (hsmbus->PreviousState == HAL_SMBUS_STATE_MASTER_BUSY_RX) in HAL_SMBUS_Master_Abort_IT()
1175 hsmbus->State = HAL_SMBUS_STATE_MASTER_BUSY_RX; in HAL_SMBUS_Master_Abort_IT()
1183 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_Master_Abort_IT()
1187 SMBUS_TransferConfig(hsmbus, DevAddress, 1, SMBUS_AUTOEND_MODE, SMBUS_NO_STARTSTOP); in HAL_SMBUS_Master_Abort_IT()
1190 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_Master_Abort_IT()
1195 if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) in HAL_SMBUS_Master_Abort_IT()
1197 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_TX); in HAL_SMBUS_Master_Abort_IT()
1199 else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) in HAL_SMBUS_Master_Abort_IT()
1201 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_RX); in HAL_SMBUS_Master_Abort_IT()
1225 HAL_StatusTypeDef HAL_SMBUS_Slave_Transmit_IT(SMBUS_HandleTypeDef *hsmbus, uint8_t *pData, uint16_t… in HAL_SMBUS_Slave_Transmit_IT() argument
1231 if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN) in HAL_SMBUS_Slave_Transmit_IT()
1235 hsmbus->ErrorCode = HAL_SMBUS_ERROR_INVALID_PARAM; in HAL_SMBUS_Slave_Transmit_IT()
1240 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ADDR | SMBUS_IT_TX); in HAL_SMBUS_Slave_Transmit_IT()
1243 __HAL_LOCK(hsmbus); in HAL_SMBUS_Slave_Transmit_IT()
1245 hsmbus->State = (HAL_SMBUS_STATE_SLAVE_BUSY_TX | HAL_SMBUS_STATE_LISTEN); in HAL_SMBUS_Slave_Transmit_IT()
1246 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_Slave_Transmit_IT()
1249 hsmbus->Instance->CR1 |= I2C_CR1_SBC; in HAL_SMBUS_Slave_Transmit_IT()
1252 hsmbus->Instance->CR2 &= ~I2C_CR2_NACK; in HAL_SMBUS_Slave_Transmit_IT()
1255 hsmbus->pBuffPtr = pData; in HAL_SMBUS_Slave_Transmit_IT()
1256 hsmbus->XferCount = Size; in HAL_SMBUS_Slave_Transmit_IT()
1257 hsmbus->XferOptions = XferOptions; in HAL_SMBUS_Slave_Transmit_IT()
1260 SMBUS_ConvertOtherXferOptions(hsmbus); in HAL_SMBUS_Slave_Transmit_IT()
1264 hsmbus->XferSize = MAX_NBYTE_SIZE; in HAL_SMBUS_Slave_Transmit_IT()
1268 hsmbus->XferSize = Size; in HAL_SMBUS_Slave_Transmit_IT()
1272 if ((hsmbus->XferSize < hsmbus->XferCount) && (hsmbus->XferSize == MAX_NBYTE_SIZE)) in HAL_SMBUS_Slave_Transmit_IT()
1274 SMBUS_TransferConfig(hsmbus, 0, (uint8_t)hsmbus->XferSize, in HAL_SMBUS_Slave_Transmit_IT()
1275 SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), in HAL_SMBUS_Slave_Transmit_IT()
1281 SMBUS_TransferConfig(hsmbus, 0, (uint8_t)hsmbus->XferSize, hsmbus->XferOptions, in HAL_SMBUS_Slave_Transmit_IT()
1286 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL) in HAL_SMBUS_Slave_Transmit_IT()
1288 hsmbus->XferSize--; in HAL_SMBUS_Slave_Transmit_IT()
1289 hsmbus->XferCount--; in HAL_SMBUS_Slave_Transmit_IT()
1295 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR); in HAL_SMBUS_Slave_Transmit_IT()
1298 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_Slave_Transmit_IT()
1304 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_TX | SMBUS_IT_ADDR); in HAL_SMBUS_Slave_Transmit_IT()
1323 HAL_StatusTypeDef HAL_SMBUS_Slave_Receive_IT(SMBUS_HandleTypeDef *hsmbus, uint8_t *pData, uint16_t … in HAL_SMBUS_Slave_Receive_IT() argument
1329 if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN) in HAL_SMBUS_Slave_Receive_IT()
1333 hsmbus->ErrorCode = HAL_SMBUS_ERROR_INVALID_PARAM; in HAL_SMBUS_Slave_Receive_IT()
1338 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ADDR | SMBUS_IT_RX); in HAL_SMBUS_Slave_Receive_IT()
1341 __HAL_LOCK(hsmbus); in HAL_SMBUS_Slave_Receive_IT()
1343 hsmbus->State = (HAL_SMBUS_STATE_SLAVE_BUSY_RX | HAL_SMBUS_STATE_LISTEN); in HAL_SMBUS_Slave_Receive_IT()
1344 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_Slave_Receive_IT()
1347 hsmbus->Instance->CR1 |= I2C_CR1_SBC; in HAL_SMBUS_Slave_Receive_IT()
1350 hsmbus->Instance->CR2 &= ~I2C_CR2_NACK; in HAL_SMBUS_Slave_Receive_IT()
1353 hsmbus->pBuffPtr = pData; in HAL_SMBUS_Slave_Receive_IT()
1354 hsmbus->XferSize = Size; in HAL_SMBUS_Slave_Receive_IT()
1355 hsmbus->XferCount = Size; in HAL_SMBUS_Slave_Receive_IT()
1356 hsmbus->XferOptions = XferOptions; in HAL_SMBUS_Slave_Receive_IT()
1359 SMBUS_ConvertOtherXferOptions(hsmbus); in HAL_SMBUS_Slave_Receive_IT()
1366 … if (((SMBUS_GET_PEC_MODE(hsmbus) != 0UL) && (hsmbus->XferSize == 2U)) || (hsmbus->XferSize == 1U)) in HAL_SMBUS_Slave_Receive_IT()
1368 SMBUS_TransferConfig(hsmbus, 0, (uint8_t)hsmbus->XferSize, hsmbus->XferOptions, in HAL_SMBUS_Slave_Receive_IT()
1373 … SMBUS_TransferConfig(hsmbus, 0, 1, hsmbus->XferOptions | SMBUS_RELOAD_MODE, SMBUS_NO_STARTSTOP); in HAL_SMBUS_Slave_Receive_IT()
1378 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR); in HAL_SMBUS_Slave_Receive_IT()
1381 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_Slave_Receive_IT()
1387 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_RX | SMBUS_IT_ADDR); in HAL_SMBUS_Slave_Receive_IT()
1403 HAL_StatusTypeDef HAL_SMBUS_EnableListen_IT(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_EnableListen_IT() argument
1405 hsmbus->State = HAL_SMBUS_STATE_LISTEN; in HAL_SMBUS_EnableListen_IT()
1408 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_ADDR); in HAL_SMBUS_EnableListen_IT()
1419 HAL_StatusTypeDef HAL_SMBUS_DisableListen_IT(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_DisableListen_IT() argument
1422 if (hsmbus->State == HAL_SMBUS_STATE_LISTEN) in HAL_SMBUS_DisableListen_IT()
1424 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_DisableListen_IT()
1427 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ADDR); in HAL_SMBUS_DisableListen_IT()
1443 HAL_StatusTypeDef HAL_SMBUS_EnableAlert_IT(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_EnableAlert_IT() argument
1446 hsmbus->Instance->CR1 |= I2C_CR1_ALERTEN; in HAL_SMBUS_EnableAlert_IT()
1449 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT); in HAL_SMBUS_EnableAlert_IT()
1452 SMBUS_Enable_IRQ(hsmbus, SMBUS_IT_ALERT); in HAL_SMBUS_EnableAlert_IT()
1462 HAL_StatusTypeDef HAL_SMBUS_DisableAlert_IT(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_DisableAlert_IT() argument
1465 hsmbus->Instance->CR1 &= ~I2C_CR1_ALERTEN; in HAL_SMBUS_DisableAlert_IT()
1468 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ALERT); in HAL_SMBUS_DisableAlert_IT()
1483 HAL_StatusTypeDef HAL_SMBUS_IsDeviceReady(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint32_… in HAL_SMBUS_IsDeviceReady() argument
1493 if (hsmbus->State == HAL_SMBUS_STATE_READY) in HAL_SMBUS_IsDeviceReady()
1495 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_BUSY) != RESET) in HAL_SMBUS_IsDeviceReady()
1501 __HAL_LOCK(hsmbus); in HAL_SMBUS_IsDeviceReady()
1503 hsmbus->State = HAL_SMBUS_STATE_BUSY; in HAL_SMBUS_IsDeviceReady()
1504 hsmbus->ErrorCode = HAL_SMBUS_ERROR_NONE; in HAL_SMBUS_IsDeviceReady()
1509 hsmbus->Instance->CR2 = SMBUS_GENERATE_START(hsmbus->Init.AddressingMode, DevAddress); in HAL_SMBUS_IsDeviceReady()
1515 tmp1 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF); in HAL_SMBUS_IsDeviceReady()
1516 tmp2 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF); in HAL_SMBUS_IsDeviceReady()
1525 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_IsDeviceReady()
1528 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_HALTIMEOUT; in HAL_SMBUS_IsDeviceReady()
1531 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_IsDeviceReady()
1536 tmp1 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_STOPF); in HAL_SMBUS_IsDeviceReady()
1537 tmp2 = __HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF); in HAL_SMBUS_IsDeviceReady()
1541 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_AF) == RESET) in HAL_SMBUS_IsDeviceReady()
1544 if (SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) in HAL_SMBUS_IsDeviceReady()
1550 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); in HAL_SMBUS_IsDeviceReady()
1553 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_IsDeviceReady()
1556 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_IsDeviceReady()
1563 if (SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) in HAL_SMBUS_IsDeviceReady()
1569 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF); in HAL_SMBUS_IsDeviceReady()
1572 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); in HAL_SMBUS_IsDeviceReady()
1579 hsmbus->Instance->CR2 |= I2C_CR2_STOP; in HAL_SMBUS_IsDeviceReady()
1582 if (SMBUS_WaitOnFlagUntilTimeout(hsmbus, SMBUS_FLAG_STOPF, RESET, Timeout) != HAL_OK) in HAL_SMBUS_IsDeviceReady()
1588 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); in HAL_SMBUS_IsDeviceReady()
1595 hsmbus->State = HAL_SMBUS_STATE_READY; in HAL_SMBUS_IsDeviceReady()
1598 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_HALTIMEOUT; in HAL_SMBUS_IsDeviceReady()
1601 __HAL_UNLOCK(hsmbus); in HAL_SMBUS_IsDeviceReady()
1624 void HAL_SMBUS_EV_IRQHandler(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_EV_IRQHandler() argument
1628 uint32_t tmpisrvalue = READ_REG(hsmbus->Instance->ISR); in HAL_SMBUS_EV_IRQHandler()
1629 uint32_t tmpcr1value = READ_REG(hsmbus->Instance->CR1); in HAL_SMBUS_EV_IRQHandler()
1641 if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) in HAL_SMBUS_EV_IRQHandler()
1643 (void)SMBUS_Slave_ISR(hsmbus, tmpisrvalue); in HAL_SMBUS_EV_IRQHandler()
1646 else if ((hsmbus->State & HAL_SMBUS_STATE_MASTER_BUSY_TX) == HAL_SMBUS_STATE_MASTER_BUSY_TX) in HAL_SMBUS_EV_IRQHandler()
1648 (void)SMBUS_Master_ISR(hsmbus, tmpisrvalue); in HAL_SMBUS_EV_IRQHandler()
1666 if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX) in HAL_SMBUS_EV_IRQHandler()
1668 (void)SMBUS_Slave_ISR(hsmbus, tmpisrvalue); in HAL_SMBUS_EV_IRQHandler()
1671 else if ((hsmbus->State & HAL_SMBUS_STATE_MASTER_BUSY_RX) == HAL_SMBUS_STATE_MASTER_BUSY_RX) in HAL_SMBUS_EV_IRQHandler()
1673 (void)SMBUS_Master_ISR(hsmbus, tmpisrvalue); in HAL_SMBUS_EV_IRQHandler()
1689 if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN) in HAL_SMBUS_EV_IRQHandler()
1691 (void)SMBUS_Slave_ISR(hsmbus, tmpisrvalue); in HAL_SMBUS_EV_IRQHandler()
1702 void HAL_SMBUS_ER_IRQHandler(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_ER_IRQHandler() argument
1704 SMBUS_ITErrorHandler(hsmbus); in HAL_SMBUS_ER_IRQHandler()
1713 __weak void HAL_SMBUS_MasterTxCpltCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_MasterTxCpltCallback() argument
1716 UNUSED(hsmbus); in HAL_SMBUS_MasterTxCpltCallback()
1729 __weak void HAL_SMBUS_MasterRxCpltCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_MasterRxCpltCallback() argument
1732 UNUSED(hsmbus); in HAL_SMBUS_MasterRxCpltCallback()
1744 __weak void HAL_SMBUS_SlaveTxCpltCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_SlaveTxCpltCallback() argument
1747 UNUSED(hsmbus); in HAL_SMBUS_SlaveTxCpltCallback()
1760 __weak void HAL_SMBUS_SlaveRxCpltCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_SlaveRxCpltCallback() argument
1763 UNUSED(hsmbus); in HAL_SMBUS_SlaveRxCpltCallback()
1778 __weak void HAL_SMBUS_AddrCallback(SMBUS_HandleTypeDef *hsmbus, uint8_t TransferDirection, in HAL_SMBUS_AddrCallback() argument
1782 UNUSED(hsmbus); in HAL_SMBUS_AddrCallback()
1797 __weak void HAL_SMBUS_ListenCpltCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_ListenCpltCallback() argument
1800 UNUSED(hsmbus); in HAL_SMBUS_ListenCpltCallback()
1813 __weak void HAL_SMBUS_ErrorCallback(SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_ErrorCallback() argument
1816 UNUSED(hsmbus); in HAL_SMBUS_ErrorCallback()
1848 uint32_t HAL_SMBUS_GetState(const SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_GetState() argument
1851 return hsmbus->State; in HAL_SMBUS_GetState()
1860 uint32_t HAL_SMBUS_GetError(const SMBUS_HandleTypeDef *hsmbus) in HAL_SMBUS_GetError() argument
1862 return hsmbus->ErrorCode; in HAL_SMBUS_GetError()
1885 static HAL_StatusTypeDef SMBUS_Master_ISR(SMBUS_HandleTypeDef *hsmbus, uint32_t StatusFlags) in SMBUS_Master_ISR() argument
1890 __HAL_LOCK(hsmbus); in SMBUS_Master_ISR()
1895 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF); in SMBUS_Master_ISR()
1899 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ACKF; in SMBUS_Master_ISR()
1902 SMBUS_Flush_TXDR(hsmbus); in SMBUS_Master_ISR()
1905 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
1909 hsmbus->ErrorCallback(hsmbus); in SMBUS_Master_ISR()
1911 HAL_SMBUS_ErrorCallback(hsmbus); in SMBUS_Master_ISR()
1917 SMBUS_ITErrorHandler(hsmbus); in SMBUS_Master_ISR()
1920 if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) in SMBUS_Master_ISR()
1923 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); in SMBUS_Master_ISR()
1926 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); in SMBUS_Master_ISR()
1929 SMBUS_RESET_CR2(hsmbus); in SMBUS_Master_ISR()
1933 __HAL_SMBUS_DISABLE(hsmbus); in SMBUS_Master_ISR()
1935 hsmbus->PreviousState = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
1936 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
1939 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
1942 __HAL_SMBUS_ENABLE(hsmbus); in SMBUS_Master_ISR()
1946 hsmbus->MasterTxCpltCallback(hsmbus); in SMBUS_Master_ISR()
1948 HAL_SMBUS_MasterTxCpltCallback(hsmbus); in SMBUS_Master_ISR()
1951 else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) in SMBUS_Master_ISR()
1957 *hsmbus->pBuffPtr = (uint8_t)(hsmbus->Instance->RXDR); in SMBUS_Master_ISR()
1960 hsmbus->pBuffPtr++; in SMBUS_Master_ISR()
1962 if ((hsmbus->XferSize > 0U)) in SMBUS_Master_ISR()
1964 hsmbus->XferSize--; in SMBUS_Master_ISR()
1965 hsmbus->XferCount--; in SMBUS_Master_ISR()
1970 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); in SMBUS_Master_ISR()
1973 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); in SMBUS_Master_ISR()
1976 SMBUS_RESET_CR2(hsmbus); in SMBUS_Master_ISR()
1978 hsmbus->PreviousState = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
1979 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
1982 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
1986 hsmbus->MasterRxCpltCallback(hsmbus); in SMBUS_Master_ISR()
1988 HAL_SMBUS_MasterRxCpltCallback(hsmbus); in SMBUS_Master_ISR()
1999 *hsmbus->pBuffPtr = (uint8_t)(hsmbus->Instance->RXDR); in SMBUS_Master_ISR()
2002 hsmbus->pBuffPtr++; in SMBUS_Master_ISR()
2005 hsmbus->XferSize--; in SMBUS_Master_ISR()
2006 hsmbus->XferCount--; in SMBUS_Master_ISR()
2011 hsmbus->Instance->TXDR = *hsmbus->pBuffPtr; in SMBUS_Master_ISR()
2014 hsmbus->pBuffPtr++; in SMBUS_Master_ISR()
2017 hsmbus->XferSize--; in SMBUS_Master_ISR()
2018 hsmbus->XferCount--; in SMBUS_Master_ISR()
2022 if ((hsmbus->XferCount != 0U) && (hsmbus->XferSize == 0U)) in SMBUS_Master_ISR()
2024 DevAddress = (uint16_t)(hsmbus->Instance->CR2 & I2C_CR2_SADD); in SMBUS_Master_ISR()
2026 if (hsmbus->XferCount > MAX_NBYTE_SIZE) in SMBUS_Master_ISR()
2028 SMBUS_TransferConfig(hsmbus, DevAddress, MAX_NBYTE_SIZE, in SMBUS_Master_ISR()
2029 (SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE)), in SMBUS_Master_ISR()
2031 hsmbus->XferSize = MAX_NBYTE_SIZE; in SMBUS_Master_ISR()
2035 hsmbus->XferSize = hsmbus->XferCount; in SMBUS_Master_ISR()
2036 SMBUS_TransferConfig(hsmbus, DevAddress, (uint8_t)hsmbus->XferSize, hsmbus->XferOptions, in SMBUS_Master_ISR()
2040 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL) in SMBUS_Master_ISR()
2042 hsmbus->XferSize--; in SMBUS_Master_ISR()
2043 hsmbus->XferCount--; in SMBUS_Master_ISR()
2047 else if ((hsmbus->XferCount == 0U) && (hsmbus->XferSize == 0U)) in SMBUS_Master_ISR()
2050 if (SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE) in SMBUS_Master_ISR()
2053 if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) in SMBUS_Master_ISR()
2056 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); in SMBUS_Master_ISR()
2057 hsmbus->PreviousState = hsmbus->State; in SMBUS_Master_ISR()
2058 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
2061 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
2065 hsmbus->MasterTxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2067 HAL_SMBUS_MasterTxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2070 else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) in SMBUS_Master_ISR()
2072 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); in SMBUS_Master_ISR()
2073 hsmbus->PreviousState = hsmbus->State; in SMBUS_Master_ISR()
2074 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
2077 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
2081 hsmbus->MasterRxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2083 HAL_SMBUS_MasterRxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2099 if (hsmbus->XferCount == 0U) in SMBUS_Master_ISR()
2102 if (hsmbus->pBuffPtr == NULL) in SMBUS_Master_ISR()
2105 hsmbus->Instance->CR2 |= I2C_CR2_STOP; in SMBUS_Master_ISR()
2108 else if (SMBUS_GET_STOP_MODE(hsmbus) != SMBUS_AUTOEND_MODE) in SMBUS_Master_ISR()
2114 if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_TX) in SMBUS_Master_ISR()
2117 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); in SMBUS_Master_ISR()
2118 hsmbus->PreviousState = hsmbus->State; in SMBUS_Master_ISR()
2119 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
2122 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
2126 hsmbus->MasterTxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2128 HAL_SMBUS_MasterTxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2131 else if (hsmbus->State == HAL_SMBUS_STATE_MASTER_BUSY_RX) in SMBUS_Master_ISR()
2133 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); in SMBUS_Master_ISR()
2134 hsmbus->PreviousState = hsmbus->State; in SMBUS_Master_ISR()
2135 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Master_ISR()
2138 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
2142 hsmbus->MasterRxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2144 HAL_SMBUS_MasterRxCpltCallback(hsmbus); in SMBUS_Master_ISR()
2164 __HAL_UNLOCK(hsmbus); in SMBUS_Master_ISR()
2175 static HAL_StatusTypeDef SMBUS_Slave_ISR(SMBUS_HandleTypeDef *hsmbus, uint32_t StatusFlags) in SMBUS_Slave_ISR() argument
2181 __HAL_LOCK(hsmbus); in SMBUS_Slave_ISR()
2189 if (hsmbus->XferCount == 0U) in SMBUS_Slave_ISR()
2192 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF); in SMBUS_Slave_ISR()
2195 SMBUS_Flush_TXDR(hsmbus); in SMBUS_Slave_ISR()
2198 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2204 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_AF); in SMBUS_Slave_ISR()
2208 hsmbus->PreviousState = hsmbus->State; in SMBUS_Slave_ISR()
2209 hsmbus->State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_TX); in SMBUS_Slave_ISR()
2210 hsmbus->State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_RX); in SMBUS_Slave_ISR()
2213 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX | SMBUS_IT_TX); in SMBUS_Slave_ISR()
2216 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ACKF; in SMBUS_Slave_ISR()
2219 SMBUS_Flush_TXDR(hsmbus); in SMBUS_Slave_ISR()
2222 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2226 hsmbus->ErrorCallback(hsmbus); in SMBUS_Slave_ISR()
2228 HAL_SMBUS_ErrorCallback(hsmbus); in SMBUS_Slave_ISR()
2234 TransferDirection = (uint8_t)(SMBUS_GET_DIR(hsmbus)); in SMBUS_Slave_ISR()
2235 SlaveAddrCode = (uint16_t)(SMBUS_GET_ADDR_MATCH(hsmbus)); in SMBUS_Slave_ISR()
2239 __HAL_SMBUS_DISABLE_IT(hsmbus, SMBUS_IT_ADDRI); in SMBUS_Slave_ISR()
2242 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2246 hsmbus->AddrCallback(hsmbus, TransferDirection, SlaveAddrCode); in SMBUS_Slave_ISR()
2248 HAL_SMBUS_AddrCallback(hsmbus, TransferDirection, SlaveAddrCode); in SMBUS_Slave_ISR()
2254 if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_RX) == HAL_SMBUS_STATE_SLAVE_BUSY_RX) in SMBUS_Slave_ISR()
2257 *hsmbus->pBuffPtr = (uint8_t)(hsmbus->Instance->RXDR); in SMBUS_Slave_ISR()
2260 hsmbus->pBuffPtr++; in SMBUS_Slave_ISR()
2262 hsmbus->XferSize--; in SMBUS_Slave_ISR()
2263 hsmbus->XferCount--; in SMBUS_Slave_ISR()
2265 if (hsmbus->XferCount == 1U) in SMBUS_Slave_ISR()
2270 hsmbus->XferOptions &= ~SMBUS_RELOAD_MODE; in SMBUS_Slave_ISR()
2271 SMBUS_TransferConfig(hsmbus, 0, 1, hsmbus->XferOptions, SMBUS_NO_STARTSTOP); in SMBUS_Slave_ISR()
2273 else if (hsmbus->XferCount == 0U) in SMBUS_Slave_ISR()
2276 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX); in SMBUS_Slave_ISR()
2279 hsmbus->PreviousState = hsmbus->State; in SMBUS_Slave_ISR()
2280 hsmbus->State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_RX); in SMBUS_Slave_ISR()
2283 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2287 hsmbus->SlaveRxCpltCallback(hsmbus); in SMBUS_Slave_ISR()
2289 HAL_SMBUS_SlaveRxCpltCallback(hsmbus); in SMBUS_Slave_ISR()
2295 SMBUS_TransferConfig(hsmbus, 0, 1, in SMBUS_Slave_ISR()
2296 SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE), in SMBUS_Slave_ISR()
2300 hsmbus->Instance->CR2 &= ~I2C_CR2_NACK; in SMBUS_Slave_ISR()
2303 else if ((hsmbus->State & HAL_SMBUS_STATE_SLAVE_BUSY_TX) == HAL_SMBUS_STATE_SLAVE_BUSY_TX) in SMBUS_Slave_ISR()
2305 if ((hsmbus->XferCount != 0U) && (hsmbus->XferSize == 0U)) in SMBUS_Slave_ISR()
2307 if (hsmbus->XferCount > MAX_NBYTE_SIZE) in SMBUS_Slave_ISR()
2309 SMBUS_TransferConfig(hsmbus, 0, MAX_NBYTE_SIZE, in SMBUS_Slave_ISR()
2310 (SMBUS_RELOAD_MODE | (hsmbus->XferOptions & SMBUS_SENDPEC_MODE)), in SMBUS_Slave_ISR()
2312 hsmbus->XferSize = MAX_NBYTE_SIZE; in SMBUS_Slave_ISR()
2316 hsmbus->XferSize = hsmbus->XferCount; in SMBUS_Slave_ISR()
2317 SMBUS_TransferConfig(hsmbus, 0, (uint8_t)hsmbus->XferSize, hsmbus->XferOptions, in SMBUS_Slave_ISR()
2321 if (SMBUS_GET_PEC_MODE(hsmbus) != 0UL) in SMBUS_Slave_ISR()
2323 hsmbus->XferSize--; in SMBUS_Slave_ISR()
2324 hsmbus->XferCount--; in SMBUS_Slave_ISR()
2340 if (hsmbus->XferCount > 0U) in SMBUS_Slave_ISR()
2343 hsmbus->Instance->TXDR = *hsmbus->pBuffPtr; in SMBUS_Slave_ISR()
2346 hsmbus->pBuffPtr++; in SMBUS_Slave_ISR()
2348 hsmbus->XferCount--; in SMBUS_Slave_ISR()
2349 hsmbus->XferSize--; in SMBUS_Slave_ISR()
2352 if (hsmbus->XferCount == 0U) in SMBUS_Slave_ISR()
2356 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_TX); in SMBUS_Slave_ISR()
2357 hsmbus->PreviousState = hsmbus->State; in SMBUS_Slave_ISR()
2358 hsmbus->State &= ~((uint32_t)HAL_SMBUS_STATE_SLAVE_BUSY_TX); in SMBUS_Slave_ISR()
2361 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2365 hsmbus->SlaveTxCpltCallback(hsmbus); in SMBUS_Slave_ISR()
2367 HAL_SMBUS_SlaveTxCpltCallback(hsmbus); in SMBUS_Slave_ISR()
2379 if ((hsmbus->State & HAL_SMBUS_STATE_LISTEN) == HAL_SMBUS_STATE_LISTEN) in SMBUS_Slave_ISR()
2382 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_RXNE) != RESET) in SMBUS_Slave_ISR()
2385 *hsmbus->pBuffPtr = (uint8_t)(hsmbus->Instance->RXDR); in SMBUS_Slave_ISR()
2388 hsmbus->pBuffPtr++; in SMBUS_Slave_ISR()
2390 if ((hsmbus->XferSize > 0U)) in SMBUS_Slave_ISR()
2392 hsmbus->XferSize--; in SMBUS_Slave_ISR()
2393 hsmbus->XferCount--; in SMBUS_Slave_ISR()
2398 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_RX | SMBUS_IT_TX); in SMBUS_Slave_ISR()
2401 SMBUS_Disable_IRQ(hsmbus, SMBUS_IT_ADDR); in SMBUS_Slave_ISR()
2404 hsmbus->Instance->CR2 |= I2C_CR2_NACK; in SMBUS_Slave_ISR()
2407 SMBUS_RESET_CR2(hsmbus); in SMBUS_Slave_ISR()
2410 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_STOPF); in SMBUS_Slave_ISR()
2413 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ADDR); in SMBUS_Slave_ISR()
2415 hsmbus->XferOptions = 0; in SMBUS_Slave_ISR()
2416 hsmbus->PreviousState = hsmbus->State; in SMBUS_Slave_ISR()
2417 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_Slave_ISR()
2420 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2424 hsmbus->ListenCpltCallback(hsmbus); in SMBUS_Slave_ISR()
2426 HAL_SMBUS_ListenCpltCallback(hsmbus); in SMBUS_Slave_ISR()
2432 __HAL_UNLOCK(hsmbus); in SMBUS_Slave_ISR()
2443 static void SMBUS_Enable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint32_t InterruptRequest) in SMBUS_Enable_IRQ() argument
2474 __HAL_SMBUS_ENABLE_IT(hsmbus, tmpisr); in SMBUS_Enable_IRQ()
2483 static void SMBUS_Disable_IRQ(SMBUS_HandleTypeDef *hsmbus, uint32_t InterruptRequest) in SMBUS_Disable_IRQ() argument
2486 uint32_t tmpstate = hsmbus->State; in SMBUS_Disable_IRQ()
2499 if ((SMBUS_GET_ALERT_ENABLED(hsmbus) == 0UL) in SMBUS_Disable_IRQ()
2518 if ((SMBUS_GET_ALERT_ENABLED(hsmbus) == 0UL) in SMBUS_Disable_IRQ()
2537 if (SMBUS_GET_ALERT_ENABLED(hsmbus) == 0UL) in SMBUS_Disable_IRQ()
2547 __HAL_SMBUS_DISABLE_IT(hsmbus, tmpisr); in SMBUS_Disable_IRQ()
2555 static void SMBUS_ITErrorHandler(SMBUS_HandleTypeDef *hsmbus) in SMBUS_ITErrorHandler() argument
2557 uint32_t itflags = READ_REG(hsmbus->Instance->ISR); in SMBUS_ITErrorHandler()
2558 uint32_t itsources = READ_REG(hsmbus->Instance->CR1); in SMBUS_ITErrorHandler()
2566 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_BERR; in SMBUS_ITErrorHandler()
2569 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_BERR); in SMBUS_ITErrorHandler()
2576 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_OVR; in SMBUS_ITErrorHandler()
2579 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_OVR); in SMBUS_ITErrorHandler()
2586 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ARLO; in SMBUS_ITErrorHandler()
2589 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ARLO); in SMBUS_ITErrorHandler()
2596 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_BUSTIMEOUT; in SMBUS_ITErrorHandler()
2599 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_TIMEOUT); in SMBUS_ITErrorHandler()
2606 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_ALERT; in SMBUS_ITErrorHandler()
2609 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_ALERT); in SMBUS_ITErrorHandler()
2616 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_PECERR; in SMBUS_ITErrorHandler()
2619 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_PECERR); in SMBUS_ITErrorHandler()
2622 if (hsmbus->ErrorCode != HAL_SMBUS_ERROR_NONE) in SMBUS_ITErrorHandler()
2625 SMBUS_Flush_TXDR(hsmbus); in SMBUS_ITErrorHandler()
2629 tmperror = hsmbus->ErrorCode; in SMBUS_ITErrorHandler()
2638 tmpstate = hsmbus->State; in SMBUS_ITErrorHandler()
2645 hsmbus->PreviousState = HAL_SMBUS_STATE_READY; in SMBUS_ITErrorHandler()
2646 hsmbus->State = HAL_SMBUS_STATE_LISTEN; in SMBUS_ITErrorHandler()
2652 hsmbus->ErrorCallback(hsmbus); in SMBUS_ITErrorHandler()
2654 HAL_SMBUS_ErrorCallback(hsmbus); in SMBUS_ITErrorHandler()
2668 static HAL_StatusTypeDef SMBUS_WaitOnFlagUntilTimeout(SMBUS_HandleTypeDef *hsmbus, uint32_t Flag, in SMBUS_WaitOnFlagUntilTimeout() argument
2674 while ((FlagStatus)(__HAL_SMBUS_GET_FLAG(hsmbus, Flag)) == Status) in SMBUS_WaitOnFlagUntilTimeout()
2681 hsmbus->PreviousState = hsmbus->State; in SMBUS_WaitOnFlagUntilTimeout()
2682 hsmbus->State = HAL_SMBUS_STATE_READY; in SMBUS_WaitOnFlagUntilTimeout()
2685 hsmbus->ErrorCode |= HAL_SMBUS_ERROR_HALTIMEOUT; in SMBUS_WaitOnFlagUntilTimeout()
2688 __HAL_UNLOCK(hsmbus); in SMBUS_WaitOnFlagUntilTimeout()
2703 static void SMBUS_Flush_TXDR(SMBUS_HandleTypeDef *hsmbus) in SMBUS_Flush_TXDR() argument
2707 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TXIS) != RESET) in SMBUS_Flush_TXDR()
2709 hsmbus->Instance->TXDR = 0x00U; in SMBUS_Flush_TXDR()
2713 if (__HAL_SMBUS_GET_FLAG(hsmbus, SMBUS_FLAG_TXE) == RESET) in SMBUS_Flush_TXDR()
2715 __HAL_SMBUS_CLEAR_FLAG(hsmbus, SMBUS_FLAG_TXE); in SMBUS_Flush_TXDR()
2739 static void SMBUS_TransferConfig(SMBUS_HandleTypeDef *hsmbus, uint16_t DevAddress, uint8_t Size, in SMBUS_TransferConfig() argument
2743 assert_param(IS_SMBUS_ALL_INSTANCE(hsmbus->Instance)); in SMBUS_TransferConfig()
2748 MODIFY_REG(hsmbus->Instance->CR2, in SMBUS_TransferConfig()
2762 static void SMBUS_ConvertOtherXferOptions(SMBUS_HandleTypeDef *hsmbus) in SMBUS_ConvertOtherXferOptions() argument
2767 if (hsmbus->XferOptions == SMBUS_OTHER_FRAME_NO_PEC) in SMBUS_ConvertOtherXferOptions()
2769 hsmbus->XferOptions = SMBUS_FIRST_FRAME; in SMBUS_ConvertOtherXferOptions()
2774 else if (hsmbus->XferOptions == SMBUS_OTHER_FRAME_WITH_PEC) in SMBUS_ConvertOtherXferOptions()
2776 hsmbus->XferOptions = SMBUS_FIRST_FRAME | SMBUS_SENDPEC_MODE; in SMBUS_ConvertOtherXferOptions()
2782 else if (hsmbus->XferOptions == SMBUS_OTHER_AND_LAST_FRAME_NO_PEC) in SMBUS_ConvertOtherXferOptions()
2784 hsmbus->XferOptions = SMBUS_FIRST_AND_LAST_FRAME_NO_PEC; in SMBUS_ConvertOtherXferOptions()
2790 else if (hsmbus->XferOptions == SMBUS_OTHER_AND_LAST_FRAME_WITH_PEC) in SMBUS_ConvertOtherXferOptions()
2792 hsmbus->XferOptions = SMBUS_FIRST_AND_LAST_FRAME_WITH_PEC; in SMBUS_ConvertOtherXferOptions()