dsplover / rp2040-pio-emulator

RP2040 emulator for the testing and debugging of PIO programs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Emulator for the PIO Blocks within the RP2040 Microcontroller (Python Edition)

Build Status Coverage PyPI

Introduction

An emulator for the Programmable Input/Output (PIO) blocks that are present within the Raspberry Pi Foundation's RP2040 Microcontroller. It is designed to assist in the analysis of PIO programs and to help you by:

  • Enabling unit tests to be written.
  • Answering questions such as: How many clock cycles are being consumed?
  • Supporting the visualization of GPIO outputs over time.
  • Providing alternatives to debugging on real hardware, which can be time consuming.

Quick Start

Below is a slight variation of the example used within the Quick Start Guide.

from pioemu import emulate

program = [0xE029, 0x0041, 0x2080]  # Count down from 9 using X register

generator = emulate(program, stop_when=lambda _, state: state.x_register < 0)

for before, after in generator:
  print(f"X register: {before.x_register} -> {after.x_register}")

Additional Examples

Some additional examples include:

  1. Visualisation of square wave program using Jupyter Notebooks within the examples/ directory.

  2. TDD example for the Pimoroni Blinkt! within the examples/ directory.

  3. pico-pio-examples

Supported Instructions

Instruction Supported Notes
JMP ✔️ 🚧 !OSRE variants not implemented
WAIT ✔️ ⚠️ IRQ variant is not supported
IN ✖️
OUT ✔️ 🚧 PC, ISR and EXEC destinations not implemented
PUSH ✔️ 🚧 IfEmpty variant not implemented
PULL ✔️ 🚧 IfEmpty variant not implemented
MOV ✔️ 🚧 Some variants and operations not implemented
IRQ ✖️
SET ✔️

Known Limitations

This software is under development and currently has limitations - the notable ones are:

  1. Not all of the available instructions are supported - please refer to the table above.

  2. No support for pin-sets associated with OUT, SET or IN; all pin numbers are with respect to GPIO 0.

  3. Pin-sets do not wrap after GPIO 31.

  4. No direct support for the concurrent running of multiple PIO programs; a single State Machine is emulated and not an entire PIO block.

About

RP2040 emulator for the testing and debugging of PIO programs

License:Apache License 2.0


Languages

Language:Python 100.0%