[技术讨论] 关于对GD32H7系列的中断优先级寄存器的名称疑惑的解释

[复制链接]
892|2
 楼主| dffzh 发表于 2025-5-14 10:12 | 显示全部楼层 |阅读模式
本帖最后由 dffzh 于 2025-5-14 11:17 编辑

最近协助一位网友解决了关于GD32H系列的中断优先级寄存器的名称不一样的问题,即官方demo程序里的名称是IP,而core_cm7.h文件使用的是IPR,导致程序编译错误;今天又看到一位网友发帖咨询这个问题,因此我就写个帖子帮大家解释一下,希望有参考价值。之前那位网友发的帖子大概如下:
官网下载GD32H7xx_Demo_Suites_V2.1.0包解压后,进入./GD32H7xx_Demo_Suites_V2.1.0/GD32H759I_EVAL_Demo_Suites/Projects/目录,该目录下有29个例程,均编译错误,错误信息提示gd32h7xx_misc.c 第101行报错,如下:

这是101行附近代码:

我将101行修改为 NVIC->IPR[(uint8_t)nvic_irq] = (uint8_t)temp_priority; 后所有例程均可编译通过,但官方标准库我不敢改。。。
使用的编译器是keil ac6 v6.22,官方库使用原解压包自带的不行我又再官网下载GD32H7xx_Firmware_Library_V1.4.0版本的替换,错误依旧
附官网例程下载链接: https://www.gd32mcu.com/data/documents/evaluationBoard/GD32H7xx_Demo_Suites_V2.1.0.7z
我看了GD32F470ZGT6芯片的工程,NVIC的中断优先级寄存器确实是IP:

不过确实,按照NVIC其他寄存器的写法,这个寄存器应该命名为IPR更为合理。
从例程中查看到core_cm7.h的NVIC的中断优先级寄存器确实是IPR:

但官方库文件gd32h7xx_misc.c引用了IP这个成员:

我本来猜测可能是GD32H系列是新品,或者GD32F系列和H系列的库是不同产品线的人开发的。
后面这位热心网友也回复了:
得到了代理商技术支持的回复:
这个core_cm7.h是内核一些东西,是arm公司提供,arm公司更新了,而gd这边程序还没有更新,会反馈给gd。

他使用的固件库版本是GD32H7xx_Firmware_Library_V1.4.0,如果有和他使用相同版本遇到同样问题的可以大胆的将IP更改为IPR。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
输出板mcu 发表于 2025-5-22 10:20 | 显示全部楼层
楼主,我也详细描述下我的处理过程吧。
问题你应该也清楚了,跟你帖子里描述的一样,我使用的keil 5.42A版本开发环境、GigaDevice::GD32H7xx_DFP@1.4.0 和 GD32H7xx_Firmware_Library_V1.4.0。 开发环境和驱动包都是官网最新版本的。
我直接将程序里的IP改为IPR,编译没问题,烧写也没问题,但是程序串口功能不正常,当时排查了一圈,怀疑是这个IPR的修改导致的。
各种咨询搜索尝试,最终的解决方案是:回退!
我回退了keil的版本到5.35.0,core_cm7.h里的头文件定义就变成IP了,看了其他的资料,应该是keil在5.35以后的版本中更新了arm相关的结构体定义(IPR),但是GD的最新驱动还使用的是老版本的定义格式(IP)。所以直接回退keil可以解决。
期待GD官方尽快更新驱动和demo
 楼主| dffzh 发表于 2025-5-22 10:24 | 显示全部楼层
输出板mcu 发表于 2025-5-22 10:20
楼主,我也详细描述下我的处理过程吧。
问题你应该也清楚了,跟你帖子里描述的一样,我使用的keil 5.42A版 ...

好的,解决了就是硬道理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

143

主题

1403

帖子

23

粉丝
快速回复 在线客服 返回列表 返回顶部