• 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'
  • 相关阅读:
    Scrapy的架构与原理的理解【转】
    Scrapy框架的命令行详解【转】
    WPF 程序中启动和关闭外部.exe程序
    C++ 二维数组(双重指针作为函数参数)
    C++ 遇见的一些函数
    C++ #pragma 预处理指令
    C++异常处理(Exception Handling)
    C++模板学习随笔
    C++ 数组的地址问题学习随笔
    关于C++几个容易混淆的概念总结
  • 原文地址:https://www.cnblogs.com/brep/p/4188427.html
Copyright © 2020-2023  润新知