/** * @brief Configure NVIC and interrupts used by I2C Device according to * enabled options * @param Device : I2C Device instance. * @param Options : I2C Transfer Options. * @param Direction : I2C Transfer direction. * @param ProgModel : I2C Transfer Progmodel. * @retval None. */ void CPAL_I2C_HAL_ITInit(CPAL_DevTypeDef Device, uint32_t Options, CPAL_DirectionTypeDef Direction, CPAL_ProgModelTypeDef ProgModel) { NVIC_InitTypeDef NVIC_InitStructure; /* Configure NVIC priority Group */ CPAL_HAL_NVICInit(); /* Enable the IRQ channel */ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /* Configure NVIC for I2Cx EVT Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_IT_EVT_IRQn[Device] ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2C_IT_EVT_PREPRIO[Device]; NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2C_IT_EVT_SUBPRIO[Device]; NVIC_Init(&NVIC_InitStructure); /* If I2C ERR Interrupt Option Bit not selected */ if ((Options & CPAL_OPT_I2C_ERRIT_DISABLE) == 0) { /* Configure NVIC for I2Cx ERR Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_IT_ERR_IRQn[Device] ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2C_IT_ERR_PREPRIO[Device]; NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2C_IT_ERR_SUBPRIO[Device]; NVIC_Init(&NVIC_InitStructure); /* Enable I2C Error Interrupts */ __CPAL_I2C_HAL_ENABLE_ERRIT(Device); } #ifdef CPAL_I2C_DMA_PROGMODEL if (ProgModel == CPAL_PROGMODEL_DMA) { if ((Direction & CPAL_DIRECTION_TX) != 0) { /* Configure NVIC for DMA TX channel interrupt */ NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_DMA_TX_IRQn [Device] ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2C_IT_DMATX_PREPRIO[Device]; NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2C_IT_DMATX_SUBPRIO[Device]; NVIC_Init(&NVIC_InitStructure); /* Enable DMA TX Channel TCIT */ __I2C_HAL_ENABLE_DMATX_TCIT(Device); /* Enable DMA TX Channel TEIT */ __I2C_HAL_ENABLE_DMATX_TEIT(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 ((Direction & CPAL_DIRECTION_RX) != 0) { /* Configure NVIC for DMA RX channel interrupt */ NVIC_InitStructure.NVIC_IRQChannel = CPAL_I2C_DMA_RX_IRQn [Device] ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = I2C_IT_DMARX_PREPRIO[Device]; NVIC_InitStructure.NVIC_IRQChannelSubPriority = I2C_IT_DMARX_SUBPRIO[Device]; NVIC_Init(&NVIC_InitStructure); /* Enable DMA RX Channel TCIT */ __I2C_HAL_ENABLE_DMARX_TCIT(Device); /* Enable DMA RX Channel TEIT */ __I2C_HAL_ENABLE_DMARX_TEIT(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); } } } #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 */ }