Skip to content

RP2040 emulator for the testing and debugging of PIO programs

License

Notifications You must be signed in to change notification settings

aaronjamt/rp2040-pio-emulator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 ✔️
WAIT ✔️ ⚠️ IRQ variant is not supported
IN ✔️
OUT ✔️ 🚧 EXEC destination not implemented
PUSH ✔️ 🚧 IfFull 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.

Thanks To

  • aaronjamt for contributing features and fixes.

About

RP2040 emulator for the testing and debugging of PIO programs

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%