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 nulla

    • x_dec, y_dec: igaz, ha a regiszter nem nulla, és utólagos dekrementálást végez

    • x_not_y: igaz, ha X nem egyenlő Y-nal

    • pin: igaz, ha a bemeneti láb be van állítva

    • not_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 StateMachine in_base argumentumához viszonyított láb), irq

  • index: 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, osr

  • bit_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, exec

  • bit_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 block van használva, akkor az utasítás megáll, ha az RX FIFO megtelt. Az alapértelmezett a blokkolás. Ha az iffull van 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 block van használva, akkor az utasítás megáll, ha a TX FIFO üres. Az alapértelmezett a blokkolás. Ha az ifempty van 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, osr

  • src: 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, hogy invert() vagy reverse() 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ól rel(7)-ig

irq(mode, index)
  • mode: az egyik a következők közül: block, clear

  • index: 0-7, vagy rel(0)-tól rel(7)-ig

Ha a block van használva, akkor az utasítás megáll, amíg a jelzőt egy másik entitás nem törli. Ha a clear van 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, pindirs

  • data: é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.

Osztályok