首页 上一页 1 2 下一页 尾页

CAN: 中断方式和查询方式的区别 点击:12409 | 回复:25



xlwphoenix

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2003-09-25 18:18:00
楼主
在can网通讯中,中断方式和查询方式的区别在什么地方? 他们的通讯流程区别在什么地方?   中断是指微处理器(PC)和CAN控制器之间吗?   那位大哥给解释一下,小弟我被困扰了好长时间了, 最好说的仔细点!   谢谢



gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-06-10 10:53:00
1楼
中断方式就是在接受数据时,微控制器转入中断服务程序对接受到的数据进行处理,而查询方式就是通过查询CAN状态寄存器中接受缓冲器状态位对接收到的数据进行处理,两者在工作上的区别主要在于,中断方式微控制器可以执行别的任务,而查询方式只能进行接收查询,在此期间不能执行其他任务,在实现的区别当然是:是否把接收中断使能位置为有效。

xlwphoenix

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2002-06-10 12:05:00
2楼
那么说,当我发送后,当通过验码测试和标志符后,接收器实际上已经收到了, 1)如果事中断方式,在中断使能的情况下,中断寄存器的接收位会变高!这是,CAN控制器会响应的发送一个中断给mcu(pc),我是通过中断接受标志符变高后,在处理数据! 2)如果事查询方式,那么在发送是我就有接受指令来操作接受了? 不知我的队他们理解有没有错?望说明一下! 那么我在编写中断方式的通讯时,那些中断号 IRQ1---15和pc的中断好好像一样,有没有冲突呀!他们之间的关系时什么? 我是新手呀!望大家回答!谢谢! bow

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-06-10 12:57:00
3楼
我所说的中断服务程序和查询后的数据处理程序都是需要自己编制的,你说的第二条我不是很懂什么意思。

xlwphoenix

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2002-06-10 15:03:00
4楼
假如说SendMessage(port,...)是发送函数 ReceiveMessage(port,...)是接受函数 现在port1,为发送端口 port2为接受端口 那么在 1)查询方式编程时就是 ......(初始化,配置,..) SendMessage(port1,...); ReceiveMessage(port2,...); ..... 2)在中断方式就是 SendMessage(port1,...); @@ if(ReceIntFlag==1)// 中断接受标志 { pc从port2的接受缓冲器中读取数据; pc 处理数据 } 那问题是如何让ReceIntFlag=1,它是只读的,如果是由中断完成这部分工作,那么中断程序就是这样如下吗? IntProgram()//中断程序 { ReceiveMessage(port2,...); } 那么在port2接受完数据后,ReceIntFlag就会等与1,此时在转入前面的 @@处吗? 那此时如何知道中断来了呢? 我目前查询方式已经调通,可是中断方式没有调通,我对其流程没有明白!当port1发送信息后,端口2的pc如何知道由中断来? 我在c++builder下编程序,我用的控件是TVicHW32,它可以对硬件操作 因为PC一般把 中断(IRQ1---15)屏蔽,它首先是把所选中的中断号(port2的中断,假如是IRQ15)不屏蔽,并且选中响应的中断号(IRQ15),还有一个中断函数,表示有中断发生,问题是接受端的pc如何知道中断来了? 另外,我说pc的中断号也是IRQ1---15 像键盘对应的中断号是IRQ1,软盘是IRQ6,com1是IRQ3,com2是IRQ4,LPT是IRQ7那么他们和can的这些中断不会冲突吧?他们的关系是什么? 谢谢你-----工控之新手,我是最新的新手!

xlwphoenix

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2002-06-10 15:28:00
5楼
你可以吧他们的流程给我写一下吗? 有个大致的轮廓就可以, 我好像没有区分他们??谢谢!! 这些问题可能对你非常简单,但是对我来说,比较头痛! 拜托了!!!!

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-06-11 09:03:00
6楼
我不知道你用的微控制器是什么,但我觉得你没明白我说的意思,查询方式是你判断接收状态,如果被置位则接收,大概流程如下: loop:if(receivestatus=1) { receivemessege} else { check receivestatus } goto loop 至于中断方式是当中断来的时候,程序自动跳入中断服务程序,中断服务程序执行完毕后,一般的微控制器都会把中断标志清零,自然就回到主程序,另外中断服务程序是自己跳转的,不用你去判断其标志位。

xlwphoenix

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2002-06-11 10:12:00
7楼
我的用的是研华的pcl_841can卡。直接插在pc机上, 1)在查询方式时:那就是发送端口直接发送,那么接受端是否会自己收到信号(只要标志符和接受码和屏蔽码对应正确),我的计算机只是始终在读receivestatus=1,当为1时,那么计算机就对这些数据进行处理。 2)在中断时,也是发送端口直接发送,那么 接受端会自己收到信号 (只要标志符和接受码和屏蔽码对应正确),当接受端接受后,会产生一个中断给计算机,这是计算机开始处理数据。 我上面说的接受端接收到信号指信号已经到can控制器的接受缓冲器里。是这样的吗?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-06-12 10:27:00
8楼
你说的基本正确,CAN的接收缓冲器会自动存入与他的标志符和接受码和屏蔽码相一致的数据,你只要把它们读入你需要存储的地方就可以了。至于中断号的选择,我认为该卡的说明书上应该有提到。不知道你还有什么问题

xlwphoenix

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2002-06-12 11:03:00
9楼
太感谢你了!!我是第一次搞这个!! 我用的是研华的pcl-841can-卡,它上面没有对中断部分说明,只是说那个是选择中断的开关,以及对应的关系! 1)我还是不清楚他(can)的中断号和PC的中断号之间的关系! 或者说他们之间有没有关系 2)我用的是TVicHW ActiveX控件来完成中断的工作。可是它好像中断事件没有被激发,于是我利用下面的情况(3)判断是否数据有收到,不知对不对。 3)当我利用中断方式时,当发送端发送后,我读取接受端的中断寄存器的接受中断和状态寄存器的接受缓冲器状态位,他们都为高,而此时状态寄存器的接受状态为低,于是我读取数据,可是读出来的不对!此时应该时正确的吧! 你对TVicHW32控件熟悉吗?

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2002-06-12 12:41:00
10楼
当CAN发出中断的时候,PC机会产生中断,该中断的中断源应该是你根据该板卡说明书选择。至于RVICHW32控件我不熟悉。你所说的查询应该是收到了数据,你读出来的不对,可能是你在第一次收到数据时,没有把释放接收缓冲器位置1。

xlwphoenix

  • 精华:1帖
  • 求助:0帖
  • 帖子:5帖 | 8回
  • 年度积分:0
  • 历史总积分:28
  • 注册:2002年6月05日
发表于:2002-06-13 11:52:00
11楼
谢谢你工控之新手,太感谢了!

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-05-28 15:50:00
12楼
工控之新手:我是PCL-841的新新手,现在还不知道如何使用这块卡,以前我都是用485通讯的,VB调用ads841.dll,能不能给些指点,谢谢!!!

醉卧云帆

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 25回
  • 年度积分:0
  • 历史总积分:139
  • 注册:2002年4月26日
发表于:2003-05-29 21:36:00
13楼
VB调用ads841.dll我可以给你程序,已经可以使用,不过你的TVicHW ActiveX控件,我就不知了

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-05-30 09:50:00
14楼
谢谢,请发到我的邮箱,在此不胜感激,我也会像你那样,在论坛里帮助别人!再次感谢!我的邮箱:cdzt@163.net

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-06-01 15:43:00
15楼
我只知道在pc上,如果你采用的是查询方式那么你的cpu就不用干别的了,只能处理你所指定的一个应用程序,而采用中断方式则可以同时运行多个应用程序,只有在接到中断指令后cpu才处理中断。 请大家多多指教!

永不低头

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 12回
  • 年度积分:0
  • 历史总积分:60
  • 注册:2003年3月02日
发表于:2003-06-06 11:59:00
16楼
请教SJA1000的中断方式是不是指:中断寄存器中只要有某一位置1,就会在SJA1000的INT口出现中断脉冲?而PC机在响应中断时也要再次访问中断寄存器,看看是出现了哪种中断?而后再进行相应的中断处理? 而在查询方式时,PC机直接进入状态寄存器,看看总线上的状态,而后去执行相应的操作?

p80c592

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 9回
  • 年度积分:0
  • 历史总积分:12
  • 注册:2001年12月08日
发表于:2003-06-14 09:07:00
17楼
CAN的中断有很多中,比如说超载、错误、接受、唤醒等中断,在CPU接收到中断信号以后,要先读中断状态寄存器,判断出是产生了何种中断,然后进行响应的处理。因为查询会占用CPU的大量时间,所以我不建议你使用这种方式。

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-09-08 17:08:00
18楼
各位大虾: 请问你们谁有TVicHW32控件,我现想试用一下,我在网上下载的都没有此控件,谢谢大家帮忙.

中国工控网

  • 精华:141帖
  • 求助:0帖
  • 帖子:163帖 | 91回
  • 年度积分:0
  • 历史总积分:1543
  • 注册:2020年3月27日
发表于:2003-09-08 19:29:00
19楼
好文章

苍海e声笑

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2003年9月06日
发表于:2003-09-12 08:37:00
20楼
各位大虾:   请问你谁有TVicHW32控件吗?我现想试用一下,我愿出资¥500元购买,谢谢大家帮忙.

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页