主题 : 串口驱动和应用程序问题请教! 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 6846
精华: 0
发帖: 55
金钱: 425 两
威望: 215 点
综合积分: 110 分
注册时间: 2009-06-19
最后登录: 2012-03-21
楼主  发表于: 2009-08-19 19:29

 串口驱动和应用程序问题请教!

有串口驱动问题请教,大大有空帮我支支招?

我想在应用程序里判断串口发送缓冲区为空,怎么实现?linux-arm 的。
我用的是MICRO2440,串口驱动是 linux\kernel-2.6.13\drivers\serial\s3c2410.c  的这个。看不懂。内核用的是2.6.13

接触这个才半年,不懂修改串口驱动,连看都看不懂。大大帮我支支招啊。
级别: 侠客
UID: 6846
精华: 0
发帖: 55
金钱: 425 两
威望: 215 点
综合积分: 110 分
注册时间: 2009-06-19
最后登录: 2012-03-21
1楼  发表于: 2009-08-20 09:00
版主,,,来指点一下啊。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2009-08-20 09:40
如果你看过一点串口驱动,你就会知道判断发送缓冲空这种事情是驱动做的,不需要在应用程序里做。
我建议你先了解一下串口的硬件原理和驱动,然后再动手做基于串口驱动的应用程序。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 6846
精华: 0
发帖: 55
金钱: 425 两
威望: 215 点
综合积分: 110 分
注册时间: 2009-06-19
最后登录: 2012-03-21
3楼  发表于: 2009-08-20 10:50

 回 2楼(kasim) 的帖子

问题是,我想知道,我先置某IO口高电平,使能发送,再发一串数据去缓冲区,然后要等什么时候发送完毕再将IO清零,转为接收状态。我要做RS485通信呀,驱动看不懂。只有想出这种办法了。版主再指点指点。谢谢!
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2009-08-20 11:17

 Re:回 2楼(kasim) 的帖子

引用第3楼happycxz于2009-08-20 10:50发表的 回 2楼(kasim) 的帖子 :
问题是,我想知道,我先置某IO口高电平,使能发送,再发一串数据去缓冲区,然后要等什么时候发送完毕再将IO清零,转为接收状态。我要做RS485通信呀,驱动看不懂。只有想出这种办法了。版主再指点指点。谢谢!

我只能告诉你,如果你玩Linux,所有硬件的操作都在驱动层完成。至于怎么做,看你的硬件手册和原理图。对于应用程序来说,它只要知道什么时候可以把要发送的数据“写入”设备就可以了。这可以通过poll()/select()系统调用和POLL_OUT返回。
应用程序获得设备特定的信息可以通过ioctl()系统调用+特定的命令代码,前提是设备的驱动程序支持该ioctl命令代码
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 6846
精华: 0
发帖: 55
金钱: 425 两
威望: 215 点
综合积分: 110 分
注册时间: 2009-06-19
最后登录: 2012-03-21
5楼  发表于: 2009-08-20 13:08

 Re:Re:回 2楼(kasim) 的帖子

引用第4楼kasim于2009-08-20 11:17发表的 Re:回 2楼(kasim) 的帖子 :

我只能告诉你,如果你玩Linux,所有硬件的操作都在驱动层完成。至于怎么做,看你的硬件手册和原理图。对于应用程序来说,它只要知道什么时候可以把要发送的数据“写入”设备就可以了。这可以通过poll()/select()系统调用和POLL_OUT返回。
应用程序获得设备特定的信息可以通过ioctl()系统调用+特定的命令代码,前提是设备的驱动程序支持该ioctl命令代码

明白了,要是想调用对硬件进行操作的,就放到驱动的IOCTL函数里,然后再在应用程序里调用IOCTL函数,是吗? 谢谢版主!
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2009-08-20 13:41

 回 5楼(happycxz) 的帖子

是的,不过我想你最好先搞清楚IOCTL的概念再动手...
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 6846
精华: 0
发帖: 55
金钱: 425 两
威望: 215 点
综合积分: 110 分
注册时间: 2009-06-19
最后登录: 2012-03-21
7楼  发表于: 2009-08-20 14:49

 Re:回 5楼(happycxz) 的帖子

引用第6楼kasim于2009-08-20 13:41发表的 回 5楼(happycxz) 的帖子 :
是的,不过我想你最好先搞清楚IOCTL的概念再动手...

好的!遵命!