rp2 — RP2040’a özgü işlevsellik

rp2 modülü, Raspberry Pi Pico’da kullanıldığı şekliyle RP2040’a özgü fonksiyonları ve sınıfları içerir.

Daha fazla bilgi için RP2040 Python veri sayfasına ve örnek kod için pico-micropython-examples kaynağına bakın.

PIO assembly dili komutları

PIO durum makineleri, dokuz çekirdek PIO makinesi komutu içeren özel bir assembly dilinde programlanır. MicroPython’da PIO assembly rutinleri, @rp2.asm_pio() dekoratörüne sahip bir Python fonksiyonu olarak yazılır ve Python söz dizimini kullanırlar. Bu tür rutinler standart Python değişkenlerini ve aritmetiğini, ayrıca PIO komutlarını kodlayan ve assembler’a yön veren aşağıdaki özel fonksiyonları destekler. Daha fazla ayrıntı için RP2040 veri sayfasının 3.4 numaralı bölümüne bakın.

wrap_target()

Program sarması (wrapping) sonrasında yürütmenin devam ettiği konumu belirtir. Varsayılan olarak bu, PIO rutininin başlangıcıdır.

wrap()

Programın bittiği ve etrafına sarıldığı (wrap) konumu belirtir. Bu yönerge kullanılmazsa, PIO rutininin sonuna otomatik olarak eklenir. Sarma (wrapping) herhangi bir yürütme döngüsüne mal olmaz.

label(label)

Geçerli konumda label adlı bir etiket tanımlar. label bir dize veya tam sayı olabilir.

word(instr, label=None)

Birleştirilmiş (assembled) çıktıya keyfi bir 16 bitlik sözcük ekler.

  • instr: 16 bitlik değer

  • label: verilmişse, etiketi arar ve etiketin değerini instr ile mantıksal-veya (logical-or) işlemine tabi tutar

jmp(…)

Bu komut iki biçim alır:

jmp(label)
  • label: koşulsuz olarak atlanacak etiket

jmp(cond, label)
  • cond: kontrol edilecek koşul, şunlardan biri:

    • not_x, not_y: yazmaç sıfırsa doğru

    • x_dec, y_dec: yazmaç sıfır değilse doğru ve ardından sonradan azaltma (post decrement) yapar

    • x_not_y: X, Y’ye eşit değilse doğru

    • pin: giriş pini ayarlıysa doğru

    • not_osre: OSR boş değilse (eşiğine ulaşmamışsa) doğru

  • label: koşul doğruysa atlanacak etiket

wait(polarity, src, index)

Bir pin veya IRQ hattında yüksek/düşük durumu bekleyerek bloke eder.

  • polarity: 0 veya 1; düşük mü yoksa yüksek bir değer mi bekleneceği

  • src: şunlardan biri: gpio (mutlak pin), pin (StateMachine’in in_base argümanına göreli pin), irq

  • index: 0-31, src için indeks

in_(src, bit_count)

src kaynağından ISR’ye veri kaydırır.

  • src: şunlardan biri: pins, x, y, null, isr, osr

  • bit_count: kaydırılacak bit sayısı (1-32)

out(dest, bit_count)

OSR’den dest hedefine veri kaydırır.

  • dest: şunlardan biri: pins, x, y, pindirs, pc, isr, exec

  • bit_count: kaydırılacak bit sayısı (1-32)

push(…)

ISR’yi RX FIFO’ya gönderir, ardından ISR’yi sıfıra temizler. Bu komut aşağıdaki biçimleri alır:

  • push()

  • push(block)

  • push(noblock)

  • push(iffull)

  • push(iffull, block)

  • push(iffull, noblock)

block kullanılırsa, RX FIFO doluysa komut takılıp bekler. Varsayılan davranış bloke etmektir. iffull kullanılırsa, yalnızca giriş kaydırma sayacı eşiğine ulaştığında gönderim yapar.

pull(…)

TX FIFO’dan OSR’ye çeker. Bu komut aşağıdaki biçimleri alır:

  • pull()

  • pull(block)

  • pull(noblock)

  • pull(ifempty)

  • pull(ifempty, block)

  • pull(ifempty, noblock)

block kullanılırsa, TX FIFO boşsa komut takılıp bekler. Varsayılan davranış bloke etmektir. ifempty kullanılırsa, yalnızca çıkış kaydırma sayacı eşiğine ulaştığında çekim yapar.

mov(dest, src)

src kaynağındaki değeri dest hedefine taşır.

  • dest: şunlardan biri: pins, x, y, exec, pc, isr, osr

  • src: şunlardan biri: pins, x, y, null, status, isr, osr; bu argüman isteğe bağlı olarak invert() veya reverse() (ancak ikisi birlikte değil) ile sarılarak değiştirilebilir

irq(…)

Bir IRQ bayrağını ayarlar veya temizler. Bu komut iki biçim alır:

irq(index)
  • index: 0-7, veya rel(0) ile rel(7) arası

irq(mode, index)
  • mode: şunlardan biri: block, clear

  • index: 0-7, veya rel(0) ile rel(7) arası

block kullanılırsa, bayrak başka bir varlık tarafından temizlenene kadar komut takılıp bekler. clear kullanılırsa, bayrak ayarlanmak yerine temizlenir. Göreli IRQ indeksleri, durum makinesi ID’sini modulo-4 toplama ile IRQ indeksine ekler. 0-3 IRQ’ları işlemciden görünür, 4-7 ise durum makinelerine dahilidir.

set(dest, data)

dest hedefini data değeriyle ayarlar.

  • dest: pins, x, y, pindirs

  • data: değer (0-31)

nop()

Bu, mov(y, y) olarak birleştirilen (assemble) ve hiçbir yan etkisi olmayan bir sözde komuttur (pseudoinstruction).

.side(value)

Bu, herhangi bir komuta uygulanabilen ve side-set pin değerlerini kontrol etmek için kullanılan bir değiştiricidir.

  • value: side-set pinlerinde çıkışa verilecek değer (bitler)

.delay(value)

Bu, herhangi bir komuta uygulanabilen ve komut yürütüldükten sonra kaç döngü gecikileceğini belirten bir değiştiricidir.

  • value: gecikilecek döngü sayısı, 0-31 (side-set pinleri kullanılıyorsa maksimum değer azalır)

[value]

Bu bir değiştiricidir ve .delay(value) ile eşdeğerdir.

Sınıflar