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 nollax_dec,y_dec: tosi, jos rekisteri ei ole nolla, ja tee jälkivähennysx_not_y: tosi, jos X ei ole yhtä suuri kuin Ypin: tosi, jos tulonasta on asetettunot_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 StateMachinenin_base-argumenttiin),irqindex: 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,osrbit_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,execbit_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ääniffull-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äänifempty-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,osrsrc: yksi seuraavista:
pins,x,y,null,status,isr,osr; tätä argumenttia voidaan valinnaisesti muokata käärimällä se funktiooninvert()taireverse()(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,clearindex: 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äänclear-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,pindirsdata: 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).