class PIO -- sử dụng PIO nâng cao¶
Lớp PIO bọc một trong hai khối Programmable I/O (PIO) của RP2040. Mỗi khối PIO chứa một bộ nhớ lệnh (32 lệnh) được chia sẻ bởi bốn state machine độc lập, cộng với giao diện FIFO riêng cho mỗi state machine và một bộ điều khiển IRQ.
Hầu hết các tập lệnh tương tác với PIO thông qua StateMachine -- lớp này dành cho các trường hợp sử dụng nâng cao cần:
Tải và gỡ bỏ chương trình tường minh qua
add_program()/remove_program().Di chuyển cơ sở GPIO của PIO trên cửa sổ 32 chân (pin) của chip qua
gpio_base().Kết nối vào các cờ IRQ ở cấp khối qua
irq().
Để lắp ráp các chương trình PIO, xem rp2.asm_pio().
Constructors¶
- class rp2.PIO(id: int)¶
Trả về đối tượng
PIOsingleton cho khối PIO được xác định bởiid. RP2040 có hai khối PIO, được đánh số0và1. Ném raValueErrorcho bất kỳ id nào khác.Methods¶
- gpio_base(base: machine.Pin | int | None = None, /) int¶
Lấy hoặc đặt cơ sở GPIO cho khối PIO này.
RP2040 PIO nhìn thấy một cửa sổ 32 chân (pin) vào không gian GPIO; cửa sổ có thể bắt đầu từ GPIO0 hoặc GPIO16. Cơ sở kiểm soát cửa sổ nào có hiệu lực cho tất cả các state machine trên PIO này.
Khi không có đối số, trả về cơ sở hiện tại (số chân (pin) GPIO,
0hoặc16).Khi có đối số, đặt cơ sở.
basecó thể là một thực thểmachine.Pinhoặc số chân (pin) nguyên, và phải xác định là GPIO0 hoặc GPIO16. Cơ sở phải được đặt trước khi bất kỳ chương trình nào được thêm vào hoặc state machine được khởi tạo trên khối PIO này.
- add_program(program: Callable) None¶
Tải
programvào bộ nhớ lệnh của PIO này. Bố cục bộ nhớ kết quả được tái sử dụng cho tất cả các state machine trên khối PIO này.Mỗi PIO chỉ có 32 lệnh bộ nhớ chương trình được chia sẻ cho tất cả các chương trình; nếu chương trình mới không vừa, phương thức này ném ra
OSError(ENOMEM). Cùng một chương trình có thể được tải lên cả hai thực thể PIO, nhưng chúng chiếm các vùng bộ nhớ riêng biệt.
- remove_program(program: Callable | None = None, /) None¶
Gỡ bỏ
programkhỏi bộ nhớ lệnh của PIO này, giải phóng không gian cho các chương trình mới. Nếuprogrambị bỏ qua, mọi chương trình hiện đang tải trên PIO này sẽ bị xóa.Gỡ bỏ một chương trình chưa được tải là thao tác không làm gì (không có ngoại lệ).
- state_machine(id: int, program: Callable | None = None, *args, **kwargs) StateMachine¶
Trả về một trong bốn thực thể
StateMachinethuộc sở hữu của khối PIO này.idlà chỉ số state machine cục bộ (0--3).Nếu
programđược cung cấp, state machine sẽ được cấu hình để chạy nó -- tất cả các đối số vị trí/từ khóa được chuyển tiếp đếnStateMachine.init().Ví dụ:
>>> rp2.PIO(1).state_machine(3) StateMachine(7)
ID state machine toàn cục của đối tượng được trả về là
pio_id * 4 + sm_id.
- irq(handler: Callable[[PIO], None] | None = None, trigger: int = IRQ_SM0 | IRQ_SM1 | IRQ_SM2 | IRQ_SM3, hard: bool = False) Callable¶
Lấy hoặc cấu hình IRQ ở cấp khối cho PIO này.
handlerlà hàm gọi lại kích hoạt khi bất kỳ IRQ nào của state machine được yêu cầu chốt lại. Handler nhận thực thểPIOnày làm đối số duy nhất; trong handler, các state machine đang kích hoạt có thể được xác định quaself.irq().flags()AND với các hằng sốIRQ_SM*.triggerlà bitmask của một hoặc nhiềuIRQ_SM0..IRQ_SM3. Mặc định kích hoạt trên bất kỳ state machine nào.hard=Trueđăng ký handler ngắt cứng (không cấp phát heap trong hàm gọi lại).MicroPython ràng buộc IRQ 0 trên mỗi khối PIO; IRQ 1 được dành riêng và không thể truy cập từ Python.
Constants¶
- IN_LOW: int¶
Truyền vào
out_init/set_init/sideset_initcủaasm_pio()để chân (pin) bắt đầu là đầu vào được kéo xuống thấp (tức là trạng thái ba trạng thái với bộ đệm đầu ra giữ giá trị 0).
- IN_HIGH: int¶
Truyền vào
out_init/set_init/sideset_initcủaasm_pio()để chân (pin) bắt đầu là đầu vào với bộ đệm đầu ra giữ giá trị 1.
- OUT_LOW: int¶
Truyền vào
out_init/set_init/sideset_initcủaasm_pio()để chân (pin) bắt đầu là đầu ra được điều khiển ở mức logic 0.
- OUT_HIGH: int¶
Truyền vào
out_init/set_init/sideset_initcủaasm_pio()để chân (pin) bắt đầu là đầu ra được điều khiển ở mức logic 1.
- SHIFT_LEFT: int¶
Truyền vào
in_shiftdir/out_shiftdircủaasm_pio()hoặcStateMachine.init()để dịch chuyển các bit về phía MSB.
- SHIFT_RIGHT: int¶
Truyền vào
in_shiftdir/out_shiftdircủaasm_pio()hoặcStateMachine.init()để dịch chuyển các bit về phía LSB.
- JOIN_NONE: int¶
Truyền vào
fifo_joincủaasm_pio()để state machine có các FIFO TX và RX riêng biệt 4 từ (mặc định).
- JOIN_TX: int¶
Truyền vào
fifo_joincủaasm_pio()để FIFO TX được tăng gấp đôi lên 8 từ bằng cách hấp thụ FIFO RX. State machine không còn có thể nhận dữ liệu.