arty a7 调试蜂鸟E203 的demogpio程序 重复两次进入中断

2020-05-17 09:55:23
3
752

大家好,有个问题想请教一下:

    如题,硬件平台为arty a7,用prebuilt的system.mcs文件,在芯来的IDE中调试demogpio程序,可是发现,每次用button1进入中断后,都是连续进入两次。昨天看公众号,有提到访问device乱序的问题。尝试加了fence的内嵌汇编:

  __asm__ __volatile__(
		"fence"
		  :
		  :
		  :"memory"
  );

可是还是会连续进入两次。有人遇到同样的问题吗?望解答。

用户评论 (3)
  • 柳京伯

    2020-09-25 01:52:35 柳京伯 1#

    卢吉凯

    这应该是个bug,原因出在PLIC硬件模块,修改方式如下。

    找到sirv_plic_man.v文件,定位到行

    icb_claim_irq [i] = icb_claim_irq[i] | ((icb_rsp_rdata == i) & icb_cmd_sel_clam & icb_cmd_rd_hsked);

    将其中icb_rsp_rdata改成rsp_rdata,也就是这行改成

    icb_claim_irq [i] = icb_claim_irq[i] | ((rsp_rdata == i) & icb_cmd_sel_clam & icb_cmd_rd_hsked);

    问题解决。

    牛逼,这段时间看了一下plic_man的源码,的确是这样的,当icb_rsp_rdata==i的时候cmd通道的握手已经结束了,所以只有第二次进入中断的时候,才能让icb_rsp_rdata和icb_cmd_rd_hsked同时出现

  • 卢吉凯

    2020-07-02 10:43:10 卢吉凯 2#

    这应该是个bug,原因出在PLIC硬件模块,修改方式如下。

    找到sirv_plic_man.v文件,定位到行

    icb_claim_irq [i] = icb_claim_irq[i] | ((icb_rsp_rdata == i) & icb_cmd_sel_clam & icb_cmd_rd_hsked);

    将其中icb_rsp_rdata改成rsp_rdata,也就是这行改成

    icb_claim_irq [i] = icb_claim_irq[i] | ((rsp_rdata == i) & icb_cmd_sel_clam & icb_cmd_rd_hsked);

    问题解决。

  • 领主文

    2020-05-18 09:07:38 领主文 3#

    看公众号好像会专门出一期讲fence的,要不等那篇文章出来了再试一下?

关注我们

微信扫码登录 点击刷新二维码