精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

樹莓派PICO pio使用

冬至子 ? 來源:螺絲松掉的人 ? 作者:螺絲松掉的人 ? 2023-10-18 15:17 ? 次閱讀

樹莓派 Pico 小小的板子上總是能讓我們發現一些驚喜。其所使用的RP2040芯片還具備8個可編程I/O(PIO)狀態機,用于自定義外圍設備,與 FPGA 類似,開發者可以靈活的使用 PIO 自定義功能。

可編程I/O(PIO)是為 RP2040 開發的一種新型硬件,可以通過 PIO 創建新類型的(或附加)硬件接口。通過使用 PIO ,可以模擬更多,更豐富,更快的硬件接口,有助于提升性能和擴展性。

與 PIO 相比,FPGA 往往更加昂貴,而且需要使用其他的編程模式編寫程序。但 PIO 僅僅只需要通過匯編語言就可以實現,開發者不需要去適應 FPGA 那種編程模式即可很快的實現自定義硬件接口。

PIO 一個簡單的 demo:

主要需要用到一個匯編實現的pio文件,一些C文件,和Cmake文件,實現串口打印 hello

pio文件:

.program hello
; Repeatedly get one word of data from the TX FIFO, stalling when the FIFO is
; empty. Write the least significant bit to the OUT pin group.
loop:
pull
out pins, 1
jmp loop
% c-sdk {
static inline void hello_program_init(PIO pio, uint sm, uint offset, uint pin) {
pio_sm_config c = hello_program_get_default_config(offset);
// Map the state machine's OUT pin group to one pin, namely the pin
// parameter to this function.
sm_config_set_out_pins(&c, pin, 1);
// Set this pin's GPIO function (connect PIO to the pad)
pio_gpio_init(pio, pin);
// Set the pin direction to output at the PIO
pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
// Load our configuration, and jump to the start of the program
pio_sm_init(pio, sm, offset, &c);
// Set the state machine running
pio_sm_set_enabled(pio, sm, true);
}
%}

其流程主要如下:

將程序加載到PIO的指令存儲器中;

設置PIO狀態機以運行程序;

在狀態機運行時與狀態機交互。

C文件:

#include "pico/stdlib.h"
#include "hardware/pio.h"
// Our assembled program:
#include "hello.pio.h"
int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning pio/hello_pio example requires a board with a regular LED
#else
// Choose which PIO instance to use (there are two instances)
PIO pio = pio0;
// Our assembled program needs to be loaded into this PIO's instruction
// memory. This SDK function will find a location (offset) in the
// instruction memory where there is enough space for our program. We need
// to remember this location!
uint offset = pio_add_program(pio, &hello_program);
// Find a free state machine on our chosen PIO (erroring if there are
// none). Configure it to run our program, and start it, using the
// helper function we included in our .pio file.
uint sm = pio_claim_unused_sm(pio, true);
hello_program_init(pio, sm, offset, PICO_DEFAULT_LED_PIN);
// The state machine is now running. Any value we push to its TX FIFO will
// appear on the LED pin.
while (true) {
// Blink
pio_sm_put_blocking(pio, sm, 1);
sleep_ms(500);
// Blonk
pio_sm_put_blocking(pio, sm, 0);
sleep_ms(500);
}
#endif
}

我們會發現其中調用了 “hello.pio.h” 頭文件,其與之前的 pio 文件相關,但 pio 文件并不能在 c 文件中直接調用,于是就需要 Cmake 文件將 pio 文件和 c 文件聯系到一起,并構建一個可執行文件。

Cmake文件

add_executable(hello_pio)
pico_generate_pio_header(hello_pio ${CMAKE_CURRENT_LIST_DIR}/hello.pio)
target_sources(hello_pio PRIVATE hello.c)
target_link_libraries(hello_pio PRIVATE
pico_stdlib
hardware_pio
)
pico_add_extra_outputs(hello_pio)

add url via pico_set_program_url

example_auto_set_url(hello_pio)

其中的 pico_generate_pio_header 非常重要,其將之前用匯編語言寫的 pio 文件生成為一個 .h 頭文件,以供 c 文件調用。

通過這寫文件和 pico 官方提供的 sdk 就可以構建一個串口打印 hello 的程序了。

其他

我是在移植 pico-w 板載的 Wi-Fi 功能時注意到這一功能的,因為需要使用到 cyw43_bus_pio_spi.pio 。但是由于 RT-Thread 這邊使用的是 Scons,于是我就先利用 pico-examples 的 cmake 生成該 pio文件對應的 .h 文件 cyw43_bus_pio_spi.pio.h 然后復制過來是以供項目調用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1626

    文章

    21666

    瀏覽量

    601837
  • 存儲器
    +關注

    關注

    38

    文章

    7452

    瀏覽量

    163605
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27478
  • RT-Thread
    +關注

    關注

    31

    文章

    1272

    瀏覽量

    39920
  • 樹莓派
    +關注

    關注

    116

    文章

    1698

    瀏覽量

    105524
收藏 人收藏

    評論

    相關推薦

    樹莓Pico如何使用PIO程序呢?

    在這篇教程中,我們看到的代碼看起來與其他的部分的代碼非常不同。那是因為我們大多數時候不得不在 MCU 的底層處理事情。
    的頭像 發表于 11-14 15:06 ?1847次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>如何使用<b class='flag-5'>PIO</b>程序呢?

    樹莓pico入門學習筆記(一)相關資料推薦

    樹莓pico入門學習筆記選擇自己熟悉的編程語言樹莓pico提供C/C++和micropyth
    發表于 07-01 09:28

    樹莓pico如何入門?

    樹莓pico如何入門?
    發表于 10-13 08:11

    樹莓Pico的相關資料分享

    關注、星標公眾號,直達精彩內容1月22日,樹莓基金會最新發布一款低成本、高性能的微控制器開發板Raspberry Pi Pico,新產品相比普通樹莓
    發表于 11-03 08:44

    樹莓Pico的相關資料推薦

    1月22日,樹莓基金會最新發布一款低成本、高性能的微控制器開發板Raspberry Pi Pico,新產品相比普通樹莓體積更小,售價僅4
    發表于 02-07 07:37

    遠程控制樹莓3b上的pi pico

    樹莓pi pico樹莓4相比差別很大,但是pi pico有一些特點是
    的頭像 發表于 03-05 17:23 ?3946次閱讀

    樹莓也出MCU了?樹莓Pico來了!

    關注、星標公眾號,直達精彩內容1月22日,樹莓基金會最新發布一款低成本、高性能的微控制器開發板Raspberry Pi Pico,新產品相比普通樹莓
    發表于 10-28 10:36 ?11次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>也出MCU了?<b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>來了!

    樹莓不講武德,自研雙核MCU Pico,STM32哭暈在廁所!

    PIO架構,能否開創MCU市場全新領域,STM,兆易創新,STC,全志,樂鑫等一票國產MCU能否跟上?樹莓派發布雙核基于M0的MCU近日,樹莓派發布了自研的40nm雙核MCU,嵌入式MCU市場又要迎來真正的新氣象.一如之前發布的
    發表于 10-28 20:20 ?14次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>不講武德,自研雙核MCU <b class='flag-5'>Pico</b>,STM32哭暈在廁所!

    樹莓Pico:僅4美元的MCU

    1月22日,樹莓基金會最新發布一款低成本、高性能的微控制器開發板Raspberry Pi Pico,新產品相比普通樹莓體積更小,售價僅4
    發表于 12-04 13:06 ?13次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>:僅4美元的MCU

    樹莓pico入門學習筆記(一)

    樹莓pico入門學習筆記選擇自己熟悉的編程語言樹莓pico提供C/C++和micropyth
    發表于 12-17 18:42 ?21次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>pico</b>入門學習筆記(一)

    距離檢測報警使用樹莓Pico

    電子發燒友網站提供《距離檢測報警使用樹莓Pico.zip》資料免費下載
    發表于 11-09 11:49 ?0次下載
    距離檢測報警使用<b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>

    基于樹莓pico的可編程游戲手柄設計

    方案介紹組件12x12x7.3mm 瞬時觸覺按鈕按鈕樹莓Pico通用 D1286464 OLED 顯示屏操縱桿模塊 PS210 歐姆電阻?組裝將樹莓
    發表于 12-26 15:10 ?0次下載

    使用樹莓Pico制作USB麥克風

    本指南將教你如何使用樹莓 Pico 和外部數字麥克風制作屬于自己的 USB 麥克風。本項目通過 RP2040 微控制器(MCU)的編程 I/O(PIO)、直接存儲器訪問(DMA)和通
    的頭像 發表于 08-17 10:12 ?2834次閱讀
    使用<b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>制作USB麥克風

    樹莓Pico Flash驅動踩坑記錄

    樹莓 pico 帶有 2MB 的 Flash 資源,以下是我基于官方 Pico C/C++ SDK 對接 Flash 驅動時踩到的一些坑和解決辦法。
    的頭像 發表于 10-20 11:44 ?1460次閱讀

    如何在樹莓Pico上使用紅外線接收模塊?

    樹莓 Pico 上使用紅外線接收模塊(HX1838 型),我們采用開源的 pico_ir 庫。
    的頭像 發表于 11-30 09:08 ?2121次閱讀
    如何在<b class='flag-5'>樹莓</b><b class='flag-5'>派</b><b class='flag-5'>Pico</b>上使用紅外線接收模塊?