blob: 50fd3f4edde4628e7fd955846385a91863db5964 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001#ifndef __UART_SW_INT_H__
2#define __UART_SW_INT_H__
3
4 /*
5 * NoteXXX: Below is the sample code to set UART
6 * UART clock is MPLL clock / 8.
7 * baud rate is 115200.
8 * Thus UART1_DLL = 0xE.
9 * You should specify UART1_DLL based on
10 * divisor(DLH+DLL) = (UART_CLOCK_RATE)
11 */
12
13
14#define UART_SETUP(_n, _divL, _divH) \
15 do { \
16 volatile kal_uint16 tmp; \
17 \
18 /* Setup 8-N-1,(UART_WLS_8 | UART_NONE_PARITY | UART_ */ \
19 UART_WriteReg(UART##_n##_LCR,0x0003); \
20 \
21 /* divisor: 8 */ \
22 UART_WriteReg(UART##_n##_HIGHSPEED,0x0001); \
23 \
24 /* Set BaudRate */ \
25 tmp = UART_ReadReg(UART##_n##_LCR); \
26 tmp |= UART_LCR_DLAB; \
27 UART_WriteReg(UART##_n##_LCR, tmp); \
28 \
29 /* MCU_CLK 491520000(491.52MHz) */ \
30 /* UART_CLK (MCU_CLK / 8) */ \
31 \
32 /* divisorL = ((UART_CLK / 8) / 115200) & 0xFF; */ \
33 /* divisorH = ((UART_CLK / 8) / 115200) >> 8; */ \
34 \
35 /* UART_WriteReg(_DLL, divisorL); */ \
36 UART_WriteReg(UART##_n##_DLL, (_divL)); \
37 /* UART_WriteReg(_DLM, divisorH); */ \
38 UART_WriteReg(UART##_n##_DLM, (_divH)); \
39 \
40 UART_WriteReg(UART##_n##_LCR, 0x0003); \
41 /* Enable Fifo, and Rx Trigger level = 16bytes, flush */ \
42 /* (UART_FCR_FIFOEN | UART_FCR_4Byte_Level | UART_FCR */ \
43 UART_WriteReg(UART##_n##_FCR, 0x0047); \
44 \
45 /* DTR , RTS is on, data will be coming,Output2 is hi */ \
46 UART_WriteReg(UART##_n##_MCR,(kal_uint16)0x0003); \
47 \
48 /* _IER, enable RDA, RLS, MS , disable THR inter */ \
49 /* UART_WriteReg(UART##_n##_IER, UART_IER_RDA); */ \
50 UART_WriteReg(UART##_n##_IER, IER_HW_NORMALINTS); \
51 } while(0)
52
53#endif /* __UART_SW_INT_H__ */