您的位置 首页 国产IC

ARMLinux(mini2440)串口与51单片机的9位串口通讯

当51单片机的串口模式在方式2或方式3时为9位通讯方式,即当串行数据第9位为1时,前8位数据指示的是用来和主机通讯的从机地址;当串行数据第…

51单片机的串口形式在办法2或办法3时为9位通讯办法,即当串行数据第9位为“1”时,前8位数据指示的是用来和主机通讯的从机地址;当串行数据第9位为“0”时,前8位数据则用为真实的数据。详细请参阅:

http://www.eeworld.com.cn/mcu/2011/0621/article_4424_1.html
而FriendlyARMmini2440能够设置的数据位数为5~8位,即CS5,CS6,CS7,CS8。关于Linux串口的编程教育请拜见:http://www.adamjiang.com/pukiwiki/index.php?Linux串口编程详解#ec39e271
查阅了一下前人的做法,有两种:1.硬办法:另加一51单片机的板子来做转化,串口形式选用办法1来与ARM板通讯,另一头用办法2或3来与9bit的单片机通讯;2.软办法:改驱动,即在linux的串口驱动中参加对第9位的收发。
我这里是用办法二。一开端很不想改driver,就在网上各种搜,搜到的办法是:选用奇偶校验的mask和space来设定第九位为“1”或“0”;串口的设置代码为:
发地址前:

struct termios opt;
opt.c_cflag = BAUDRATE | CS8 | PARENB | PARODD | CMSPAR | CLOCAL | CREAD;
opt.c_iflag = (INPCK | IGNBRK | IGNPAR);
发数据前:
struct termios opt;
opt.c_cflag = BAUDRATE | CS8 | PARENB | CMSPAR | CLOCAL | CREAD;
opt.c_cflag &= ~PARODD;

试过之后发现有时是9bit,有时是8bit,或者是第9bit不受mask和space的操控(测验办法很吐血,直接拿示波器看的,凹凸电平一个一个数!)。看来这样的设置仅仅设了奇偶校验,底子没设到mask和space,莫非是driver不支持?只要这个原因了!所以开端学改driver,最终是在samsung.c这个驱动文件中发现尽管界说了CMSPAR,却彻底没有用到,所以修正如下:
修正了如下几个文件:
1.
参加如下两行:

2.
函数 s3c24xx_serial_set_termios()中:
注释掉这个:

修正ulcon寄存器设置,如下:

接着就是从头编译内核,经过vivi下载到板上。测验程序中依照上述办法设置结构体termios变量,就能够完成第9位的mask和space了。经测验,mini2440已可与51单片机通讯!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/265474.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部