• u-boot分析(八)----串口初始化


    u-boot分析(八)

      上篇博文我们按照210的启动流程,分析到了内存初始化,今天我们继续按照u-boot的启动流程对串口的初始化进行分析。

    今天我们会用到的文档:

    1.        2440芯片手册:http://download.csdn.net/detail/wrjvszq/8358949

    2.        6410芯片手册:http://download.csdn.net/detail/wrjvszq/8358965

    3.        210芯片手册:S5PV210_UM_REV1.1(我的不知道为什么传不上去大家去百度搜吧)

     

    串口的初始化比较简单,我们今天会通过以下几点,对串口的初始化进行介绍:

    1.      串口通信协议分析

    2.      编程分析

     

    l  串口通信协议分析

    相信搞过单片机的对串口并不陌生,我下面仅仅是复习一下串口通信协议。

    1.       RS232接口

    我们常见的串口是九帧的串口如下图

    注:上面为公头,下面为母头

    其接口定义如下:

    1.        DCD   载波检测

    2.        RXD   接收数据

    3.        TXD   发送数据

    4.        DTR   数据终端准备

    5.        GND  信号地

    6.        DSR   数据设备准备好

    7.        RTS   请求发送

    8.        CTS   清除发送

    9.        RI    振铃指示

    注:红色标注的三个管脚最为重要

    2.       异步串口通信协议

    下图是其工作模式:

    其各个位的意义如下:

    l  起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。

    l  数据位:有效数据。

    l  奇偶校验位:来校验资料传送的正确性。

    l  停止位:它是一帧数据的传输结束。

    l  空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。

    l  波特率:表示每秒钟传送的二进制位数。

    3.       数据发送接收过程

    l  发送过程:

    把数据发送到fifo中,fifo把数据发送到移位寄存器,然后在时钟脉冲的作用下,往串口线上发送一位bit数据。

    l  接收过程:

    接收移位寄存器接收到数据后,将数据放到fifo中,接受fifo事先设置好触发门限,当fifo中数据超过这个门限时,就触发一个中断,然后调用驱动中的中断服务函数,把数据写到flip_buf中。

    l  编程分析

    1.       初始化流程:

    按照以往的经验去手册找其的初始化流程,但是没有找到,可以通过在网上查找资料,或者对照u-boot我们可以总结出通用的串口初始化流程:

    1)        设置引脚工作模式

    2)        设置数据格式

    3)        设置工作模式(DMA,轮询,中断)

    4)        设置波特率

    2.       代码分析

    通过上面的流程我们就不难理解u-boot的代码,大家可以自己分析:

     1 /*
     2  * uart_asm_init: Initialize UART in asm mode, 115200bps fixed.
     3  * void uart_asm_init(void)
     4  */
     5 uart_asm_init:
     6 
     7     /* set GPIO(GPA) to enable UART */
     8     @ GPIO setting for UART
     9     ldr    r0, =ELFIN_GPIO_BASE
    10     ldr    r1, =0x22222222
    11     str       r1, [r0, #GPA0CON_OFFSET]
    12 
    13     ldr     r1, =0x2222
    14     str     r1, [r0, #GPA1CON_OFFSET]
    15 
    16     // HP V210 use. SMDK not use.
    17 #if defined(CONFIG_VOGUES)
    18     ldr    r1, =0x100
    19     str    r1, [r0, #GPC0CON_OFFSET]
    20 
    21     ldr    r1, =0x4
    22     str    r1, [r0, #GPC0DAT_OFFSET]
    23 #endif
    24 
    25     ldr    r0, =ELFIN_UART_CONSOLE_BASE        @0xEC000000
    26     mov    r1, #0x0
    27     str    r1, [r0, #UFCON_OFFSET]
    28     str    r1, [r0, #UMCON_OFFSET]
    29 
    30     mov    r1, #0x3
    31     str    r1, [r0, #ULCON_OFFSET]
    32 
    33     ldr    r1, =0x3c5
    34     str    r1, [r0, #UCON_OFFSET]
    35 
    36     ldr    r1, =UART_UBRDIV_VAL
    37     str    r1, [r0, #UBRDIV_OFFSET]
    38 
    39     ldr    r1, =UART_UDIVSLOT_VAL
    40     str    r1, [r0, #UDIVSLOT_OFFSET]
    41 
    42     ldr    r1, =0x4f4f4f4f
    43     str    r1, [r0, #UTXH_OFFSET]        @'O'
    44 
    45     mov    pc, lr

     

     

  • 相关阅读:
    前导问题word使用技巧解决Word 生成目录时前导符不一致的问题(即通常所谓的目录中省略号大小不一致)
    安装用户debian7安装oracle11g
    字节文件MP3格式音频文件结构解析
    Linux下硬盘分区的最佳方案
    802.1x客户端软件 2.4版破解支持多网卡
    z9jpz.dll、gq0aku0.exe、cms2cmw.sys病毒
    Ghost批处理文件的基本格式
    利用ASP远程注册DLL的方法
    dllhost.exe系统进程介绍
    Unicode 和多字节字符集 (MBCS)
  • 原文地址:https://www.cnblogs.com/wrjvszq/p/4237498.html
Copyright © 2020-2023  润新知