rp2 --- RP2040 專屬功能

rp2 模組包含 RP2040 專屬的函式與類別,如 Raspberry Pi Pico 上所使用的那些。

詳情請參閱 RP2040 Python 資料手冊,範例程式碼請參閱 pico-micropython-examples

PIO 組合語言指令

PIO 狀態機是以一種自訂的組合語言搭配九個核心 PIO 機器指令進行程式設計。在 MicroPython 中,PIO 組合語言常式以帶有 @rp2.asm_pio() 裝飾子的 Python 函式撰寫,並使用 Python 語法。這類常式支援標準的 Python 變數與算術運算,以及下列用於編碼 PIO 指令與指示組譯器的自訂函式。進一步細節請參閱 RP2040 資料手冊第 3.4 節。

wrap_target()

指定程式環繞後執行繼續進行的位置。預設為 PIO 常式的起始處。

wrap()

指定程式結束並環繞回去的位置。若未使用此指示,則會自動加在 PIO 常式的結尾處。環繞不消耗任何執行週期。

label(label)

在目前位置定義一個名為 label 的標籤。label 可以是字串或整數。

word(instr, label=None)

在組譯後的輸出中插入一個任意的 16 位元字組。

  • instr:16 位元的值

  • label:若有提供,則查找該標籤並將標籤的值與 instr 進行邏輯或(OR)運算

jmp(...)

此指令有兩種形式:

jmp(label)
  • label:無條件跳躍至的標籤

jmp(cond, label)
  • cond:要檢查的條件,為下列之一:

    • not_xnot_y:若暫存器為零則為真

    • x_decy_dec:若暫存器非零則為真,並執行後遞減

    • x_not_y:若 X 不等於 Y 則為真

    • pin:若輸入接腳被設定則為真

    • not_osre:若 OSR 不為空(尚未達到其閾值)則為真

  • label:若條件為真則跳躍至的標籤

wait(polarity, src, index)

封鎖,等待接腳或 IRQ 線上的高/低電位。

  • polarity:0 或 1,表示要等待低電位值還是高電位值

  • src:為下列之一:gpio(絕對接腳)、pin(相對於 StateMachine 之 in_base 引數的接腳)、irq

  • index:0-31,src 的索引

in_(src, bit_count)

將資料從 src 移入 ISR。

  • src:為下列之一:pinsxynullisrosr

  • bit_count:要移入的位元數(1-32)

out(dest, bit_count)

將資料從 OSR 移出至 dest

  • dest:為下列之一:pinsxypindirspcisrexec

  • bit_count:要移出的位元數(1-32)

push(...)

將 ISR 推入 RX FIFO,然後將 ISR 清為零。此指令有下列形式:

  • push()

  • push(block)

  • push(noblock)

  • push(iffull)

  • push(iffull, block)

  • push(iffull, noblock)

若使用 block,則 RX FIFO 已滿時指令會停滯。預設為封鎖。若使用 iffull,則僅在輸入移位計數達到其閾值時才推入。

pull(...)

從 TX FIFO 拉取至 OSR。此指令有下列形式:

  • pull()

  • pull(block)

  • pull(noblock)

  • pull(ifempty)

  • pull(ifempty, block)

  • pull(ifempty, noblock)

若使用 block,則 TX FIFO 為空時指令會停滯。預設為封鎖。若使用 ifempty,則僅在輸出移位計數達到其閾值時才拉取。

mov(dest, src)

src 的值移入 dest

  • dest:為下列之一:pinsxyexecpcisrosr

  • src:為下列之一:pinsxynullstatusisrosr;此引數可選擇性地以 invert()reverse() 包裝進行修飾(但兩者不可同時使用)

irq(...)

設定或清除一個 IRQ 旗標。此指令有兩種形式:

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

irq(mode, index)
  • mode:為下列之一:blockclear

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

若使用 block,則指令會停滯直到旗標被其他實體清除為止。若使用 clear,則旗標會被清除而非被設定。相對 IRQ 索引會將狀態機 ID 以模 4 加法加到 IRQ 索引上。IRQ 0-3 對處理器可見,4-7 為狀態機內部使用。

set(dest, data)

以值 data 設定 dest

  • destpinsxypindirs

  • data:值(0-31)

nop()

這是一個偽指令,會組譯為 mov(y, y) 且無副作用。

.side(value)

這是一個可套用於任何指令的修飾子,用於控制 side-set 接腳值。

  • value:要在 side-set 接腳上輸出的值(位元)

.delay(value)

這是一個可套用於任何指令的修飾子,用於指定指令執行後要延遲多少個週期。

  • value:要延遲的週期數,0-31(若使用 side-set 接腳,最大值會減少)

[value]

這是一個修飾子,等同於 .delay(value)

類別