当前位置: 首页 > news >正文

PIO 也有并发喔,巧用SIDE-SET

前言

      Raspberry Pi Pico 的 PIO 模块赋予开发者近乎极限的 IO 时序控制能力。而其中的 side-set 是一个能够“同时控制额外引脚状态”的超级武器。今天我们通过一个极简而优雅的工程级应用:使用 一个 LED 主闪烁引脚 + 一个状态引脚,来完整演示 side-set 的用法及优势。


side-set 是什么?

      简而言之,side-set 让你能在一条 PIO 指令执行的同时控制某些 GPIO 引脚的电平,而不会占用额外的指令周期。

      这样你可以并发控制多个 IO 状态变化,非常适合用来:

  • 模拟通信协议中的同步信号(如 I2S 的 WS、SPI 的 CLK)

  • 输出调试波形(示波器对拍神器)

  • 控制多引脚状态机的切换信号

  • LED 状态指示


示例代码

PIO代码

@rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, set_init=rp2.PIO.OUT_LOW)
def blink_1hz2():set(x, 31)   .side(1)   [6]label("delay_high")nop()                   [7]nop()                   [7]nop()                   [7]nop()                   [5]jmp(x_dec, "delay_high")set(x, 31)   .side(0)  [6]label("delay_low")nop()                   [7]nop()                   [7]nop()                   [7]nop()                   [5]jmp(x_dec, "delay_low")

代码分析

  • 每半个周期共 961 个指令周期(根据 jmp(x_dec, "delay_*") 运行 31 次,每次 31 个周期;

  • 2000Hz 状态机频率下,总共 1922个时钟周期,约1秒;

  • side-set 引脚控制led亮灭交替变化。


 主程序代码

from machine import Pin
import rp2sm = rp2.StateMachine(0, blink_1hz2, freq=2000,sideset_base=Pin(25)     # 控灯
)sm.active(1)

有个小知识点

可以看到这张图8~12位,写的是Delay/side-set,Delay是设置延时用的,比如:

nop()                   [7]

这就是延时7个时钟周期,那么一共有5位,则可以延时31个时钟周期,

小知识点来了:

       如果你设置了side-set,那么这条指令最多只能设置7个时钟周期!因为side-set占用了2位。


实际应用场景

1. 调试分析

通过 side-set 输出状态,可以轻松用逻辑分析仪/示波器捕捉闪烁信号,分辨出状态机运行状态、延迟是否正确等。

2. 通信协议帧信号

类似 I2S、SPI、UART 等协议中都需要帧开始/结束等“状态提示信号”,而 side-set 非常适合用来输出这种同步信号。

3. 触发外部事件

你甚至可以让 side-set 引脚连接到外部中断引脚,用来触发其他芯片的工作/同步检测。


总结

side-set 是 Pico PIO 中最具“魔法感”的特性之一。它允许你:

  • 精准输出辅助信号(0 delay 并发)

  • 不影响主逻辑流程

  • 在硬实时控制中节省宝贵指令周期

相关文章:

  • OpenGL Chan视频学习-8 How I Deal with Shaders in OpenGL
  • 【Doris入门】Doris初识:分布式分析型数据库的核心价值与架构解析
  • 【论文精读】2024 arXiv --VEnhancer现实世界视频超分辨率(RealWorld VSR)
  • Wan2.1 图生视频模型内部协作流程
  • 为(FramePack)的视频生成添加首尾帧功能
  • 多个vue2工程共享node_modules
  • taro + vue3 实现小程序sse长连接实时对话
  • Python的分布式网络爬虫系统实现
  • AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
  • ssh 测试 是否可以连通docker 容器
  • 【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析
  • 新电脑配置五 jdk8,maven,idea,vscode
  • IT 运维老手和新手的区别:从手动运维到一体化 IT 运维系统的跨越
  • 第二十二章:数据治理之数据价值:数据价值知多少
  • 代码风格指南
  • 【DSP笔记】掌握数字世界的律动:时域离散信号与系统基础
  • 解决开机必须联网的问题并关闭windows搜索页面的推荐
  • Java中的日期类详解
  • 打破云平台壁垒支持多层级JSON生成的MQTT网关技术解析
  • 如何保护网络免受零日漏洞攻击?
  • 赣州英文网站建设/网络营销专业就业方向
  • 趴比库的网站是谁建设的/关键词抓取工具都有哪些
  • 网站的建设初步定位/网站代理公司
  • 网站后台ftp账户/抖音竞价推广怎么做
  • 网站服务器一年多少钱/网络整合营销是什么意思
  • 湖南人文科技学院2021分数线/好口碑的关键词优化