RP2040 emulator for the testing and debugging of PIO programs
Project description
Emulator for the PIO Blocks within the RP2040 Microcontroller (Python Edition)
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}")
Documentation
A Tour of pioemu provides a more detailed explanation than the Quick Start Guide offers. However, if neither of these provides you with the information that you seek then please consider creating a new issue - thanks!
Additional Examples
Some additional examples include:
-
Visualisation of square wave program using Jupyter Notebooks within the
examples/
directory. -
TDD example for the Pimoroni Blinkt! within the
examples/
directory.
Supported Instructions
Instruction | Supported | Notes |
---|---|---|
JMP | :heavy_check_mark: | |
WAIT | :heavy_check_mark: :warning: | IRQ variant is not supported |
IN | :heavy_check_mark: | |
OUT | :heavy_check_mark: :construction: | EXEC destination not implemented |
PUSH | :heavy_check_mark: | |
PULL | :heavy_check_mark: | |
MOV | :heavy_check_mark: :construction: | Some variants and operations not implemented |
IRQ | :heavy_multiplication_x: | |
SET | :heavy_check_mark: |
Known Limitations
This software is under development and currently has limitations - the notable ones are:
-
Not all of the available instructions are supported - please refer to the table above.
-
No support for pin-sets associated with OUT, SET or IN; all pin numbers are with respect to GPIO 0.
-
Pin-sets do not wrap after GPIO 31.
-
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.
- winnylourson for contributing a bug fix.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for rp2040_pio_emulator-0.81.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | d8b01248ff06ffa86cd5227252d0af90adc99313e322758ef8d7ea977b60f51c |
|
MD5 | 21ca438b9ac7882d433ce7616961cf09 |
|
BLAKE2b-256 | 1bacb3e1d0e9c8dbafe3f4150e5f291510bd7a4933396f0c37693084731b4dfa |
Hashes for rp2040_pio_emulator-0.81.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | caecf2d1890d2d803ee938129b2dca561d36994def309319c8f9ffd799662401 |
|
MD5 | 457c5d5d60d3d801ee7267771ffe3275 |
|
BLAKE2b-256 | afb8e5aaa3664864245c8ed0685034a38820aef70d5679a3d596905e1009e916 |