class PIO – edistynyt PIO-käyttö¶
PIO-luokka kapseloi yhden RP2040:n kahdesta ohjelmoitavasta I/O-lohkosta (PIO). Jokainen PIO-lohko sisältää käskymuistin (32 käskyä), joka on jaettu neljän itsenäisen tilakoneen kesken, sekä yksityisen FIFO-rajapinnan kuhunkin tilakoneeseen ja IRQ-ohjaimen.
Useimmat skriptit ovat vuorovaikutuksessa PIO:n kanssa StateMachine -luokan kautta – tämä luokka on tarkoitettu edistyneisiin käyttötapauksiin, joissa täytyy:
Ladata ja poistaa ohjelmia eksplisiittisesti
add_program()/remove_program()-metodien avulla.Siirtää PIO:n GPIO-perustaa piirin 32-nastaisessa ikkunassa
gpio_base()-metodilla.Kytkeytyä lohkonlaajuisiin IRQ-lippuihin
irq()-metodin kautta.
PIO-ohjelmien kokoamisesta katso rp2.asm_pio().
Konstruktorit¶
- class rp2.PIO(id: int)¶
Palauttaa singleton-tyyppisen
PIO-olionid-tunnisteella määritetylle PIO-lohkolle. RP2040:ssä on kaksi PIO-lohkoa, numeroitu0ja1. NostaaValueError-poikkeuksen muilla tunnisteilla.Metodit¶
- gpio_base(base: machine.Pin | int | None = None, /) int¶
Hakee tai asettaa tämän PIO-lohkon GPIO-perustan.
RP2040:n PIO näkee 32-nastaisen ikkunan GPIO-avaruuteen; ikkuna voi alkaa GPIO0:sta tai GPIO16:sta. Perusta määrää, mikä ikkuna on voimassa kaikille tämän PIO:n tilakoneille.
Ilman argumenttia palauttaa nykyisen perustan (GPIO-nastan numeron,
0tai16).Argumentin kanssa asettaa perustan.
basevoi ollamachine.Pin-instanssi tai kokonaislukuna ilmaistu nastan numero, ja sen on vastattava GPIO0:aa tai GPIO16:ta. Perusta on asetettava ennen kuin tähän PIO-lohkoon lisätään mitään ohjelmaa tai luodaan tilakone.
- add_program(program: Callable) None¶
Lataa
programtämän PIO:n käskymuistiin. Tuloksena syntyvä muistiasettelu käytetään uudelleen kaikkien tämän PIO-lohkon tilakoneiden kesken.Kullakin PIO:lla on vain 32 käskyn verran ohjelmamuistia jaettuna kaikkien ohjelmien kesken; jos uusi ohjelma ei mahdu, tämä metodi nostaa
OSError(ENOMEM)-poikkeuksen. Sama ohjelma voidaan ladata molempiin PIO-instansseihin, mutta ne kuluttavat erilliset muistialueet.
- remove_program(program: Callable | None = None, /) None¶
Poistaa
program-ohjelman tämän PIO:n käskymuistista vapauttaen tilaa uusille ohjelmille. Josprogramjätetään pois, kaikki tähän PIO:hon parhaillaan ladatut ohjelmat poistetaan.Sellaisen ohjelman poistaminen, jota ei ollut ladattu, on tyhjä operaatio (ei poikkeusta).
- state_machine(id: int, program: Callable | None = None, *args, **kwargs) StateMachine¶
Palauttaa yhden tämän PIO-lohkon neljästä
StateMachine-instanssista.idon paikallinen tilakoneindeksi (0–3).Jos
programannetaan, tilakone konfiguroidaan suorittamaan se – kaikki positionaaliset/avainsana-argumentit välitetäänStateMachine.init()-metodille.Esimerkki:
>>> rp2.PIO(1).state_machine(3) StateMachine(7)
Palautetun olion globaali tilakonetunniste on
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¶
Hakee tai konfiguroi tämän PIO:n lohkotason IRQ:n.
handleron takaisinkutsu, joka laukaistaan, kun mikä tahansa pyydetyistä tilakoneiden IRQ:ista lukittuu. Käsittelijä saa ainoana argumenttinaan tämänPIO-instanssin; käsittelijän sisällä laukaisevat tilakoneet voidaan tunnistaaself.irq().flags()-arvolla, joka AND-yhdistetäänIRQ_SM*-vakioiden kanssa.triggeron bittimaski yhdestä tai useammasta arvostaIRQ_SM0..IRQ_SM3. Oletuksena laukeaa minkä tahansa tilakoneen kohdalla.hard=Truerekisteröi kovan keskeytyksen käsittelijän (ei kekoallokointia takaisinkutsussa).MicroPython sitoo IRQ 0:n kuhunkin PIO-lohkoon; IRQ 1 on varattu eikä siihen pääse Pythonista.
Vakiot¶
- IN_LOW: int¶
Anna
asm_pio()-funktion parametreilleout_init/set_init/sideset_init, jolloin nasta alkaa alas vedettynä tulona (ts. kolmitilainen lähtöpuskurin pitäessä arvoa 0).
- IN_HIGH: int¶
Anna
asm_pio()-funktion parametreilleout_init/set_init/sideset_init, jolloin nasta alkaa tulona lähtöpuskurin pitäessä arvoa 1.
- OUT_LOW: int¶
Anna
asm_pio()-funktion parametreilleout_init/set_init/sideset_init, jolloin nasta alkaa ohjattuna lähtönä loogisella arvolla 0.
- OUT_HIGH: int¶
Anna
asm_pio()-funktion parametreilleout_init/set_init/sideset_init, jolloin nasta alkaa ohjattuna lähtönä loogisella arvolla 1.
- SHIFT_LEFT: int¶
Anna
asm_pio()-funktion taiStateMachine.init()-metodin parametreillein_shiftdir/out_shiftdir, jolloin siirrot siirtävät bittejä kohti MSB:tä.
- SHIFT_RIGHT: int¶
Anna
asm_pio()-funktion taiStateMachine.init()-metodin parametreillein_shiftdir/out_shiftdir, jolloin siirrot siirtävät bittejä kohti LSB:tä.
- JOIN_NONE: int¶
Anna
asm_pio()-funktion parametrillefifo_join, jolloin tilakoneella on erilliset 4 sanan TX- ja RX-FIFO:t (oletus).
- JOIN_TX: int¶
Anna
asm_pio()-funktion parametrillefifo_join, jolloin TX-FIFO kaksinkertaistetaan 8 sanaan absorboimalla RX-FIFO. Tilakone ei voi enää vastaanottaa dataa.