/** * @brief Set UART line configuration * * @param[in] uart The pointer of the specified UART module. * @param[in] u32baudrate The register value of baudrate of UART module. * If u32baudrate = 0, UART baudrate will not change. * @param[in] u32data_width The data length of UART module. * - UART_WORD_LEN_5 * - UART_WORD_LEN_6 * - UART_WORD_LEN_7 * - UART_WORD_LEN_8 * @param[in] u32parity The parity setting (none/odd/even/mark/space) of UART module. * - UART_PARITY_NONE * - UART_PARITY_ODD * - UART_PARITY_EVEN * - UART_PARITY_MARK * - UART_PARITY_SPACE * @param[in] u32stop_bits The stop bit length (1/1.5/2 bit) of UART module. * - UART_STOP_BIT_1 * - UART_STOP_BIT_1_5 * - UART_STOP_BIT_2 * * @return None * * @details This function use to config UART line setting. */ void UART_SetLine_Config(UART_T* uart, uint32_t u32baudrate, uint32_t u32data_width, uint32_t u32parity, uint32_t u32stop_bits) { uint8_t u8UartClkSrcSel, u8UartClkDivNum; uint32_t u32ClkTbl[4] = {__HXT, 0, 0, __HIRC}; uint32_t u32Baud_Div = 0; /* Get UART clock source selection */ u8UartClkSrcSel = (CLK->CLKSEL1 & CLK_CLKSEL1_UART_S_Msk) >> CLK_CLKSEL1_UART_S_Pos; /* Get UART clock divider number */ u8UartClkDivNum = (CLK->CLKDIV & CLK_CLKDIV_UART_N_Msk) >> CLK_CLKDIV_UART_N_Pos; /* Get PLL clock frequency if UART clock source selection is PLL */ if(u8UartClkSrcSel == 1) u32ClkTbl[u8UartClkSrcSel] = CLK_GetPLLClockFreq(); /* Set UART baud rate */ if(u32baudrate != 0) { u32Baud_Div = UART_BAUD_MODE2_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate); if(u32Baud_Div > 0xFFFF) uart->BAUD = (UART_BAUD_MODE0 | UART_BAUD_MODE0_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate)); else uart->BAUD = (UART_BAUD_MODE2 | u32Baud_Div); } /* Set UART line configuration */ uart->LCR = u32data_width | u32parity | u32stop_bits; }
void UART0_Init(void) { /* Word length is 8 bits; 1 stop bit; no parity bit. */ UART0->LINE = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; /* UART peripheral clock rate 12MHz; UART bit rate 115200 bps. */ UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HXT, 115200); }
void UART0_Init(void) { /*---------------------------------------------------------------------------------------------------------*/ /* Init UART */ /*---------------------------------------------------------------------------------------------------------*/ UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(PLL_CLOCK, 115200); UART0->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; }
/*---------------------------------------------------------------------------------------------------------*/ void LIN_FunctionTestUsingLinCtlReg(void) { uint32_t u32Item; /* LIN Max Speed is 20K */ UART1->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HXT, 9600); /* === CASE 1==== The sample code will send a LIN header with a 12-bit break field, 0x55 sync field and ID field is 0x30. Measurement the UART1 Tx pin to check it. */ /* === CASE 2==== The sample code will send a LIN header with ID is 0x35 and response field. The response field with 8 data bytes and checksum without including ID. Measurement the UART1 Tx pin to check it. */ /* === CASE 3==== The sample code will send a LIN header with ID is 0x12 and response field. The response field with 8 data bytes and checksum with including ID. Measurement the UART1 Tx pin to check it. */ do { LIN_TestItem(); u32Item = getchar(); printf("%c\n", u32Item); switch(u32Item) { case '1': LIN_SendHeaderUsingLinCtlReg(0x30, UART_LIN_CTL_LIN_HEAD_SEL_BREAK_SYNC_ID); break; case '2': LIN_MasterTestUsingLinCtlReg(0x35, MODE_CLASSIC); break; case '3': LIN_MasterTestUsingLinCtlReg(0x12, MODE_ENHANCED); break; default: break; } } while(u32Item != 27); /* Clear header select setting */ UART1->LIN_CTL &= ~UART_LIN_CTL_LIN_HEAD_SEL_Msk; /* Select UART function mode */ UART1->FUN_SEL = UART_FUNC_SEL_UART; printf("\nLIN Sample Code End.\n"); }
void UART0_Init(void) { /*---------------------------------------------------------------------------------------------------------*/ /* Init UART */ /*---------------------------------------------------------------------------------------------------------*/ /* Reset UART IP */ SYS->IPRST1 |= SYS_IPRST1_UART0RST_Msk; SYS->IPRST1 &= ~SYS_IPRST1_UART0RST_Msk; /* Configure UART0 and set UART0 Baudrate */ UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HXT, 115200); UART0->LINE = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; }
void UART1_Init() { /*---------------------------------------------------------------------------------------------------------*/ /* Init UART */ /*---------------------------------------------------------------------------------------------------------*/ /* Reset UART IP */ SYS->IPRSTC2 |= SYS_IPRSTC2_UART1_RST_Msk; SYS->IPRSTC2 &= ~SYS_IPRSTC2_UART1_RST_Msk; /* Configure UART1 and set UART1 Baudrate */ UART1->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HXT, 115200); UART1->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; }
void UART0_Init(void) { /*---------------------------------------------------------------------------------------------------------*/ /* Init UART */ /*---------------------------------------------------------------------------------------------------------*/ /* Reset UART */ SYS->IPRSTC2 |= SYS_IPRSTC2_UART0_RST_Msk; SYS->IPRSTC2 &= ~SYS_IPRSTC2_UART0_RST_Msk; /* Configure UART0 and set UART0 Baudrate */ UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(PllClock, 115200); UART0->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; }
void begin(unsigned long baud) { if(settings.UARToutput == Settings::HardwarePin7) { SYS->P3_MFP = (SYS->P3_MFP & (~SYS_MFP_P31_Msk)) | SYS_MFP_P31_TXD0; //Tx on pin 7 } else { SYS->P0_MFP = (SYS->P0_MFP & (~SYS_MFP_P02_Msk)) | SYS_MFP_P02_TXD0; //Tx on pin 38 } /* Configure UART0 and set UART0 Baudrate */ UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HXT, baud); UART0->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; UART0->IER = UART_IER_THRE_IEN_Msk; NVIC_SetPriority(UART0_IRQn,HARDWARE_SERIAL_IRQ_PRIORITY); }
void UART0_Init(void) { /*---------------------------------------------------------------------------------------------------------*/ /* Init UART */ /*---------------------------------------------------------------------------------------------------------*/ /* Reset IP */ SYS->IPRSTC2 |= SYS_IPRSTC2_UART0_RST_Msk; SYS->IPRSTC2 &= ~SYS_IPRSTC2_UART0_RST_Msk; /* Configure UART0 and set UART0 Baudrate */ UART0->BAUD = UART_BAUD_MODE2 | UART_BAUD_MODE2_DIVIDER(__HIRC, 115200); UART0->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; /* Enable UART Interrupt */ UART0->IER = UART_IER_TOUT_IEN_Msk | UART_IER_RDA_IEN_Msk; }
/** * @brief Open and set UART function * * @param[in] uart The pointer of the specified UART module. * @param[in] u32baudrate The baudrate of UART module. * * @return None * * @details This function use to enable UART function and set baud-rate. */ void UART_Open(UART_T* uart, uint32_t u32baudrate) { uint8_t u8UartClkSrcSel, u8UartClkDivNum; uint32_t u32ClkTbl[4] = {__HXT, 0, 0, __HIRC}; uint32_t u32Baud_Div = 0; /* Get UART clock source selection */ u8UartClkSrcSel = (CLK->CLKSEL1 & CLK_CLKSEL1_UART_S_Msk) >> CLK_CLKSEL1_UART_S_Pos; /* Get UART clock divider number */ u8UartClkDivNum = (CLK->CLKDIV & CLK_CLKDIV_UART_N_Msk) >> CLK_CLKDIV_UART_N_Pos; /* Select UART function */ uart->FUN_SEL = UART_FUNC_SEL_UART; /* Set UART line configuration */ uart->LCR = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; /* Set UART Rx and RTS trigger level */ uart->FCR &= ~(UART_FCR_RFITL_Msk | UART_FCR_RTS_TRI_LEV_Msk); /* Get PLL clock frequency if UART clock source selection is PLL */ if(u8UartClkSrcSel == 1) u32ClkTbl[u8UartClkSrcSel] = CLK_GetPLLClockFreq(); /* Set UART baud rate */ if(u32baudrate != 0) { u32Baud_Div = UART_BAUD_MODE2_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate); if(u32Baud_Div > 0xFFFF) uart->BAUD = (UART_BAUD_MODE0 | UART_BAUD_MODE0_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate)); else uart->BAUD = (UART_BAUD_MODE2 | u32Baud_Div); } }