rp2 — funktioner specifika för RP2040¶
Modulen rp2 innehåller funktioner och klasser som är specifika för RP2040, så som den används i Raspberry Pi Pico.
Se RP2040 Python datasheet för mer information, och pico-micropython-examples för exempelkod.
Instruktioner i PIO-assemblerspråk¶
PIO-tillståndsmaskiner programmeras i ett anpassat assemblerspråk med nio centrala PIO-maskininstruktioner. I MicroPython skrivs PIO-assemblerrutiner som en Python-funktion med dekoratorn @rp2.asm_pio(), och de använder Python-syntax. Sådana rutiner stöder vanliga Python-variabler och aritmetik, samt följande anpassade funktioner som kodar PIO-instruktioner och styr assembleraren. Se avsnitt 3.4 i RP2040:s datablad för ytterligare detaljer.
- wrap_target()
Ange den plats där exekveringen fortsätter efter programomslag. Som standard är detta början av PIO-rutinen.
- wrap()
Ange den plats där programmet avslutas och slår runt. Om detta direktiv inte används läggs det automatiskt till i slutet av PIO-rutinen. Omslag kostar inga exekveringscykler.
- label(label)
Definiera en etikett vid namn label på den aktuella platsen. label kan vara en sträng eller ett heltal.
- word(instr, label=None)
Infoga ett godtyckligt 16-bitars ord i den assemblerade utdatan.
instr: 16-bitarsvärdet
label: om angivet, slå upp etiketten och utför logiskt eller mellan etikettens värde och instr
- jmp(…)
Denna instruktion har två former:
- jmp(label)
label: etikett att ovillkorligt hoppa till
- jmp(cond, label)
cond: villkoret att kontrollera, ett av:
not_x,not_y: sant om registret är nollx_dec,y_dec: sant om registret är skilt från noll, och utför post-dekrementx_not_y: sant om X inte är lika med Ypin: sant om ingångsstiftet är sattnot_osre: sant om OSR inte är tom (inte har nått sitt tröskelvärde)
label: etikett att hoppa till om villkoret är sant
- wait(polarity, src, index)
Blockera och vänta på högt/lågt på ett stift eller en IRQ-linje.
polarity: 0 eller 1, huruvida väntan ska ske på ett lågt eller högt värde
src: ett av:
gpio(absolut stift),pin(stift relativt StateMachine:sin_base-argument),irqindex: 0-31, indexet för src
- in_(src, bit_count)
Skifta in data från src till ISR.
src: ett av:
pins,x,y,null,isr,osrbit_count: antal bitar att skifta in (1-32)
- out(dest, bit_count)
Skifta ut data från OSR till dest.
dest: ett av:
pins,x,y,pindirs,pc,isr,execbit_count: antal bitar att skifta ut (1-32)
- push(…)
Skjut in ISR i RX-FIFO:n och nollställ sedan ISR. Denna instruktion har följande former:
push()
push(block)
push(noblock)
push(iffull)
push(iffull, block)
push(iffull, noblock)
Om
blockanvänds stannar instruktionen om RX-FIFO:n är full. Standard är att blockera. Omiffullanvänds utförs push endast om ingångsskiftantalet har nått sitt tröskelvärde.- pull(…)
Hämta från TX-FIFO:n till OSR. Denna instruktion har följande former:
pull()
pull(block)
pull(noblock)
pull(ifempty)
pull(ifempty, block)
pull(ifempty, noblock)
Om
blockanvänds stannar instruktionen om TX-FIFO:n är tom. Standard är att blockera. Omifemptyanvänds utförs pull endast om utgångsskiftantalet har nått sitt tröskelvärde.- mov(dest, src)
Flytta värdet från src till dest.
dest: ett av:
pins,x,y,exec,pc,isr,osrsrc: ett av:
pins,x,y,null,status,isr,osr; detta argument kan valfritt modifieras genom att omslutas iinvert()ellerreverse()(men inte båda samtidigt)
- irq(…)
Sätt eller nollställ en IRQ-flagga. Denna instruktion har två former:
- irq(index)
index: 0-7, eller
rel(0)tillrel(7)
- irq(mode, index)
mode: ett av:
block,clearindex: 0-7, eller
rel(0)tillrel(7)
Om
blockanvänds stannar instruktionen tills flaggan nollställs av en annan entitet. Omclearanvänds nollställs flaggan i stället för att sättas. Relativa IRQ-index lägger till tillståndsmaskinens ID till IRQ-indexet med modulo-4-addition. IRQ 0-3 är synliga för processorn, 4-7 är interna för tillståndsmaskinerna.- set(dest, data)
Sätt dest till värdet data.
dest:
pins,x,y,pindirsdata: värde (0-31)
- nop()
Detta är en pseudoinstruktion som assembleras till
mov(y, y)och inte har någon sidoeffekt.- .side(value)
Detta är en modifierare som kan tillämpas på vilken instruktion som helst, och används för att styra side-set-stiftvärden.
value: värdet (bitarna) att mata ut på side-set-stiften
- .delay(value)
Detta är en modifierare som kan tillämpas på vilken instruktion som helst, och anger hur många cykler som ska fördröjas efter att instruktionen exekverats.
value: cykler att fördröja, 0-31 (maxvärdet reduceras om side-set-stift används)
- [value]
Detta är en modifierare och är likvärdig med
.delay(value).