113 lines
3.4 KiB
C
113 lines
3.4 KiB
C
![]() |
/* Includes ----------------------------------------------------------------- */
|
||
|
#include "bsp\i2c.h"
|
||
|
|
||
|
/* Private define ----------------------------------------------------------- */
|
||
|
/* Private macro ------------------------------------------------------------ */
|
||
|
/* Private typedef ---------------------------------------------------------- */
|
||
|
/* Private variables -------------------------------------------------------- */
|
||
|
static void (*I2C_Callback[BSP_I2C_NUM][BSP_I2C_CB_NUM])(void);
|
||
|
|
||
|
/* Private function -------------------------------------------------------- */
|
||
|
static BSP_I2C_t I2C_Get(I2C_HandleTypeDef *hi2c) {
|
||
|
if (hi2c->Instance == I2C3) return BSP_I2C_COMP;
|
||
|
/*
|
||
|
else if (hi2c->Instance == I2CX)
|
||
|
return BSP_I2C_XXX;
|
||
|
*/
|
||
|
else
|
||
|
return BSP_I2C_ERR;
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_MASTER_TX_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_MASTER_TX_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_MASTER_RX_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_MASTER_RX_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_SLAVE_TX_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_SLAVE_TX_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_SLAVE_RX_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_SLAVE_RX_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_LISTEN_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_LISTEN_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_MEM_TX_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_MEM_TX_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_MEM_RX_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_MEM_RX_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_ERROR_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_ERROR_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c) {
|
||
|
BSP_I2C_t bsp_i2c = I2C_Get(hi2c);
|
||
|
if (bsp_i2c != BSP_I2C_ERR) {
|
||
|
if (I2C_Callback[bsp_i2c][HAL_I2C_ABORT_CPLT_CB])
|
||
|
I2C_Callback[bsp_i2c][HAL_I2C_ABORT_CPLT_CB]();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* Exported functions ------------------------------------------------------- */
|
||
|
I2C_HandleTypeDef *BSP_I2C_GetHandle(BSP_I2C_t i2c) {
|
||
|
switch (i2c) {
|
||
|
case BSP_I2C_COMP:
|
||
|
return &hi2c3;
|
||
|
/*
|
||
|
case BSP_I2C_XXX:
|
||
|
return &hi2cX;
|
||
|
*/
|
||
|
default:
|
||
|
return NULL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int8_t BSP_I2C_RegisterCallback(BSP_I2C_t i2c, BSP_I2C_Callback_t type,
|
||
|
void (*callback)(void)) {
|
||
|
if (callback == NULL) return BSP_ERR_NULL;
|
||
|
I2C_Callback[i2c][type] = callback;
|
||
|
return BSP_OK;
|
||
|
}
|