imx6ull非标准波特率的内核修改和应用配置

最近工作上需要用到非标波特率187500,以前用单片机的时候都是直接配置寄存器,所以没有觉得有什么区别。现在需要在linux的环境下开发应用程序,发现linux原生并不支持这种特殊的波特率。
打开内核目录下drivers/tty/tty_ioctl.c,可以看到如下两组数组
在这里插入图片描述
baud_table[]baud_bits[]的值必须一一对应。baud_bits[]的成员定义在头文件inclue/uapi/asm-generic/termbits.h文件中,这里说明一下:这个文件因为有多个,对应到不同的板级目录中,所以我这里的路径不是绝对通用的。
文件中有这么一串宏,就是波特率对应的宏列表了
在这里插入图片描述

这里需要注意的是,这些宏参数是8进制的,编辑的时候如果出现超过8的数值编译会报错。
图片末尾的B187500就是我添加的宏,因为内核中只有用了5个bit来表示波特率(总共32个,去掉2个0波特率,只剩30个),所以我这边只能注释掉原来的B4000000。至于为什么是5位,我们可以观察一下第一个宏成员CBUAD的值,八进制的10017转换成二进制就是1 0000 0000 1111正好5个1,其中最高位的1由单独的宏CBAUDEX表示,顾名思义是用来区分标准波特率和拓展波特率的。这样低四位就只能表示15个波特率(0除外)。

我们再研究一下波特率的转换函数tty_termios_baud_rate,这样基本上就可以知道这些标志位的意义了。
在这里插入图片描述

修改好这两个文件以后,我们重新编译内核,再来写APP程序,这里我不贴全部源码了,就贴一处和普通的串口程序不同的地方
在这里插入图片描述
测试过后,就可以实现波特率在187500下的串口通信了

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值