7351|11

198

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

EDK外部中断的问题 [复制链接]

最近用edk实现一个外部中断,我希望是上升沿触发,但是发现是上升沿和下降沿都触发。想问下各位高手怎么设置能让他上升沿触发?

我在xparameter.h中,中断的那部分添加了如下语句
#define XPAR_INTC_0_KIND_OF_INTR 0x00000001
#define XPAR_INTC_0_KIND_OF_EDGE 0x00000000
还是没有改善
此帖出自FPGA/CPLD论坛

最新回复

谁给发个手册呀 897708713@qq.com 先谢谢啦  详情 回复 发表于 2011-8-4 13:34
点赞 关注
 

回复
举报

198

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

目前用的方法是在中断中进行判断,判断data_gpio=XGpio_DiscreteRead(&GpioOutPut, 1);是1还是0,如果是1,证明是上升沿,否则是下降沿。但是我认为这个方法不是太好,因为这样的话即使是下降沿,程序也进了中断,浪费时间,应该有其他的方法,让下降沿根本就进不了中断。

请各位高手们指点一下啊!

此帖出自FPGA/CPLD论坛
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

板凳
 

玩EDK忒罗嗦,做完就忘,就扔。

 LZ说的现象是否有这种可能:其实设置是对的,但因外来信号有毛刺(抖动),导致每变化一次都有上升和下降沿?
 如不是毛刺问题,且一时找不到好办法的话,自己用HDL写几句做个小逻辑,让它只有上升或下降沿提中断请求就行了。
此帖出自FPGA/CPLD论坛
 
 
 

回复

198

帖子

0

TA的资源

纯净的硅(初级)

4
 

谢谢楼上的回答。

我用的是开关,我想过外部的抖动,但是我用示波器看过后发现是没有抖动的。

目前我认为是没设置好的问题。

手册中,XPS INTC Design Parameters  中C_KIND_OF_INTR参数是管中断类型的,是edge中断还是level中断。

C_KIND_OF_EDGE参数是管上升沿还是下降沿的。但是现在我不知道在哪里调整这个参数。

 

另外,我双击xps_intc0这个ip,出现的对话框中,有Type of Interrupt for Each Input 这样应该是管理是edge触发还是level触发,但是他的状态是“Auto Compted”,我无法操作啊。

 

呵呵,请各位高手指点一下。

 

另外,edk这个东西用处大么?会不会学了没用,白费功夫啊!

[ 本帖最后由 qd0090 于 2010-9-13 15:34 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

198

帖子

0

TA的资源

纯净的硅(初级)

5
 
自己顶一下
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

6
 

那就帮顶一下吧

 鸡械触点会不带毛刺?似乎难以想象。可自己用HDL逻辑或软件分别模拟上、下跳沿试试,如果正常,就确定外部信号有抖动了。
 中断的设置记得是不必动代码的,全都可以在GUI界面完成,不过这样有个坏处就是对开发环境依存度太大,设计者不太需要自身的知识,于是做完转身就忘掉了。
此帖出自FPGA/CPLD论坛
 
 
 

回复

198

帖子

0

TA的资源

纯净的硅(初级)

7
 

谢谢ls的回答。

我在进中断后,进行了一个判断,如果GPIO得到的是高电平,执行xil_printf("-- rising_edge interrupt  --\r\n");;否则执行xil_printf("-- falling_edge interrupt  --\r\n");

然后我电脑上看是两者都有的,我认为这证明确实是上升沿和下降沿都有进中断。

 

双击xps_intc这个ip,出现的对话框中,有Type of Interrupt for Each Input 这样应该是管理是edge触发还是level触发,但是他的状态是“Auto Compted”,我无法操作。

我认为问题出在这里,是不是我哪里没有设置对啊?

[ 本帖最后由 qd0090 于 2010-9-15 18:13 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

8
 
 楼主似乎坚信进入中断后检查该信号的高低可以判定是哪种跃变沿,但是别忘了软件执行的速度和硬件是没法比的:从中断请求发生、到处理器中断确认、到处理器执行完本次指令之后保护现场、然后根据向量表跳转到相应的服务程序地址、再取值、执行……等等绕了一大圈,而在这段时间里硬件可能已迁移了多种状态。在CPU系统里,如用外部信号作跃变沿中断源的话,一般采用软件去清除中断标志位而不是自动清除,就是因为考虑到毛刺的影响。
 上面这段话的结论就是,用软件判上下跳沿并不可靠,还是应该从硬件着手解决问题。——供参考。

 俺再去挖掘下以前做过东东,看能否找到什么启示。感觉是EDK尚未成熟,老在变,装了新版开发环境后,用旧版做的代码通不过编译,要改这改那的,挺烦,所以没事不敢轻易用它。
此帖出自FPGA/CPLD论坛
 
 
 

回复

198

帖子

0

TA的资源

纯净的硅(初级)

9
 

谢谢仙猫兄的回答,呵呵。

1.我在中断中是这么判断edge的。

我将中断的gpio设置成inout,进中断后先做一个循环,for(i=0,i<20,i++);然后将gpio的值读进来,看是什么状态。

但是我拿不准的是,当gpio检测到中断的时候是否已经将状态锁存。但是我不认为会这样,因为产生中断时中断管理器的事情。

 

2.我想做一个逻辑模块,来产生一个1s为周期的脉冲,用来产生中断,这样就可以有效的排除是否是毛刺影响的了。

但是现在我在ise调用edk时,gpio和逻辑模块连接时出现ERROR:Xst:528 - Multi-source in Unit <top> on signal <S_gpio>; this signal is connected to multiple drivers. 。

想问一下仙猫兄有没有什么解决办法?

gpio可以用来和fpga内部的逻辑模块进行数据交换么?如果不行,那么通常用什么来进行microblaze和fpga内部的逻辑模块进行数据交换。

 

此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

10
 

 前面已经说过,由于软件执行的速度比硬件差数量级呢,所以不应靠软件直接去检查硬件毛刺——因为当你在中断服务程序读到GPIO的值之前,可能已有很多次跃变沿漏过去了。

 第2个办法是可行的,最简单的就是做一个很慢的,人眼足以能分辨出上升,下降沿的方波输出(用软硬件都可以),再用导线把这个方波接回给中断输入,看中断在哪个沿发生。

 还有一个办法或许可以试试,在现有电路的中断请求线上串个数kΩ的电阻,再对地挂一个0.几~几μF的电容,强行滤除掉可能有的毛刺,看中断是否正常。

 又及,GPIO是对外的接口,记得和FPGA内部逻辑相连时不是通过GPIO的。

 

[ 本帖最后由 仙猫 于 2010-9-17 15:31 编辑 ]
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

11
 

不知这个问题解决了没?

 中断的触发方式是用户自定义IP时,在GUI界面里确定的(如图),如作成之后又想改动,就需要在IP的HDL代码里找。如下很清楚地显示,现在的设置是“mode 5”,即上升沿触发。


  ------------------------------------------
  -- Capture mode for each IP interrupt (generated by user logic)
  -- 1 = pass through (non-inverting)
  -- 2 = pass through (inverting)
  -- 3 = registered level (non-inverting)
  -- 4 = registered level (inverting)
  -- 5 = positive edge detect
  -- 6 = negative edge detect
  ------------------------------------------
  constant USER_NUM_INTR    : integer  := 4;
  constant USER_INTR_CAPTURE_MODE   : integer    := 5;

 

 xparameter.h文件是系统根据设置自动生成的,最好不要去动它,否则每次修改都得记住这些手工操作,很容易错。

 

EDK_int.gif (52.3 KB, 下载次数: 2)

EDK_int.gif
此帖出自FPGA/CPLD论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
谁给发个手册呀
897708713@qq.com
先谢谢啦
此帖出自FPGA/CPLD论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表