class StateMachine – pääsy RP2040:n ohjelmoitavaan I/O-rajapintaan

StateMachine-luokka antaa pääsyn RP2040:n PIO-rajapintaan (ohjelmoitava I/O).

PIO-ohjelmien kokoamisesta katso rp2.asm_pio().

Konstruktorit

class rp2.StateMachine(id: int, program: Callable | None = None, *args, **kwargs)

Hakee numerolla id yksilöidyn tilakoneen. RP2040:ssä on kaksi identtistä PIO-instanssia, kummassakin 4 tilakonetta: tilakoneita on siis yhteensä 8, numeroitu 0:sta 7:ään.

Valinnaisesti alusta se annetulla ohjelmalla program: katso StateMachine.init.

init(program: Callable, freq: int = -1, *, in_base: machine.Pin | None = None, out_base: machine.Pin | None = None, set_base: machine.Pin | None = None, jmp_pin: machine.Pin | None = None, sideset_base: machine.Pin | None = None, in_shiftdir: int | None = None, out_shiftdir: int | None = None, push_thresh: int | None = None, pull_thresh: int | None = None) None

Konfiguroi tilakoneinstanssin suorittamaan annetun ohjelman program.

Ohjelma lisätään tämän PIO-instanssin käskymuistiin. Jos käskymuisti sisältää jo tämän ohjelman, sen siirtymä käytetään uudelleen käskymuistin säästämiseksi.

  • freq on taajuus hertseinä, jolla tilakone suoritetaan. Oletuksena järjestelmän kellotaajuus.

    Kellojakaja lasketaan kaavalla system clock frequency / freq, joten pieniä pyöristysvirheitä voi esiintyä.

    Pienin mahdollinen kellojakaja on yksi 65536-osa järjestelmäkellosta: oletusjärjestelmäkellotaajuudella 125MHz pienin freq-arvo on siis 1908. Suorittaaksesi tilakoneita hitaammilla taajuuksilla sinun on pienennettävä järjestelmän kellonopeutta machine.freq() -funktiolla.

  • in_base on ensimmäinen nasta, jota käytetään in() -käskyihin.

  • out_base on ensimmäinen nasta, jota käytetään out() -käskyihin.

  • set_base on ensimmäinen nasta, jota käytetään set() -käskyihin.

  • jmp_pin on ensimmäinen nasta, jota käytetään jmp(pin, ...) -käskyihin.

  • sideset_base on ensimmäinen nasta, jota käytetään side-set-asetukseen.

  • in_shiftdir on suunta, johon ISR siirtää, joko PIO.SHIFT_LEFT tai PIO.SHIFT_RIGHT.

  • out_shiftdir on suunta, johon OSR siirtää, joko PIO.SHIFT_LEFT tai PIO.SHIFT_RIGHT.

  • push_thresh on kynnysarvo bitteinä, ennen kuin automaattinen push tai ehdollinen uudelleen-push laukaistaan.

  • pull_thresh on kynnysarvo bitteinä, ennen kuin automaattinen pull tai ehdollinen uudelleen-pull laukaistaan.

Huomaa: in_base -arvoon käytettävät nastat on konfiguroitava käsin tuloksi (tai muuksi), jotta PIO näkee halutun signaalin (ne voivat olla tulonastoja, lähtönastoja tai yhdistettynä eri oheislaitteeseen). Myös jmp_pin voidaan konfiguroida käsin, mutta oletuksena se on tulonasta.

active(value: bool | int | None = None, /) bool

Hakee tai asettaa, onko tilakone parhaillaan käynnissä.

>>> sm.active()
True
>>> sm.active(0)
False
restart() None

Käynnistää tilakoneen uudelleen ja hyppää ohjelman alkuun.

Tämä metodi tyhjentää tilakoneen sisäisen tilan RP2040:n SM_RESTART -rekisterin avulla. Tähän sisältyvät:

  • tulo- ja lähtösiirtolaskurit

  • tulosiirtorekisterin sisältö

  • viivelaskuri

  • IRQ:ta odottava tila

  • StateMachine.exec() -metodilla suoritettu pysähtynyt käsky

exec(instr: str | int) None

Suorittaa yhden PIO-käskyn.

Jos instr on merkkijono, käyttää asm_pio_encode -funktiota käskyn koodaamiseen annetusta merkkijonosta.

>>> sm.exec("set(0, 1)")

Jos instr on kokonaisluku, sitä käsitellään jo koodattuna PIO-konekoodikäskynä, joka suoritetaan.

>>> sm.exec(rp2.asm_pio_encode("out(y, 8)", 0))
get(buf: 'bytearray | array | None' = None, shift: int = 0) int

Vetää sanan tilakoneen RX-FIFO:sta.

Jos FIFO on tyhjä, se estyy kunnes dataa saapuu (ts. tilakone työntää sanan).

Arvoa siirretään oikealle shift bitin verran ennen palautusta, ts. paluuarvo on word >> shift.

put(value: 'int | bytes | bytearray | array', shift: int = 0) None

Työntää sanoja tilakoneen TX-FIFO:hon.

value voi olla kokonaisluku, tyyppiä B, H tai I oleva taulukko, tai bytearray.

Tämä metodi estyy, kunnes kaikki sanat on kirjoitettu FIFO:hon. Jos FIFO on täynnä tai tulee täyteen, metodi estyy, kunnes tilakone vetää tarpeeksi sanoja kirjoituksen loppuun saattamiseksi.

Jokaista sanaa siirretään ensin vasemmalle shift bitin verran, ts. tilakone vastaanottaa word << shift.

rx_fifo() int

Palauttaa tilakoneen RX-FIFO:ssa olevien sanojen määrän. Arvo 0 tarkoittaa, että FIFO on tyhjä.

Hyödyllinen tarkistettaessa, odottaako dataa lukemista, ennen StateMachine.get() -metodin kutsumista.

tx_fifo() int

Palauttaa tilakoneen TX-FIFO:ssa olevien sanojen määrän. Arvo 0 tarkoittaa, että FIFO on tyhjä.

Hyödyllinen tarkistettaessa, onko tilaa työntää toinen sana StateMachine.put() -metodilla.

irq(handler: Callable[[StateMachine], None] | None = None, trigger: int = 0 | 1, hard: bool = False) Callable

Palauttaa annetun StateMachinen IRQ-olion.

Konfiguroi se valinnaisesti.

Puskuriprotokolla

StateMachine-luokka tukee buffer protocol -protokollaa, mikä mahdollistaa suoran pääsyn kunkin tilakoneen lähetys- ja vastaanotto-FIFO:ihin. Tämä on ensisijaisesti sitä varten, että StateMachine-oliot voidaan antaa suoraan luku- tai kirjoitusparametreina rp2.DMA() -kanavaa konfiguroitaessa.