MicroPython RP2040可编程IOs(PIO)示例介绍
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MicroPython RP2040可编程IOs(PIO)示例介绍相关的知识,希望对你有一定的参考价值。
【MicroPython RP2040】可编程ios(PIO)
- 原文链接:
https://www.cnx-software.com/2021/01/27/a-closer-look-at-raspberry-pi-rp2040-programmable-ios-pio/
为什么用可编程I / O ?
所有的电路板通常都带有对数字通信协议(如I2C、SPI和UART)的硬件支持。然而,如果你计划使用更多的这些接口,而不是在板上可用的,你可以使用可编程的IOs在RP2040微控制器提供。
它的功能比我们想象的要多。让我们假设你想输出一个DPI视频或“与AliExpress上的串行设备通信”现在可以通过可编程I/O。顾名思义,“可编程”IO表明它可以直接编程支持多个接口,包括SD卡接口,VGA输出,和更快的数据传输速度。挂在!这篇文章中最令人兴奋的部分即将到来——“如何编程这些可编程I/ o,使您的工作变得容易”。
📖PIO汇编指令
当对这些IO接口进行编程时,有9条汇编指令“ JMP、WAIT、IN、OUT、PUSH、PULL、MOV、IRQ和SET”。虽然大多数人可能对使用C / C ++或Python语言对PIO接口进行编程感兴趣,但让我们看看用于IO接口的一些汇编语言指令。
- 📍
JMP
:此“跳转”指令可以是条件语句或非条件语句。在此,它通过更改指令指针寄存器来传输执行流程。简而言之,使用“ jmp”语句,执行流程进入代码的另一部分。 - 📍
WAIT
:该指令会暂停代码的执行。每条指令需要一个周期,除非被停止(使用WAIT指令)。 - 📍
OUT
:该指令将数据从输出移位寄存器移至其他目标,每次1…32位。 - 📍
PULL
:该指令将32位字从TX FIFO传输到输出移位寄存器中。 - 📍
IN
:该指令一次将1…32位移入寄存器。 - 📍
PUSH
:该指令用于将ISR内容写入RX FIFO。
有关汇编语言说明的更多信息,请参见RP2040数据表:
https://datasheets.raspberrypi.org/rp2040/rp2040_datasheet.pdf
板载LED闪烁的PIO MicroPython代码
import time
from rp2 import PIO, asm_pio
from machine import Pin
# Define the blink program. It has one GPIO to bind to on the set instruction, which is an output pin.
# Use lots of delays to make the blinking visible by eye.
@asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink():
wrap_target()
set(pins, 1) [31]
nop() [31]
nop() [31]
nop() [31]
nop() [31]
set(pins, 0) [31]
nop() [31]
nop() [31]
nop() [31]
nop() [31]
wrap()
# 使用blink程序实例化一个状态机,频率为2000Hz,并设置为 Pin(25) (LED on the rp2 board)
sm = rp2.StateMachine(0, blink, freq=2000, set_base=Pin(25))
# Run the state machine for 3 seconds. The LED should blink.
sm.active(1)
time.sleep(3)
sm.active(0)
- 🌿一秒亮一秒熄灭
from machine import Pin
import rp2
@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink_1hz():
# Cycles: 1 + 7 + 32 * (30 + 1) = 1000
set(pins, 1)
set(x, 31) [6]
label("delay_high")# 设置汇编延时入口
nop() [29]
jmp(x_dec, "delay_high")# 汇编延时跳出指令
# Cycles: 1 + 7 + 32 * (30 + 1) = 1000
set(pins, 0)
set(x, 31) [6]
label("delay_low")
nop() [29]
jmp(x_dec, "delay_low")
# Create and start a StateMachine with blink_1hz, outputting on Pin(25)
sm = rp2.StateMachine(0, blink_1hz, freq=2000, set_base=Pin(25))
sm.active(1)
以上是关于MicroPython RP2040可编程IOs(PIO)示例介绍的主要内容,如果未能解决你的问题,请参考以下文章
MicroPythonRP2040 MicroPython固件烧录以及Thonny 开发初探
MicroPython RP2040通过ADC调节PWM输出示例
如何在 Arduino Nano Connect RP2040 上使用 MicroPython 发出 HTTP 请求
MicroPython RP2040读取DHT11温湿度传感器数据+ 0.96“I2C oled显示