3-uart的使用

回顾:
    电路原理图, 控制LED实则就是控制CPU上的管脚
    cpu datasheet,(CPU使用说明书)
        GPIOCALTFN0
        GPIOCOUTENB
        GPIOCOUT
        特殊功能寄存器是软件控制硬件的媒介
        就向汽车这个商品中提供驾驶员操作汽车的媒介:方向盘 。。。
    编辑代码
        vi
    编译代码
        gcc  ----> 编译结果只能运行在X86
        交叉编译工具 arm-linux-gcc ----> 编译结果只能运行arm
        
        编译
        链接
        由ELF ---> BIN
        
        file  du objcopy readelf objdump
    运行代码
        tftp
        go
        
    volatile的作用?以及使用场合?
        防止编译器的过度优化
        
        1)访问特殊功能寄存器
        2)中断程序和进程共享的变量
        3)多线程共享的变量
---------------------------------------------------------------
uart驱动程序

1、uart的基本概念
   uart,串行异步收发器
        异步通信和同步通信的区别?
        
        单工
        半双工
        全双工
   串行接口标准 电子工业协会制定的
       RS232
          电气特性
             逻辑0,  3v~15v
             逻辑1, -3v~-15v
          计算机内部使用的 TTL电平
             逻辑0, 低电平 <0.8v
             逻辑1   高电平 >2.4v
          机械特性,数据的传输距离<10m
              
          
       RS485
          传输距离可以超过1000m
    串行通信时的重要参数
       导线空闲状态处于高电平
       发送时从低bit开始
       如果遇到面试 画图解决
       数据位个数:5~8bit
       校验方式:奇校验 /偶校验 / 无校验
       停止位: 1~2bit
       波特率: bps(bit per second)
    
2、电路原理图
   PC_RXD1  ----> UARTRXD0----->GPIOD14
   PC_TXD1                      GPIOD18
   
   运行在arm核中的程序可以像操作LED一样
   直接控制管脚上的电平状态达到发送数据的目的
   
   实际开发过程中,cpu都集成uart控制器
   运行arm核中的程序 去操作uart控制器
   由uart控制器再去操作对应管脚形成需要的通信时序
   从而简化软件编程
   
   uart控制器能做哪些工作
   还需要软件完成哪些工作
   以及软硬件如何协调工作?
   
   答案要去cpu datasheet找

3、datasheet
   P71
       GPIOD14, 可选功能1
       GPIOD18, 可选功能1
   P759
       GPIODALTFN0  0xc001d020
          [29:28] 01
       GPIODALTFN1  0xc001d024
          [5:4]   01
   P960
       S5P6818内部集成了6个独立的uart控制器
       问题:COM1对应了CPU内部的哪个uart控制器?
          以COM1连接到管脚GPIOD14 GPIOD18为线索
          com1对应的时uart0控制器
          
       CPU感知硬件状态变化的方式:
          1)中断
          2)轮询
          3)DMA  directly memory access
       希望: 8N1 115200 polling  non-fifo
       ULCON0  0xc00a1000
          [1:0]  11, 8bit数据位
          [2]    0,  1bit stop
          [5:3]  000, 无校验
          [6]    0,  正常模式
       UCON0   0xc00a1004
          [1:0]  01, 轮询接收模式
          [3:2]  01, 轮询发送模式
          [5]    0,  正常操作
       UTRSTAT0  0xc00a1010
          [0]    0/1, 接收缓冲区空/非空
          [1]    0/1, 发送缓冲区非空/空
          [2]    =1,  发送缓冲区为空 && 移位寄存器为空
       UTXH0    0xc00a1020
          [7:0]
       URXH0    0xc00a1024
          [7:0]
       UARTCLKENB0  0xc00a9000
          [2]   1/0  使能/禁止给uart0的时钟信号
       UART0CLKGEN0L 0xc00a9004
          [4:2]  1,  选择PLL1作为时钟源
                     PLL1=800MHz
          [12:5] 15, 800M/(15+1) = 50MHz
       
       第二次分频的分频系数   
       UBRDIV0
           26
       UFRACVAL0
           2
           
           
           50000000/(115200*16) - 1
          =27.13 - 1
          =26.13
          
          
            
       
4、编码
   arm-cortex_a9-linux-gnueabi-gcc -c -nostdlib main.c -o main.o
   arm-cortex_a9-linux-gnueabi-gcc -c -nostdlib uart.c -o uart.o
   arm-cortex_a9-linux-gnueabi-ld -nostdlib -nostartfiles -Ttext=0x48000000 -emain main.o uart.o -o uart
   arm-cortex_a9-linux-gnueabi-objcopy -O binary uart uart.bin
5、下载执行调试
   cp uart.bin /tftpboot/
   
   tftp 48000000 uart.bin
   
   练习: 对着代码重新阅读电路原理图 datasheet
        
        
            

猜你喜欢

转载自blog.csdn.net/yizimu/article/details/81213346