# Emulator for the PIO Blocks within the RP2040 Microcontroller (Python Edition)
![Build Status](https://github.com/NathanY3G/rp2040-pio-emulator/actions/workflows/package-ci.yml/badge.svg) ![Coverage](./docs/images/coverage-badge.svg) [![PyPI](https://img.shields.io/pypi/v/rp2040-pio-emulator?color=informational)](https://pypi.org/project/rp2040-pio-emulator/)
## 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](./docs/Quick%20Start%20Guide.md).
```python
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](./docs/Tour%20of%20pioemu.md) provides a more detailed explanation than the
[Quick Start Guide](./docs/Quick%20Start%20Guide.md) offers. In addition, there is a
[FAQ](./docs/FAQ.md) available that might contain an answer to your question. However, if none
of these provides you with the necessary information then please consider creating a
[new issue](https://github.com/NathanY3G/rp2040-pio-emulator/issues) - thanks!
## Additional Examples
Some additional examples include:
1. Visualisation of square wave program using Jupyter Notebooks within the `examples/` directory.
1. TDD example for the Pimoroni Blinkt! within the `examples/` directory.
1. [pico-pio-examples](https://github.com/NathanY3G/pico-pio-examples)
## 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:
1. Not all of the available instructions are supported - please refer to the table above.
1. No support for pin-sets associated with OUT, SET or IN; all pin numbers are with respect to GPIO 0.
1. Pin-sets do not wrap after GPIO 31.
1. 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](https://github.com/aaronjamt) for contributing features and fixes.
* [Josverl](https://github.com/Josverl) for contributing features.
* [winnylourson](https://github.com/winnylourson) for contributing a bug fix.
Raw data
{
"_id": null,
"home_page": "https://github.com/NathanY3G/rp2040-pio-emulator",
"name": "rp2040-pio-emulator",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.10.13,<4.0.0",
"maintainer_email": "",
"keywords": "rp2040,raspberry-pi-pico,testing,tdd,debugging",
"author": "Nathan Young",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/dc/e5/99dd6dd5f296657e1d995bd425acf882c65ed32e384579ee7a3d24f5d60e/rp2040_pio_emulator-0.83.0.tar.gz",
"platform": null,
"description": "# Emulator for the PIO Blocks within the RP2040 Microcontroller (Python Edition)\n\n![Build Status](https://github.com/NathanY3G/rp2040-pio-emulator/actions/workflows/package-ci.yml/badge.svg) ![Coverage](./docs/images/coverage-badge.svg) [![PyPI](https://img.shields.io/pypi/v/rp2040-pio-emulator?color=informational)](https://pypi.org/project/rp2040-pio-emulator/)\n\n## Introduction\nAn emulator for the Programmable Input/Output (PIO) blocks that are present\nwithin the Raspberry Pi Foundation's RP2040 Microcontroller. It is designed\nto assist in the analysis of PIO programs and to help you by:\n\n* Enabling unit tests to be written.\n* Answering questions such as: How many clock cycles are being consumed?\n* Supporting the visualization of GPIO outputs over time.\n* Providing alternatives to debugging on real hardware, which can be time consuming.\n\n## Quick Start\nBelow is a slight variation of the example used within the [Quick Start Guide](./docs/Quick%20Start%20Guide.md).\n\n```python\nfrom pioemu import emulate\n\nprogram = [0xE029, 0x0041, 0x2080] # Count down from 9 using X register\n\ngenerator = emulate(program, stop_when=lambda _, state: state.x_register < 0)\n\nfor before, after in generator:\n print(f\"X register: {before.x_register} -> {after.x_register}\")\n```\n\n## Documentation\nA [Tour of pioemu](./docs/Tour%20of%20pioemu.md) provides a more detailed explanation than the\n[Quick Start Guide](./docs/Quick%20Start%20Guide.md) offers. In addition, there is a\n[FAQ](./docs/FAQ.md) available that might contain an answer to your question. However, if none\nof these provides you with the necessary information then please consider creating a\n[new issue](https://github.com/NathanY3G/rp2040-pio-emulator/issues) - thanks!\n\n## Additional Examples\nSome additional examples include:\n\n1. Visualisation of square wave program using Jupyter Notebooks within the `examples/` directory.\n\n1. TDD example for the Pimoroni Blinkt! within the `examples/` directory.\n\n1. [pico-pio-examples](https://github.com/NathanY3G/pico-pio-examples)\n\n## Supported Instructions\n\nInstruction | Supported | Notes\n:-----------| :---------------------------------| :----\nJMP | :heavy_check_mark: | \nWAIT | :heavy_check_mark: :warning: | IRQ variant is not supported\nIN | :heavy_check_mark: |\nOUT | :heavy_check_mark: :construction: | EXEC destination not implemented\nPUSH | :heavy_check_mark: | \nPULL | :heavy_check_mark: | \nMOV | :heavy_check_mark: :construction: | Some variants and operations not implemented\nIRQ | :heavy_multiplication_x: |\nSET | :heavy_check_mark: |\n\n## Known Limitations\nThis software is under development and currently has limitations - the notable ones are:\n\n1. Not all of the available instructions are supported - please refer to the table above.\n\n1. No support for pin-sets associated with OUT, SET or IN; all pin numbers are with respect to GPIO 0.\n\n1. Pin-sets do not wrap after GPIO 31.\n\n1. No direct support for the concurrent running of multiple PIO programs;\n a single State Machine is emulated and not an entire PIO block.\n\n## Thanks To\n* [aaronjamt](https://github.com/aaronjamt) for contributing features and fixes.\n* [Josverl](https://github.com/Josverl) for contributing features.\n* [winnylourson](https://github.com/winnylourson) for contributing a bug fix.\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "RP2040 emulator for the testing and debugging of PIO programs",
"version": "0.83.0",
"project_urls": {
"Homepage": "https://github.com/NathanY3G/rp2040-pio-emulator",
"Repository": "https://github.com/NathanY3G/rp2040-pio-emulator"
},
"split_keywords": [
"rp2040",
"raspberry-pi-pico",
"testing",
"tdd",
"debugging"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cb98756225253600bd524b0ded97ca7d24d9173d6d4755ad4ae2035f25d843cd",
"md5": "ab62624959ec85f0ae69bde47d7e11ec",
"sha256": "8ec57b3e263fb7584f88d101b7a27e2cceeed55e02b193beeeeb4c59289dc8bc"
},
"downloads": -1,
"filename": "rp2040_pio_emulator-0.83.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ab62624959ec85f0ae69bde47d7e11ec",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10.13,<4.0.0",
"size": 19650,
"upload_time": "2024-01-21T10:30:29",
"upload_time_iso_8601": "2024-01-21T10:30:29.615781Z",
"url": "https://files.pythonhosted.org/packages/cb/98/756225253600bd524b0ded97ca7d24d9173d6d4755ad4ae2035f25d843cd/rp2040_pio_emulator-0.83.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dce599dd6dd5f296657e1d995bd425acf882c65ed32e384579ee7a3d24f5d60e",
"md5": "b7124d82a6deecffac0ef94d307fb012",
"sha256": "3d1a2147aa9c0b17f39b207d6b57b1381abf189aaa5bcdd0f6062da23c4e9b24"
},
"downloads": -1,
"filename": "rp2040_pio_emulator-0.83.0.tar.gz",
"has_sig": false,
"md5_digest": "b7124d82a6deecffac0ef94d307fb012",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10.13,<4.0.0",
"size": 14537,
"upload_time": "2024-01-21T10:30:31",
"upload_time_iso_8601": "2024-01-21T10:30:31.394834Z",
"url": "https://files.pythonhosted.org/packages/dc/e5/99dd6dd5f296657e1d995bd425acf882c65ed32e384579ee7a3d24f5d60e/rp2040_pio_emulator-0.83.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-21 10:30:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "NathanY3G",
"github_project": "rp2040-pio-emulator",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "rp2040-pio-emulator"
}