在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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
    +關注

    關注

    1644

    文章

    22009

    瀏覽量

    616602
  • 存儲器
    +關注

    關注

    38

    文章

    7643

    瀏覽量

    166860
  • 狀態機
    +關注

    關注

    2

    文章

    493

    瀏覽量

    28156
  • RT-Thread
    +關注

    關注

    32

    文章

    1387

    瀏覽量

    41696
  • 樹莓派
    +關注

    關注

    121

    文章

    1978

    瀏覽量

    107222
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    在這篇教程中,我們看到的代碼看起來與其他的部分的代碼非常不同。那是因為我們大多數時候不得不在 MCU 的底層處理事情。
    的頭像 發表于 11-14 15:06 ?2731次閱讀
    <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

    樹莓也出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 ?3969次閱讀
    使用<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 ?2039次閱讀

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

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

    樹莓 Pico 2040 的“速度狂飆”:時鐘速度幾乎翻倍!

    樹莓Pico2040的“超能力”升級如果你手頭有一個樹莓Pico2040,但總覺得它的性能還
    的頭像 發表于 03-25 09:25 ?344次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b> <b class='flag-5'>Pico</b> 2040 的“速度狂飆”:時鐘速度幾乎翻倍!
    主站蜘蛛池模板: 亚洲狠狠婷婷综合久久久图片 | 欧美日一区二区三区 | 午夜一级毛片不卡 | 国产精品久久福利网站 | 色综合久久久久久久久五月 | xxxx日本在线播放免费不卡 | 在线国产资源 | 成年网站在线看 | 99插插插| eeuss影院www影院夜场 | 欧美一级黄色录相 | 亚洲一区毛片 | 亚洲欧美精品成人久久91 | 一级做a爱片久久毛片 | bt天堂电影| 午夜美女久久久久爽久久 | 欧美日一级 | 高清不卡免费一区二区三区 | 麻豆国产三级在线观看 | 韩国特黄特色a大片免费 | 青草视频在线观看国产 | 在线黄色网| 1515hh四虎免费观com | 免费看国产一级片 | 欧美午夜视频在线 | 性欧美17一18sex性高清 | 98色花堂永久地址国产精品 | 久久99免费 | 午夜视频国产 | 欧美黑人巨大xxx猛交 | 四虎永久在线日韩精品观看 | 丁香婷婷亚洲 | 性欧美护士18xxxxhd视频 | 色视频在线观看网站 | 4hu影院在线观看 | 免费看h网站 | 成人在线亚洲 | h网站在线看 | 亚洲电影一区二区三区 | 国产精品特黄毛片 | 欧美成人精品一区二区 |