BOOL UART_GetIntStatus(UART0_Type* UARTx, uint32_t Int) { assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(IS_UART_INT(Int)); if (0 != (UARTx->INT_SEEN & Int)) { return TRUE; } return FALSE; }
void UART_EnableInt(UART0_Type* UARTx, uint32_t Int, BOOL enable) { assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(IS_UART_INT(Int)); if (enable) { UARTx->INT_MASK &= ~Int; } else { UARTx->INT_MASK |= Int; } UARTx->INT_MASK &= UART_Int_All; }
/*********************************************************************************************** 功能:使用中断发送串口数据 形参:UART_Type 串口选择 @arg UART0: 串口0 @arg UART1: 串口1 @arg UART2: 串口2 @arg UART3: 串口3 @arg UART4: 串口4 *DataBuf : 发送的数据 缓冲区指针 Len : 发送的数据长度 返回:0 详解:0 ************************************************************************************************/ void UART_SendDataInt(UART_Type* UARTx,uint8_t* pBuffer,uint8_t NumberOfBytes) { //参数检测 assert_param(IS_UART_ALL_PERIPH(UARTx)); //内存拷贝 memcpy(UART_TxIntStruct1.TxBuf,pBuffer,NumberOfBytes); UART_TxIntStruct1.Length = NumberOfBytes; UART_TxIntStruct1.Offset = 0; UART_TxIntStruct1.IsComplete = FALSE; //使用中断方式传输 不使用DMA UARTx->C5 &= ~UART_C5_TDMAS_MASK; //使能传送中断 UARTx->C2 |= UART_C2_TIE_MASK; }
/* return value is actual read data size */ uint8_t UART_Read(UART0_Type* UARTx, uint8_t Size, uint8_t* Data) { uint8_t count; assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(Data); if (!UARTx->RUN_b.EN) { return 0; } count = 0; while (UARTx->STATUS_b.RNE && count < Size) { *(Data + count++) = (UARTx->RX_BUF & 0x00FF); } return count; }
void ADCx_CLK_en(ADCxControl* ADCx, uint32_t ADC_CLKSRC, uint32_t ADC_CLK_DIV) { /* Check the parameters */ assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(IS_UART_CLKSRC(UART_CLKSRC)); if (ADCx == ADC0) { CLK_CNTR->ADC0_CLK = 0; CLK_CNTR->ADC0_CLK = (ADC_CLKSRC<< ADCx_CLKSRC_offs) | ADCx_CLK_EN | ADC_CLK_DIV; } else { CLK_CNTR->ADC1_CLK = 0; CLK_CNTR->ADC1_CLK = (ADC_CLKSRC<< ADCx_CLKSRC_offs) | ADCx_CLK_EN | ADC_CLK_DIV; } }
uint8_t UART_Write(UART0_Type* UARTx, uint8_t Size, uint8_t* Data) { uint8_t count; /* Check the parameters */ assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(Data); if (!UARTx->RUN_b.EN) { return 0; } count = 0; while (!UARTx->STATUS_b.TF && count < Size) { UARTx->TX_BUF = *(Data + count++); } return count; }
/*********************************************************************************************** 功能:开启UART DMA支持s 形参:UART_Type 串口选择 @arg UART0: 串口0 @arg UART1: 串口1 @arg UART2: 串口2 @arg UART3: 串口3 @arg UART4: 串口4 UART_DMAReq : DMA中断源 NewState : 使能或者关闭 @arg ENABLE : 使能 @arg DISABLE: 禁止 返回:0 详解:需要DMA构件的支持 需要使用DMA构件中的 Iscomplete函数判断是否发送完成 ************************************************************************************************/ void UART_DMACmd(UART_Type* UARTx, uint16_t UART_DMAReq, FunctionalState NewState) { //参数检查 assert_param(IS_UART_IT(UART_DMAReq)); assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(IS_FUNCTIONAL_STATE(NewState)); switch(UART_DMAReq) { case UART_DMAReq_Tx: (NewState == ENABLE)?(UARTx->C5 |= UART_C5_TDMAS_MASK):(UARTx->C5 &= ~UART_C5_TDMAS_MASK); break; case UART_DMAReq_Rx: (NewState == ENABLE)?(UARTx->C5 |= UART_C5_RDMAS_MASK):(UARTx->C5 &= ~UART_C5_RDMAS_MASK); break; default:break; } }
/*********************************************************************************************** 功能:配置中断开启 形参:UART_Type 串口选择 @arg UART0: 串口0 @arg UART1: 串口1 @arg UART2: 串口2 @arg UART3: 串口3 @arg UART4: 串口4 UART_IT : 支持的中断 返回:0 详解:0 ************************************************************************************************/ void UART_ITConfig(UART_Type* UARTx, uint16_t UART_IT, FunctionalState NewState) { //参数检查 assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(IS_UART_IT(UART_IT)); assert_param(IS_FUNCTIONAL_STATE(NewState)); switch(UART_IT) { case UART_IT_TDRE: (ENABLE == NewState)?(UARTx->C2 |= UART_C2_TIE_MASK):(UARTx->C2 &= ~UART_C2_TIE_MASK); break; case UART_IT_TC: (ENABLE == NewState)?(UARTx->C2 |= UART_C2_TCIE_MASK):(UARTx->C2 &= ~UART_C2_TCIE_MASK); break; case UART_IT_RDRF: (ENABLE == NewState)?(UARTx->C2 |= UART_C2_RIE_MASK):(UARTx->C2 &= ~UART_C2_RIE_MASK); break; case UART_IT_IDLE: (ENABLE == NewState)?(UARTx->C2 |= UART_C2_ILIE_MASK):(UARTx->C2 &= ~UART_C2_ILIE_MASK); break; default:break; } }
void UART_ClearInt(UART0_Type* UARTx, uint32_t Int) { assert_param(IS_UART_ALL_PERIPH(UARTx)); assert_param(IS_UART_INT(Int)); UARTx->INT_SEEN = Int; }
void UART_Enable(UART0_Type* UARTx, BOOL enable) { assert_param(IS_UART_ALL_PERIPH(UARTx)); UARTx->RUN_b.EN = enable; }