/**
******************************************************************************
* @file stm32f0xx_i2c_cpal_hal.c
* @author MCD Application Team
* @version V1.2.0
* @date 24-July-2014
* @brief This file provides all the CPAL_I2C_HAL (hardware Abstraction Layer)
* firmware functions.
******************************************************************************
* @attention
*
*
© COPYRIGHT 2014 STMicroelectronics
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx_i2c_cpal_hal.h"
/* Private typedef -----------------------------------------------------------*/
/* Private defines -----------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/*========= Local Structures declaration =========*/
CPAL_InitTypeDef* I2C_DevStructures[CPAL_I2C_DEV_NUM] =
{
#ifdef CPAL_USE_I2C1
&I2C1_DevStructure,
#else
pNULL,
#endif
#ifdef CPAL_USE_I2C2
&I2C2_DevStructure,
#else
pNULL,
#endif
};
#ifdef CPAL_USE_I2C1
CPAL_InitTypeDef I2C1_DevStructure = { CPAL_I2C1, /* I2C1 device number */
CPAL_DIRECTION_TXRX, /* Transmitter and Receiver direction selected */
CPAL_MODE_MASTER, /* Mode Master selected */
#ifdef CPAL_I2C_DMA_PROGMODEL
CPAL_PROGMODEL_DMA, /* DMA Programming Model selected */
#else
CPAL_PROGMODEL_INTERRUPT, /* IT Programming Model selected */
#endif /* CPAL_I2C_DMA_PROGMODEL */
(CPAL_TransferTypeDef*) pNULL, /* Point pCPAL_TransferTx to a Null pointer */
(CPAL_TransferTypeDef*) pNULL, /* Point pCPAL_TransferRx to a Null pointer */
CPAL_STATE_DISABLED, /* Device Disabled */
CPAL_I2C_ERR_NONE, /* No Device Error */
((uint32_t)0x00000000), /* No Options selected */
((uint32_t)CPAL_I2C_TIMEOUT_DEFAULT),/* Set timeout value to CPAL_I2C_TIMEOUT_DEFAULT */
(I2C_InitTypeDef*) pNULL}; /* Point pCPAL_I2C_Struct to a Null pointer */
#endif /* CPAL_USE_I2C1 */
#ifdef CPAL_USE_I2C2
CPAL_InitTypeDef I2C2_DevStructure = { CPAL_I2C2, /* I2C2 device number */
CPAL_DIRECTION_TXRX, /* Transmitter and Receiver direction selected */
CPAL_MODE_MASTER, /* Mode Master selected */
#ifdef CPAL_I2C_DMA_PROGMODEL
CPAL_PROGMODEL_DMA, /* DMA Programming Model selected */
#else
CPAL_PROGMODEL_INTERRUPT, /* IT Programming Model selected */
#endif /* CPAL_I2C_DMA_PROGMODEL */
(CPAL_TransferTypeDef*) pNULL, /* Point pCPAL_TransferTx to a Null pointer */
(CPAL_TransferTypeDef*) pNULL, /* Point pCPAL_TransferRx to a Null pointer */
CPAL_STATE_DISABLED, /* Device Disabled */
CPAL_I2C_ERR_NONE, /* No Device Error */
((uint32_t)0x00000000), /* No Options selected */
((uint32_t)CPAL_I2C_TIMEOUT_DEFAULT),/* Set timeout value to CPAL_I2C_TIMEOUT_DEFAULT */
(I2C_InitTypeDef*) pNULL}; /* Point pCPAL_I2C_Struct to a Null pointer */
#endif /* CPAL_USE_I2C2 */
DMA_InitTypeDef CPAL_DMA_InitStructure;
I2C_TypeDef* CPAL_I2C_DEVICE[2] = {I2C1,I2C2};
const uint32_t CPAL_I2C_CLK[2] = {CPAL_I2C1_CLK,CPAL_I2C2_CLK};
const uint32_t CPAL_I2C_TXDR[2] = {CPAL_I2C1_TXDR,CPAL_I2C2_TXDR};
const uint32_t CPAL_I2C_RXDR[2] = {CPAL_I2C1_RXDR,CPAL_I2C2_RXDR};
const uint32_t CPAL_I2C_AF[2] = {CPAL_I2C1_AF,CPAL_I2C2_AF};
const GPIO_TypeDef* CPAL_I2C_SCL_GPIO_PORT[2] = {CPAL_I2C1_SCL_GPIO_PORT,CPAL_I2C2_SCL_GPIO_PORT};
const uint16_t CPAL_I2C_SCL_GPIO_PIN[2] = {CPAL_I2C1_SCL_GPIO_PIN,CPAL_I2C2_SCL_GPIO_PIN};
const uint32_t CPAL_I2C_SCL_GPIO_CLK[2] = {CPAL_I2C1_SCL_GPIO_CLK,CPAL_I2C2_SCL_GPIO_CLK};
const uint16_t CPAL_I2C_SCL_GPIO_PINSOURCE[2] = {CPAL_I2C1_SCL_GPIO_PINSOURCE,CPAL_I2C2_SCL_GPIO_PINSOURCE};
const GPIO_TypeDef* CPAL_I2C_SDA_GPIO_PORT[2] = {CPAL_I2C1_SDA_GPIO_PORT,CPAL_I2C2_SDA_GPIO_PORT};
const uint16_t CPAL_I2C_SDA_GPIO_PIN[2] = {CPAL_I2C1_SDA_GPIO_PIN,CPAL_I2C2_SDA_GPIO_PIN};
const uint32_t CPAL_I2C_SDA_GPIO_CLK[2] = {CPAL_I2C1_SDA_GPIO_CLK,CPAL_I2C2_SDA_GPIO_CLK};
const uint16_t CPAL_I2C_SDA_GPIO_PINSOURCE[2] = {CPAL_I2C1_SDA_GPIO_PINSOURCE,CPAL_I2C2_SDA_GPIO_PINSOURCE};
const uint32_t CPAL_I2C_DMA_CLK[2] = {CPAL_I2C1_DMA_CLK,CPAL_I2C2_DMA_CLK};
DMA_Channel_TypeDef* CPAL_I2C_DMA_TX_Channel[2] = {CPAL_I2C1_DMA_TX_Channel, CPAL_I2C2_DMA_TX_Channel};
DMA_Channel_TypeDef* CPAL_I2C_DMA_RX_Channel[2] = {CPAL_I2C1_DMA_RX_Channel, CPAL_I2C2_DMA_RX_Channel};
const IRQn_Type CPAL_I2C_DMA_IRQn[2] = {CPAL_I2C1_DMA_IRQn, CPAL_I2C2_DMA_IRQn};
const IRQn_Type CPAL_I2C_IT_IRQn[2] = {CPAL_I2C1_IT_IRQn, CPAL_I2C2_IT_IRQn};
const uint8_t I2C_IT_PRIO[2] = {I2C1_IT_PRIO, I2C2_IT_PRIO};
const uint8_t I2C_IT_DMA_PRIO[2] = {I2C1_IT_DMA_PRIO, I2C2_IT_DMA_PRIO};
DMA_TypeDef* CPAL_I2C_DMA[2] = {CPAL_I2C1_DMA,CPAL_I2C2_DMA};
const uint32_t CPAL_I2C_DMA_TX_TC_FLAG[2] = {CPAL_I2C1_DMA_TX_TC_FLAG, CPAL_I2C2_DMA_TX_TC_FLAG};
const uint32_t CPAL_I2C_DMA_TX_HT_FLAG[2] = {CPAL_I2C1_DMA_TX_HT_FLAG, CPAL_I2C2_DMA_TX_HT_FLAG};
const uint32_t CPAL_I2C_DMA_TX_TE_FLAG[2] = {CPAL_I2C1_DMA_TX_TE_FLAG, CPAL_I2C2_DMA_TX_TE_FLAG};
const uint32_t CPAL_I2C_DMA_RX_TC_FLAG[2] = {CPAL_I2C1_DMA_RX_TC_FLAG, CPAL_I2C2_DMA_RX_TC_FLAG};
const uint32_t CPAL_I2C_DMA_RX_HT_FLAG[2] = {CPAL_I2C1_DMA_RX_HT_FLAG, CPAL_I2C2_DMA_RX_HT_FLAG};
const uint32_t CPAL_I2C_DMA_RX_TE_FLAG[2] = {CPAL_I2C1_DMA_RX_TE_FLAG, CPAL_I2C2_DMA_RX_TE_FLAG};
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/*================== CPAL_I2C_HAL_Config ==================*/
/**
* @brief Reset then enable the I2C device clock.
* @param Device : I2C Device instance.
* @retval None
*/
void CPAL_I2C_HAL_CLKInit(CPAL_DevTypeDef Device)
{
/* Reset I2Cx device clock in order to avoid non-cleared error flags */
__I2C_RCC_RESET(CPAL_I2C_CLK [Device]);
/* Enable I2Cx device clock */
__I2C_CLK_CMD(CPAL_I2C_CLK [Device], ENABLE);
}
/**
* @brief Reset then disable the I2C device clock.
* @param Device : I2C Device instance
* @retval None.
*/
void CPAL_I2C_HAL_CLKDeInit(CPAL_DevTypeDef Device)
{
/* Reset I2Cx device clock in order to avoid non-cleared error flags */
__I2C_RCC_RESET(CPAL_I2C_CLK[Device]);
/* Disable I2Cx device clock */
__I2C_CLK_CMD(CPAL_I2C_CLK[Device], DISABLE);
}
/**
* @brief Configure the IO pins used by the I2C device.
* @param Device : I2C Device instance.
* @retval None.
*/
void CPAL_I2C_HAL_GPIOInit(CPAL_DevTypeDef Device)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Enable I2Cx SCL and SDA Pin Clock */
__I2C_GPIO_CLK_CMD((CPAL_I2C_SCL_GPIO_CLK[Device] | CPAL_I2C_SDA_GPIO_CLK[Device]), ENABLE);
/* Connect PXx to I2C_SCL */
GPIO_PinAFConfig((GPIO_TypeDef*)CPAL_I2C_SCL_GPIO_PORT[Device],CPAL_I2C_SCL_GPIO_PINSOURCE[Device],CPAL_I2C_AF[Device]);
/* Connect PXx to I2C_SDA */
GPIO_PinAFConfig((GPIO_TypeDef*)CPAL_I2C_SDA_GPIO_PORT[Device],CPAL_I2C_SDA_GPIO_PINSOURCE[Device],CPAL_I2C_AF[Device]);
/* Set GPIO frequency to 50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* Select Alternate function mode */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
/* Select output Open Drain type */
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
/* Disable internal Pull-up */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/* Initialize I2Cx SCL Pin */
GPIO_InitStructure.GPIO_Pin = CPAL_I2C_SCL_GPIO_PIN[Device];
GPIO_Init((GPIO_TypeDef*)CPAL_I2C_SCL_GPIO_PORT[Device], &GPIO_InitStructure);
/* Initialize I2Cx SDA Pin */
GPIO_InitStructure.GPIO_Pin = CPAL_I2C_SDA_GPIO_PIN[Device];
GPIO_Init((GPIO_TypeDef*)CPAL_I2C_SDA_GPIO_PORT[Device], &GPIO_InitStructure);
}
/**
* @brief Deinitialize the IO pins used by the I2C device
* (configured to their default state).
* @param Device : I2C Device instance.
* @retval None.
*/
void CPAL_I2C_HAL_GPIODeInit(CPAL_DevTypeDef Device)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* Set GPIO frequency to 50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/* Select Input floating mode */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
/* Select output Open Drain type */
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
/* Disable internal Pull-up */
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/* Deinitialize I2Cx SCL Pin */
GPIO_InitStructure.GPIO_Pin = CPAL_I2C_SCL_GPIO_PIN[Device];
GPIO_Init((GPIO_TypeDef*)CPAL_I2C_SCL_GPIO_PORT[Device], &GPIO_InitStructure);
/* Deinitialize I2Cx SDA Pin */
GPIO_InitStructure.GPIO_Pin = CPAL_I2C_SDA_GPIO_PIN[Device];
GPIO_Init((GPIO_TypeDef*)CPAL_I2C_SDA_GPIO_PORT[Device], &GPIO_InitStructure);
}
#ifdef CPAL_I2C_DMA_PROGMODEL
/**
* @brief Enable the DMA clock and initialize needed DMA Channels
* used by the I2C device.
* @param Device : I2C Device instance.
* @param Direction : Transfer direction.
* @param Options : Transfer Options.
* @retval None.
*/
void CPAL_I2C_HAL_DMAInit(CPAL_DevTypeDef Device, CPAL_DirectionTypeDef Direction, uint32_t Options)
{
/* Enable I2Cx DMA */
__DMA_CLK_CMD(CPAL_I2C_DMA_CLK[Device], ENABLE);
/* I2Cx Common Channel Configuration */
CPAL_DMA_InitStructure.DMA_BufferSize = 0xFFFF;
CPAL_DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
CPAL_DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
CPAL_DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte ;
CPAL_DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
CPAL_DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
CPAL_DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
CPAL_DMA_InitStructure.DMA_MemoryBaseAddr = 0;
CPAL_DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
/* If TX Direction (Transmission) selected */
if ((Direction & CPAL_DIRECTION_TX) != 0)
{
/* Select I2Cx TXDR Address register as DMA PeripheralBaseAddress */
CPAL_DMA_InitStructure.DMA_PeripheralBaseAddr = CPAL_I2C_TXDR [Device];
/* Select Memory to Peripheral transfer direction */
CPAL_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
/* Initialize I2Cx DMA Tx Channel */
DMA_Init((DMA_Channel_TypeDef*)CPAL_I2C_DMA_TX_Channel[Device], &CPAL_DMA_InitStructure);
}
/* If RX Direction (Reception) selected */
if ((Direction & CPAL_DIRECTION_RX ) != 0)
{
/* Select I2Cx RXDR Address register as DMA PeripheralBaseAddress */
CPAL_DMA_InitStructure.DMA_PeripheralBaseAddr = CPAL_I2C_RXDR [Device];
/* Select Peripheral to Memory transfer direction */
CPAL_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
/* Initialize I2Cx DMA Rx Channel */
DMA_Init((DMA_Channel_TypeDef*)CPAL_I2C_DMA_RX_Channel[Device], &CPAL_DMA_InitStructure);
}
}
/**
* @brief Configure the DMA channel specific for TX transfer.
* @param Device : I2C Device instance.
* @param TXferStruct : DMA TX Transfer Parameters.
* @param Options : Transfer Options.
* @retval None.
*/
void CPAL_I2C_HAL_DMATXConfig(CPAL_DevTypeDef Device, CPAL_TransferTypeDef* TxXferStruct, uint32_t Options )
{
/* Set Memory Base Address */
CPAL_DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(TxXferStruct->pbBuffer);
/* Set number of data */
CPAL_DMA_InitStructure.DMA_BufferSize = TxXferStruct->wNumData;
/* Select I2Cx TXDR Address register as DMA PeripheralBaseAddress */
CPAL_DMA_InitStructure.DMA_PeripheralBaseAddr = CPAL_I2C_TXDR [Device];
/* If TX DMA Circular Mode Option Bit Selected */
if ((Options & CPAL_OPT_DMATX_CIRCULAR) != 0)
{
/* Select DMA Circular Mode */
CPAL_DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
}
/* If TX DMA Circular Mode Option Bit not selected */
else
{
/* Select DMA Normal Mode */
CPAL_DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
}
/* Select Peripheral to Memory transfer direction */
CPAL_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
/* Initialize I2Cx DMA Tx Channel */
DMA_Init((DMA_Channel_TypeDef*)CPAL_I2C_DMA_TX_Channel[Device], &CPAL_DMA_InitStructure);
}
/**
* @brief Configure the DMA channel specific for RX transfer.
* @param Device : I2C Device instance.
* @param RXferStruct : DMA RX Transfer Parameters.
* @param Options : Transfer Options.
* @retval None.
*/
void CPAL_I2C_HAL_DMARXConfig(CPAL_DevTypeDef Device, CPAL_TransferTypeDef* RxXferStruct, uint32_t Options )
{
/* Set Memory Base Address */
CPAL_DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(RxXferStruct->pbBuffer);
/* Set number of data */
CPAL_DMA_InitStructure.DMA_BufferSize = RxXferStruct->wNumData;
/* Select I2Cx RXDR Address register as DMA PeripheralBaseAddress */
CPAL_DMA_InitStructure.DMA_PeripheralBaseAddr = CPAL_I2C_RXDR [Device];
/* If RX DMA Circular Mode Option Bit Selected */
if ((Options & CPAL_OPT_DMARX_CIRCULAR) != 0)
{
/* Select DMA Circular Mode */
CPAL_DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
}
/* If RX DMA Circular Mode Option Bit not selected */
else
{
/* Select DMA Normal Mode */
CPAL_DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
}
/* Select Peripheral to Memory transfer direction */
CPAL_DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
/* Initialize I2Cx DMA Rx Channel */
DMA_Init((DMA_Channel_TypeDef*)CPAL_I2C_DMA_RX_Channel[Device], &CPAL_DMA_InitStructure);
}
/**
* @brief Deinitialize the DMA channel used by I2C Device(configured to their default state).
* DMA clock is not disabled.
* @param Device : I2C Device instance.
* @param Direction : Transfer direction.
* @retval None.
*/
void CPAL_I2C_HAL_DMADeInit(CPAL_DevTypeDef Device, CPAL_DirectionTypeDef Direction)
{
/* If TX Direction (Transmission) selected */
if ((Direction & CPAL_DIRECTION_TX) != 0)
{
/* Deinitialize I2Cx DMA Tx Channel */
DMA_DeInit((DMA_Channel_TypeDef*)CPAL_I2C_DMA_TX_Channel[Device]);
}
/* If RX Direction (Reception) selected */
if ((Direction & CPAL_DIRECTION_RX) != 0)
{
/* Deinitialize I2Cx DMA Rx Channel */
DMA_DeInit((DMA_Channel_TypeDef*)CPAL_I2C_DMA_RX_Channel[Device]);
}
}
#endif /* CPAL_I2C_DMA_PROGMODEL */
/**
* @brief Configure NVIC and interrupts used by I2C Device according to
* enabled options
* @param Device : I2C Device instance.
* @param Options : I2C Transfer Options.
* @retval None.
*/
void CPAL_I2C_HAL_ITInit(CPAL_DevTypeDef Device, uint32_t Options)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the IRQ channel */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
/* Configure NVIC for I2Cx Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_IT_IRQn [Device] ;
NVIC_InitStructure.NVIC_IRQChannelPriority = I2C_IT_PRIO[Device];
NVIC_Init(&NVIC_InitStructure);
/* If I2C ERR Interrupt Option Bit not selected */
if ((Options & CPAL_OPT_I2C_ERRIT_DISABLE) == 0)
{
/* Enable I2C Error Interrupts */
__CPAL_I2C_HAL_ENABLE_ERRIT(Device);
}
#ifdef CPAL_I2C_DMA_PROGMODEL
/* If one or more DMA Interrupt option Bits selected */
if (((Options & CPAL_OPT_I2C_DMA_TX_IT_MASK) != 0) || ((Options & CPAL_OPT_I2C_DMA_RX_IT_MASK) != 0))
{
/* Configure NVIC for DMA TX channel interrupt */
NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_DMA_IRQn [Device];
NVIC_InitStructure.NVIC_IRQChannelPriority = I2C_IT_DMA_PRIO[Device];
NVIC_Init(&NVIC_InitStructure);
/* If DMA TX TC interrupt Option Bits Selected */
if ((Options & CPAL_OPT_DMATX_TCIT) != 0)
{
/* Enable DMA TX Channel TCIT */
__I2C_HAL_ENABLE_DMATX_TCIT(Device);
}
/* If DMA TX HT interrupt Option Bits Selected */
if ((Options & CPAL_OPT_DMATX_HTIT) != 0)
{
/* Enable DMA TX Channel HTIT */
__I2C_HAL_ENABLE_DMATX_HTIT(Device);
}
/* If DMA TX TE interrupt Option Bits Selected */
if ((Options & CPAL_OPT_DMATX_TEIT) != 0)
{
/* Enable DMA TX Channel TEIT */
__I2C_HAL_ENABLE_DMATX_TEIT(Device);
}
/* If DMA RX TC interrupt Option Bits Selected */
if ((Options & CPAL_OPT_DMARX_TCIT) != 0)
{
/* Enable DMA RX Channel TCIT */
__I2C_HAL_ENABLE_DMARX_TCIT(Device);
}
/* If DMA RX HT interrupt Option Bits Selected */
if ((Options & CPAL_OPT_DMARX_HTIT) != 0)
{
/* Enable DMA RX Channel HTIT */
__I2C_HAL_ENABLE_DMARX_HTIT(Device);
}
/* If DMA RX TE interrupt Option Bits Selected */
if ((Options & CPAL_OPT_DMARX_TEIT) != 0)
{
/* Enable DMA RX Channel TEIT */
__I2C_HAL_ENABLE_DMARX_TEIT(Device);
}
}
#endif /* CPAL_I2C_DMA_PROGMODEL */
}
/**
* @brief Deinitialize NVIC and interrupts used by I2C Device in
* the current Configuration.
* @param Device : I2C Device instance.
* @param Options : I2C Transfer Options.
* @retval None.
*/
void CPAL_I2C_HAL_ITDeInit(CPAL_DevTypeDef Device, uint32_t Options )
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
/* Disable the IRQ channel */
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
/* Disable I2Cx EVT IRQn */
NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_IT_IRQn [Device];
NVIC_Init(&NVIC_InitStructure);
#ifdef CPAL_I2C_DMA_PROGMODEL
/* If one or more DMA It option Bits selected */
if (((Options & CPAL_OPT_I2C_DMA_TX_IT_MASK) != 0) || ((Options & CPAL_OPT_I2C_DMA_RX_IT_MASK) != 0))
{
/* Disable I2Cx DMA TX IRQn */
NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_DMA_IRQn [Device];
NVIC_Init(&NVIC_InitStructure);
}
#endif /* CPAL_I2C_DMA_PROGMODEL */
}
/*================== CPAL_I2C1_IRQhandler ==================*/
#ifdef CPAL_USE_I2C1
/**
* @brief This function handles I2C1 interrupt request.
* @param None.
* @retval CPAL_PASS.
*/
uint32_t I2C1_IRQHandler(void)
{
/* If interrupt sources is I2C event */
if ((__CPAL_I2C_HAL_GET_ERROR(0) != 0) && ((I2C1_DevStructure.wCPAL_Options & CPAL_OPT_I2C_ERRIT_DISABLE) == 0))
{
CPAL_LOG("\n\r\n\rLOG : I2C1 Device Error IT ");
/* Call the Common Error handler function */
return CPAL_I2C_ER_IRQHandler(&I2C1_DevStructure);
}
else
{
/* Call the Common Event handler function */
return CPAL_I2C_EV_IRQHandler(&I2C1_DevStructure);
}
}
#ifdef CPAL_I2C_DMA_PROGMODEL
/**
* @brief This function handles I2C1 DMA interrupt request.
* @param None.
* @retval CPAL_PASS.
*/
uint32_t CPAL_I2C1_DMA_IRQHandler(void)
{
/* If interrupt source is DMA RX */
if (__CPAL_I2C_HAL_GET_DMARX_IT(0) != 0)
{
/* Call the Common DMA RX handler function */
return CPAL_I2C_DMA_RX_IRQHandler(&I2C1_DevStructure);
}
else
{
/* Call the Common DMA TX handler function */
return CPAL_I2C_DMA_TX_IRQHandler(&I2C1_DevStructure);
}
}
#endif /* CPAL_I2C_DMA_PROGMODEL */
#endif /* CPAL_USE_I2C1 */
/*================== CPAL_I2C2_IRQhandler ==================*/
#ifdef CPAL_USE_I2C2
/**
* @brief This function handles I2C2 interrupt request.
* @param None.
* @retval CPAL_PASS.
*/
uint32_t I2C2_IRQHandler(void)
{
/* If interrupt sources is I2C event */
if ((__CPAL_I2C_HAL_GET_ERROR(1) != 0) && ((I2C2_DevStructure.wCPAL_Options & CPAL_OPT_I2C_ERRIT_DISABLE) == 0))
{
CPAL_LOG("\n\r\n\rLOG : I2C2 Device Error IT ");
/* Call the Common Error handler function */
return CPAL_I2C_ER_IRQHandler(&I2C2_DevStructure);
}
else
{
/* Call the Common Event handler function */
return CPAL_I2C_EV_IRQHandler(&I2C2_DevStructure);
}
}
#ifdef CPAL_I2C_DMA_PROGMODEL
/**
* @brief This function handles I2C2 DMA interrupt request.
* @param None.
* @retval CPAL_PASS.
*/
uint32_t CPAL_I2C2_DMA_IRQHandler(void)
{
/* If interrupt source is DMA RX */
if (__CPAL_I2C_HAL_GET_DMARX_IT(1) != 0)
{
/* Call the Common DMA RX handler function */
return CPAL_I2C_DMA_RX_IRQHandler(&I2C2_DevStructure);
}
else
{
/* Call the Common DMA TX handler function */
return CPAL_I2C_DMA_TX_IRQHandler(&I2C2_DevStructure);
}
}
#endif /* CPAL_I2C_DMA_PROGMODEL */
#endif /* CPAL_USE_I2C2 */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/