0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

零基礎(chǔ)開發(fā)小安派-Eyes-S1外設(shè)篇——GPIO 輸入輸出

AIoT行業(yè)洞察 ? 來源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2024-10-25 13:50 ? 次閱讀

AiPi-Eyes-S1是安信可開源團(tuán)隊(duì)專門為Ai-M61-32S設(shè)計(jì)的一款開發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的外設(shè)接口,具體包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太網(wǎng) (EMAC)、SD/MMC(SDH)、SPI、UART、I2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。

從零開始學(xué)習(xí)小安派:

1、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——初識(shí)小安派-Eyes-S1

2、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——安裝VMware與Ubuntu

3、入門篇:零基礎(chǔ)開發(fā)小安派-Eyes-S1——新建工程并燒錄調(diào)試

4、零基礎(chǔ)開發(fā)小安派-Eyes-S1入門篇——Win下SSH連接Linux

5、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——Samba共享文件夾

6、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——工程文件架構(gòu)

博流系列的芯片驅(qū)動(dòng)分為兩類,LHAL 和 SOC,使用 LHAL 庫驅(qū)動(dòng)外設(shè)十分方便,因?yàn)槠鋵?duì)通用外設(shè)進(jìn)行了統(tǒng)一的封裝,在使用博流的不同芯片時(shí)他們的接口一致,方便使用和移植。而 SOC 則是作為特殊部分使用,如 GLB、HBN、PDS、AON 等等。

一、了解 LHAL 庫和小安派-Eyes-S1 外設(shè)

LHAL 庫配備了一個(gè)結(jié)構(gòu)體作為通用外設(shè)的配置工具——struct bflb_device_s

struct bflb_device_s {
const char *name;uint32_t reg_base;
uint8_t irq_num;
uint8_t idx;
uint8_t sub_idx;
uint8_t dev_type;
void *user_data;
};

對(duì)芯片的所有操作其實(shí)都是基于對(duì)寄存器的配置,所以該結(jié)構(gòu)體的成員中較為重要的為 reg_base 和 irq_num ,有了這兩個(gè)才能操作外設(shè)寄存器和外設(shè)中斷。

在配置之前,我們也得先初始化結(jié)構(gòu)體獲得它的句柄,有兩種方式

1.bflb_device_get_by_name 通過 name 獲取
2.bflb_device_get_by_id 通過 dev_type 和 idx 獲取

獲得的句柄會(huì)在一個(gè) table 表中,詳情可以看 lhal/config/xxx/device_table.c 文件。

小安派-Eyes-S1 所支持的外設(shè) LHAL 庫 API 有如下:√ 表示已支持,× 表示未支持,-表示沒有該外設(shè)

wKgaomcbMaOAXRzEAACRGM3g1mU839.jpg

二、GPIO 配置簡(jiǎn)介

1.頭文件 bflb_gpio.h

2.gpio mode

gpio 的模式可以設(shè)置為四種,分別是輸入、輸出、模擬、復(fù)用

#define GPIO_INPUT (0 << GPIO_MODE_SHIFT) /* Input Enable */
#define GPIO_OUTPUT (1 << GPIO_MODE_SHIFT) /* Output Enable */
#define GPIO_ANALOG (2 << GPIO_MODE_SHIFT) /* Analog Enable */
#define GPIO_ALTERNATE (3 << GPIO_MODE_SHIFT) /* Alternate Enable */

3.gpio pupd

gpio 可以選擇上拉、下拉、浮空

#define GPIO_FLOAT (0 << GPIO_PUPD_SHIFT) /* No pull-up, pull-down */
#define GPIO_PULLUP (1 << GPIO_PUPD_SHIFT) /* Pull-up */
#define GPIO_PULLDOWN (2 << GPIO_PUPD_SHIFT) /* Pull-down */

4.gpio smt

gpio 濾波開關(guān)

#define GPIO_SMT_DIS (0 << GPIO_SMT_SHIFT)
#define GPIO_SMT_EN (1 << GPIO_SMT_SHIFT)

5.gpio drive

gpio 輸出能力選擇

#define GPIO_DRV_0 (0 << GPIO_DRV_SHIFT)
#define GPIO_DRV_1 (1 << GPIO_DRV_SHIFT)
#define GPIO_DRV_2 (2 << GPIO_DRV_SHIFT)
#define GPIO_DRV_3 (3 << GPIO_DRV_SHIFT)

6.gpio init trig mode

gpio 外部中斷的觸發(fā)模式

#define GPIO_INT_TRIG_MODE_SYNC_FALLING_EDGE 0
#define GPIO_INT_TRIG_MODE_SYNC_RISING_EDGE 1
#define GPIO_INT_TRIG_MODE_SYNC_LOW_LEVEL 2
#define GPIO_INT_TRIG_MODE_SYNC_HIGH_LEVEL 3
#if defined(BL702)
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE 5
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL 6
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL 7
#else
#define GPIO_INT_TRIG_MODE_SYNC_FALLING_RISING_EDGE 4
#define GPIO_INT_TRIG_MODE_ASYNC_FALLING_EDGE 8
#define GPIO_INT_TRIG_MODE_ASYNC_RISING_EDGE 9
#define GPIO_INT_TRIG_MODE_ASYNC_LOW_LEVEL 10
#define GPIO_INT_TRIG_MODE_ASYNC_HIGH_LEVEL 11
#endif

7.gpio uart function

每個(gè) gpio 都可以選擇到 Uart 的任意一個(gè)功能,當(dāng)然區(qū)別是在初始化時(shí)的選擇

#define GPIO_UART_FUNC_UART0_RTS 0
#define GPIO_UART_FUNC_UART0_CTS 1
#define GPIO_UART_FUNC_UART0_TX 2
#define GPIO_UART_FUNC_UART0_RX 3
#define GPIO_UART_FUNC_UART1_RTS 4
#define GPIO_UART_FUNC_UART1_CTS 5
#define GPIO_UART_FUNC_UART1_TX 6
#define GPIO_UART_FUNC_UART1_RX 7
#if defined(BL808) || defined(BL606P)
#define GPIO_UART_FUNC_UART2_RTS 8
#define GPIO_UART_FUNC_UART2_CTS 9
#define GPIO_UART_FUNC_UART2_TX 10
#define GPIO_UART_FUNC_UART2_RX 11
#endif

三、gpio 的初始化及使用

1.bflb_gpio_init

說明: gpio 的初始化函數(shù)

void bflb_gpio_init(struct bflb_device_s *dev, uint8_t pin, uint32_t cfgset);

wKgaomcbMaSAXxN2AAA3LT1qgzk855.jpg

2.bflb_gpio_deinit

說明: 反初始化 gpio,默認(rèn)為輸入浮空狀態(tài)

void bflb_gpio_deinit(struct bflb_device_s *dev, uint8_t pin);

wKgZomcbMaSAfNeMAAAc9IJJlXc616.jpg

3.bflb_gpio_set

說明: gpio 輸出高電平

void bflb_gpio_set(struct bflb_device_s *dev, uint8_t pin);

4.bflb_gpio_reset

說明: gpio 輸出低電平

void bflb_gpio_reset(struct bflb_device_s *dev, uint8_t pin);

wKgaomcbMaWAR_ROAAAgFLFceRs366.jpg

5.bflb_gpio_read

說明: 讀取 gpio 電平

bool bflb_gpio_read(struct bflb_device_s *dev, uint8_t pin);

wKgZomcbMaaASFp1AAAkxrfhvII101.jpg

編輯

四、示例——GPIO 輸出點(diǎn)亮 LED 燈、GPIO 輸入采集電平并打印

直接用 SDK 里的 GPIO 示例稍作修改。并逐步解釋代碼實(shí)現(xiàn)。

查看原理圖,這里已經(jīng)標(biāo)注了預(yù)留的接口,需要飛線(幸好找到一個(gè)合適的座子)

wKgaomcbMaaAeizGAABaXyZjPLk675.jpg

wKgZomcbMaiAciTkAADpwF1xnmg088.jpg

1.main

#include "bflb_gpio.h" //gpio頭文件
#include "bflb_mtimer.h" //mtimer定時(shí)器頭文件,可使用里面的延時(shí)函數(shù)
#include "board.h" //開發(fā)板頭文件,包含LHAL庫等
struct bflb_device_s *gpio; //初始化一個(gè)結(jié)構(gòu)體指針作為外設(shè)句柄命名為gpio,
int main(void)
{
board_init(); //開發(fā)板初始化
gpio = bflb_device_get_by_name("gpio"); //給前面的gpio句柄賦值對(duì)外設(shè)進(jìn)行操作,這里的名字
//可使用的外設(shè)全部命名在bl616_device_table這個(gè)結(jié)構(gòu)體數(shù)組里,我們所有使用的外設(shè)命名與上面列表中支持的外設(shè)列表
//也可以在函數(shù)定義里查看所有可支持的外設(shè)名稱,命名一定要匹配。
printf("gpio outputrn"); //printf函數(shù)已經(jīng)重定義為輸出在串口0上,我們作為LOG查看
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
//gpio初始化,第一個(gè)參數(shù)為句柄,第二個(gè)參數(shù)為pin,第三個(gè)為GPIO的配置,這里配置為輸出、浮空、濾波打開、驅(qū)動(dòng)等級(jí)0
bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_INPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
//gpio初始化,第一個(gè)參數(shù)為句柄,第二個(gè)參數(shù)為pin,第三個(gè)為GPIO的配置,這里配置為輸入、浮空、濾波打開、驅(qū)動(dòng)等級(jí)0
while (1) {
bflb_gpio_set(gpio, GPIO_PIN_0);//將pin0設(shè)置為高電平
printf("33[0;34m GPIO_PIN_1=%x33[0m rn", bflb_gpio_read(gpio, GPIO_PIN_1));
//這里的33[0;34m為函數(shù)的打印字體、前景色、后景色的設(shè)置,只是將打印的信息賦予顏色,感興趣的同學(xué)可以百度
//bflb_gpio_read讀取pin1的電平,返回true為高電平,false為低電平
bflb_mtimer_delay_ms(2000);//延遲2000毫秒,也就是2秒
bflb_gpio_reset(gpio, GPIO_PIN_0);
printf("33[0;35;40m GPIO_PIN_1=%x33[0m rn", bflb_gpio_read(gpio, GPIO_PIN_1));
bflb_mtimer_delay_ms(2000);
}
}

2.實(shí)現(xiàn)效果,GPIO0 每兩秒循環(huán)亮滅一次,每兩秒打印 GPIO1 的電平

wKgaomcbMamAaPTLAAAyEIkK2Bs959.jpg

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8441

    瀏覽量

    150700
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4886

    瀏覽量

    97019
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1188

    瀏覽量

    51821
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    零基礎(chǔ)開發(fā)小安-Eyes-DU之【PWM循環(huán)呼吸燈】

    上周發(fā)布了新的開源硬件——小安-Eyes-DU,DU板子亮點(diǎn)是什么?小安來解釋下。 小安-
    的頭像 發(fā)表于 08-14 15:37 ?727次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU之【PWM循環(huán)呼吸燈】

    如何用小安-Eyes-S1做一個(gè)電子木魚?

    2024年的第一教程來了,本篇學(xué)習(xí)如何添加LVGL事件,并制作完成一個(gè)電子木魚(小美苦苦哀求,我略微出手而已)。祝大家2024積德累功,心想事成!接下來看看如何用小安-Eyes-S1
    的頭像 發(fā)表于 01-13 15:18 ?934次閱讀
    如何用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個(gè)電子木魚?

    零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)——GPIO中斷編程

    等。 AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。 產(chǎn)品資料:https://docs.ai-thinker.com/eyes
    的頭像 發(fā)表于 10-29 14:56 ?617次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b><b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>——<b class='flag-5'>GPIO</b>中斷編程

    零基礎(chǔ)開發(fā)安信可小安-Eyes-S1【入門】——初識(shí)小安-Eyes-S1

    初識(shí)小安-Eyes-S1 前言:本教程針對(duì)零基礎(chǔ)人員可以快速上手小安-
    發(fā)表于 09-08 11:06

    GPIO通用輸入輸出

    GPIO通用輸入輸出一、GPIO的功能概述用途:GPIO是通用輸入輸出(General Purpose I/O)的簡(jiǎn)稱,主要用于工業(yè)現(xiàn)場(chǎng)需要
    發(fā)表于 12-20 18:58 ?6次下載
    <b class='flag-5'>GPIO</b>通用<b class='flag-5'>輸入輸出</b>

    小安-Eyes-S1/S2多功能開發(fā)板簡(jiǎn)介

    今天,我們?cè)?b class='flag-5'>小安放出新鮮的開發(fā)板產(chǎn)品AiPi-Eyes-S1小安-
    的頭像 發(fā)表于 06-19 10:10 ?859次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S</b>2多功能<b class='flag-5'>開發(fā)</b>板簡(jiǎn)介

    安信可開源工程——小安-Eyes-S1/S2多功能開發(fā)

    前言 AiPi-Eyes-S1 是安信可開源團(tuán)隊(duì)專門為Ai-M61-32S設(shè)計(jì)的一款開發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的
    的頭像 發(fā)表于 06-20 09:51 ?604次閱讀
    安信可開源工程——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>/<b class='flag-5'>S</b>2多功能<b class='flag-5'>開發(fā)</b>板

    安信可開源硬件——小安-Eyes-DU開發(fā)

    安信可科技又來一款小安開源硬件——小安-Eyes-DU開發(fā)板,來看看參數(shù)~ 01概述
    的頭像 發(fā)表于 08-07 14:52 ?760次閱讀
    安信可開源硬件——<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes</b>-DU<b class='flag-5'>開發(fā)</b>板

    小安-Eyes-S1外設(shè)接口簡(jiǎn)介

    前言:本教程針對(duì)零基礎(chǔ)人員可以快速上手小安-Eyes-S1實(shí)現(xiàn)一些簡(jiǎn)單的應(yīng)用開發(fā),僅供參考學(xué)習(xí),本人也在學(xué)習(xí)的過程中,感謝大家支持。
    的頭像 發(fā)表于 09-18 09:55 ?785次閱讀

    零基礎(chǔ)開發(fā)小安-Eyes-S1【入門】——初識(shí)小安-Eyes-S1

    前言:本教程針對(duì)零基礎(chǔ)人員可以快速上手小安-Eyes-S1實(shí)現(xiàn)一些簡(jiǎn)單的應(yīng)用開發(fā),僅供參考學(xué)習(xí),本人也在學(xué)習(xí)的過程中,感謝大家支持。
    的頭像 發(fā)表于 09-18 15:41 ?654次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門<b class='flag-5'>篇</b>】——初識(shí)<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>

    小安-Eyes-S1安裝VMware與Ubuntu教程

    設(shè)置了中文,換好了國內(nèi)的清華APT源,安裝VScode與必要的插件,拉取了截至目前更新的小安最新的SDK和子模塊,配置好了編譯環(huán)境。由于集成度較高,本次下載的壓縮包高達(dá)10G。選擇上傳了百度云(主要是莫工有會(huì)員),若有其他需求后期也可以上傳至其他云。
    的頭像 發(fā)表于 09-24 10:58 ?821次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>安裝VMware與Ubuntu教程

    功德+1,用小安-Eyes-S1做一個(gè)電子木魚

    2024積德累功,心想事成!接下來 看看如何用小安-Eyes-S1做一個(gè)電子木魚 。 01、GUI-Guider 頁面設(shè)計(jì) 先新建一個(gè)工程。 直接進(jìn)入 UI 設(shè)計(jì)界面,這里用到了兩個(gè)組件, 一個(gè)是圖片按鈕,一個(gè)是文本框 。 先
    的頭像 發(fā)表于 01-16 14:33 ?623次閱讀
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個(gè)電子木魚

    開發(fā)教程 零基礎(chǔ)開發(fā)小安-Eyes-S1入門——Win下SSH連接Linux

    AiPi-Eyes-S1 是安信可開源團(tuán)隊(duì)專門為Ai-M61-32S設(shè)計(jì)的一款開發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的
    的頭像 發(fā)表于 09-24 14:31 ?211次閱讀
    <b class='flag-5'>開發(fā)</b>教程 <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>入門<b class='flag-5'>篇</b>——Win下SSH連接Linux

    零基礎(chǔ)開發(fā)小安-Eyes-S1【入門】——工程文件架構(gòu)

    -Eyes-S1【入門】——初識(shí)小安-Eyes-S12、零基礎(chǔ)
    的頭像 發(fā)表于 11-06 16:10 ?30次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【入門<b class='flag-5'>篇</b>】——工程文件架構(gòu)

    零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)】——PWM

    】——工程文件架構(gòu)7、零基礎(chǔ)開發(fā)小安-Eyes-S1外設(shè)
    的頭像 發(fā)表于 11-06 16:10 ?32次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>開發(fā)</b><b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>【<b class='flag-5'>外設(shè)</b><b class='flag-5'>篇</b>】——PWM