zoukankan      html  css  js  c++  java
  • 运行UART的程序

    1 捎程序的时候,注意,捎入的是norflash,此时的按钮应该在norFlash.
    2 当捎入成功的时候,开始运行程序时,应该把按钮按回nandflash,因为程序的启动就是在nandflash,他把norflash 的内容放到了nandflash中运行,cpu的固化程序做的。
    3 因为串口时用的速度是9600,所以你的vim .kermrc也应该改为9600.
    4 lsusb探测U转串的设备 lsmod 探测驱动是否存在 ch341 (kermit 是应用程序在调用驱动) ls /dev/ttyU*(kermit 里边就是打开这个设备,这里边就是驱动程序的表象了,如果这个查的太快的话,就会ttyUSB1,这时你需要改vim .kermrc 中USB0给为1)
    ls -l /lib/modules/2.6.2.z./kernel/drivers/usb/serial 这个命令执行下去就能考到.ko文件驱动的所在。
    5 kermit 基于终端的命令行的串口驱动程序。
    6 UART U通用,A是异步的意思、
    7 串口一共3个,我们设置串口控制器的寄存器(8N1)。(N代表意思是
    8 ULCON 1:0 11
    9 UCON0 3:2 01 中断或者轮询
    1:0 01
    10 UART0.UBRDIVO=0X4d; 设置波特率
    12000000/9600/16 -1=77化为16进制就是4d
    11 波特率的始终有3种,但是我们只选了一种。PCLK
    mini2440 主频400MHZ,最高533MHZ(530),现在不论ADC还是PCLK都是12M.
    现在12M
    改变频率可以通过时钟控制寄存器
    晶振通电产生规律的正璇波。
    自然产生不会通过100M,更高需要锁线环
    倍频和分频。
    12 UTXHO 串口最多发8位
    在波特率调调节下,移位寄存器一位一位的移出去,
    12 数据放入发送保持寄存器,然后在波特率协调下,发送移位器把保存寄存器中的数据一位一位的发送出去 UART0.UTXH0=C;
    等待发送寄存器中的数据发送完毕
    while(!(UART0.UTRSTAT0&(0X1<<)))

    13 问题当移位的时候,旧的还没有移完,新的又来了,怎么办,需要一个while查看寄存器的状态。
    14 UTRSTATN 2 0表不空,1,自动设置当无数据的时候。
    1 我们选择中断和DMA模式,所以此处设为1.
    0
    15 gcc 手册中 中招built -fno-built 这样可以避免和库中的putc产生冲突。(CFLA后边添加)
    16 0xa 和10 是一样的在移位运算中。
    17 Vim 操作,o另起一行, 在输入状态中ctrl shift v
    局部复制, ctrl v d 剪切。
    18 两种取反方式
    GPH.GPHCON = ((~(0xf<<4))&GPH.GPHCON) | 0xa<<4;
    while(!(UART0.UTRSTAT0&0x1))
    19 s3c2440.pdf 34页
    20 配置UART0为,8位数据,无校验,1位停止位,正常模式,波特率9600,中断或者轮询。
    21 kermit 会自动加 ;
    22 回车回到当前行首,换行下一行当前位置,\kermit 按下enter时,发送 (linux才有 ,windos没有)
    23 从CPU出来两个线连到3232上升高电平,这样子才能传出去。
    24 对于捎程序的讲解:
    利用norflash 中的程序,把你的4K程序捎到nandflash中,其实CPU启动的时候还是从nangflash 中拿起4k的程序到SRAM.
    25 关于 在linux和windows中的不同,
    kermit 类似于windows中(他把发来 解析成 )
    26 ledon 24 这样子写的话,会选择2打开。
    27 char s[] = "ledon 1 3";
    char *p[4];
    int i;

    p[0] = strtok(s, " ");
    for(i=1; p[i-1]!=NULL; i++)
    {
    p[i] = strtok(NULL, " ");
    }

    for(i=0; p[i]!=NULL; i++)
    {
    printf("%s ", p[i]);
    }

    return 0;
    strtok注意p的大小,会多一个NULL,但是这个只是用来判断,p[i]=NULL;并没有真正的赋值。
    strtok 会自动给分割的字符串后边加
    28 因为strtok的,<string.h>有全局变量,所以程序中必须能用全局变量才行,这里的LDFLAGS = -static -L /home/linux/toolchain/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/ -lc
    加static,最后的加-lc必须注意,这是libc.a的简称。
    $(LD) $^ $(LDFLAGS) -T map.lds -o $(NAME).elf
    # -static使用静态库
    # -L 绝对路经,静态库所在目录
    # -库名简称,静态库所在目录下具体使用哪个静态库
    29 加个连接脚本在START.S里边,map.lbs
    30 puts 没有加 但是putc加了。
    31 kermit crtl 然后c之后进去kermit命令界面,然后q是退出kermit ,而c是在此进入原先连接界面。
    32 原理图上串口123,而我们用的是012,写错了。
    33 puts putc,gets,getc这几个程序离开kermit毫无意义。
    34

  • 相关阅读:
    【LeetCode每天一题】Symmetric Tree(对称树)
    【LeetCode每天一题】Same Tree(相同的树)
    【Go】并发
    【LeetCode每天一题】Validate Binary Search Tree(有效的二叉搜索树)
    【LeetCode每天一题】 Unique Binary Search Trees(唯一二叉搜索树)
    【LeetCode每天一题】Binary Tree Inorder Traversal(二叉树的中序遍历)
    【LeetCode每天一题】Reverse Linked List II(旋转链表II)
    【LeetCode每天一题】Subsets II(子集合II)
    【LeetCode每天一题】Partition List(分区链表)
    【Go】面向对象
  • 原文地址:https://www.cnblogs.com/coding4/p/5604789.html
Copyright © 2011-2022 走看看