#cortex-m #arm #xmc #embedded-hal-impl #hardware-abstraction-layer

无 std xmc1100-hal

适用于 ARM Cortex-M+ 微控制器的 XMC1100 系列硬件抽象层 (HAL)

2 个不稳定版本

0.2.0 2020 年 1 月 5 日
0.1.0 2019 年 4 月 7 日

#1849 in 嵌入式开发

MIT/Apache

56KB
1.5K SLoC

Rust 1K SLoC // 0.1% comments GNU Style Assembly 127 SLoC // 0.2% comments Alex 10 SLoC Forge Config 1 SLoC

xmc1100-hal

为 xmc1100 芯片设计的 HAL,主要针对 XMC2GO 开发套件。该 HAL 的很大一部分基于 stm32f0xx-hal HAL。

烧录

XMC2Go 包含一个 JLink 调试探针。这意味着可以使用 Segger 工具从 https://segger.comopenocd。此外,还需要安装 arm-none-eabi-gdb。这里使用 openocd。

首先需要启动 openocd

$ openocd

使用所需的 elf 文件启动 gdb

$ arm-none-eabi-gdb <YourElfFile>

最后,连接到 gdb 服务器并在 gdb 中烧录芯片

(gdb) target extended-remote localhost:3333
(gdb) load
(gdb) c

常见问题解答 (FAQ)

  • 我的串行通信损坏/返回错误等。为什么?

    内部时钟似乎不太好。在 xmc2go 上,这可能导致定时错误。在高波特率(115200 波特)下,您也可以在 arduino 实现中观察到这些错误,尽管它们不会出错

  • 为什么中断不起作用?

    使用 openocd 烧录后,中断不起作用(对我来说)。当重新上电时,它们又起作用了

中断/异常

[抱怨时间]

xmc1100 芯片具有非常不寻常的异常架构,这与正常的、相当出色的 cortex-m 风格并不兼容。

(参考,闪存从 0x10001000 开始,而 RAM 从 0x20000000 开始)

向量表位于 rom 中,这意味着它不在闪存中,因此不可配置(参考手册中的 2-30)。在启动时,rom 代码被执行,然后跳转到 0x10001004 中定义的地址,sp 在 0x10001000(到目前为止一切顺利)。

但其他条目没有使用。rom 中的向量表硬编码了 ram 中的处理程序地址,处理程序必须在那里(类似于 avrs 或 8051),例如(对于 hardfault)0x2000000C。向量表保留区域 0x10001010 用于时钟配置,应由 rom 启动代码配置。

这意味着这个crate必须复制一些来自 cortex-m-rt 的功能,比如链接文件的内容,并且在汇编中实现中断处理(以确保大小固定)。这些新的中断处理程序仅模拟正常cortex-m中断的风格,就像Infineon在其XMC-for-Arduino项目中做的那样,因此最终用户不应该注意到除了增加的中断延迟之外的其他任何东西。

待办事项

  • 更多外设
  • RT默认总是开启的。我们想保持这种状态吗?(这是必要的,这样exceptions.s中就定义了所有符号)

许可证

在以下任一许可证下授权

由你选择。

贡献

除非你明确表示,否则你提交给工作的任何有意包含的贡献,根据Apache-2.0许可证定义,应如上双许可,没有额外的条款或条件。

依赖项

~5.5MB
~149K SLoC