kelas StateMachine -- akses ke antarmuka I/O terprogram RP2040¶
Kelas StateMachine memberikan akses ke antarmuka PIO (programmable I/O) RP2040.
Untuk merakit program PIO, lihat rp2.asm_pio().
Konstruktor¶
- class rp2.StateMachine(id: int, program: Callable | None = None, *args, **kwargs)¶
Mendapatkan mesin status bernomor id. RP2040 memiliki dua instans PIO yang identik, masing-masing dengan 4 mesin status: sehingga ada 8 mesin status secara total, bernomor 0 hingga 7.
Opsional menginisialisasinya dengan program yang diberikan program: lihat
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¶
Mengonfigurasi instans mesin status untuk menjalankan program yang diberikan.
Program ditambahkan ke memori instruksi instans PIO ini. Jika memori instruksi sudah berisi program ini, maka offsetnya digunakan kembali untuk menghemat memori instruksi.
freq adalah frekuensi dalam Hz untuk menjalankan mesin status. Default ke frekuensi clock sistem.
Pembagi clock dihitung sebagai
system clock frequency / freq, sehingga mungkin ada sedikit kesalahan pembulatan.Pembagi clock minimum yang mungkin adalah satu per 65536 dari clock sistem: jadi pada frekuensi clock sistem default 125MHz, nilai minimum freq adalah
1908. Untuk menjalankan mesin status pada frekuensi lebih lambat, Anda perlu mengurangi kecepatan clock sistem denganmachine.freq().in_base adalah pin pertama yang digunakan untuk instruksi
in().out_base adalah pin pertama yang digunakan untuk instruksi
out().set_base adalah pin pertama yang digunakan untuk instruksi
set().jmp_pin adalah pin pertama yang digunakan untuk instruksi
jmp(pin, ...).sideset_base adalah pin pertama yang digunakan untuk side-setting.
in_shiftdir adalah arah pergeseran ISR, baik
PIO.SHIFT_LEFTatauPIO.SHIFT_RIGHT.out_shiftdir adalah arah pergeseran OSR, baik
PIO.SHIFT_LEFTatauPIO.SHIFT_RIGHT.push_thresh adalah ambang batas dalam bit sebelum auto-push atau re-push kondisional dipicu.
pull_thresh adalah ambang batas dalam bit sebelum auto-pull atau re-pull kondisional dipicu.
Catatan: pin yang digunakan untuk in_base perlu dikonfigurasi secara manual untuk input (atau lainnya) agar PIO dapat melihat sinyal yang diinginkan (bisa berupa pin input, pin output, atau terhubung ke periferal berbeda). jmp_pin juga dapat dikonfigurasi secara manual, tetapi secara default akan menjadi pin input.
- active(value: bool | int | None = None, /) bool¶
Mendapatkan atau mengatur apakah mesin status sedang berjalan.
>>> sm.active() True >>> sm.active(0) False
- restart() None¶
Memulai ulang mesin status dan melompat ke awal program.
Metode ini mengosongkan status internal mesin status menggunakan register
SM_RESTARTRP2040. Ini meliputi:penghitung pergeseran input dan output
isi dari register pergeseran input
penghitung penundaan
status menunggu-pada-IRQ
instruksi yang terhenti dijalankan menggunakan
StateMachine.exec()
- exec(instr: str | int) None¶
Mengeksekusi satu instruksi PIO.
Jika instr adalah string maka menggunakan
asm_pio_encodeuntuk mengenkode instruksi dari string yang diberikan.>>> sm.exec("set(0, 1)")Jika instr adalah integer maka diperlakukan sebagai instruksi kode mesin PIO yang sudah dikodekan untuk dieksekusi.
>>> sm.exec(rp2.asm_pio_encode("out(y, 8)", 0))
- get(buf: 'bytearray | array | None' = None, shift: int = 0) int¶
Menarik sebuah kata dari RX FIFO mesin status.
Jika FIFO kosong, ia memblokir hingga data tiba (yaitu mesin status mendorong sebuah kata).
Nilai digeser ke kanan sebesar bit shift sebelum dikembalikan, yaitu nilai kembalian adalah
word >> shift.
- put(value: 'int | bytes | bytearray | array', shift: int = 0) None¶
Mendorong kata-kata ke TX FIFO mesin status.
value dapat berupa integer, array bertipe
B,HatauI, atau sebuahbytearray.Metode ini akan memblokir hingga semua kata telah ditulis ke FIFO. Jika FIFO penuh atau menjadi penuh, metode akan memblokir hingga mesin status menarik cukup kata untuk menyelesaikan penulisan.
Setiap kata pertama digeser ke kiri sebesar bit shift, yaitu mesin status menerima
word << shift.
- rx_fifo() int¶
Mengembalikan jumlah kata dalam RX FIFO mesin status. Nilai 0 menunjukkan FIFO kosong.
Berguna untuk memeriksa apakah data sedang menunggu untuk dibaca, sebelum memanggil
StateMachine.get().
- tx_fifo() int¶
Mengembalikan jumlah kata dalam TX FIFO mesin status. Nilai 0 menunjukkan FIFO kosong.
Berguna untuk memeriksa apakah ada ruang untuk mendorong kata lain menggunakan
StateMachine.put().
Protokol buffer¶
Kelas StateMachine mendukung protokol buffer, yang memungkinkan akses langsung ke FIFO kirim dan terima untuk setiap state machine. Ini terutama untuk memungkinkan objek StateMachine diteruskan langsung sebagai parameter baca atau tulis saat mengonfigurasi saluran rp2.DMA().