rp2 — az RP2040-re jellemző funkciók¶
Az rp2 modul az RP2040-re jellemző függvényeket és osztályokat tartalmazza, ahogyan azokat a Raspberry Pi Pico használja.
További információkért lásd az RP2040 Python adatlapot, példakódért pedig a pico-micropython-examples tárolót.
PIO assembly nyelvi utasítások¶
A PIO állapotgépeket egy egyedi assembly nyelven programozzák, kilenc alapvető PIO-gép utasítással. A MicroPythonban a PIO assembly rutinokat Python-függvényként írják meg az @rp2.asm_pio() dekorátorral, és Python-szintaxist használnak. Az ilyen rutinok támogatják a szokásos Python-változókat és aritmetikát, valamint a következő egyedi függvényeket, amelyek PIO-utasításokat kódolnak és irányítják az assemblert. További részletekért lásd az RP2040 adatlap 3.4. szakaszát.
- wrap_target()
Megadja azt a helyet, ahol a végrehajtás a program körbefordulása után folytatódik. Alapértelmezés szerint ez a PIO-rutin eleje.
- wrap()
Megadja azt a helyet, ahol a program befejeződik és körbefordul. Ha ezt az utasítást nem használja, akkor automatikusan hozzáadódik a PIO-rutin végén. A körbefordulás nem igényel végrehajtási ciklusokat.
- label(label)
Definiál egy label nevű címkét az aktuális helyen. A label lehet karakterlánc vagy egész szám.
- word(instr, label=None)
Beilleszt egy tetszőleges 16 bites szót a lefordított kimenetbe.
instr: a 16 bites érték
label: ha meg van adva, megkeresi a címkét és logikai VAGY műveletet végez a címke értéke és az instr között
- jmp(…)
Ennek az utasításnak két formája van:
- jmp(label)
label: a címke, amelyre feltétel nélkül ugrik
- jmp(cond, label)
cond: az ellenőrizendő feltétel, az egyik a következők közül:
not_x,not_y: igaz, ha a regiszter nullax_dec,y_dec: igaz, ha a regiszter nem nulla, és utólagos dekrementálást végezx_not_y: igaz, ha X nem egyenlő Y-nalpin: igaz, ha a bemeneti láb be van állítvanot_osre: igaz, ha az OSR nem üres (nem érte el a küszöbértékét)
label: a címke, amelyre ugrik, ha a feltétel igaz
- wait(polarity, src, index)
Blokkolás, várakozás egy láb vagy IRQ-vonal magas/alacsony állapotára.
polarity: 0 vagy 1, hogy alacsony vagy magas értékre várjon-e
src: az egyik a következők közül:
gpio(abszolút láb),pin(a StateMachinein_baseargumentumához viszonyított láb),irqindex: 0-31, az src indexe
- in_(src, bit_count)
Adat beléptetése az src-ből az ISR-be.
src: az egyik a következők közül:
pins,x,y,null,isr,osrbit_count: a beléptetendő bitek száma (1-32)
- out(dest, bit_count)
Adat kiléptetése az OSR-ből a dest-be.
dest: az egyik a következők közül:
pins,x,y,pindirs,pc,isr,execbit_count: a kiléptetendő bitek száma (1-32)
- push(…)
Az ISR betolása az RX FIFO-ba, majd az ISR nullázása. Ennek az utasításnak a következő formái vannak:
push()
push(block)
push(noblock)
push(iffull)
push(iffull, block)
push(iffull, noblock)
Ha a
blockvan használva, akkor az utasítás megáll, ha az RX FIFO megtelt. Az alapértelmezett a blokkolás. Ha aziffullvan használva, akkor csak akkor tol be, ha a bemeneti eltolási számláló elérte a küszöbértékét.- pull(…)
Lehúzás a TX FIFO-ból az OSR-be. Ennek az utasításnak a következő formái vannak:
pull()
pull(block)
pull(noblock)
pull(ifempty)
pull(ifempty, block)
pull(ifempty, noblock)
Ha a
blockvan használva, akkor az utasítás megáll, ha a TX FIFO üres. Az alapértelmezett a blokkolás. Ha azifemptyvan használva, akkor csak akkor húz le, ha a kimeneti eltolási számláló elérte a küszöbértékét.- mov(dest, src)
Az src értékének átmozgatása a dest-be.
dest: az egyik a következők közül:
pins,x,y,exec,pc,isr,osrsrc: az egyik a következők közül:
pins,x,y,null,status,isr,osr; ez az argumentum opcionálisan módosítható úgy, hogyinvert()vagyreverse()köré csomagolja (de a kettő együtt nem)
- irq(…)
IRQ-jelző beállítása vagy törlése. Ennek az utasításnak két formája van:
- irq(index)
index: 0-7, vagy
rel(0)-tólrel(7)-ig
- irq(mode, index)
mode: az egyik a következők közül:
block,clearindex: 0-7, vagy
rel(0)-tólrel(7)-ig
Ha a
blockvan használva, akkor az utasítás megáll, amíg a jelzőt egy másik entitás nem törli. Ha aclearvan használva, akkor a jelző beállítás helyett törlődik. A relatív IRQ-indexek az állapotgép azonosítóját hozzáadják az IRQ-indexhez modulo-4 összeadással. A 0-3 IRQ-k láthatók a processzor felől, a 4-7 az állapotgépek belső jelzői.- set(dest, data)
A dest beállítása a data értékre.
dest:
pins,x,y,pindirsdata: érték (0-31)
- nop()
Ez egy pszeudoutasítás, amely
mov(y, y)-ra fordul le, és nincs mellékhatása.- .side(value)
Ez egy módosító, amely bármely utasításra alkalmazható, és a side-set lábértékek vezérlésére szolgál.
value: a side-set lábakra kiadandó érték (bitek)
- .delay(value)
Ez egy módosító, amely bármely utasításra alkalmazható, és azt adja meg, hány ciklusig kell várakozni az utasítás végrehajtása után.
value: a várakozási ciklusok száma, 0-31 (a maximális érték csökken, ha side-set lábakat használ)
- [value]
Ez egy módosító, és egyenértékű a
.delay(value)utasítással.