3230|9

62

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

继续外部串口驱动问题...... [复制链接]

现在发送32 byte字节的限制,以及发送几次后不产生中断的问题已经解决了。
嘿嘿,就是中断处理不及时问题,主要表现在wince5.0/6.0下的重新使能中断耗用了大量时间。
现在我直接在中断接收线程之后使能中断,解决了上述问题
——————————————————————————————————————————————————
不过现在除了那个c#在wince6.0 上启动比wince5.0慢这个不知如何解释以外,还有个棘手的问题。
就是外部串口的两个端口不能同时发送接收
,一旦同时有数据经过就会死机。
自带2440 串口的可以。

虽然两个外部串口同一个DLL,但是在注册表却是对应两个串口加载了两次

那么两个串口相关线程应该是独立的啊?我觉得这个不需要互斥吧。

这个问题我始终搞不懂,请牛人指点一二!谢谢。

最新回复

这个世界真是无奇不有, 现在发现这个波特率产生异变居然是c#的原因?! 我用MFC测试串口发送大量数据没有问题,只要一运行c#程序, 即使这个c#程序没有和串口相关,这个串口波特率就会被意外修改,然后串口过来的数据就是乱码。真是神奇了。嘿嘿。这个BUG问题可大了,c#的运行导致被寄存器被意外修改,怎么会这样呢?  详情 回复 发表于 2009-7-21 16:29
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1. LZ 的 external interrupt 是设成 level or edge trig???
2. 还是那句话, 建议 LZ 将 isr16550.dll 弄起来.
3. 要 互斥 是因为要避免同时存取相同资源, driver 若是没有同时存取相同资源, 则是不用 互斥.

Paul, Chao @ Techware
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
一叫牛人指点一二!偶就不敢说偶得愚见了。呵呵 。。
不知道死机 是什么概念 是UI死了,还是正个系统都死了?
可能是中断优先权太高,驱动线程优先级也很高,又再高速的数据情况下。或许就可能上述情况了。
可以先试下下面的
1,先两个串口交替接受和发送试下。
2,两个都在底波特率下试试。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 papapa123123 的回复:
一叫牛人指点一二!偶就不敢说偶得愚见了。呵呵 。。
不知道死机 是什么概念 是UI死了,还是正个系统都死了?
可能是中断优先权太高,驱动线程优先级也很高,又再高速的数据情况下。或许就可能上述情况了。
可以先试下下面的
1,先两个串口交替接受和发送试下。
2,两个都在底波特率下试试。


我觉得你很牛了,记得也是2008年毕业的吧,想对我这个闲人来说,老是无事可做,你已经项目数量好几个了。
嘿嘿,羡慕啊。
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
哦,不是死机,是只能有一个在工作
——————————————————————————
就是外部串口不能同时使用,每个都能打开,但是只能有一个在工作,不知道怎么回事。哪个先打开,就是哪个工作,其他的无法接收数据了!
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 
哦,不是死机,是只能有一个在工作
——————————————————————————
就是外部串口不能同时使用,每个都能打开,但是只能有一个在工作,不知道怎么回事。哪个先打开,就是哪个工作,其他的无法接收数据了!
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
很明确告诉你不需要互斥,因为每个串口都是访问自己的寄存器,DWORD CPdd16550::ThreadRun()
中加条打印信息,每加载一个dll都会调用一次ThreadRun,有必要把你的16550注册表发出来看看
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 xunjingzhpu 的回复:
很明确告诉你不需要互斥,因为每个串口都是访问自己的寄存器,DWORD CPdd16550::ThreadRun()
中加条打印信息,每加载一个dll都会调用一次ThreadRun,有必要把你的16550注册表发出来看看


多谢。这个需要慢慢盘查。
不过现在出了一些更加奇怪的问题。
我们的调试串口也是使用的外部串口,有时候这个外部串口启动就显示汉字,有时候就正常显示bootloader菜单。这种现象明显是波特率自己变了。

不知道咋回事,会这么不稳定,都找不到原因。

这种可能性有:
一、程序有时候初始化不成功,造成波特率不对。
二、晶振质量存在问题,

嘿嘿,问题越来越多,道高一尺魔高一丈,我逐个解决。大家也帮忙出出主意。


 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
咋整的,都没有人回我帖子了。嘿嘿。
————————————————————————————————
对了c#运行的快慢和使用的内存有很大关系吧。如果内存的clk高,比如换成DDR的应该会快很多吧。
嘿嘿。
正在考虑到底是普遍的6410还是别的,要找个合适的不容易。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

10
 
这个世界真是无奇不有,
现在发现这个波特率产生异变居然是c#的原因?!

我用MFC测试串口发送大量数据没有问题,只要一运行c#程序,
即使这个c#程序没有和串口相关,这个串口波特率就会被意外修改,然后串口过来的数据就是乱码。真是神奇了。嘿嘿。这个BUG问题可大了,c#的运行导致被寄存器被意外修改,怎么会这样呢?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表