@@ -413,13 +413,15 @@ enum/RX_IDLE_COND:
413
413
value: 1
414
414
` ` `
415
415
416
- 其中对寄存器描述的优化是整个工作最麻烦耗时的地方, 例如对 enum 的优化, 对寄存器 array 的优化等. 优化修改的好处是显而易见的, 例如如下两种代码风格对比 :
416
+ 其中对外设寄存器描述的优化是整个工作最麻烦耗时的地方,
417
+ 例如对字段值 enum 的优化, 对寄存器 array 的优化等.
418
+ 优化修改的好处是显而易见的, 例如如下两种代码风格对比 :
417
419
418
420
` ` ` rust
419
421
// set PWM1_CMP7 mode
420
422
use hpm_metapac as pac;
421
423
use pac::pwm::vals;
422
- pac::PWM1.cmpcfg(7 ).modify(|w| {
424
+ pac::PWM1.cmpcfg7( ).modify(|w| {
423
425
w.set_cmpmode(0); // output compare
424
426
w.set_cmpshdwupt(1); // on modify
425
427
});
@@ -522,7 +524,8 @@ HPMicro 提供了多个系列的高性能 RISV-V MCU, 包括丰富的外设资
522
524
- ` hpm_metapac::trgmmux:: ` 下的所有 TRGM 常量定义
523
525
524
526
对于 PAC 库来说, 不仅仅是提供给 HAL 驱动使用, 而是同时能给最终用户一个方便安全的寄存器访问接口. 对于某些设计良好的外设, 寄存器访问更直接有效.
525
- 由此通过简单的方式就可以使用对应的外设(虽然丢失了部分类型安全, 不过加一个 enum 也很容易, 这里主要是等待上游 chiptool 实现该机制):
527
+ 所以上面的常量定义其实很有必要, 也为 HAL 的实现提供了额外信息:
528
+ (这里为了方便作为 index 使用, 统一用了 ` usize ` 类型. 丢失了部分类型安全, 不过加一个 enum 也很容易, 这里主要是等待上游 chiptool 实现 cluster 支持.)
526
529
527
530
``` rust
528
531
use hpm_metapac as pac;
@@ -536,14 +539,14 @@ pac::IOC
536
539
537
540
### pac 库的其他内容
538
541
539
- 上述一节其实已经介绍了 PAC 库在标准的寄存器访问定义之外还有哪些内容 , 这里再总结一遍:
542
+ 上述一节其实已经介绍了 PAC 库在标准的外设寄存器访问定义之外还有哪些内容 , 这里再总结一遍:
540
543
541
544
- 中断静态结构体定义, enum 定义 - 用于在 ` -rt ` 库中使用, 链接到中断处理函数
542
545
- ` device.x ` 定义中断处理函数的链接符号, 和中断表结构体结合使用
543
546
- ` Peripherals ` owned struct, 用于通过 ownership 机制管理外设资源 - 仅 svd2rust
544
- - ` CorePeripherals ` owned struct, 用于管理核心外设资源 - 仅 svd2rust + Cortex-M
545
- - ` memory.x ` 定义内存布局 - 实际上由于应用各异, 可能不会被使用到, 通过 feature gate 启用
546
- - 各种 METADATA 信息 - 仅本文提到的 metapac
547
+ - ` CorePeripherals ` owned struct, 用于管理核心外设资源, 一般是内核定时器中断处理器等 - 仅 svd2rust + Cortex-M
548
+ - ` memory.x ` 定义内存布局 - 实际上由于平台的多样性, 不一定非要由 pac 来提供内存布局定义, 比如某些可自由配置 FLASH/RAM 的芯片, 更适合最终应用提供
549
+ - 各种 METADATA 信息 - 仅适用于本文提到的 metapac
547
550
548
551
## 总结及对比
549
552
@@ -566,6 +569,7 @@ pac::IOC
566
569
[ bitflags ] : https://crates.io/crates/bitflags
567
570
[ stm32-rs ] : https://github.com/stm32-rs/stm32-rs
568
571
[ ch32-rs ] : https://github.com/ch32-rs/ch32-rs
572
+ [ ch32-data ] : https://github.com/ch32-rs/ch32-data
569
573
[ stm32-data ] : https://github.com/embassy-rs/stm32-data
570
574
[ hpm_sdk ] : https://github.com/hpmicro/hpm_sdk
571
575
[ yaml2pac ] : https://github.com/embedded-drivers/yaml2pac
0 commit comments