RISC-V MCU中文社区

关于全局中断使能的问题

发表于 开源蜂鸟E203 2020-06-22 11:29:58
8
6302
1

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

喜欢1
用户评论 (8)
  • SomeDreams

    2020-07-12 13:36:23 SomeDreams 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);


    谢谢,我等试试

  • 卢吉凯

    2020-07-02 10:31:00 卢吉凯 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

    2020-06-23 10:32:03 SomeDreams 3#

    XQS0927

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

    好的,谢谢你

  • XQS0927

    2020-06-23 10:27:57 XQS0927 4#

    SomeDreams

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

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

  • SomeDreams

    2020-06-22 20:20:44 SomeDreams 5#

    XQS0927

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

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

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

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

  • SomeDreams

    2020-06-22 20:02:22 SomeDreams 6#


  • SomeDreams

    2020-06-22 20:02:06 SomeDreams 7#

    XQS0927

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

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

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

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

  • XQS0927

    2020-06-22 18:09:43 XQS0927 8#

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

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

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

SomeDreams

SomeDreams 实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板