kelas PIO -- penggunaan PIO tingkat lanjut¶
Kelas PIO membungkus salah satu dari dua blok Programmable I/O (PIO) RP2040. Setiap blok PIO berisi memori instruksi (32 instruksi) yang digunakan bersama oleh empat mesin status independen, ditambah antarmuka FIFO privat ke setiap mesin status dan sebuah kontroler IRQ.
Sebagian besar skrip berinteraksi dengan PIO melalui StateMachine -- kelas ini untuk kasus penggunaan tingkat lanjut yang perlu:
Memuat dan menghapus program secara eksplisit melalui
add_program()/remove_program().Memindahkan basis GPIO PIO melintasi jendela 32-pin chip melalui
gpio_base().Menghubungkan ke flag IRQ tingkat blok melalui
irq().
Untuk merakit program PIO lihat rp2.asm_pio().
Konstruktor¶
- class rp2.PIO(id: int)¶
Mengembalikan objek
PIOsingleton untuk blok PIO yang diidentifikasi olehid. RP2040 memiliki dua blok PIO, bernomor0dan1. MemunculkanValueErroruntuk id lainnya.Metode¶
- gpio_base(base: machine.Pin | int | None = None, /) int¶
Mendapatkan atau mengatur basis GPIO untuk blok PIO ini.
PIO RP2040 melihat jendela 32-pin ke dalam ruang GPIO; jendela dapat dimulai dari GPIO0 atau GPIO16. Basis mengontrol jendela mana yang berlaku untuk semua mesin status pada PIO ini.
Tanpa argumen, mengembalikan basis saat ini (nomor pin GPIO,
0atau16).Dengan argumen, mengatur basis.
basedapat berupa instansmachine.Pinatau nomor pin integer, dan harus mengarah ke GPIO0 atau GPIO16. Basis harus diatur sebelum program apa pun ditambahkan atau mesin status dibuat pada blok PIO ini.
- add_program(program: Callable) None¶
Memuat
programke dalam memori instruksi PIO ini. Tata letak memori yang dihasilkan digunakan kembali di semua mesin status pada blok PIO ini.Setiap PIO hanya memiliki 32 instruksi memori program yang digunakan bersama di semua program; jika program baru tidak muat, metode ini memunculkan
OSError(ENOMEM). Program yang sama dapat dimuat ke kedua instans PIO, tetapi mereka menggunakan wilayah memori yang terpisah.
- remove_program(program: Callable | None = None, /) None¶
Menghapus
programdari memori instruksi PIO ini, membebaskan ruang untuk program baru. Jikaprogramdihilangkan, setiap program yang saat ini dimuat pada PIO ini dihapus.Menghapus program yang belum dimuat adalah no-op (tidak ada pengecualian).
- state_machine(id: int, program: Callable | None = None, *args, **kwargs) StateMachine¶
Mengembalikan salah satu dari empat instans
StateMachineyang dimiliki oleh blok PIO ini.idadalah indeks mesin status lokal (0--3).Jika
programdisediakan, mesin status dikonfigurasi untuk menjalankannya -- semua argumen posisional/kata kunci diteruskan keStateMachine.init().Contoh:
>>> rp2.PIO(1).state_machine(3) StateMachine(7)
ID mesin status global objek yang dikembalikan adalah
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¶
Mendapatkan atau mengonfigurasi IRQ tingkat blok untuk PIO ini.
handleradalah callback yang dipicu ketika salah satu IRQ mesin status yang diminta terkunci. Handler menerima instansPIOini sebagai satu-satunya argumennya; di dalam handler, mesin status yang memicu dapat diidentifikasi melaluiself.irq().flags()yang di-AND dengan konstantaIRQ_SM*.triggeradalah bitmask dari satu atau lebihIRQ_SM0..IRQ_SM3. Default dipicu pada mesin status mana pun.hard=Truemendaftarkan handler interupsi keras (tidak ada alokasi heap dalam callback).MicroPython mengikat IRQ 0 pada setiap blok PIO; IRQ 1 dicadangkan dan tidak dapat diakses dari Python.
Konstanta¶
- IN_LOW: int¶
Teruskan ke
out_init/set_init/sideset_initdariasm_pio()agar pin dimulai sebagai input yang dikendalikan rendah (yaitu tristate dengan buffer output menahan 0).
- IN_HIGH: int¶
Teruskan ke
out_init/set_init/sideset_initdariasm_pio()agar pin dimulai sebagai input dengan buffer output menahan 1.
- OUT_LOW: int¶
Teruskan ke
out_init/set_init/sideset_initdariasm_pio()agar pin dimulai sebagai output yang dikemudikan pada logika 0.
- OUT_HIGH: int¶
Teruskan ke
out_init/set_init/sideset_initdariasm_pio()agar pin dimulai sebagai output yang dikemudikan pada logika 1.
- SHIFT_LEFT: int¶
Teruskan ke
in_shiftdir/out_shiftdirdariasm_pio()atauStateMachine.init()agar pergeseran memindahkan bit ke arah MSB.
- SHIFT_RIGHT: int¶
Teruskan ke
in_shiftdir/out_shiftdirdariasm_pio()atauStateMachine.init()agar pergeseran memindahkan bit ke arah LSB.
- JOIN_NONE: int¶
Teruskan ke
fifo_joindariasm_pio()agar mesin status memiliki TX dan RX FIFO 4-kata terpisah (default).
- JOIN_TX: int¶
Teruskan ke
fifo_joindariasm_pio()agar TX FIFO digandakan menjadi 8 kata dengan menyerap RX FIFO. Mesin status tidak dapat lagi menerima data.