ok6410串口裸机总结
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串口裸机总结的更多相关文章
- [国嵌攻略][158][SPI裸机驱动设计]
SPI控制器工作流程 SPI控制器提供2个SPI接口.每个SPI接口有两个通道,分别为TX通道和RX通道.CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会 ...
- ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境
ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统: ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RA ...
- tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37410571 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一 ...
- mini2440裸机试炼之——DMA直接存取 实现Uart(串口)通信
这个仅仅能作为自己初步了解MDA的开门篇 实现功能: 将字符串数据通过DMA0通道传递给UTXH0,然后在终端 显示.传输数据完后.DMA0产生中断,beep声, LED亮. DMA基本知识 计算机系 ...
- 【ARM】2410裸机系列-uart串口通信
开发环境 (1)硬件平台:FS2410 (2)主机:Ubuntu 12.04 FS2410串口的原理图 串口UART寄存器配置 配置TXD0与RXD0(GPH2.GPH3) 设置波特率(UBRDI ...
- 【嵌入式】——arm裸机开发 step by step 之 串口通信
一.在使用S5PV210的串口发送和接收的时候,首先要对S5PV210的串口进行配置,我们使用轮询方式时的配置有哪些? 1.配置GPIO,使对应管脚作为串口的发送和接收管脚 GPA0 0 1 管脚 2 ...
- ok6410[000] 搭建裸机开发环境
1.安装交叉工具链arm-linux-gcc-4.3.2 先把这个工具复制到rhat系统中[rhel-server-6.3-i386-dvd.iso] 解压arm-linux-gcc-4.3.2到一个 ...
- ok6410按键中断编程,linux按键裸机
6410按键中断编程 一.流程分析 外部中断控制寄存器(s3c6410x 359页) 1.EINTxCONy: 外部中断组x的第y个控制器.这个就是设置中断的触发方式.有5种触发方式. 2.EINT ...
- ok6410的LCD裸机范例
/****************************************** 实验步骤 1.配置引脚功能,将其GPI.GPJ引脚设置为VD数据输出模式,及GPJ后几位设置成LCD时钟输出: ...
随机推荐
- CA提供的身份认证配置弃用
场景:从CA网站登录,在CA主页点击我们集成到CA的业务系统图标进行跳转,发现业务系统登录过身份(没cookies),身份认证自动使用 url,跳转到CA登录页,造成二次登录 [Authorize] ...
- oracle修改连接空闲自动断开
空闲3分钟自动断开 SELECT * FROM DBA_PROFILES; CREATE PROFILE KILLIDLE LIMIT IDLE_TIME ; alter PROFILE DEFAUL ...
- 学习总结 java连接数据库
package com.hanqi.test; import java.sql.*; public class jdbcTest { public static void main(String[] ...
- mac下的一些常识
1,环境变量 EddydeMacBook-Pro:~ eddy$ vi ~/.bash_profile EddydeMacBook-Pro:~ eddy$ vim /etc/profile Eddyd ...
- JSTL的全称:JSP Standard Tag Library, jsp 标准标签库
JSTL的全称:JSP Standard Tag Library, jsp 标准标签库 JSTL的作用 提供给Java web开发人员一个标准通过的标签函数库和EL来取代传统直接在页面上嵌入j ...
- ASP.NET运行机制原理 ---浏览器与IIS的交互过程 自己学习 网上查了下别人写的总结的很好 就转过来了 和自己写的还好里嘻嘻
一.浏览器和服务器的交互原理 (一).浏览器和服务器交互的简单描述: 1.通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问 ...
- CSS垂直水平居中方法整理
CSS定位中常常用到垂直居中,比如覆盖层上的弹框. 兼容性比较好的方法: <!DOCTYPE html PUBliC "-//W3C//DTD XHTML 1.0 Transition ...
- Duilib学习笔记《05》— 消息响应处理
在Duilib学习笔记<04>中已经知道了如何将窗体显示出来,而如何处理窗体上的事件.消息呢? 一. 系统消息 窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的 ...
- ionic ngcordova camera
拍照是經常用到的,所以記錄一下 拍照的代碼... 1. ionic start camera blankcd camera ionic platform add ios 2. 添加插件,這裏很熟悉.. ...
- Solaris从安装光盘安装软件
系统安装完成后默认没有安装GCC 挂载系统盘后,所安装的软件就在/cdrom/sol-10-811-x86/Solaris_10/Product文件夹下可以查看下关于GCC的软件包 #ls -l | ...