类 StateMachine – 访问 RP2040 的可编程 I/O 接口¶
本 StateMachine
类提供访问RP2040的PIO(可编程I / O)接口。
有关汇编 PIO 程序的信息,请参阅 rp2.asm_pio()
.
构造函数¶
-
class
rp2.
StateMachine
(id[, program, ...])¶ 获取编号为id的状态机。RP2040 有两个相同的 PIO 实例,每个实例有 4 个状态机:所以总共有 8 个状态机,编号为 0 到 7。
可选择给定程序初始化程序:见
StateMachine.init
.
方法¶
-
StateMachine.
init
(program, freq=- 1, *, in_base=None, out_base=None, set_base=None, jmp_pin=None, sideset_base=None, in_shiftdir=None, out_shiftdir=None, push_thresh=None, pull_thresh=None)¶ 配置状态机实例以运行给定的程序。
该程序被添加到该 PIO 实例的指令存储器中。如果指令存储器已经包含该程序,则重新使用其偏移量以节省指令存储器。
freq是以赫兹为单位运行状态机的频率。默认为系统时钟频率。
时钟分频器计算为,因此可能存在轻微的舍入误差。
system clock frequency / freq
最小可能的时钟分频器是系统时钟的 65536 分之一:因此在默认系统时钟频率 125MHz 下,freq的最小值 为
1908
。要以较慢的频率运行状态机,您需要使用machine.freq()
.in_base是用于
in()
指令的第一个引脚。out_base 是用于
out()
指令的第一个引脚。set_base是用于
set()
指令的第一个引脚。jmp_pin是用于指令的第一个引脚。
jmp(pin, ...)
sideset_base是用于侧面设置的第一个引脚。
in_shiftdir是ISR将转移,无论是方向
PIO.SHIFT_LEFT
或PIO.SHIFT_RIGHT
。out_shiftdir是OSR将转移,无论是方向
PIO.SHIFT_LEFT
或PIO.SHIFT_RIGHT
。push_thresh是触发自动推送或有条件重新推送之前的阈值(以位为单位)。
pull_thresh是触发自动推送或有条件重新推送之前的位阈值。
-
StateMachine.
active
([value])¶ 获取或设置状态机当前是否正在运行。
>>> sm.active() True >>> sm.active(0) False
-
StateMachine.
restart
()¶ 重新启动状态机并跳转到程序的开头。
此方法使用 RP2040 的
SM_RESTART
寄存器清除状态机的内部状态 。这包括:输入和输出移位计数器
输入移位寄存器的内容
延迟计数器
等待 IRQ 状态
使用停止的指令运行
StateMachine.exec()
-
StateMachine.
exec
(instr)¶ 执行单个 PIO 指令。用于
asm_pio_encode
对来自给定字符串instr的指令进行编码。>>> sm.exec("set(0, 1)")
-
StateMachine.
get
(buf=None, shift=0)¶ 从状态机的 RX FIFO 中拉出一个字。
如果 FIFO 为空,它会阻塞直到数据到达(即状态机推送一个字)。
该值在返回前右移位移位,即返回值为。
word >> shift
.
-
StateMachine.
put
(value, shift=0)¶ 将一个字推送到状态机的 TX FIFO。
如果 FIFO 已满,它将阻塞直到有空间(即状态机拉出一个字)。
该值首先左移移位位,即状态机接收。
value << shift
.
-
StateMachine.
rx_fifo
()¶ 返回状态机的 RX FIFO 中的字数。值为 0 表示 FIFO 为空。
用于在调用之前检查数据是否正在等待读取
StateMachine.get()
.
-
StateMachine.
tx_fifo
()¶ 返回状态机的 TX FIFO 中的字数。值为 0 表示 FIFO 为空。
用于检查是否有空间使用
StateMachine.put()
.
-
StateMachine.
irq
(handler=None, trigger=0 | 1, hard=False)¶ 返回给定 StateMachine 的 IRQ 对象。
可选地配置它。