news 2026/6/15 11:55:53

树莓派Pico‌的pio指令

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派Pico‌的pio指令

整体结构

RP2040 ├── PIO0 │ ├── Instruction RAM(32× 16bit)│ ├── SM0 │ ├── SM1 │ ├── SM2 │ └── SM3 └── PIO1 ├── Instruction RAM(32× 16bit)├── SM0 ├── SM1 ├── SM2 └── SM3

State Machine(SM)内部寄存器

名称位宽类型说明
PC5 bit寄存器指令计数器
X32 bit寄存器通用工作寄存器
Y32 bit寄存器通用工作寄存器
ISR32 bit移位寄存器输入移位缓存
OSR32 bit移位寄存器输出移位缓存

SM FIFO

PULL(TX → OSR) PUSH(ISR → RX)
名称方向位宽深度本质
TX FIFOCPU → SM32 bit4硬件队列
RX FIFOSM → CPU32 bit4硬件队列

指令宽度:16 bit|1 指令 = 1 cycle(+ delay)

一、PIO 指令

分布 delay / side-set 可重分配

15–1312–87–0
含义OPCODEOPERANDDELAY / SIDESET

指令表

指令作用示例
JMP条件 / 无条件跳转jmp x-- loop
WAIT等待 GPIO / IRQwait 1 pin 0
IN输入到 ISRin pins, 1
OUT从 OSR 输出out pins, 1
PUSHISR → RX FIFOpush
PULLTX FIFO → OSRpull
MOV寄存器操作mov x, osr
IRQ触发 / 等待中断irq 0
SET立即数写寄存器 / GPIOset pins, 1

二、各指令详细表(含例子)

1️⃣ JMP —— 跳转

jmp condition, target
条件含义例子
always无条件jmp start
x--X–,不为 0 则跳jmp x-- loop
y--Y–,不为 0 则跳jmp y-- send
!xX == 0jmp !x done
x!=yX ≠ Yjmp x!=y retry
pinpin 为 1jmp pin high
!osreOSR 非空jmp !osre more

2️⃣ WAIT —— 等待

waitpolaritysourceindex
项目说明例子
polarity等待 0 / 1wait 0 gpio 5
GPIO指定 GPIOwait 1 gpio 2
PINpin 映射wait 1 pin 0
IRQ等待 IRQwait 1 irq 0

3️⃣ IN —— 输入移位

insource, bit_count
source说明例子
pins从 GPIO 读in pins, 1
x从 Xin x, 8
y从 Yin y, 4
null填 0in null, 8
isrISR → ISRin isr, 1

4️⃣ OUT —— 输出移位

out dest, bit_count
dest说明例子
pins输出到 GPIOout pins, 1
x输出到 Xout x, 8
y输出到 Yout y, 4
null丢弃out null, 32
pindirs设置方向out pindirs, 1

5️⃣ PUSH —— ISR → RX FIFO

push[if_full][block]
形式说明例子
默认阻塞push
if_fullISR 满才推push if_full
noblock非阻塞push noblock

6️⃣ PULL —— TX FIFO → OSR

pull[if_empty][block]
形式说明例子
默认阻塞pull
if_emptyOSR 空才拉pull if_empty
noblock非阻塞pull noblock

7️⃣ MOV —— 寄存器操作

mov dest, src
src说明例子
xXmov y, x
yYmov x, y
osrOSRmov x, osr
isrISRmov osr, isr
null0mov x, null
~x取反mov x, ~x

8️⃣ IRQ —— 中断

irq[set|clear|wait]index
操作说明例子
set触发 IRQirq set 0
clear清 IRQirq clear 0
wait等待 IRQirq wait 0

9️⃣SET —— 立即数写

setdest, value
dest说明例子
pinsGPIO 输出set pins, 1
xX 寄存器set x, 10
yY 寄存器set y, 3
pindirsGPIO 方向set pindirs, 1
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 12:41:52

飞牛fnOS高危漏洞? Cloudflare 给飞牛 NAS 套了层“免费 WAF 盾”

最近,国产NAS系统飞牛被爆出严重安全漏洞,路径穿越跳过权限验证,直接访问系统内部资料,一度冲上知乎热榜 不少用户都在担忧数据安全,今天一篇教程教你拯救自己的NAS。 你以为开了 IPv6 就能愉快外网访问 NAS&#x…

作者头像 李华
网站建设 2026/6/15 12:39:36

名字空间(namespace)

最初C标准中并没有名字空间,要求程序中全局作用域中声明的变量、函数、类型等必须具有唯一的名字如果在同一个程序中有两个名字相同的全局变量将产生命名冲突(和C语言一样)如果程序中引入第三方库就必须保证程序中定义的全局名都不能与所用库…

作者头像 李华
网站建设 2026/6/6 5:03:15

AI写论文的秘籍!4款AI论文生成工具,让期刊论文写作更轻松!

在2025年的学术写作智能化浪潮中,越来越多的人选择使用AI论文写作工具。当我们谈及硕士或博士论文等较长的学术作品时,许多工具常常存在理论深度不足和逻辑不够严谨的问题。因此,普通的AI写论文的工具远不能满足专业论文写作的需求。尤其是在…

作者头像 李华
网站建设 2026/5/31 16:34:40

Labview 与汇川AM400 AM600 AM800 AC800 PLC 通讯 官方协议...

Labview 与汇川AM400 AM600 AM800 AC800 PLC 通讯 官方协议,报文读取,安全稳定。 通讯配置,辅助测试。 无程序网络通讯实现。 常用功能一网打尽。 1.命令帧读写。 2.支持 I16 I32 Float 批量读写。 3.支持字符串读写。 4.支持Bool批量读写。 …

作者头像 李华
网站建设 2026/5/1 4:53:39

AI写论文不用愁!这4款AI论文生成神器,让论文写作不再难!

四款实测AI论文写作工具推介 还在为撰写期刊论文感到沮丧吗?面对浩如烟海的文献、繁琐的格式要求以及不断的修改,许多学术研究者都感到效率低下的问题。别急,今天我将推介四款经过实测的AI论文写作工具。这些工具涵盖了文献检索、论文提纲生…

作者头像 李华