klasa PIO – napredno korištenje PIO-a¶
Klasa PIO omata jedan od dvaju blokova programabilnog ulaza/izlaza (PIO) RP2040. Svaki PIO blok sadrži memoriju instrukcija (32 instrukcije) zajedničku za četiri neovisna stanja stroja, uz privatno FIFO sučelje za svaki stroj stanja i IRQ kontroler.
Većina skripti komunicira s PIO-om putem StateMachine – ova klasa namijenjena je za napredne slučajeve korištenja koji trebaju:
Izričito učitavati i uklanjati programe putem
add_program()/remove_program().Pomicati GPIO bazu PIO-a unutar 32-pinskog prozora čipa putem
gpio_base().Spajati se na zastavice IRQ-a na razini cijelog bloka putem
irq().
Za sastavljanje PIO programa pogledajte rp2.asm_pio().
Konstruktori¶
- class rp2.PIO(id: int)¶
Vraća jedinstveni (singleton) objekt
PIOza PIO blok određen sid. RP2040 ima dva PIO bloka, označena s0i1. PodižeValueErrorza bilo koji drugi id.Metode¶
- gpio_base(base: machine.Pin | int | None = None, /) int¶
Dohvaća ili postavlja GPIO bazu za ovaj PIO blok.
PIO RP2040 vidi 32-pinski prozor u GPIO prostoru; prozor može započeti na GPIO0 ili GPIO16. Baza upravlja time koji je prozor na snazi za sve strojeve stanja na ovom PIO-u.
Bez argumenta vraća trenutnu bazu (broj GPIO pina,
0ili16).S argumentom postavlja bazu.
basemože biti instancamachine.Pinili cjelobrojni broj pina, a mora se razriješiti na GPIO0 ili GPIO16. Baza se mora postaviti prije dodavanja bilo kojeg programa ili konstruiranja stroja stanja na ovom PIO bloku.
- add_program(program: Callable) None¶
Učitava
programu memoriju instrukcija ovog PIO-a. Rezultirajući raspored memorije ponovno se koristi za sve strojeve stanja na ovom PIO bloku.Svaki PIO ima samo 32 instrukcije programske memorije zajedničke za sve programe; ako novi program ne stane, ova metoda podiže
OSError(ENOMEM). Isti se program može učitati na obje PIO instance, ali one koriste odvojene regije memorije.
- remove_program(program: Callable | None = None, /) None¶
Uklanja
programiz memorije instrukcija ovog PIO-a, oslobađajući prostor za nove programe. Ako jeprogramizostavljen, uklanjaju se svi programi trenutno učitani na ovom PIO-u.Uklanjanje programa koji nije bio učitan nema učinka (bez iznimke).
- state_machine(id: int, program: Callable | None = None, *args, **kwargs) StateMachine¶
Vraća jednu od četiri instance
StateMachineu vlasništvu ovog PIO bloka.idje lokalni indeks stroja stanja (0–3).Ako je naveden
program, stroj stanja konfiguriran je da ga pokrene – svi pozicijski/ključni argumenti prosljeđuju se metodiStateMachine.init().Primjer:
>>> rp2.PIO(1).state_machine(3) StateMachine(7)
Globalni ID stroja stanja vraćenog objekta je
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¶
Dohvaća ili konfigurira IRQ na razini bloka za ovaj PIO.
handlerje povratni poziv koji se aktivira kada se zaključa bilo koji od zatraženih IRQ-ova strojeva stanja. Rukovatelj prima ovu instancuPIOkao jedini argument; unutar rukovatelja strojevi stanja koji su se aktivirali mogu se identificirati putemself.irq().flags()u kombinaciji (AND) s konstantamaIRQ_SM*.triggerje bitmaska jednog ili višeIRQ_SM0..IRQ_SM3. Zadano se aktivira na bilo kojem stroju stanja.hard=Trueregistrira rukovatelj tvrdim prekidom (bez alokacije gomile u povratnom pozivu).MicroPython veže IRQ 0 na svakom PIO bloku; IRQ 1 je rezerviran i nije dostupan iz Pythona.
Konstante¶
- IN_LOW: int¶
Proslijedite u
out_init/set_init/sideset_initodasm_pio()tako da pin započne kao ulaz vođen na nisku razinu (tj. tristate s izlaznim međuspremnikom koji drži 0).
- IN_HIGH: int¶
Proslijedite u
out_init/set_init/sideset_initodasm_pio()tako da pin započne kao ulaz s izlaznim međuspremnikom koji drži 1.
- OUT_LOW: int¶
Proslijedite u
out_init/set_init/sideset_initodasm_pio()tako da pin započne kao vođeni izlaz na logičkoj 0.
- OUT_HIGH: int¶
Proslijedite u
out_init/set_init/sideset_initodasm_pio()tako da pin započne kao vođeni izlaz na logičkoj 1.
- SHIFT_LEFT: int¶
Proslijedite u
in_shiftdir/out_shiftdirodasm_pio()iliStateMachine.init()tako da pomaci pomiču bitove prema MSB.
- SHIFT_RIGHT: int¶
Proslijedite u
in_shiftdir/out_shiftdirodasm_pio()iliStateMachine.init()tako da pomaci pomiču bitove prema LSB.
- JOIN_NONE: int¶
Proslijedite u
fifo_joinodasm_pio()tako da stroj stanja ima odvojene 4-riječne TX i RX FIFO-e (zadano).
- JOIN_TX: int¶
Proslijedite u
fifo_joinodasm_pio()tako da se TX FIFO udvostruči na 8 riječi apsorbiranjem RX FIFO-a. Stroj stanja više ne može primati podatke.