rp2 --- fungsionalitas khusus untuk RP2040

Modul rp2 berisi fungsi dan kelas yang khusus untuk RP2040, sebagaimana digunakan pada Raspberry Pi Pico.

Lihat RP2040 Python datasheet untuk informasi lebih lanjut, dan pico-micropython-examples untuk contoh kode.

Instruksi bahasa rakitan PIO

State machine PIO diprogram dalam bahasa rakitan khusus dengan sembilan instruksi mesin PIO inti. Dalam MicroPython, rutin rakitan PIO ditulis sebagai fungsi Python dengan dekorator @rp2.asm_pio(), dan menggunakan sintaks Python. Rutin tersebut mendukung variabel dan aritmatika Python standar, serta fungsi khusus berikut yang mengenkode instruksi PIO dan mengarahkan assembler. Lihat bagian 3.4 dari datasheet RP2040 untuk detail lebih lanjut.

wrap_target()

Tentukan lokasi di mana eksekusi dilanjutkan setelah program wrapping. Secara default ini adalah awal dari rutin PIO.

wrap()

Tentukan lokasi di mana program selesai dan melingkari kembali. Jika direktif ini tidak digunakan maka akan ditambahkan secara otomatis di akhir rutin PIO. Wrapping tidak memerlukan siklus eksekusi apa pun.

label(label)

Definisikan label bernama label di lokasi saat ini. label dapat berupa string atau integer.

word(instr, label=None)

Sisipkan word 16-bit sembarang dalam output yang dirakit.

  • instr: nilai 16-bit

  • label: jika diberikan, cari label dan lakukan logical-or nilai label dengan instr

jmp(...)

Instruksi ini mengambil dua bentuk:

jmp(label)
  • label: label untuk melompat tanpa syarat

jmp(cond, label)
  • cond: kondisi yang akan diperiksa, salah satu dari:

    • not_x, not_y: benar jika register bernilai nol

    • x_dec, y_dec: benar jika register bukan nol, dan lakukan post decrement

    • x_not_y: benar jika X tidak sama dengan Y

    • pin: benar jika pin input diset

    • not_osre: benar jika OSR tidak kosong (belum mencapai ambang batasnya)

  • label: label untuk melompat jika kondisi benar

wait(polarity, src, index)

Blokir, menunggu tinggi/rendah pada pin atau jalur IRQ.

  • polarity: 0 atau 1, apakah menunggu nilai rendah atau tinggi

  • src: salah satu dari: gpio (pin absolut), pin (pin relatif terhadap argumen in_base StateMachine), irq

  • index: 0-31, indeks untuk src

in_(src, bit_count)

Geser data masuk dari src ke ISR.

  • src: salah satu dari: pins, x, y, null, isr, osr

  • bit_count: jumlah bit yang digeser masuk (1-32)

out(dest, bit_count)

Geser data keluar dari OSR ke dest.

  • dest: salah satu dari: pins, x, y, pindirs, pc, isr, exec

  • bit_count: jumlah bit yang digeser keluar (1-32)

push(...)

Push ISR ke RX FIFO, lalu bersihkan ISR ke nol. Instruksi ini mengambil bentuk-bentuk berikut:

  • push()

  • push(block)

  • push(noblock)

  • push(iffull)

  • push(iffull, block)

  • push(iffull, noblock)

Jika block digunakan maka instruksi berhenti jika RX FIFO penuh. Defaultnya adalah memblokir. Jika iffull digunakan maka instruksi hanya push jika jumlah input shift telah mencapai ambang batasnya.

pull(...)

Pull dari TX FIFO ke OSR. Instruksi ini mengambil bentuk-bentuk berikut:

  • pull()

  • pull(block)

  • pull(noblock)

  • pull(ifempty)

  • pull(ifempty, block)

  • pull(ifempty, noblock)

Jika block digunakan maka instruksi berhenti jika TX FIFO kosong. Defaultnya adalah memblokir. Jika ifempty digunakan maka instruksi hanya pull jika jumlah output shift telah mencapai ambang batasnya.

mov(dest, src)

Pindahkan nilai dari src ke dest.

  • dest: salah satu dari: pins, x, y, exec, pc, isr, osr

  • src: salah satu dari: pins, x, y, null, status, isr, osr; argumen ini dapat dimodifikasi secara opsional dengan membungkusnya dalam invert() atau reverse() (tetapi tidak keduanya sekaligus)

irq(...)

Set atau bersihkan flag IRQ. Instruksi ini mengambil dua bentuk:

irq(index)
  • index: 0-7, atau rel(0) hingga rel(7)

irq(mode, index)
  • mode: salah satu dari: block, clear

  • index: 0-7, atau rel(0) hingga rel(7)

Jika block digunakan maka instruksi berhenti sampai flag dibersihkan oleh entitas lain. Jika clear digunakan maka flag dibersihkan alih-alih diset. Indeks IRQ relatif menambahkan ID state machine ke indeks IRQ dengan penambahan modulo-4. IRQ 0-3 terlihat dari prosesor, 4-7 bersifat internal untuk state machine.

set(dest, data)

Set dest dengan nilai data.

  • dest: pins, x, y, pindirs

  • data: nilai (0-31)

nop()

Ini adalah pseudoinstruksi yang dirakit menjadi mov(y, y) dan tidak memiliki efek samping.

.side(value)

Ini adalah modifier yang dapat diterapkan pada instruksi apa pun, dan digunakan untuk mengontrol nilai pin side-set.

  • value: nilai (bit) yang akan dikeluarkan pada pin side-set

.delay(value)

Ini adalah modifier yang dapat diterapkan pada instruksi apa pun, dan menentukan berapa banyak siklus yang harus ditunda setelah instruksi dieksekusi.

  • value: siklus untuk ditunda, 0-31 (nilai maksimum berkurang jika pin side-set digunakan)

[value]

Ini adalah modifier dan setara dengan .delay(value).

Kelas