MicroPython's DMA class uses shared IRQ handlers, which would be
clobbered by Hub75's use of an exclusive handler.
Additionally clean up some dead code (DMA_IRQ_1??), more epxlicitly
clean up the claimed PIOs and programs, and do not use a fixed
DMA channel. This seems to have fixed a bug whereupon Hub75 would
hardlock on the 5th soft reset.
* have a basic pg working needs optimizing
* working well ported some examples from GU
* started on micropython module
* Fixes to get new Hub75 compiling in MP
* stripped down for faster compilling
* Update hub75.cmake
* added hub75 to galatic and eviro as it is needed for picographics
* Update picographics.c
* added hu75 update
* added _ModPicoGraphics_obj_t
* Update hub75.cpp
* update bindings
* some examples needs linting
* added other panel sizes and linted
* Update picographics.cpp
* Update picographics.c
* fixing gc memory allocation
* Update hub75.cpp
* Update interstate75_balls_demo.cpp
* review
* broke
* working with built in panel defs
* still borked
* not much change needs review
* Update hub75.cpp
* reverted alot of things
* adding i75 lib
* lots of updates ready to test compile mp
* Update picographics.h
* little tweaks
* an inability to count fixed!
* fixed some readme's
* lots of tiding
* fixed linting and removed experimental code
* Minor formatting
* Minor formatting and cmake tidy
* Removed unneeded parts of examples
* Final tidy
* tidy examples and adding more
* updated to new library
* documentation tweaks
* fixed inclusion of interstate75 module
* syncing some stuff
* fixed linting
Co-authored-by: ZodiusInfuser <christopher.parrott2@gmail.com>
Defensively tear down DMA/PIO so it's in a known good state upon (soft)reset.
Issue was a race condition with DMA interrupts firing and not being achknowledged, leaving a stuck raised IRQ.
The blocking wait for DMA transactions also exacerbated this, turning a borken DMA interrupt and blank screen into an unrecoverable hardlock.
...not that the blank screen was recoverable without a soft reset anyway!
Switch from 12-bit to 10-bit gamma to fit RGB into a uint32_t. Simplifies PIO and halves the RAM usage for F/B buffer.
Switch "flip" to *literally* swap the front and back buffers, and then asyncronously DMA the new back buffer into the front ready for the next draw.