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ğrux_dec,y_dec: yazmaç sıfır değilse doğru ve ardından sonradan azaltma (post decrement) yaparx_not_y: X, Y’ye eşit değilse doğrupin: giriş pini ayarlıysa doğrunot_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’inin_baseargümanına göreli pin),irqindex: 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,osrbit_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,execbit_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)
blockkullanılırsa, RX FIFO doluysa komut takılıp bekler. Varsayılan davranış bloke etmektir.iffullkullanı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)
blockkullanılırsa, TX FIFO boşsa komut takılıp bekler. Varsayılan davranış bloke etmektir.ifemptykullanı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,osrsrc: şunlardan biri:
pins,x,y,null,status,isr,osr; bu argüman isteğe bağlı olarakinvert()veyareverse()(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)ilerel(7)arası
- irq(mode, index)
mode: şunlardan biri:
block,clearindex: 0-7, veya
rel(0)ilerel(7)arası
blockkullanılırsa, bayrak başka bir varlık tarafından temizlenene kadar komut takılıp bekler.clearkullanı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,pindirsdata: 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.