micropythonrp2040可编程ios(pio)示例介绍(代码片段)

perseverance52 perseverance52     2022-12-02     177

关键词:

【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)

micropythonrp2040通过adc调节pwm输出示例(代码片段)

【MicroPythonRP2040】通过ADC调节PWM输出示例🔖RaspberryPiPico引脚功能图🔖YD2040📖RP2040ADC介绍📝RP2040共有5个ADC通道,其中4个是基于12位SAR的ADC:GP26、GP27、GP28和GP29。ADC0、ADC1、ADC2、ADC3的输入信号分别可以连接到GP 查看详情

micropythonrp2040micropython固件烧录以及thonny开发初探(代码片段)

【MicroPython】RP2040MicroPython固件烧录以及Thonny开发初探基于RP2040主控的的PIPICO官方的RaspberryPiPicoMicroPython固件烧写以RP2040为主控核心的RaspberryPiPico固件MicroPythonUF2烧录文件:https://micropython.org/download/rp2-pico/rp2-p 查看详情

micropythonrp2040读取dht11温湿度传感器数据+0.96“i2coled显示(代码片段)

【MicroPythonRP2040】读取DHT11温湿度传感器数据+oled显示✨本示例基于Thonny平台开发。📒RP2040开发板📘YD-RP2040开发板🎄DHT11传感器🎄ssd1306I2C0.96寸OLED屏幕📌注意事项⛳在运行代码前,需要先将ssd13060.96寸I2... 查看详情

micropythonrp2040/esp32/c3自编译4mb/8mb/16mb固件分享(代码片段)

micropythonRP2040/esp32/c3自编译4MB/8MB/16MB固件分享固件基于当前版本:MicroPythonv1.19.1自编译的,可以根据自己的PIPICO,esp32/c3开发板flash容量自行选择其对应的固件进行烧录。本文也提供了官方固件资源,例如:PIPIC... 查看详情

micropythonrp2040读取ds18b20温度传感器数据+0.96“i2coled显示(代码片段)

【MicroPythonRP2040】读取DS18B20温度传感器数据+0.96“I2Coled显示✨本示例基于Thonny平台开发。📒RP2040开发板📘YD-RP2040开发板🎄DS18B20传感器🎄ssd1306I2C0.96寸OLED屏幕📌注意事项⛳在运行代码前,需要先将ssd13... 查看详情

c++的errorc2040:

errorC2040:'private:staticchar*Student::name':'char'differsinlevelsofindirectionfrom'char[20]'贴上代码://example4_02.cpp:静态成员函数访问静态数据成员示例#include<iostream>usingnamespacestd;classStudentprivate:intnum;staticinttotal;//私有的静态... 查看详情

p2040打开所有的灯(代码片段)

例如011100101点一下最中间的灯【2,2】就变成了001011111再点一下左上角的灯【1,1】就变成了111111111达成目标。最少需要2步。输出2即可。输入输出格式输入格式: 九个数字,3*3的格式输入,每两个数字中间只有一个空格,表示... 查看详情

arduinorp2040读取adc采样数据

ArduinoRP2040读取ADC采样数据 查看详情

circuitpythonraspberrypipicorp2040自定义机械键盘实例(代码片段)

【CircuitPython】RaspberryPiPicoRP2040MechanicalKeyboard实例本示例基于Thonny开发,所使用的固件是:CircuitPython,区别于MicroPython固件。最近B站某君的瀚文键盘很火热,这里介绍利用RaspberryPiPicoRP2040实现键盘按键定制功能。... 查看详情

arduinorp2040通过调节pwm实现呼吸灯效果

ArduinoRP2040通过调节PWM实现呼吸灯效果 查看详情

msa2040默认登录地址/用户名密码

MSA2040默认登录地址/用户名密码IP:10.0.0.2/10.0.0.3用户名:manage密码:!manage 查看详情

arduinorp2040驱动ssd1306i2coled屏幕

ArduinoRP2040驱动ssd1306I2COLED屏幕 查看详情

hdoj:2040

#include<iostream>#include<vector>usingnamespacestd;vector<long>yueShu(longa){vector<long>vec;vec.push_back(1);for(inti=2;i<a;i++){if(a%i==0){vec.push_back(i);//cout<< 查看详情

如何在 Arduino Nano Connect RP2040 上使用 MicroPython 发出 HTTP 请求

】如何在ArduinoNanoConnectRP2040上使用MicroPython发出HTTP请求【英文标题】:HowtomakeHTTPrequestwithMicroPythononArduinoNanoConnectRP2040【发布时间】:2021-12-2402:18:34【问题描述】:我正在尝试将我的ArduinoNanoRP2040与MicroPython连接到我的本地WiFi网络... 查看详情

hdu-page11(2040~2049)2046

//2040#include<iostream>#include<algorithm>#defineMAXN100usingnamespacestd;//判断a的所有的真约数之和是否等于bintis_N(inta,intb) intsum1=0;//记录a的真约数之和 for(inti=1;i<=a/2;i++) if(a%i==0) sum1+=i 查看详情

帮助!错误 C2040:“HWINEVENTHOOK”:“DWORD”与“HWINEVENTHOOK__ *”的间接级别不同

】帮助!错误C2040:“HWINEVENTHOOK”:“DWORD”与“HWINEVENTHOOK__*”的间接级别不同【英文标题】:Help!errorC2040:\'HWINEVENTHOOK\':\'DWORD\'differsinlevelsofindirectionfrom\'HWINEVENTHOOK__*\'【发布时间】:2009-03-1806:28:51【问题描述】:我正在一个新... 查看详情

洛谷——p2040打开所有的灯

P2040打开所有的灯题目背景pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。题目描述这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务... 查看详情

洛谷p2040打开所有的灯

P2040打开所有的灯题目背景pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。题目描述这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务... 查看详情