chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-12-09 10:03
这个问题很有意思哦,解决后告诉小弟一下问题原因
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2004-12-09 10:56
我也说两句吧。我觉得你的串口接受中断设置可能有问题,比如缓冲区的设置。 :P
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2004-12-09 15:42
我这么说吧,你先看看你的串口中断工作方式中一共有哪些中断,比如发送缓冲区空,接受缓冲区半满等,然后先使能其中一个,比如接受缓冲区半满中断。然后你用writefile发送n+1个数据,其中n是接收缓冲区半满中断门限。然后看看ist能否正常进入(前提是外部用的自反馈连接)。注意,我说得这个缓冲区指的是uart模块硬件自己带的,不是你分配的那个

另外一个大问题是,你自己开辟一个缓冲区来存放数据,读写的时候需要自己和上层同步,也就是说上层调用readfile时下层要返回正确的东西,这样的同步动作有两种办法:

1.应用和驱动同过同一个同步对象(事件,信号量等)来异步工作,当驱动正确收到数据后置事件有效,上层应用在调用readfile前需要wait,当事件有效后才读,readfile负责返回实际读取数据的长度。

2.在驱动内部wait,也就是上层可以随时调用readfile,但进入后如果有数据,会返回,没有数据就会忙等,直到有数据回来。

以上做法第一种不浪费cpu时间,但应用需要和驱动共享数据,移植性变差;第二种方式应用和驱动独立性强,但cpu会忙等。

你可以权衡一下选一种,当然兄弟也可以用更好的蛤,我只是举了个例子:)
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2004-12-10 09:08
老大,是这样的,我的接收中断的触发级设定的是10个char触发,但是没有到10个char就有中断了,我看了一下中断源是接收时间溢出中断。也就是说当接收的fifo有数后一定时间没有收就有这个中断,我现在感觉就是当中断产生后,进了isr返回后,我的ist不能被激活或者不能获得运行权,但是我的ist的优先级已经设定为3了
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2004-12-10 10:11
每次中断都是溢出中断吗?我感觉可能是你对你的串口芯片初始化设置有问题。仔细检查一下吧 :cool:
溢出中断发生后,进入isr了吗?此时从isr返回的是你的逻辑中断号吗?
Come on, let us drive the world.
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2004-12-10 11:17
我看了一下,关键是这个溢出中断没有地方可以屏蔽呀
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2004-12-10 11:19
最奇怪的是我在isr中打印信息没有出来,但是ist还可以进入
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2004-12-10 14:16
......还没搞定啊:(

你的超时中断的isr执行后返回的sysintr是什么啊,能不能出发触发ist执行喃,把你的超时中断的isr也返回你指定给接受中断的那个sysintr,最终读出的长度从uart寄存器里面判断
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2004-12-13 08:32
兄弟,问题解决了吗?到底是什么问题啊?
Come on, let us drive the world.
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2004-12-13 10:20
各位老大,我的那个超时中断也是串口中断之一,我的硬件是这样的,9054带一个16c954,在cpld里面做一个中断的控制寄存器器,所以对于我的系统来说,只有一个中断9产生中断,在中断产生后,调用isr,但是没有做什么就返回,然后我在我的ist中查是那个设备产生的中断,是什么中断,然后处理,就出现了上面的情况
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2004-12-13 13:11
也就是说你的串口中断采用的中断是9号中断是吗?
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2004-12-13 15:54
“但是没有做什么就返回”

返回东西不一样的喔:)))这里返回的东西关系到是哪个事件被置为有效,之前,需要用InterruptInitialize把返回的东西和被触发的事件关联起来

根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2004-12-13 16:20
对啊,你的ISR最后应该返回与你的IST等待的Event相关联的Sysintr。
Come on, let us drive the world.
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2004-12-14 10:12
那各位老大isr的东西应该怎么调试呢,我在isr的函数里面加了debugmsg,但是没有输出呀,不知道是怎么回事
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2004-12-14 10:39
关于isr的调试,论坛里面有一些这样的帖子,你查一下。
Come on, let us drive the world.
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2004-12-14 11:51
我搜索了论坛的帖子没有呀???
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
36楼#
发布于:2004-12-14 13:28
唉,今天写信给人民日报的时候应该把我的名字也写进去的:))))


你的串口用对没有啊,你在调串口驱动,debug信息用另外一个串口喔。isr里面肯定可以输出调试信息的!相信e,莫错的
根据地的兄弟们,团结就是力量
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
37楼#
发布于:2004-12-14 13:33
老大,我不是用的串口输出的调试信息,是用的网口
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
38楼#
发布于:2004-12-14 13:39
用lpWriteDebugStringFunc(TEXT("XXXXXXXXX"));
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
39楼#
发布于:2004-12-14 13:45
wxl_50685330 大哥,人民日报的文章什么时候发表啊?
 :P :P :P
Come on, let us drive the world.
游客

返回顶部