tiny4412 基础(六)串口
串口对嵌入式必备的调试工具。
串口的操作不外乎以下几点:
1.设置对应gpio复用为uart
2.设置时钟,设置波特率,数据位等基本参数
3.使能
对于tiny4412的串口特性,这里不赘述。对于ch0,tx/rx各由256bytes的FIFO。
时钟
对于clock:
由上可知uart的时钟可选XusbXTI,前面说过是24M板载晶振,也可以SCLK_MPLL,由CLK_SRC_PERIL0来决定的。
Base Address: 0x1003_0000
Address = Base Address + 0xC250, Reset Value = 0x0001_1111
低4位表示uart0, 默认值是0x01,
UART0_SEL | [3:0] | RW | Controls MUXUART0 0000 = XXTI 0001 = XusbXTI 0010 = SCLK_HDMI24M 0011 = SCLK_USBPHY0 0101 = SCLK_HDMIPHY 0110 = SCLKMPLL_USER_T 0111 = SCLKEPLL 1000 = SCLKVPLL Others = Reserved MUXUART0 is the source clock of UART0. |
0x1 |
即默认24M。
在这里可以先使用默认值, 然后把串口设置好后,反过来去读BL1里面设置情况。
上面分频器DIV由CLK_DIV_PERIL0寄存器控制
Base Address: 0x1003_0000
Address = Base Address + 0xC550, Reset Value = 0x0000_0000
UART0_RATIO | [3:0] | RW | DIVUART0 Clock Divider Ratio SCLK_UART0 = MOUTUART0/(UART0_RATIO + 1) |
0x0 |
因此,默认情况下SCLK UART时钟是24M
GPIO
对于tiny4412-1506板本来说,串口原理图:
最后连到核心板
UART_0_RXD | Input | Receives data for UART0 | XuRXD_0 | muxed |
UART_0_TXD | Output | Transmits data for UART0 | XuTXD_0 | muxed |
XuRXD_0 对应GPA0[0]/UART_0_RXD
XuTXD_0 对应GPA0[1]/UART_0_TXD
波特率
由上面分析,默认的SCLK UART = 24M
根据手册:
DIV_VAL = (SCLK_UART/(bps * 16)) - 1
DIV_VAL = (24 M)/(115200*16) - 1 = 12.02
UBRDIVn = 12(integer part of DIV_VAL)
UFRACVALn/16 = 0.2
Therefore, UFRACVALn = 3
即UBRDIVn = 12, UFRACVALn = 3