🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/开源蜂鸟E203/关于全局中断使能的问题
关于全局中断使能的问题
开源蜂鸟E203 作者 SomeDreams 发布于 2020-06-22 11:29(2300 天前) 8812 浏览

各位朋友大家好,我最近在使用蜂鸟的板子进行开发时,遇到了这样的问题:我的程序每次运行到使能全局中断的时候,就像进入了死循环一样,出不去了,如上图,首先先打印“GI_EN begin!”这里是可以正常打印的,然后后面那句“GI_EN end!”却打印不出来,我不知道set_csr的代码在哪里,而且书上给的demo_gpio例程中也是直接这么写的,请高人指点一下,非常感谢大家!

全部回复 8
SomeDreams
SomeDreams2280 天前 · 1 楼
回复 卢吉凯:

在PLIC模块发现了一个bug,不知道是不是你这个问题的原因。可以作如下修改尝试下。

找到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);


谢谢,我等试试

卢吉凯
卢吉凯2290 天前 · 2 楼

在PLIC模块发现了一个bug,不知道是不是你这个问题的原因。可以作如下修改尝试下。

找到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);


SomeDreams
SomeDreams2299 天前 · 3 楼
回复 XQS0927:

你用的不是Eclipse的编译环境吗? 我用的是Eclipse,这里虽然是条件编译,不过是被编译的。 刚才查了一下编译结果,有点奇怪,编译出来的指令跟这个宏定义不一样,不过功能是对的。可能确实不是在这儿定义的。 我没用过蜂鸟的开发板,是用某品牌国产FPGA的开发板做的,所以有些情况不太了解。水平有限,只能建议你仿真一下看看了>_

好的,谢谢你

X
XQS09272299 天前 · 4 楼
回复 SomeDreams:

你好,我发现虽然encoding.h中对他有定义,但是他是在一个条件编译里面的,并未被编译(请看上图),但是官方给的例程里面却用到了这个宏,不知道他是怎么工作的呢。如果用您的第3点来做的话,直接用那句代码就可以吗,谢谢您的回答。

你用的不是Eclipse的编译环境吗? 我用的是Eclipse,这里虽然是条件编译,不过是被编译的。 刚才查了一下编译结果,有点奇怪,编译出来的指令跟这个宏定义不一样,不过功能是对的。可能确实不是在这儿定义的。 我没用过蜂鸟的开发板,是用某品牌国产FPGA的开发板做的,所以有些情况不太了解。水平有限,只能建议你仿真一下看看了>_

SomeDreams
SomeDreams2300 天前 · 5 楼
回复 XQS0927:

1,set_csr是encoding.h中的宏定义。

2,这个写法应该没什么问题,至于为什么会卡住,我不能确定,可以仿真一下看看。

3,也可以试试其他指令,比如 __asm__ __volatile__("csrrwi t5, mstatus, 8"); 看看这样能不能写进去。

您好,我试了一下,用汇编也不太行...感觉好莫名其妙啊

SomeDreams
SomeDreams2300 天前 · 6 楼


SomeDreams
SomeDreams2300 天前 · 7 楼
回复 XQS0927:

1,set_csr是encoding.h中的宏定义。

2,这个写法应该没什么问题,至于为什么会卡住,我不能确定,可以仿真一下看看。

3,也可以试试其他指令,比如 __asm__ __volatile__("csrrwi t5, mstatus, 8"); 看看这样能不能写进去。

你好,我发现虽然encoding.h中对他有定义,但是他是在一个条件编译里面的,并未被编译(请看上图),但是官方给的例程里面却用到了这个宏,不知道他是怎么工作的呢。如果用您的第3点来做的话,直接用那句代码就可以吗,谢谢您的回答。

X
XQS09272300 天前 · 8 楼

1,set_csr是encoding.h中的宏定义。

2,这个写法应该没什么问题,至于为什么会卡住,我不能确定,可以仿真一下看看。

3,也可以试试其他指令,比如 __asm__ __volatile__("csrrwi t5, mstatus, 8"); 看看这样能不能写进去。

💡 请 登录 后参与讨论(微信扫码即登录/注册)