rp2 — RP2040-piirille ominaiset toiminnot

rp2-moduuli sisältää RP2040-piirille ominaisia funktioita ja luokkia, joita käytetään Raspberry Pi Picossa.

Lisätietoja löytyy julkaisusta RP2040 Python datasheet, ja esimerkkikoodia kohteesta pico-micropython-examples.

PIO-assembly-kielen käskyt

PIO-tilakoneet ohjelmoidaan mukautetulla assembly-kielellä, jossa on yhdeksän PIO-koneen ydinkäskyä. MicroPythonissa PIO-assembly-rutiinit kirjoitetaan Python-funktiona, jossa on koristelija @rp2.asm_pio(), ja ne käyttävät Python-syntaksia. Tällaiset rutiinit tukevat tavanomaisia Python-muuttujia ja aritmetiikkaa sekä seuraavia mukautettuja funktioita, jotka koodaavat PIO-käskyjä ja ohjaavat assembleria. Lisätietoja löytyy RP2040-datalehden luvusta 3.4.

wrap_target()

Määrittää sijainnin, jossa suoritus jatkuu ohjelman kierron jälkeen. Oletuksena tämä on PIO-rutiinin alku.

wrap()

Määrittää sijainnin, jossa ohjelma päättyy ja kiertää takaisin. Jos tätä direktiiviä ei käytetä, se lisätään automaattisesti PIO-rutiinin loppuun. Kierto ei kuluta yhtään suorituskiertoa.

label(label)

Määrittele label-niminen tunniste nykyiseen sijaintiin. label voi olla merkkijono tai kokonaisluku.

word(instr, label=None)

Lisää mielivaltainen 16-bittinen sana käännettyyn tulosteeseen.

  • instr: 16-bittinen arvo

  • label: jos annettu, hae tunniste ja suorita looginen tai-operaatio tunnisteen arvon ja instr-arvon välillä

jmp(…)

Tällä käskyllä on kaksi muotoa:

jmp(label)
  • label: tunniste, johon hypätään ehdoitta

jmp(cond, label)
  • cond: tarkistettava ehto, yksi seuraavista:

    • not_x, not_y: tosi, jos rekisteri on nolla

    • x_dec, y_dec: tosi, jos rekisteri ei ole nolla, ja tee jälkivähennys

    • x_not_y: tosi, jos X ei ole yhtä suuri kuin Y

    • pin: tosi, jos tulonasta on asetettu

    • not_osre: tosi, jos OSR ei ole tyhjä (ei ole saavuttanut kynnysarvoaan)

  • label: tunniste, johon hypätään, jos ehto on tosi

wait(polarity, src, index)

Estä suoritus odottaen korkeaa/matalaa arvoa nastassa tai IRQ-linjalla.

  • polarity: 0 tai 1, odotetaanko matalaa vai korkeaa arvoa

  • src: yksi seuraavista: gpio (absoluuttinen nasta), pin (nasta suhteessa StateMachinen in_base-argumenttiin), irq

  • index: 0-31, src-arvon indeksi

in_(src, bit_count)

Siirrä dataa sisään kohteesta src ISR:ään.

  • src: yksi seuraavista: pins, x, y, null, isr, osr

  • bit_count: sisään siirrettävien bittien määrä (1-32)

out(dest, bit_count)

Siirrä dataa ulos OSR:stä kohteeseen dest.

  • dest: yksi seuraavista: pins, x, y, pindirs, pc, isr, exec

  • bit_count: ulos siirrettävien bittien määrä (1-32)

push(…)

Työnnä ISR RX-FIFO:hon ja tyhjennä sitten ISR nollaan. Tällä käskyllä on seuraavat muodot:

  • push()

  • push(block)

  • push(noblock)

  • push(iffull)

  • push(iffull, block)

  • push(iffull, noblock)

Jos käytetään block-muotoa, käsky pysähtyy, jos RX-FIFO on täynnä. Oletuksena on estäminen. Jos käytetään iffull-muotoa, työntö tapahtuu vain, jos tulon siirtolaskuri on saavuttanut kynnysarvonsa.

pull(…)

Vedä TX-FIFO:sta OSR:ään. Tällä käskyllä on seuraavat muodot:

  • pull()

  • pull(block)

  • pull(noblock)

  • pull(ifempty)

  • pull(ifempty, block)

  • pull(ifempty, noblock)

Jos käytetään block-muotoa, käsky pysähtyy, jos TX-FIFO on tyhjä. Oletuksena on estäminen. Jos käytetään ifempty-muotoa, veto tapahtuu vain, jos lähdön siirtolaskuri on saavuttanut kynnysarvonsa.

mov(dest, src)

Siirrä kohteeseen dest arvo kohteesta src.

  • dest: yksi seuraavista: pins, x, y, exec, pc, isr, osr

  • src: yksi seuraavista: pins, x, y, null, status, isr, osr; tätä argumenttia voidaan valinnaisesti muokata käärimällä se funktioon invert() tai reverse() (mutta ei molempiin yhtä aikaa)

irq(…)

Aseta tai tyhjennä IRQ-lippu. Tällä käskyllä on kaksi muotoa:

irq(index)
  • index: 0-7, tai rel(0)rel(7)

irq(mode, index)
  • mode: yksi seuraavista: block, clear

  • index: 0-7, tai rel(0)rel(7)

Jos käytetään block-muotoa, käsky pysähtyy, kunnes toinen taho tyhjentää lipun. Jos käytetään clear-muotoa, lippu tyhjennetään asettamisen sijaan. Suhteelliset IRQ-indeksit lisäävät tilakoneen ID:n IRQ-indeksiin modulo-4-yhteenlaskulla. IRQ:t 0-3 ovat näkyvissä prosessorille, 4-7 ovat tilakoneiden sisäisiä.

set(dest, data)

Aseta kohteeseen dest arvo data.

  • dest: pins, x, y, pindirs

  • data: arvo (0-31)

nop()

Tämä on pseudokäsky, joka kääntyy muotoon mov(y, y) eikä sillä ole sivuvaikutuksia.

.side(value)

Tämä on määre, joka voidaan liittää mihin tahansa käskyyn, ja sitä käytetään side-set-nastojen arvojen ohjaamiseen.

  • value: side-set-nastoihin tulostettava arvo (bitit)

.delay(value)

Tämä on määre, joka voidaan liittää mihin tahansa käskyyn, ja se määrittää, kuinka monta kiertoa viivytetään käskyn suorituksen jälkeen.

  • value: viivekierrot, 0-31 (maksimiarvo pienenee, jos side-set-nastoja käytetään)

[value]

Tämä on määre ja vastaa muotoa .delay(value).

Luokat