Tiny4412增强版底板串口电路与设置

* 电路分析

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'

 

 

 

posted @ 2014-12-27 14:55  brep  阅读(808)  评论(0编辑  收藏  举报