43 void uart_setbaud(
volatile struct UART_struct * uart, uint32_t baud) {
48 inc = ((uint64_t) baud * DIV * MOD * 10 / CLK ) - 10 ;
53 uart->CONbits.TXE = 0;
54 uart->CONbits.RXE = 0;
56 uart->BR = ( (uint16_t)inc << 16 ) | MOD;
58 uart->CONbits.XTIM = 0;
59 uart->CONbits.TXE = 1;
60 uart->CONbits.RXE = 1;
63 void uart_flowctl(
volatile struct UART_struct * uart, uint8_t on) {
67 GPIO->PAD_DIR_SET.U1CTS = 1;
68 GPIO->PAD_DIR_RESET.U1RTS = 1;
70 GPIO->FUNC_SEL.U1CTS = 1;
71 GPIO->FUNC_SEL.U1RTS = 1;
75 GPIO->PAD_DIR_SET.U2CTS = 1;
76 GPIO->PAD_DIR_RESET.U2RTS = 1;
78 GPIO->FUNC_SEL.U2CTS = 1;
79 GPIO->FUNC_SEL.U2RTS = 1;
82 uart->CONbits.FCE = 1;
86 uart->CONbits.FCE = 0;
89 GPIO->PAD_DIR_RESET.U1CTS = 1;
90 GPIO->PAD_DIR_RESET.U1RTS = 1;
92 GPIO->FUNC_SEL.U1CTS = 3;
93 GPIO->FUNC_SEL.U1RTS = 3;
97 GPIO->PAD_DIR_RESET.U2CTS = 1;
98 GPIO->PAD_DIR_RESET.U2RTS = 1;
100 GPIO->FUNC_SEL.U2CTS = 3;
101 GPIO->FUNC_SEL.U2RTS = 3;
106 void uart_init(
volatile struct UART_struct * uart, uint32_t baud) {
112 uart->CONbits = (
struct UART_CON) {
120 if( uart ==
UART1 ) {
122 GPIO->PAD_DIR_SET.U1TX = 1;
123 GPIO->PAD_DIR_RESET.U1RX = 1;
126 GPIO->FUNC_SEL.U1TX = 1;
127 GPIO->FUNC_SEL.U1RX = 1;
129 #if UART1_RX_BUFFERSIZE > 32
130 *UART1_UCON = (1 << 0) | (1 << 1) ;
132 u1_rx_head = 0; u1_rx_tail = 0;
133 #elif UART1_RX_BUFFERSIZE < 32
134 *UART1_UCON = (1 << 0) | (1 << 1) | (1 << 12) | (1 << 14);
135 *UART1_UCTS = UART1_RX_BUFFERSIZE;
136 *GPIO_FUNC_SEL1 = ( (0x01 << (0*2)) | (0x01 << (1*2)) );
138 *UART1_UCON = (1 << 0) | (1 << 1) | (1 << 14);
141 u1_tx_head = 0; u1_tx_tail = 0;
151 GPIO->PAD_DIR_SET.U2TX = 1;
152 GPIO->PAD_DIR_RESET.U1RX = 1;
155 GPIO->FUNC_SEL.U2TX = 1;
156 GPIO->FUNC_SEL.U2RX = 1;
158 #if UART2_RX_BUFFERSIZE > 32
159 *UART2_UCON = (1 << 0) | (1 << 1) ;
161 u2_rx_head = 0; u2_rx_tail = 0;
162 #elif UART2_RX_BUFFERSIZE < 32
163 *UART2_UCON = (1 << 0) | (1 << 1) | (0 << 12) | (1 << 14);
164 *UART2_UCTS = UART2_RX_BUFFERSIZE;
165 *GPIO_FUNC_SEL1 = ( (0x01 << (0*2)) | (0x01 << (1*2)) );
167 *UART2_UCON = (1 << 0) | (1 << 1) | (1 << 14);
170 u2_tx_head = 0; u2_tx_tail = 0;
175 uart_setbaud(uart, baud);
void uart_init(const unsigned int uart_num, uint32_t module_clk_hz, const uint32_t baud)
Initialize UART.
#define UART1
Peripheral UART1 base pointer.
#define UART2
Peripheral UART2 base pointer.