rp2 --- chức năng đặc thù cho RP2040¶
Module rp2 chứa các hàm và lớp dành riêng cho RP2040, được sử dụng trong Raspberry Pi Pico.
Xem RP2040 Python datasheet để biết thêm thông tin, và pico-micropython-examples để xem mã ví dụ.
Các lệnh hợp ngữ PIO¶
Các máy trạng thái PIO được lập trình bằng ngôn ngữ hợp ngữ tùy chỉnh với chín lệnh PIO-machine cốt lõi. Trong MicroPython, các thủ tục hợp ngữ PIO được viết dưới dạng hàm Python với decorator @rp2.asm_pio(), và chúng sử dụng cú pháp Python. Các thủ tục như vậy hỗ trợ các biến và phép tính Python tiêu chuẩn, cũng như các hàm tùy chỉnh sau đây để mã hóa các lệnh PIO và điều khiển trình hợp dịch. Xem mục 3.4 của tài liệu kỹ thuật RP2040 để biết thêm chi tiết.
- wrap_target()
Xác định vị trí nơi quá trình thực thi tiếp tục sau khi chương trình quay vòng. Theo mặc định, đây là điểm bắt đầu của thủ tục PIO.
- wrap()
Xác định vị trí nơi chương trình kết thúc và quay vòng lại. Nếu chỉ thị này không được sử dụng thì nó sẽ được thêm tự động ở cuối thủ tục PIO. Việc quay vòng không tốn bất kỳ chu kỳ thực thi nào.
- label(label)
Định nghĩa một nhãn có tên label tại vị trí hiện tại. label có thể là một chuỗi hoặc số nguyên.
- word(instr, label=None)
Chèn một từ 16 bit tùy ý vào đầu ra đã được dịch hợp ngữ.
instr: giá trị 16 bit
label: nếu được cung cấp, tra cứu nhãn và thực hiện phép OR logic giữa giá trị của nhãn với instr
- jmp(...)
Lệnh này có hai dạng:
- jmp(label)
label: nhãn để nhảy đến một cách vô điều kiện
- jmp(cond, label)
cond: điều kiện cần kiểm tra, một trong:
not_x,not_y: đúng nếu thanh ghi bằng khôngx_dec,y_dec: đúng nếu thanh ghi khác không, và thực hiện giảm saux_not_y: đúng nếu X không bằng Ypin: đúng nếu chân (pin) đầu vào được đặtnot_osre: đúng nếu OSR không trống (chưa đạt đến ngưỡng của nó)
label: nhãn để nhảy đến nếu điều kiện đúng
- wait(polarity, src, index)
Chặn, chờ đợi mức cao/thấp trên chân (pin) hoặc đường IRQ.
polarity: 0 hoặc 1, xác định có chờ giá trị thấp hay cao
src: một trong:
gpio(chân tuyệt đối),pin(chân tương đối với đối sốin_basecủa StateMachine),irqindex: 0-31, chỉ số cho src
- in_(src, bit_count)
Dịch chuyển dữ liệu từ src vào ISR.
src: một trong:
pins,x,y,null,isr,osrbit_count: số bit cần dịch vào (1-32)
- out(dest, bit_count)
Dịch chuyển dữ liệu từ OSR ra dest.
dest: một trong:
pins,x,y,pindirs,pc,isr,execbit_count: số bit cần dịch ra (1-32)
- push(...)
Đẩy ISR vào RX FIFO, sau đó xóa ISR về không. Lệnh này có các dạng sau:
push()
push(block)
push(noblock)
push(iffull)
push(iffull, block)
push(iffull, noblock)
Nếu
blockđược sử dụng thì lệnh sẽ dừng lại nếu RX FIFO đầy. Mặc định là chặn. Nếuiffullđược sử dụng thì nó chỉ đẩy nếu số lần dịch đầu vào đã đạt đến ngưỡng của nó.- pull(...)
Kéo từ TX FIFO vào OSR. Lệnh này có các dạng sau:
pull()
pull(block)
pull(noblock)
pull(ifempty)
pull(ifempty, block)
pull(ifempty, noblock)
Nếu
blockđược sử dụng thì lệnh sẽ dừng lại nếu TX FIFO trống. Mặc định là chặn. Nếuifemptyđược sử dụng thì nó chỉ kéo nếu số lần dịch đầu ra đã đạt đến ngưỡng của nó.- mov(dest, src)
Di chuyển vào dest giá trị từ src.
dest: một trong:
pins,x,y,exec,pc,isr,osrsrc: một trong:
pins,x,y,null,status,isr,osr; đối số này có thể được tùy chỉnh bằng cách bọc nó tronginvert()hoặcreverse()(nhưng không phải cả hai cùng một lúc)
- irq(...)
Đặt hoặc xóa cờ IRQ. Lệnh này có hai dạng:
- irq(index)
index: 0-7, hoặc
rel(0)đếnrel(7)
- irq(mode, index)
mode: một trong:
block,clearindex: 0-7, hoặc
rel(0)đếnrel(7)
Nếu
blockđược sử dụng thì lệnh sẽ dừng lại cho đến khi cờ được xóa bởi một thực thể khác. Nếuclearđược sử dụng thì cờ sẽ được xóa thay vì được đặt. Chỉ số IRQ tương đối cộng ID máy trạng thái vào chỉ số IRQ với phép cộng modulo-4. IRQ 0-3 hiển thị từ bộ xử lý, 4-7 là nội bộ của các máy trạng thái.- set(dest, data)
Đặt dest với giá trị data.
dest:
pins,x,y,pindirsdata: giá trị (0-31)
- nop()
Đây là một lệnh giả được dịch hợp ngữ thành
mov(y, y)và không có tác dụng phụ.- .side(value)
Đây là một modifier có thể áp dụng cho bất kỳ lệnh nào, và được sử dụng để điều khiển giá trị chân side-set.
value: giá trị (các bit) cần xuất ra trên các chân side-set
- .delay(value)
Đây là một modifier có thể áp dụng cho bất kỳ lệnh nào, và xác định số chu kỳ cần trễ sau khi lệnh thực thi.
value: số chu kỳ trễ, 0-31 (giá trị tối đa giảm nếu các chân side-set được sử dụng)
- [value]
Đây là một modifier và tương đương với
.delay(value).