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}")
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: | PC, ISR and EXEC destinations not implemented |
| PUSH | :heavy_check_mark: :construction: | IfEmpty variant not implemented |
| PULL | :heavy_check_mark: :construction: | IfEmpty variant not implemented |
| 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.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rp2040_pio_emulator-0.78.0.tar.gz.
File metadata
- Download URL: rp2040_pio_emulator-0.78.0.tar.gz
- Upload date:
- Size: 12.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.11.2 Linux/6.1.0-6-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6dc5f4442f870df024ceb9f35896acc79577a238911750ee2ed11efb4e663be9
|
|
| MD5 |
2eae6c261e9aeb492b675eaa64fff0d2
|
|
| BLAKE2b-256 |
2cb995dc0bc7fb5ee88a775cf4321c27082d472c52762071a944adc8ba38dd3c
|
File details
Details for the file rp2040_pio_emulator-0.78.0-py3-none-any.whl.
File metadata
- Download URL: rp2040_pio_emulator-0.78.0-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.11.2 Linux/6.1.0-6-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b00aae7f1b7751e4ddec0bba6b6c9afc2817a1f03aa991697be8e399194983e0
|
|
| MD5 |
b37d8d78fdeb253722e6cb924dc8544b
|
|
| BLAKE2b-256 |
48b2f3ba20752bc523b0b8b8e7bb298747ec46f08a93e783e5cd8693cbf3f37e
|