* 电路分析
SN74LVC16T245 是16位双电源总线收发器,可以在两种不同电压的总线间进行转换。Tiny4412采用SN74LVC16T245在CPU与UART之间进行电压转换,CPU的电压为1.8V,而UART为3.3V。
UART0(CON1) 和 UART3(CON4) 通过MAX3232转换为TTL电平,分别连接COM0和COM3两个RS232串口。
UART1(CON2)通过RS-485收发器芯片SP3485连接到RS485串口。
XuRXD_0 的引脚位置为 AD22,XuTXD_0的引脚位置为AE25,其它UART引脚也大体位于 "Exynos 4412 SCP pin map" 图中的右下角区域。
* uboot中的设置
UART区域的引脚均为多功能引脚,即可做UART,也可作为通用IO口的GPA0和GPA1,因此需要在uboot中对相应的特殊功能寄存器(SFR)进行设置。GPA0的设置寄存器GPA0CON的地址为0x11400000,GPA1的设置寄存器GPA1CON的地址为0x11400000+0x0020=0x11400020。设置功能时,将某个端口对应的位设置为0x2,即将该端口的功能配置为UART_n_RXD或UART_n_TXD。
设置程序可见 uboot_tiny4412/board/samsung/tiny4412/lowlevel_init.S:
1 /* set GPIO to enable UART */ 2 @ GPIO setting for UART for UART0/1/2/3 3 ldr r0, =0x11400000 4 ldr r1, =0x22222222 5 str r1, [r0] 6 ldr r0, =0x11400020 7 ldr r1, =0x222222 8 str r1, [r0]
接下来设置UART的时钟源和时钟分频器:
1 ldr r0, =S5PV310_CLOCK_BASE 2 ldr r1, =CLK_SRC_PERIL0_VAL 3 ldr r2, =CLK_SRC_PERIL0_OFFSET 4 str r1, [r0, r2] 5 ldr r1, =CLK_DIV_PERIL0_VAL 6 ldr r2, =CLK_DIV_PERIL0_OFFSET 7 str r1, [r0, r2]
在uboot_tiny4412/include/asm/arch/cpu.h中有:
#define S5PV310_CLOCK_BASE 0x10030000
#define CLK_SRC_PERIL0_OFFSET 0x0C250
#define CLK_DIV_PERIL0_OFFSET 0x0C550
在uboot_tiny4412/board/samsung/tiny4412/tiny4412_val.h中有:
1 /* CLK_SRC_PERIL0 */ 2 #define PWM_SEL 0 3 #define UART5_SEL 6 4 #define UART4_SEL 6 5 #define UART3_SEL 6 6 #define UART2_SEL 6 7 #define UART1_SEL 6 8 #define UART0_SEL 6 9 #define CLK_SRC_PERIL0_VAL ((PWM_SEL << 24) 10 | (UART5_SEL << 20) 11 | (UART4_SEL << 16) 12 | (UART3_SEL << 12) 13 | (UART2_SEL<< 8) 14 | (UART1_SEL << 4) 15 | (UART0_SEL)) 16 17 /* CLK_DIV_PERIL0 */ 18 #if defined(CONFIG_CLK_BUS_DMC_165_330) 19 #define UART5_RATIO 7 20 #define UART4_RATIO 7 21 #define UART3_RATIO 7 22 #define UART2_RATIO 7 23 #define UART1_RATIO 7 24 #define UART0_RATIO 7 25 #elif defined(CONFIG_CLK_BUS_DMC_200_400) 26 #define UART5_RATIO 7 27 #define UART4_RATIO 7 28 #define UART3_RATIO 7 29 #define UART2_RATIO 7 30 #define UART1_RATIO 7 31 #define UART0_RATIO 7 32 #endif 33 34 #define CLK_DIV_PERIL0_VAL ((UART5_RATIO << 20) 35 | (UART4_RATIO << 16) 36 | (UART3_RATIO << 12) 37 | (UART2_RATIO << 8) 38 | (UART1_RATIO << 4) 39 | (UART0_RATIO))
最后设置UART发送接收模式等工作特性:
1 ldr r0, =S5PV310_UART_CONSOLE_BASE 2 ldr r1, =0x111 3 str r1, [r0, #UFCON_OFFSET] 4 5 mov r1, #0x3 6 str r1, [r0, #ULCON_OFFSET] 7 8 ldr r1, =0x3c5 9 str r1, [r0, #UCON_OFFSET] 10 11 ldr r1, =UART_UBRDIV_VAL 12 str r1, [r0, #UBRDIV_OFFSET] 13 14 ldr r1, =UART_UDIVSLOT_VAL 15 str r1, [r0, #UDIVSLOT_OFFSET] 16 17 ldr r1, =0x4f4f4f4f 18 str r1, [r0, #UTXH_OFFSET] @'O'