问题标签 [samd21]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
24 浏览

arduino - 异步读取 I2C 数据后 SAMD21 错误写入串行

问题:在异步访问我的 I2C 设备(在主循环而不是阻塞循环中轮询它)后,一旦我写入 USB 串行端口,就会出现 CPU 异常

背景:我有一个在 Microchip Studio 下运行的 Arduino 项目(用于通过 J-Link 接口进行调试)。我正在通过 I2C 与 VCNL4010 接近传感器通信。我有一个有效的同步函数,可以读取接近度:

此代码工作正常,但会阻塞我的主循环,直到传感器读取完成。我需要避免阻塞,因为我也在控制电机。我写了一个异步版本,分为以下功能:

作为对串行命令的响应,我readProximityBegin在主循环中调用并调用 update 直到readProximityReady变为真,此时我使用readProximityResult. 如前所述,一旦我在这一切之后写入 USB 串行端口,就会出现 CPU 异常(错误源于writeRTL 中的串行)。我不确定究竟是哪个异常,因为在 cortex_handlers.c 中,SAMD21 的 arduino 代码将各种异常路由到同一函数:

这是上面引用的我的 I2C 函数之一的示例:

0 投票
0 回答
14 浏览

debugging - 使用 VS Code 中的调试器读取 SYST_CVR 以获取滴答计数

我尝试使用 Visual Studio Code 中的调试器读取 SAMD21 上的 SYST_CVR 寄存器。我想这样做,以了解两个断点之间需要多少 CPU 滴答声。我发现,它应该存储在 0xE000E018 中。但是,如果我尝试在监视列表中读取此地址,我会得到一个不会改变的值。我还使用了 arduino 的 micros() 函数,它也应该基于 sysTick,它使用 SYST_CVR 值。因此,计数器应该运行。有没有办法从地址为 0xE000E018 的寄存器中读出正确的值,或者有没有另一种方法可以读出一个用调试器计算 CPU 滴答声的计数器?

谢谢你的帮助。

0 投票
0 回答
30 浏览

c - MPLAB X IDE / XC32 / SAMD21XPlained Pro / printf() 不工作

我正在使用一块SAMD21XPlained Pro板子Mac (OS Big Sur)MPLAB X IDE v6.00 (XC32 compiler)我目前在尝试通过该printf()功能在我的终端上显示消息时遇到问题。

我是嵌入式编程的初学者,我尝试遵循有关STDIO 串行通信的教程:https ://www.youtube.com/watch?v=3pwdpYj5s_A&t=397s

根据本教程,我首先尝试只做 aprintf()但我没有在终端上看到任何东西(我没有尝试scanf()第一次尝试)。我唯一改变的是我包含了 stdio.h 文件,我用 a 做了第二次测试baud rate 9600(因为我真的不知道如何定义波特率,我想像那样测试)。

我在几个论坛上读到问题来自XC32编译器默认使用的事实,UART2printf()必须使用UART1在终端上显示。一些人建议xc.h重新定义默认值UART1( __XC_UART = 1),但这似乎仅适用于PIC32MXµC。根据我对XC32编译器文件的研究,xc.h文件 forPIC32MX与for 的文件不同,PIC32/SAM而仅用于PIC32MX定义的文件__XC_UART

我还尝试将“ Microchip Developer Help ”中针对“ Redirect stdout for Use With printf() ”的建议应用到以下XC32类别: https ://microchipdeveloper.com/xc32:redirect-stdout

问题是它似乎也仅适用于PIC32MXµCs(p32xxxx.h包含在代码开头的文件仅存PIC32MX在于XC32编译器中)。

经过几天的研究,我尝试了不同论坛上提出的许多解决方案,但仍然找不到有效的解决方案,所以我想知道您是否有想法?

谢谢 !

0 投票
0 回答
9 浏览

micropython - micropython 和 sys.implementation-在 XIAO SAMD21 和 XIAO RP2040 上不同

我正在使用 1.18 版在 SEEED XIAO (SAMD21) 上使用 micropython,并希望使用“已编译”库 ( .mpy) 来节省空间。我有版本 5 的 mpy-cross 对我来说没问题。我也想要浮点数,所以我使用该选项构建了一个新的 micropython——从最新的 (20220302) github 版本——并注意到 mpy-cross 已更新到版本 6。我想我会检查一下.mpy使用了哪些版本micropython 文档建议使用一些代码来检查.mpy 使用sys.implementation对象的版本。我注意到了各种各样的sys.implementation实现。

XIAO SAMD21 上由 micropython 20220117 发布的 1.18 版本给出了以下结果:

这返回了一个包含 2 个项目的元组 - 名称和一个包含版本信息的元组。但没有关于mpy版本的信息。

然后我尝试了 RP2040 NANO 发布的 1.18 版本(并在我的 XIAO RP2040 上运行它):

这里返回的结果是具有 3 个属性(命名为属性)和一个mpy版本(5637 & 0xff = 5)的元组。然后我使用选项重新编译了 micropython#define MICROPY_PERSISTENT_CODE_LOAD (1)以尝试匹配 RP2040 输出:

现在返回一个包含 3 个项目的元组,mpy版本 (6),但不是命名元组,并且mpy版本没有额外数据。

我的问题是如何在我的 XIAO SAMD2 实现中获得一致的结果?我应该包括或排除哪个选项?还是我不应该担心?我正在研究是切换到 Python 还是继续使用 C(++) 这个小型处理器 - 倾向于 C(++)。

谢谢