class PIO – avancerad PIO-användning¶
Klassen PIO omsluter ett av RP2040:s två Programmable I/O-block (PIO). Varje PIO-block innehåller ett instruktionsminne (32 instruktioner) som delas av fyra oberoende tillståndsmaskiner, plus ett privat FIFO-gränssnitt till varje tillståndsmaskin och en IRQ-styrenhet.
De flesta skript interagerar med PIO via StateMachine – denna klass är till för avancerade användningsfall som behöver:
Ladda och ta bort program explicit via
add_program()/remove_program().Flytta PIO:s GPIO-bas över chipets 32-stiftsfönster via
gpio_base().Koppla in sig på blockövergripande IRQ-flaggor via
irq().
För att assemblera PIO-program, se rp2.asm_pio().
Konstruktorer¶
- class rp2.PIO(id: int)¶
Returnerar singleton-objektet
PIOför PIO-blocket som identifieras avid. RP2040 har två PIO-block, numrerade0och1. Ger upphov tillValueErrorför andra id-värden.Metoder¶
- gpio_base(base: machine.Pin | int | None = None, /) int¶
Hämtar eller anger GPIO-basen för detta PIO-block.
RP2040:s PIO ser ett 32-stiftsfönster in i GPIO-rymden; fönstret kan börja vid GPIO0 eller GPIO16. Basen styr vilket fönster som gäller för alla tillståndsmaskiner på denna PIO.
Utan argument returneras den aktuella basen (GPIO-stiftnumret,
0eller16).Med ett argument anges basen.
basekan vara enmachine.Pin-instans eller ett heltalsstiftnummer och måste lösas upp till GPIO0 eller GPIO16. Basen måste anges innan något program läggs till eller någon tillståndsmaskin konstrueras på detta PIO-block.
- add_program(program: Callable) None¶
Laddar
programin i detta PIO:s instruktionsminne. Den resulterande minneslayouten återanvänds av alla tillståndsmaskiner på detta PIO-block.Varje PIO har endast 32 instruktioners programminne som delas av alla program; om det nya programmet inte får plats ger denna metod upphov till
OSError(ENOMEM). Samma program kan laddas på båda PIO-instanserna, men de förbrukar separata minnesregioner.
- remove_program(program: Callable | None = None, /) None¶
Tar bort
programfrån detta PIO:s instruktionsminne och frigör plats för nya program. Omprogramutelämnas tas alla program som för närvarande är laddade på denna PIO bort.Att ta bort ett program som inte var laddat är en no-op (inget undantag).
- state_machine(id: int, program: Callable | None = None, *args, **kwargs) StateMachine¶
Returnerar en av de fyra
StateMachine-instanserna som ägs av detta PIO-block.idär det lokala tillståndsmaskinindexet (0–3).Om
programanges konfigureras tillståndsmaskinen att köra det – alla positions- och nyckelordsargument vidarebefordras tillStateMachine.init().Exempel:
>>> rp2.PIO(1).state_machine(3) StateMachine(7)
Det returnerade objektets globala tillståndsmaskin-ID är
pio_id * 4 + sm_id.
- irq(handler: Callable[[PIO], None] | None = None, trigger: int = IRQ_SM0 | IRQ_SM1 | IRQ_SM2 | IRQ_SM3, hard: bool = False) Callable¶
Hämtar eller konfigurerar IRQ på blocknivå för denna PIO.
handlerär det återanrop som ska utlösas när någon av de begärda tillståndsmaskin-IRQ:erna låser. Hanteraren tar emot dennaPIO-instans som sitt enda argument; inuti hanteraren kan de utlösande tillståndsmaskinerna identifieras viaself.irq().flags()AND:at mot konstanternaIRQ_SM*.triggerär en bitmask av en eller fleraIRQ_SM0..IRQ_SM3. Standardvärdet utlöser för valfri tillståndsmaskin.hard=Trueregistrerar en hård avbrottshanterare (ingen heap-allokering i återanropet).MicroPython binder IRQ 0 på varje PIO-block; IRQ 1 är reserverad och inte åtkomlig från Python.
Konstanter¶
- IN_LOW: int¶
Skicka till
out_init/set_init/sideset_initförasm_pio()så att stiftet startar som en ingång driven lågt (dvs. tristate med utgångsbufferten hållande en 0:a).
- IN_HIGH: int¶
Skicka till
out_init/set_init/sideset_initförasm_pio()så att stiftet startar som en ingång med utgångsbufferten hållande en 1:a.
- OUT_LOW: int¶
Skicka till
out_init/set_init/sideset_initförasm_pio()så att stiftet startar som en driven utgång på logisk 0.
- OUT_HIGH: int¶
Skicka till
out_init/set_init/sideset_initförasm_pio()så att stiftet startar som en driven utgång på logisk 1.
- SHIFT_LEFT: int¶
Skicka till
in_shiftdir/out_shiftdirförasm_pio()ellerStateMachine.init()så att skiftningar flyttar bitar mot MSB.
- SHIFT_RIGHT: int¶
Skicka till
in_shiftdir/out_shiftdirförasm_pio()ellerStateMachine.init()så att skiftningar flyttar bitar mot LSB.
- JOIN_NONE: int¶
Skicka till
fifo_joinförasm_pio()så att tillståndsmaskinen har separata 4-ords TX- och RX-FIFO:er (standard).
- JOIN_TX: int¶
Skicka till
fifo_joinförasm_pio()så att TX-FIFO:n fördubblas till 8 ord genom att absorbera RX-FIFO:n. Tillståndsmaskinen kan inte längre ta emot data.