X210串口配置与stdio移植
串口控制器初始化关键步骤
(1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0)
(2)GPA0CON(0xE0200000),bit[3:0] = 0b0010 bit[7:4] = 0b0010
(3)初始化这几个关键寄存器UCON0 ULCON0 UMCON0 UFCON0 UBRDIV0 UDIVSLOT0
主要的几个寄存器
(1)ULCON0 = 0x3 // 0校验位、8数据位、1停止位
(2)UCON = 0x5 // 发送和接收都是polling mode
(3)UMCON0 = 0x0 // 禁止modem、afc
(4)UFCON0 = 0x0 // 禁止FIFO模式
(5)UBRDIV0和UDIVSLOT0和波特率有关,要根据公式去算的
波特率的计算和设置
(1)第一步,用PCLK_PSYS和目标波特率去计算DIV_VAL: DIV_VAL = (PCLK / (bps x 16)) ?1
(2)第二步,UBRDIV0寄存器中写入DIV_VAL的整数部分
(3)第三步,用小数部分*16得到1个个数,查表得uBDIVSLOT0寄存器的设置值
#define GPA0CON 0xE0200000 #define UCON0 0xE2900004 #define ULCON0 0xE2900000 #define UMCON0 0xE290000C #define UFCON0 0xE2900008 #define UBRDIV0 0xE2900028 #define UDIVSLOT0 0xE290002C#define UTRSTAT0 0xE2900010 #define UTXH0 0xE2900020 #define URXH0 0xE2900024 #define rGPA0CON (*(volatile unsigned int *)GPA0CON) #define rUCON0 (*(volatile unsigned int *)UCON0) #define rULCON0 (*(volatile unsigned int *)ULCON0) #define rUMCON0 (*(volatile unsigned int *)UMCON0) #define rUFCON0 (*(volatile unsigned int *)UFCON0) #define rUBRDIV0 (*(volatile unsigned int *)UBRDIV0) #define rUDIVSLOT0 (*(volatile unsigned int *)UDIVSLOT0) #define rUTRSTAT0 (*(volatile unsigned int *)UTRSTAT0) #define rUTXH0 (*(volatile unsigned int *)UTXH0) #define rURXH0 (*(volatile unsigned int *)URXH0) //串口初始化 void uart_init() { //初始化rx tx对应GPIO引脚rGPA0CON&=~(0xff<<0);//将 bit0~7清零rGPA0CON|=0x22; //设置 _0 _1引脚为RX TX//串口相关寄存器rULCON0=0x3;rUCON0=0x5;rUMCON0=0;rUFCON0=0;//波特率计算相关/* //9600rUBRDIV0=433;rUDIVSLOT0=0x2222;*///用66.7MHZ算 //115200//66700000/(115200*16)-1rUBRDIV0=35;// rUBRDIV0余数*16 然后查表rUDIVSLOT0=0x0888; } //串口发送一字节 void uart_putc(char c) { while(!(rUTRSTAT0&(1<<1)));//等待发送结束rUTXH0=c; } char uart_getc() {while(!(rUTRSTAT0&(1<<0)));//等待发送结束return rURXH0; }
2.移植stdio(部分代码展示)
int printf(const char *fmt, ...) {int i;int len;va_list args;va_start(args, fmt);len = vsprintf(g_pcOutBuf,fmt,args);va_end(args);for (i = 0; i < strlen(g_pcOutBuf); i++){putc(g_pcOutBuf[i]);}return len; }int scanf(const char * fmt, ...) {int i = 0;unsigned char c;va_list args;while(1){c = getc();putc(c);if((c == 0x0d) || (c == 0x0a)){g_pcInBuf[i] = '\0';break;}else{g_pcInBuf[i++] = c;}}va_start(args,fmt);i = vsscanf(g_pcInBuf,fmt,args);va_end(args);return i; }
Makefile
CC = arm-linux-gcc LD = arm-linux-ld OBJCOPY = arm-linux-objcopy OBJDUMP = arm-linux-objdump AR = arm-linux-arINCDIR := $(shell pwd) # C预处理器的flag,flag就是编译器可选的选项 CPPFLAGS := -nostdlib -nostdinc -I$(INCDIR)/include # C编译器的flag CFLAGS := -Wall -O2 -fno-builtin#导出这些变量到全局,其实就是给子文件夹下面的Makefile使用 export CC LD OBJCOPY OBJDUMP AR CPPFLAGS CFLAGSobjs := start.o led.o clock.o uart.o main.o objs += lib/libc.auart.bin: $(objs)$(LD) -Tlink.lds -o uart.elf $^$(OBJCOPY) -O binary uart.elf uart.bin$(OBJDUMP) -D uart.elf > uart_elf.disgcc mkv210_image.c -o mkx210./mkx210 uart.bin 210.binlib/libc.a:cd lib; make; cd ..%.o : %.S$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c%.o : %.c$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -cclean:rm *.o *.elf *.bin *.dis mkx210 -fcd lib; make clean; cd ..
转载于:https://www.cnblogs.com/PengfeiSong/p/6352816.html
X210串口配置与stdio移植相关推荐
- S3C2440 GPS串口配置以及数据读写
S3C2440 GPS串口配置以及数据读写 参考文章:http://www.cnblogs.com/jason-lu/articles/3173988.html http://www.cn ...
- 嵌入式蓝桥杯G431RBT6 串口配置及使用方法cube MX
打开System Core点击SYS 打开可连续写入 选用外部时钟 打开串口一 开启异步输出模式 配置参数 无需更改参数 波特率默认为115200 若比赛规定传输速率可自行更改 查看原理图可知USAR ...
- 树莓派串口配置(c++)
文章目录 前言 一.wiringPi库是什么? 二.使用步骤 1.安装库和接口介绍 2.C++串口配置 总结 注意点: 前言 最近做项目,在树莓派上用到串口来实现通信功能.所以用c++写了个串口的配置 ...
- ROS笔记(39) 串口配置
ROS笔记(39) 串口配置 1. 前言 2. 串口通讯 3. C++配置 3.1. 安装serial 3.2. 配置 3.3. 编译 3.4. 通讯测试 4. Python配置 4.1. 安装pys ...
- 树莓派3b+串口配置
前言 树莓派从大的方向来说一共出了3代,每一代的CPU外设基本相同,但内核不同,外设里面一共包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0) ...
- 小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置
建议大家按我发帖子的顺序来看,方便大家理解.请不要跳跃式的阅读.很多人现在看书,都跳跃式的看,选择性的看,导致有些细节的部分没有掌握到,然后又因为某个细节耽误很多时间.以上只是个人建议,高手可以略过本 ...
- novatel oem7 串口配置软件 程序说明1
适合初学者 软件下载地址 comtestnovateloem7串口配置软件指令学习软件数据处理分析软件-C#文档类资源-CSDN下载 显示串口数据时,最好用定时更新的方式,在加上异步委托,避免界面卡死 ...
- 【STM32CubeMx你不知道的那些事】第三章:STM32CubeMx串口配置(中断接收)
在嵌入式环境中,串口通信是必不可少的通信方式,这一章我们主要是讲解一下HAL库怎么应用串口外设做收发功能. 一.准备工作 1.使用我们第一章配置好工程文件.如图 2.明确原理图上面所需要的串口,这里我 ...
- 树莓派3B 串口配置教程
前言 修改配置 串口测试 1.前言 树莓派CPU内部有两个串口,一个是硬件串口(官方称为PL011 UART),一个是迷你串口(官方成为mini-uart).在树莓派2B/B+这些老版树莓派上,官方设 ...
最新文章
- python写一个通讯录step by step V3.0
- 委托(一个主窗体统计多个从窗体的按钮单击的次数)
- Android学习笔记(1)----播放音乐文件
- 汇编: 使用[bx]代替[0]获取内存数据
- word2vec的通俗理解
- Hive引擎改为Tez笔记
- Android Paint 画笔使用详解 Android自定义View(六)
- Proxy(代理,拦截器),Reflect(反射)
- JAVA集合容器源码解析
- AD 软件的学习--基本操作
- 自响应式企业网站源码MVC源码
- 2019ZIF郑州工博会 盛大起航
- python PNG图片显示
- 超级经典回帖专用语(转载)
- NAT技术与代理服务器调研
- fluent6.3如何制作动画
- 百度搜索引擎结果网址参数搜索历史记录(rsv_sug)
- android 创建多个闹钟,Android设置多个闹钟
- 打开win10应用商店,提示管理员已阻止这个应用
- 乐观锁、悲观锁、分布式锁的概念及实现
热门文章
- jacoco统计server端功能测试覆盖率
- MapReduce执行WordCount操作
- Linux下Nginx访问web目录提示403Forbidden
- select标签中option的显示隐藏控制(兼容IE)
- bzoj 1753: [Usaco2005 qua]Who's in the Middle【排序】
- shell脚本学习(一):shell脚本开发的基本规范和习惯
- 译:Google的大规模集群管理工具Borg(二)------ Borg架构
- win7 ghost 纯净版最新系统下载
- C#自定义ConfigSections节点操作
- IOS动态库打包导入工程报错Library not loaded: @rpath/SwiftFrame.framework/SwiftFrame