/*******************************************************************************
* Function Name  : SPI_I2S_ClearITPendingBit
* Description    : Clears the SPIx/I2Sx interrupt pending bits.
* Input          : - SPIx: where x can be :
*                         - 1, 2 or 3 in SPI mode 
*                         - 2 or 3 in I2S mode
*                  - SPI_I2S_IT: specifies the SPI/I2S interrupt pending bit to clear.
*                    This parameter can be one of the following values:
*                       - SPI_I2S_IT_OVR: Overrun interrupt.
*                       - SPI_IT_MODF: Mode Fault interrupt.
*                       - SPI_IT_CRCERR: CRC Error interrupt.
*                       - I2S_IT_UDR: Underrun Error interrupt.
* Output         : None
* Return         : None
*******************************************************************************/
void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, u8 SPI_I2S_IT)
{
  u16 itpos = 0;

  /* Check the parameters */
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
  assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT));

  /* SPI_IT_MODF pending bit clear */
  if(SPI_I2S_IT == SPI_IT_MODF)
  {
    /* Read SR register */
    (void)SPIx->SR;
    /* Write on CR1 register */
    SPIx->CR1 |= CR1_SPE_Set; 
  }
  /* SPI_I2S_IT_OVR or I2S_IT_UDR pending bit clear */ 
  else if((SPI_I2S_IT == SPI_I2S_IT_OVR) || (SPI_I2S_IT == I2S_IT_UDR))    
  {
    /* Read SR register */
    (void)(SPIx->SR);
  }  
  else   /* SPI_IT_CRCERR pending bit clear */
  {
    /* Get the SPI/I2S IT index */
    itpos = (u16)((u16)0x01 << (SPI_I2S_IT & (u8)0x0F));
    /* Clear the selected SPI/I2S interrupt pending bits */
    SPIx->SR = (u16)~itpos;
  }
}
Пример #2
0
/**
  * @brief  Clears the SPIx CRC Error (CRCERR) interrupt pending bit.
  * @param SPIx: where x can be :
  *   1, 2 or 3 in SPI mode 
  * @param SPI_I2S_IT: specifies the SPI interrupt pending bit to clear.
  *   This function clears only CRCERR intetrrupt pending bit.   
  * @note
  *   - OVR (OverRun Error) interrupt pending bit is cleared by software 
  *     sequence: a read operation to SPI_DR register (SPI_I2S_ReceiveData()) 
  *     followed by a read operation to SPI_SR register (SPI_I2S_GetITStatus()).
  *   - UDR (UnderRun Error) interrupt pending bit is cleared by a read 
  *     operation to SPI_SR register (SPI_I2S_GetITStatus()).
  *   - MODF (Mode Fault) interrupt pending bit is cleared by software sequence:
  *     a read/write operation to SPI_SR register (SPI_I2S_GetITStatus()) 
  *     followed by a write operation to SPI_CR1 register (SPI_Cmd() to enable 
  *     the SPI).
  * @retval : None
  */
void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_I2S_IT)
{
  uint16_t itpos = 0;
  /* Check the parameters */
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
  assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT));
  /* Get the SPI IT index */
  itpos = (uint16_t)((uint16_t)0x01 << (SPI_I2S_IT & (uint8_t)0x0F));
  /* Clear the selected SPI CRC Error (CRCERR) interrupt pending bit */
  SPIx->SR = (uint16_t)~itpos;
}
Пример #3
0
/*******************************************************************************
* 函数名称: SPI_I2S_ClearITPendingBit
* 功能描述: 清除某个SPI CRC错误(CRCERR)中断挂起位.
* 输入参数: (1)- SPIx: x可以是 :
*                         - 1, 2 或 3 在 SPI 模式 
*           (2) SPI_I2S_IT:清除指定的中断挂起位。
*                    这个函数只清除CRCERR中断挂起位。  
*                  Notes:
*                       - OVR (过速错误)中断挂起位可以被软件按顺序清除: 一个读  
*                         SPI_DR寄存器操作 (SPI_I2S_ReceiveData()) 跟着一个读  
*                         SPI_SR寄存器操作 (SPI_I2S_GetITStatus()).
*                       - UDR (空栈读错误) 中断挂起位可以被一个读SPI_SR寄存器操
*                         作清除(SPI_I2S_GetITStatus())。
*                       - MODF (模式错误) 中断挂起位被软件按顺序清除:一个读/写 
*                         SPI_SR寄存器操作(SPI_I2S_GetITStatus())跟着一个写SPI_CR1 
*                         寄存器操作 (SPI_Cmd() 使能 SPI).   
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void SPI_I2S_ClearITPendingBit(SPI_TypeDef* SPIx, u8 SPI_I2S_IT)
{
  u16 itpos = 0;

  /* Check the parameters [检查参数]*/
  assert_param(IS_SPI_ALL_PERIPH(SPIx));
  assert_param(IS_SPI_I2S_CLEAR_IT(SPI_I2S_IT));

  /* Get the SPI IT index [取得SPI IT向量]*/
  itpos = (u16)((u16)0x01 << (SPI_I2S_IT & (u8)0x0F));
  /* Clear the selected SPI CRC Error (CRCERR) interrupt pending bit [清除选择的SPI CRC错误中断挂起标志]*/
  SPIx->SR = (u16)~itpos;
}