ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT) { uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00; ITStatus bitstatus = RESET; /* Check the parameters / assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_GET_IT(USART_IT)); / The CTS interrupt is not available for UART4 and UART5 */ if (USART_IT == USART_IT_CTS)//判断是否是串口1、2、3. { assert_param(IS_USART_123_PERIPH(USARTx)); }
/* Get the USART register index / usartreg = (((uint8_t)USART_IT) >> 0x05); / Get the interrupt position */ itmask = USART_IT & IT_Mask; itmask = (uint32_t)0x01 << itmask;
if (usartreg == 0x01) /* The IT is in CR1 register / //判断使能的是控制寄存器CR1的某位中断使能位么? { itmask &= USARTx->CR1; } else if (usartreg == 0x02) / The IT is in CR2 register / //判断使能的是控制寄存器CR2的某位中断使能位么? { itmask &= USARTx->CR2; } else / The IT is in CR3 register */ //判断使能的是控制寄存器CR3的某位中断使能位么? { itmask &= USARTx->CR3; }
bitpos = USART_IT >> 0x08; bitpos = (uint32_t)0x01 << bitpos; bitpos &= USARTx->SR; //判断对应中断标志位是否被置位 if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))//如果中断使能位被开启,相应的中断标志位被置位时:bitstatus = SET { bitstatus = SET; } else { bitstatus = RESET; }
return bitstatus; }