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 noll

    • x_dec, y_dec: sant om registret är skilt från noll, och utför post-dekrement

    • x_not_y: sant om X inte är lika med Y

    • pin: sant om ingångsstiftet är satt

    • not_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:s in_base-argument), irq

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

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

  • bit_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 block används stannar instruktionen om RX-FIFO:n är full. Standard är att blockera. Om iffull anvä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 block används stannar instruktionen om TX-FIFO:n är tom. Standard är att blockera. Om ifempty anvä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, osr

  • src: ett av: pins, x, y, null, status, isr, osr; detta argument kan valfritt modifieras genom att omslutas i invert() eller reverse() (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) till rel(7)

irq(mode, index)
  • mode: ett av: block, clear

  • index: 0-7, eller rel(0) till rel(7)

Om block används stannar instruktionen tills flaggan nollställs av en annan entitet. Om clear anvä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, pindirs

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

Klasser