RISC-V多一点

我在做微控制器编程。而且我不仅为他们编写程序,而且主要是为程序员编写程序。我想分享赚来的mk的一点乐趣。突然,某人现在患有gd32vfxx。



MK程序最不同。这些是众所周知的stm,晶格,微芯片,nuvoton,altera等,以及诸如azoteq,硅制品或2003年左右发行的飞思卡尔等奇特的东西。他们所有人(几乎所有人)都开发了自己的协议,这是独一无二的,这是最好的。尽管它是在普遍的口号下举行的。所有这套通用协议都因其多样性而感到满意。如果这里有点夸张的话,那可就很多了。



但是这篇最近的文章促使我在这里...我刚收到了用于不同gd32系列的样本,并编写了用于编程所有低级系列的程序,因此对RISC-V系列进行了测试。我看了这篇文章。好吧,我想,如果有人对重新介绍数据表感兴趣,那么编程编程数据表也可能会很有趣。



年轻的家庭可以通过JTAG和SWD进行编程(少数例外,例如,只有SWD.gd32f130xx)。另一方面,gd32vf仅具有JTAG。但是JTAG或SWD只是一个工具。使用这些工具进行驱动的方式非常不同。如果您可以阅读有关gd32f的《 ARM调试接口体系结构规范》,并且在那里对其进行了相当清楚的描述,那么有关gd32vf的内容将被涂在RISC-V外部调试支持和RISC-V指令集手册中。而且这两个作品不能一with而就。后者也有字幕第二卷。这很震惊。因此,还有一个编号为1的猪,可能还有编号3和4的猪。



根据RISC-V外部调试支持,可以通过两种方式来访问寄存器:



  1. 使用抽象命令
  2. 使用程序缓冲区


要记忆三:



  1. 使用系统总线访问(GD32VF缺少)
  2. 使用程序缓冲区
  3. 使用抽象内存访问


由于GD32VF没有系统总线访问权限(sbcs寄存器中的“支持系统总线访问”位),并且在其中使用程序缓冲区和编写汇编程序并不高兴,因此有一种很好的方法来获得命令。最初,这些笨拙的家伙得到寄存器号(要访问的寄存器号)对我来说是完全不可理解的。regno值的描述自豪地指出:要访问的寄存器号,如表3.3中所述。



图片



但是到底在哪里。但是后来我在上面提到的相邻数据表(《 RISC-V指令集手册》,第2卷)中发现了它们,并且太阳照了。



因此一切正常。事实证明,一切都比gd32f更方便。从将代码注入其中的角度来看。但这仅仅是开始。现在,我需要为此编写一个监视器。使它变得比快更快。 IAR不允许我从他那里下载我的WORKBENCH,尽管他一直在吹牛大战。我仍然没有找到单击和下载的地方。发送样品的首席中国经理说,他们正在使用NucleiStudio,我下载并安装了它们。在我看来,我最不方便的东西是摇杆。我不明白过去的混蛋如何在里面进水,然后干dry。我湿透了。但是NucleiStudio的表现不如跷板。通常,在遭受了很多折磨之后,我设法将数据和功能推入了内存中的正确位置。我敢肯定它可以更优雅地完成,但是我还不够。



看起来像这样。



我们需要找到原始脚本(我在日食的肠道中某处找到了它,是否有错),其中包含一堆难以理解的文字,并在其中添加了必要地址的描述



  . = 0x20000000;
  .data_sect : { *(.data_sect) }
  . = 0x20000400;
  .a_sect : { *(.a_sect) }
  . = 0x20000500;
  .f_sect : { *(.f_sect) }


不过,IAR的* .icf文件多少看起来更清晰,更简单!我想这是一个习惯问题。当我在寻找这个不幸的文件时,Google一直向我保证,没有什么比链接脚本更强大,更强大,更酷,更灵活。也许吧,但我累坏了。无论如何。铲了。



现在,我只需要重新排列PC,一切都将以惊人的速度运行。但是显示器仍然无法正常工作。现在我开始所有的那段。这将有助于未来的RISC-V-奇迹研究人员。



他在这里。



要重新排列PC,您只需要将其值写入dpc寄存器,然后在hart开始时,该值将被复制到PC。到目前为止,该程序已经编写并读取了许多其他寄存器。我必须承认,取得了巨大的成功。而且显示器不工作。事实证明,要写入dpc,您需要在其中写入,然后从那里读取。为什么会这样,我不知道。我再次阅读了所有文档,并“激动地跟随着英雄的命运。”但是我从来没有发现为什么会这样。



之后,一切正常。要从内存中读取某些内容,唯一的不便便是停止hart,然后重新启动它。这不是很方便,但并不可怕。例如,要了解显示器的感觉以及它是否已经完成工作,您需要停止运行,读取所需的内存并在必要时重新启动。



我希望dpc上的段落可以节省一个人几个小时的时间,并且在节省的所有时间中什么也不做。



All Articles