klasa StateMachine – pristup programabilnom ulazno/izlaznom sučelju RP2040¶
Klasa StateMachine omogućuje pristup PIO (programabilnom ulazu/izlazu) sučelju RP2040.
Za sastavljanje PIO programa pogledajte rp2.asm_pio().
Konstruktori¶
- class rp2.StateMachine(id: int, program: Callable | None = None, *args, **kwargs)¶
Dohvaća stroj stanja označen s id. RP2040 ima dvije identične PIO instance, svaku s 4 stroja stanja: dakle ukupno postoji 8 strojeva stanja, označenih od 0 do 7.
Po želji ga inicijalizirajte zadanim programom program: pogledajte
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¶
Konfigurira instancu stroja stanja za pokretanje zadanog programa program.
Program se dodaje u memoriju instrukcija ove PIO instance. Ako memorija instrukcija već sadrži ovaj program, njegov se odmak ponovno koristi kako bi se uštedjelo na memoriji instrukcija.
freq je frekvencija u Hz na kojoj će se pokrenuti stroj stanja. Zadano je na frekvenciju sistemskog takta.
Djelitelj takta računa se kao
system clock frequency / freq, pa može doći do manjih pogrešaka zaokruživanja.Najmanji mogući djelitelj takta je 65536-ina sistemskog takta: tako da je pri zadanoj frekvenciji sistemskog takta od 125MHz najmanja vrijednost freq
1908. Za pokretanje strojeva stanja na sporijim frekvencijama morat ćete smanjiti brzinu sistemskog takta smachine.freq().in_base je prvi pin koji se koristi za instrukcije
in().out_base je prvi pin koji se koristi za instrukcije
out().set_base je prvi pin koji se koristi za instrukcije
set().jmp_pin je prvi pin koji se koristi za instrukcije
jmp(pin, ...).sideset_base je prvi pin koji se koristi za side-setting.
in_shiftdir je smjer u kojem će ISR pomicati, ili
PIO.SHIFT_LEFTiliPIO.SHIFT_RIGHT.out_shiftdir je smjer u kojem će OSR pomicati, ili
PIO.SHIFT_LEFTiliPIO.SHIFT_RIGHT.push_thresh je prag u bitovima prije nego se aktivira automatsko guranje (push) ili uvjetno ponovno guranje.
pull_thresh je prag u bitovima prije nego se aktivira automatsko povlačenje (pull) ili uvjetno ponovno povlačenje.
Napomena: pinovi koji se koriste za in_base moraju se ručno konfigurirati za ulaz (ili drugačije) kako bi PIO mogao vidjeti željeni signal (mogu biti ulazni pinovi, izlazni pinovi ili spojeni na drugu periferiju). jmp_pin se također može ručno konfigurirati, no zadano će biti ulazni pin.
- active(value: bool | int | None = None, /) bool¶
Dohvaća ili postavlja je li stroj stanja trenutno pokrenut.
>>> sm.active() True >>> sm.active(0) False
- restart() None¶
Ponovno pokreće stroj stanja i skače na početak programa.
Ova metoda briše unutarnje stanje stroja stanja koristeći registar
SM_RESTARTRP2040. To uključuje:brojače ulaznog i izlaznog pomaka
sadržaj ulaznog posmačnog registra
brojač kašnjenja
stanje čekanja na IRQ
zaustavljenu instrukciju pokrenutu pomoću
StateMachine.exec()
- exec(instr: str | int) None¶
Izvršava jednu PIO instrukciju.
Ako je instr niz, tada koristi
asm_pio_encodeza kodiranje instrukcije iz zadanog niza.>>> sm.exec("set(0, 1)")Ako je instr cijeli broj, tada se tretira kao već kodirana instrukcija strojnog koda PIO-a koja se izvršava.
>>> sm.exec(rp2.asm_pio_encode("out(y, 8)", 0))
- get(buf: 'bytearray | array | None' = None, shift: int = 0) int¶
Povlači riječ iz RX FIFO-a stroja stanja.
Ako je FIFO prazan, blokira dok podaci ne stignu (tj. dok stroj stanja ne gurne riječ).
Vrijednost se pomiče udesno za shift bitova prije vraćanja, tj. povratna vrijednost je
word >> shift.
- put(value: 'int | bytes | bytearray | array', shift: int = 0) None¶
Gura riječi u TX FIFO stroja stanja.
value može biti cijeli broj, polje tipa
B,HiliI, ilibytearray.Ova metoda će blokirati dok sve riječi ne budu zapisane u FIFO. Ako je FIFO pun ili postane pun, metoda će blokirati dok stroj stanja ne povuče dovoljno riječi da dovrši zapisivanje.
Svaka riječ se najprije pomiče ulijevo za shift bitova, tj. stroj stanja prima
word << shift.
- rx_fifo() int¶
Vraća broj riječi u RX FIFO-u stroja stanja. Vrijednost 0 označava da je FIFO prazan.
Korisno za provjeru čekaju li podaci na čitanje, prije poziva
StateMachine.get().
- tx_fifo() int¶
Vraća broj riječi u TX FIFO-u stroja stanja. Vrijednost 0 označava da je FIFO prazan.
Korisno za provjeru ima li mjesta za guranje još jedne riječi pomoću
StateMachine.put().
Protokol međuspremnika¶
Klasa StateMachine podržava buffer protocol, omogućujući izravan pristup odašiljačkim i prijemnim FIFO-ima za svaki stroj stanja. To je prvenstveno radi omogućavanja da se objekti StateMachine proslijede izravno kao parametri čitanja ili pisanja pri konfiguriranju rp2.DMA() kanala.