日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

GPIO

更正文檔 貢獻說明

概述

GPIO設備VFS驅動子系統。

版權說明

說明

Apache license v2.0

目錄結構

├── src
│   └── gpio_dev.c          # HAL to VFS適配
├── include
│   └── aos
│       ├── hal
│       │   └── gpio.h      # HAL API
│       └── vfsdev
│           └── gpio_dev.h  # VFS API
├── package.yaml            # 編譯配置文件
└── example
    └── gpio_example.c      # 示例代碼(默認禁用,可在package.yaml中使能)

依賴組件

  • base

  • vfs

常用配置

API說明

打開

int open(const char *pathname, int flags);

args

description

pathname

固定為"/dev/gpio"

flags

目前固定為0值

兼容POSIX標準的open接口。

關閉

int close(int fd);

兼容POSIX標準的close接口。

配置輸入屬性并獲取輸入電平

typedef struct gpio_io_config {
    unsigned int id : 8;        // GPIO id
    unsigned int config : 16;   // GPIO config
    unsigned int data : 1;      // output data
} gpio_io_config_t;

int ioctl(int fd, IOC_GPIO_GET, gpio_io_config_t *config);

參數config中的ID成員變量表示GPIO pin ID。 參數config中的config成員變量表示輸入屬性:

符號

含義

GPIO_IO_INPUT | GPIO_IO_INPUT_PU

輸入上拉

GPIO_IO_INPUT | GPIO_IO_INPUT_PD

輸入下拉

GPIO_IO_INPUT | GPIO_IO_INPUT_HI

輸入高阻

參數config中的data成員變量無意義。 返回值等于0表示輸入為低電平,大于0表示輸入為高電平,小于0表示出錯。

配置輸出屬性并設置輸出電平

int ioctl(int fd, IOC_GPIO_SET, gpio_io_config_t *config);

參數config中的ID成員變量表示GPIO pin ID。 參數config中的config成員變量表示輸出屬性:

符號

含義

GPIO_IO_OUTPUT | GPIO_IO_OUTPUT_PP

輸出推挽

GPIO_IO_OUTPUT | GPIO_IO_OUTPUT_ODNP

輸出開漏無上拉

GPIO_IO_OUTPUT | GPIO_IO_OUTPUT_ODPU

輸出開漏有上拉

GPIO_IO_TOGGLE

翻轉輸出電平

參數config中的data成員變量表示輸出電平,0表示低電平,1表示高電平;config為GPIO_IO_TOGGLE時data無意義。 返回值等于0表示成功,小于0表示出錯。

配置中斷

typedef int (*io_irq_handler_t)(void *arg);

typedef struct gpio_irq_config {
    unsigned int id : 8;        // GPIO id
    unsigned int config : 16;   // IRQ config
    unsigned char *arg;         // IRQ callback argument
    io_irq_handler_t cb;        // IRQ callback
} gpio_irq_config_t;

int ioctl(int fd, IOC_GPIO_SET_IRQ, gpio_irq_config_t *config);

參數config中的ID成員變量表示GPIO pin ID。 參數config中的config成員變量表示中斷屬性:

符號

含義

GPIO_IRQ_ENABLE | GPIO_IRQ_EDGE_RISING

使能上升沿觸發中斷

GPIO_IRQ_ENABLE | GPIO_IRQ_EDGE_FALLING

使能下降沿觸發中斷

GPIO_IRQ_ENABLE | GPIO_IRQ_EDGE_BOTH

使能上升下降沿觸發中斷

GPIO_IRQ_DISABLE

禁用中斷

參數config中的cb成員變量表示中斷回調函數。 參數config中的arg成員變量表示傳遞給中斷回調函數的參數。 返回值等于0表示成功,小于0表示出錯。

使用示例

組件使用示例相關的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發工具,所以首先需要參考《AliOS Things集成開發環境使用說明之搭建開發環境》,下載安裝。 待開發環境搭建完成后,可以按照以下步驟進行示例的測試。

步驟1 創建或打開工程

打開已有工程

如果用于測試的案例工程已存在,可參考《AliOS Things集成開發環境使用說明之打開工程》打開已有工程。

創建新的工程

組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運行,這里選擇helloworld_demo案例。helloworld_demo案例相關的源代碼下載可參考《AliOS Things集成開發環境使用說明之創建工程》

步驟2 添加組件

案例下載完成后,需要在helloworld_demo組件的package.yaml中添加對組件的依賴:

depends:
  - gpio: dev_aos          # helloworld_demo中引入gpio組件

步驟3 下載組件

在已安裝了的開發環境工具欄中,選擇Terminal -> New Terminal啟動終端,并且默認工作路徑為當前工程的workspace,此時在終端命令行中輸入:

aos install gpio

上述命令執行成功后,組件源碼則被下載到了./components/drivers/peripheral路徑中。

步驟4 添加示例

gpio組件的package.yaml中添加example

source_file:
  - "src/*.c"
  - "example/gpio_example.c"

步驟5 編譯固件

在示例代碼已經添加至組件的配置文件,并且helloworld_demo已添加了對該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《AliOS Things集成開發環境使用說明之編譯固件》

步驟6 燒錄固件

helloworld_demo案例的固件生成后,可參考《AliOS Things集成開發環境使用說明之燒錄固件》來燒錄固件。

步驟7 打開串口

固件燒錄完成后,可以通過串口查看示例的運行結果,打開串口的具體方法可參考《AliOS Things集成開發環境使用說明之查看日志》

當串口終端打開成功后,可在串口中輸入help來查看已添加的測試命令。

步驟8 測試示例

CLI命令行輸入:

gpiot <pin ID>

關鍵日志示例測試日志顯示:

open gpio success, fd:<fd>
gpio read <pin ID> return <ioctl IOC_GPIO_GET返回值>
gpio write <pin ID> return <ioctl IOC_GPIO_SET(配置輸出)返回值>
gpio toggle <pin ID> return <ioctl IOC_GPIO_SET(翻轉輸出)返回值>

注意事項

FAQ

  1. API中的pin ID如何填寫?

說明

一般來說GPIO是分組的。以HaaS100為例,它的GPIO pin是8個一組。如果某GPIO pin名稱為GPIO_2_6,則pin ID應為2 * 8 + 6 = 22。其它pin ID的計算方法依此類推。