Raspberry Pi Pico:向 PIO 发送 2 位以触发 GPIO 引脚(一个、另一个或两个)

问题描述 投票:0回答:0

为了通过步进控制器驱动两个步进电机,我尝试使用 PIO 控制 Pico 上的两个引脚(GPIO 16 和 GPIO 17)。这个想法是,如果 GPIO 16 或 GPIO 17 或两者都必须设置为高电平,则 main 中的一个函数确定。

我想向 PIO 的 FIFO 发送一个两位序列,这样: 0x00:没有引脚设置为高电平 0x01:引脚 16 设置为高电平 0x10:引脚 17 设置为高电平 0x11:两个引脚都设置为高电平

PIO 块看起来像这样(没有用于配置状态机的内联 C 代码)

.program stepper
    set pindirs, 1
.wrap_target
    pull block
    out pins, 2   [31]
    set pins, 0
.wrap 

在 PIO 程序中,

pull block
应从 FIFO 中获取下一个序列(0x00、0x01、0x10 或 0x11)并将其发送到引脚。

例如: 如果序列 0x10 已发送到 PIO,则引脚 16 应打开,引脚 17 应保持关闭。之后,应使用下一个

pull
命令将下一个序列加载到PIO OSR中。

我正在计算要在 main 中发送的序列,如下所示:

pio_signal = signal_1 + 2*signal_2;

这应该导致从 0 到 3 的数字,在二进制中转换为 00 到 11。

我想我可能可以在 python 中实现这一点(我的大部分工作都是在 python 中完成的),但我不知道如何在 C 中做到这一点。不幸的是,python 不在这里,因为 python 代码原来很多太慢了,无法足够快地喂养步进器......(太可惜了,因为在 pico 上用 micropython 编程比 C 方便得多)。

我必须设置一个 DMA(求求你了,不要……),还是有更简单的方法来做到这一点?

我已经尝试找到一些例子,做类似的事情,但似乎他们的功能更广泛,他们的解决方案在这里会过大。

c microcontroller gpio raspberry-pi-pico
© www.soinside.com 2019 - 2024. All rights reserved.