1.串口角色:
(1)数据传输通道
(2)控制台

2.通讯参数
(1)波特率:衡量传输速率的快慢,每秒钟传输数据的位数(bit)
(2)数据位:有效数据
(3)起始位:线路空闲的时候是高电平,当检测到低电平认为有数据传输开始,所以是低电平。
(4)奇偶校检位:检测数据传输是否正确
(5)停止位:表明一帧数据传输结束

以上这些参数发送方和接收方要一致

3.硬件引脚:RXD,TXD,地

4.初始化
(1)设置引脚工作模式
(2)设置数据格式(ULCON)
(3)设置工作模式(DMA,轮询,中断),(UCON)
(4)设置波特率(UBRDIV)

  备注:2440的波特率设置是通过UBRDIV0设置       DIV_VAL = (PCLK / (bps x 16 ) ) −1

     6410和210的波特率是通过UBRDIV0和UDIVSLOT0设置,其中UBRDIV0和2440的用法一样,UDIVSLOT0寄存器中保存的是DIV_VAL中的小数部分,具体方法为小数部分*16之后查表取值

5.发送
(1)(UTRSTAT)
(2)(UTXH)

void putc(unsigned char c)  /* 串口发送函数 */
{
while (UFSTAT0 & (<<)); /* 如果TX FIFO满,等待 */
UTXH0 = c; /* 写数据 */
}

6.接收
(1)(UTRSTAT)
(2)(URXH)

unsigned char getc(void)  /* 串口接收函数 */
{
unsigned char ret;
while ((UFSTAT0 & 0x7f) == ); /* 如果RX FIFO空,等待 */
ret = URXH0; /* 取数据 */
if((ret == 0x0d) || (ret == 0x0a)) /* 0d---回车 0a---换行 */
{
putc(0x0d);
putc(0x0a);
}
else
{
putc(ret+);
} return ret;
}

7.关于用到的协助函数
(1) va_list args;
声明一个变参列表
(2)unsigned char str[1024];
声明一个字符数组,用来存放转换以后的字符串
(3) va_start(args,fmt);
开始生成可变参数列表里的元素
(4) vsprintf(str,fmt,args);
将可变参数列表args里的元素按照fmt的格式写入字符串str
  (5) va_end();
结束转换,清空变参列表,使得args指针无效(因为他是一个列表,所以相当于一个”数组“,故数组名是一个指针)。
     
8.关于移植函数库
(1)将提供的lib和include文件夹复制到junboot目录下,主要是编译lib目录
(2)由下面内容可以看出lib目录下的文件最终编译的结果是得到lib.o,所以我们要将lib.o整合到前面产生的jun-boot中
修改顶层Makefile,使得将当前路径下lib目录的编译结果加入到原有的jun-boot一起进行新的编译。

(3)最终目标jun-boot.bin,
(4)jun-boot.elf是由.o文件产生的,将这些.o文件赋值给一个变量,当然这个截图里少了uart.o文件。
则jun-boot.elf的产生:
(5)将print.c剪切到lib下
(6)将OBJS添加上lib/lib.o
(7)添加编译子目录下的lib.o的规则,以及clean伪目标规则。其中-C指明后面的目录lib,all是由于在lib子目录的Makefile中最终目标就是all。

(8)此时编译会出现以下错误
但是查看ctype.c里,发现引用的头文件里已经定义了这些符号,原因在于交叉编译器寻找头文件的路径没有包含这个路径。所以我们要利用-I选项添加头文件路径。而这个选项则应该加在lib子目录下的Makefile文件中,打开该文件发现
已经有了一个CFLAGS变量,该变量用来保存一些编译选项,我们只要在改变量里面添加-I选项就可以。但是这个变量一般应该出现在顶层目录的Makefile中,打开顶层 Makefile发现并未定义,所以在顶层Makefile中定义:
最后还要输出CFLAGS以供子目录使用


(9)此时编译还有以下错误
原因是我们没有添加必要的头文件vsprintf.h,于是在print.c里面添加头文件。
(10)再次编译发现还是有错误
原因是内联函数造成的,所以编译选项还要再改进。即CFLAGS
同时现在的CFLAGS主要使用到main.c所以还要修改main.c的编译选项,即加进去CFLAGS编译选项
(11)printf以及scanf的实现(print.c)
9.代码结构优化
(1)将一般外设.c文件剪切到新建的dev子目录
(2)编写dev子目录的Makefile
(3)修改顶层的Makefile

ok6410串口裸机总结的更多相关文章

  1. [国嵌攻略][158][SPI裸机驱动设计]

    SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...

  2. ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境

    ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统:  ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RA ...

  3. tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37410571 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   一 ...

  4. mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信

    这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...

  5. 【ARM】2410裸机系列-uart串口通信

    开发环境 (1)硬件平台:FS2410 (2)主机:Ubuntu 12.04 FS2410串口的原理图 串口UART寄存器配置   配置TXD0与RXD0(GPH2.GPH3) 设置波特率(UBRDI ...

  6. 【嵌入式】——arm裸机开发 step by step 之 串口通信

    一.在使用S5PV210的串口发送和接收的时候,首先要对S5PV210的串口进行配置,我们使用轮询方式时的配置有哪些? 1.配置GPIO,使对应管脚作为串口的发送和接收管脚 GPA0 0 1 管脚 2 ...

  7. ok6410[000] 搭建裸机开发环境

    1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...

  8. ok6410按键中断编程,linux按键裸机

    6410按键中断编程 一.流程分析 外部中断控制寄存器(s3c6410x  359页) 1.EINTxCONy: 外部中断组x的第y个控制器.这个就是设置中断的触发方式.有5种触发方式. 2.EINT ...

  9. ok6410的LCD裸机范例

    /****************************************** 实验步骤 1.配置引脚功能,将其GPI.GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出: ...

随机推荐

  1. ua实现类似 www.taobao.com 在手机上打开自动转变为 m.taobao.com 的域名转换

    user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.25 ...

  2. Visual 中控制台程序如何使用MFC类库

    unresolved external symbol __beginthreadex错误的解决Win32 Consle Application使用MFC的一些类如CString时编译时相信会很经常遇到 ...

  3. Testing and Checking Refined

    还是James大叔的文章:http://www.satisfice.com/blog/archives/856 本文提出了Testing和checking的定义和他们之间的区别. ========== ...

  4. mysql中-e用法

    实际应用中,不仅可以先登陆mysql再使用,还可以在链接的时候进行sql操作,此时需要加参数-e 例: >mysql -hlocalhost -P8080 -uroot -p123456 -e' ...

  5. sql server查询出的结果中添加一列序列行

    select row_number()over(order by id) as rownum ,[UserName] ,[Password] ,[Mobile] ,[Email] ,[Sex] ,[C ...

  6. VC与JavaScript交互(二) --- 调用JS函数

    这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: //[html] <script type="text/javascript"& ...

  7. Duilib学习笔记《04》— 窗体显示

    在前面已经了解了duilib控件以及界面布局相关内容,接下来就要考虑该如何将xml中描述的布局通过界面展现出来.实际上在 Duilib学习笔记<01> 中我们已经简单提到过基本的流程及元素 ...

  8. 【C#基础】static 关键字用法小结

    静态变量 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用. 有时候,我们希望 ...

  9. 【C++面试】常考题复习

    // CPP_Test@2014.10.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <assert.h&g ...

  10. 安装package.js