/** Turn On the USART * * @param drv_info * @param pMode */ void USART_CFG(USART_INFO drv_info, DRV_UART_MODE pMode) { Usart* pUsart =drv_info->hw_base; drv_pmc_enable(&drv_info->info); pUsart->US_WPMR = US_WPMR_WPKEY(0x555341); //* Reset receiver and transmitter pUsart->US_CR = US_CR_RSTRX | US_CR_RSTTX | US_CR_RXDIS | US_CR_TXDIS; //* Define the baud rate divisor register pUsart->US_BRGR = AT91_GetDiv(pMode->baudrate); //* Write the Timeguard Register pUsart->US_TTGR = 3 ; pUsart->US_RTOR = pMode->rtout; //* Define the USART mode pUsart->US_MR = pMode->mode; //* Clear Transmit and Receive Counters pUsart->US_TNCR = 0; pUsart->US_TCR = 0; pUsart->US_RNCR = 0; pUsart->US_RCR = 0; pUsart->US_PTCR = US_PTCR_RXTEN | US_PTCR_TXTEN; // Enable Usart pUsart->US_CR = US_CR_TXEN | US_CR_RXEN | US_CR_STTTO; pUsart->US_IER = US_IER_ENDRX | US_IER_TIMEOUT; drv_enable_isr(&drv_info->info); PIO_CfgPeriph(&drv_info->pins); }
void UART_OFF(Uart* pUart) { //* Disable all interrupts pUart->UART_IDR = UART_IDR_RXRDY | UART_IDR_TXRDY | UART_IDR_ENDRX | UART_IDR_ENDTX | UART_IDR_OVRE | UART_IDR_FRAME | UART_IDR_PARE | UART_IDR_TXEMPTY | UART_IDR_TXBUFE | UART_IDR_RXBUFF; //* Reset the baud rate divisor register pUart->UART_BRGR = 0 ; //* Reset the USART mode pUart->UART_MR = 0 ; //* Abort the Peripheral Data Transfers pUart->UART_PTCR =UART_PTCR_RXTDIS | UART_PTCR_TXTDIS; pUart->UART_RNCR = 0; pUart->UART_TNCR = 0; pUart->UART_RCR = 0; pUart->UART_TCR = 0; //* Disable receiver and transmitter and stop any activity immediately pUart->UART_CR = UART_CR_TXDIS | UART_CR_RXDIS | UART_CR_RSTTX | UART_CR_RSTRX; //RTS =1 (not ready) PIO_CfgPeriph(DRXD_PIN | DTXD_PIN); }