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 kellonopeuttamachine.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_LEFTtaiPIO.SHIFT_RIGHT.out_shiftdir on suunta, johon OSR siirtää, joko
PIO.SHIFT_LEFTtaiPIO.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,HtaiIoleva taulukko, taibytearray.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.
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.