国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

這篇具有很好參考價(jià)值的文章主要介紹了OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

摘要:本文簡單介紹如何操作GPIO去點(diǎn)燈

適合群體:適用于Hi3861開發(fā)板,L0輕量系統(tǒng)驅(qū)動(dòng)開發(fā)

5.1點(diǎn)燈例程源碼

先看最簡單得LED燈閃爍操作

源碼結(jié)構(gòu)如下:

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

第一個(gè)BUILD.gn文件內(nèi)容:

static_library("led_demo") {
    sources = [
        "led_demo.c"
    ]

    include_dirs = [
        "http://utils/native/lite/include",
        "http://kernel/liteos_m/components/cmsis/2.0",
        "http://base/iot_hardware/peripheral/interfaces/kits",
    ]
}

第二個(gè)BUILD.gn內(nèi)容:

# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("http://build/lite/config/component/lite_component.gni")

lite_component("app") {
    features = [
        "led_demo:led_demo",
    ]
}

led_demo.c內(nèi)容:

#include <unistd.h>
#include "stdio.h"
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "iot_gpio.h"

#define LED_TEST_GPIO 9 // for hispark_pegasus

void *LedTask(const char *arg)
{
    //初始化GPIO
    IoTGpioInit(LED_TEST_GPIO);

    //設(shè)置為輸出
    IoTGpioSetDir(LED_TEST_GPIO, IOT_GPIO_DIR_OUT);

    (void)arg;
    while (1) 
    {
        //輸出低電平
        IoTGpioSetDir(LED_TEST_GPIO, 0);
        usleep(300000);
        //輸出高電平
        IoTGpioSetDir(LED_TEST_GPIO, 1);
        usleep(300000);
    }

    return NULL;
}

void led_demo(void)
{
    osThreadAttr_t attr;
    
    attr.name = "LedTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 512;
    attr.priority = 26;

    if (osThreadNew((osThreadFunc_t)LedTask, NULL, &attr) == NULL) {
        printf("[LedExample] Falied to create LedTask!\n");
    }
    
}

編譯后燒錄進(jìn)去,應(yīng)該可以看到復(fù)位按鍵旁邊的LED燈一直在閃爍。

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

5.2 驅(qū)動(dòng)框架

OpenHarmony為輕量系統(tǒng)提供了一套簡單的驅(qū)動(dòng)封裝接口,函數(shù)的定義相關(guān)頭文件位于“base\iot_hardware\peripheral\interfaces\kits”

??

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

這里只有頭文件,具體的函數(shù)實(shí)現(xiàn),需要在對(duì)應(yīng)的soc中,具體路徑定義由

device\board\hisilicon\hispark_pegasus\liteos_m\config.gni 文件中定義:

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

所以我們可以知道,具體的路徑就是

“device\soc\hisilicon\hi3861v100\hi3861_adapter\hals\iot_hardware\wifiiot_lite”

相關(guān)文件如下:

?

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

這里是代碼實(shí)現(xiàn),具體是將hi3861相關(guān)的驅(qū)動(dòng)接口封裝成鴻蒙的驅(qū)動(dòng)接口。

所以我們可以總結(jié)如下:

5.3 GPIO相

OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈

關(guān)接口函數(shù)

(1)相關(guān)枚舉:

/**
  * @brief 枚舉 GPIO 電平值。
  */
類型定義枚舉 {
     /** 低 GPIO 電平 */
     IOT_GPIO_VALUE0 = 0,
     /** 高 GPIO 電平 */
     IOT_GPIO_VALUE1
} IotGpioValue;

/**
  * @brief 枚舉 GPIO 方向。
  */
類型定義枚舉 {
     /** 輸入 */
     IOT_GPIO_DIR_IN = 0,
     /** 輸出 */
     IOT_GPIO_DIR_OUT
} IotGpioDir;

/**
  * @brief 枚舉 GPIO 中斷觸發(fā)模式。
  */
類型定義枚舉 {
     /** 電平敏感中斷 */
     IOT_INT_TYPE_LEVEL = 0,
     /** 邊緣敏感中斷 */
     IOT_INT_TYPE_EDGE
} IotGpioIntType;

/**
  * @brief 枚舉 I/O 中斷極性。
  */
類型定義枚舉 {
     /** 低電平或下降沿中斷 */
     IOT_GPIO_EDGE_FALL_LEVEL_LOW = 0,
     /** 高電平或上升沿中斷 */
     IOT_GPIO_EDGE_RISE_LEVEL_HIGH
} IotGpioIntPolarity;

(2)普通GPIO相關(guān)API

/**
 * @brief 表示 GPIO 中斷回調(diào)。
 *
 */
typedef void (*GpioIsrCallbackFunc) (char *arg);

/**
 * @brief 初始化一個(gè) GPIO 設(shè)備。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @return 如果 GPIO 設(shè)備已初始化,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioInit(unsigned int id);

/**
 * @brief 取消初始化 GPIO 設(shè)備。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @return 如果 GPIO 設(shè)備被取消初始化,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioDeinit(unsigned int id);

/**
 * @brief 設(shè)置 GPIO 引腳的方向。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param dir 指示 GPIO 輸入/輸出方向。
 * @return 如果設(shè)置了方向,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir);

/**
 * @brief 獲取 GPIO 引腳的方向。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param dir 指示指向 GPIO 輸入/輸出方向的指針。
 * @return 如果獲取到方向,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioGetDir(unsigned int id, IotGpioDir *dir);

/**
 * @brief 設(shè)置 GPIO 引腳的輸出電平值。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param val 表示輸出電平值。
 * @return 如果設(shè)置了輸出級(jí)別值,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioSetOutputVal(unsigned int id,IotGpioValue val);

/**
 * @brief 獲取 GPIO 引腳的輸出電平值。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param val 表示指向輸出電平值的指針。
 * @return 如果獲得輸出電平值,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioGetOutputVal(unsigned int id, IotGpioValue *val);

/**
 * @brief 獲取 GPIO 引腳的輸入電平值。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param val 表示指向輸入電平值的指針。
 * @return 如果獲得輸入電平值,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioGetInputVal(unsigned int id, IotGpioValue *val);

(3)按鍵中斷相關(guān)API文章來源地址http://www.zghlxwxcb.cn/news/detail-471693.html

/**
 * @brief 啟用 GPIO 引腳的中斷功能。
 *
 * 該函數(shù)可用于設(shè)置GPIO引腳的中斷類型、中斷極性和中斷回調(diào)。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param intType 表示中斷類型。
 * @param intPolarity 指示中斷極性。
 * @param func 表示中斷回調(diào)函數(shù)。
 * @param arg 表示指向中斷回調(diào)函數(shù)中使用的參數(shù)的指針。
 * @return 如果啟用中斷功能,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioRegisterIsrFunc(unsigned int id,IotGpioIntType intType,IotGpioIntPolarity intPolarity,
                                    GpioIsrCallbackFunc fun,char *arg);

/**
 * @brief 禁用 GPIO 引腳的中斷功能。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @return 如果中斷功能被禁用,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioUnregisterIsrFunc(unsigned int id);

/**
 * @brief 屏蔽 GPIO 引腳的中斷功能。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param mask 表示中斷函數(shù)是否被屏蔽。
 * 值<b>1</b>表示屏蔽中斷功能,<b>0</b>表示不屏蔽中斷功能。
 * @return 如果中斷功能被屏蔽,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioSetIsrMask(unsigned int id, unsigned char mask);

/**
 * @brief 設(shè)置 GPIO 引腳的中斷觸發(fā)模式。
 *
 * 此函數(shù)根據(jù)中斷類型和中斷極性配置 GPIO 引腳。
 *
 * @param id 表示 GPIO 引腳號(hào)。
 * @param intType 表示中斷類型。
 * @param intPolarity 指示中斷極性。
 * @return 如果設(shè)置了中斷觸發(fā)模式,則返回 {@link IOT_SUCCESS};
 * 否則返回 {@link IOT_FAILURE}。其他返回值詳見芯片說明。
 * @從 2.2 開始
 * @2.2 版
 */
unsigned int IoTGpioSetIsrMode(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity);

到了這里,關(guān)于OpenHarmony輕量系統(tǒng)開發(fā)【5】驅(qū)動(dòng)之GPIO點(diǎn)燈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【IMX6ULL驅(qū)動(dòng)開發(fā)學(xué)習(xí)】14.Linux驅(qū)動(dòng)開發(fā) - GPIO中斷(設(shè)備樹 + GPIO子系統(tǒng))

    【IMX6ULL驅(qū)動(dòng)開發(fā)學(xué)習(xí)】14.Linux驅(qū)動(dòng)開發(fā) - GPIO中斷(設(shè)備樹 + GPIO子系統(tǒng))

    代碼自取 【14.key_tree_pinctrl_gpios_interrupt】: https://gitee.com/chenshao777/imx6-ull_-drivers 主要接口函數(shù): 1. of_gpio_count (獲得GPIO的數(shù)量) 2. kzalloc (向內(nèi)核申請(qǐng)空間) 3. of_get_gpio (獲取GPIO子系統(tǒng)標(biāo)號(hào)) 4. gpio_to_irq (根據(jù)GPIO子系統(tǒng)標(biāo)號(hào)得到軟件中斷號(hào)) 5. request_irq (根據(jù)軟件中斷號(hào)

    2024年02月12日
    瀏覽(35)
  • 【Linux驅(qū)動(dòng)開發(fā)】011 gpio子系統(tǒng)

    【Linux驅(qū)動(dòng)開發(fā)】011 gpio子系統(tǒng)

    前面我們編寫了基于設(shè)備樹的 LED 驅(qū)動(dòng),但是驅(qū)動(dòng)的本質(zhì)還是沒變,都是配置 LED 燈所使用的 GPIO 寄存器,驅(qū)動(dòng)開發(fā)方式和裸機(jī)基本沒啥區(qū)別。本章我們就來學(xué)習(xí)一下如何借助 pinctrl 和 gpio 子系統(tǒng)來簡化 GPIO 驅(qū)動(dòng)開發(fā)。? ?Linux 內(nèi)核針對(duì) PIN 的配置推出了 pinctrl 子系統(tǒng),對(duì)于

    2024年02月03日
    瀏覽(17)
  • <Linux開發(fā)>驅(qū)動(dòng)開發(fā) -之-基于pinctrl/gpio子系統(tǒng)的beep驅(qū)動(dòng)

    <Linux開發(fā)>驅(qū)動(dòng)開發(fā) -之-基于pinctrl/gpio子系統(tǒng)的beep驅(qū)動(dòng)

    <Linux開發(fā)>驅(qū)動(dòng)開發(fā) -之-基于pinctrl/gpio子系統(tǒng)的beep驅(qū)動(dòng) 交叉編譯環(huán)境搭建: <Linux開發(fā)> linux開發(fā)工具-之-交叉編譯環(huán)境搭建 uboot移植可參考以下: <Linux開發(fā)> -之-系統(tǒng)移植 uboot移植過程詳細(xì)記錄(第一部分) <Linux開發(fā)> -之-系統(tǒng)移植 uboot移植過程詳細(xì)記錄(第二部分

    2024年02月13日
    瀏覽(18)
  • OpenHarmony 標(biāo)準(zhǔn)系統(tǒng) HDF 框架音視頻驅(qū)動(dòng)開發(fā)

    OpenHarmony 標(biāo)準(zhǔn)系統(tǒng) HDF 框架音視頻驅(qū)動(dòng)開發(fā)

    OpenHarmony 操作系統(tǒng)為了做到給千行百業(yè)提供全場景業(yè)務(wù)能力,達(dá)到設(shè)備快速互聯(lián)、硬件互助、資源共享;統(tǒng)一 OS、一次開發(fā)多端彈性部署的目標(biāo)。在此背景下 OpenHarmony 提出在傳統(tǒng)的單設(shè)備系統(tǒng)能力基礎(chǔ)上,基于同一套系統(tǒng)能力、適配多種終端形態(tài)的分布式理念,并且內(nèi)核層、

    2023年04月22日
    瀏覽(24)
  • Linux驅(qū)動(dòng)開發(fā)之【pinctrl和gpio子系統(tǒng)】

    Linux驅(qū)動(dòng)開發(fā)之【pinctrl和gpio子系統(tǒng)】

    目錄 一、?pinctrl和gpio子系統(tǒng) 1.pinctrl子系統(tǒng) 1.1 pinctrl子系統(tǒng)簡介 1.2 pinctrl子系統(tǒng)驅(qū)動(dòng) 1.3 設(shè)備樹中添加pinctrl節(jié)點(diǎn)模版 2. gpio子系統(tǒng) 2.1 gpio子系統(tǒng)簡介 2.2 gpio子系統(tǒng)驅(qū)動(dòng) 2.3 gpio子系統(tǒng)API函數(shù) 2.4 設(shè)備樹中添加gpio節(jié)點(diǎn)模板 2.5 與gpio相關(guān)的OF函數(shù) 3. 驅(qū)動(dòng)程序編寫 3.1 驅(qū)動(dòng)入口函數(shù) 3

    2024年02月06日
    瀏覽(16)
  • 【Linux驅(qū)動(dòng)開發(fā)】012 gpio子系統(tǒng)API函數(shù)

    設(shè)置好設(shè)備樹以后, 在驅(qū)動(dòng)程序中就可以使用 gpio 子系統(tǒng)提供的 API 函數(shù)來操作指定的 GPIO, gpio 子系統(tǒng)向驅(qū)動(dòng)開發(fā)人員屏蔽了具體的讀寫寄存器過程。這就是驅(qū)動(dòng)分層與分離的好處,大家各司其職,做好自己的本職工作即可。 gpio 子系統(tǒng)提供的常用的 API 函數(shù)有下面幾個(gè):

    2023年04月18日
    瀏覽(24)
  • [驅(qū)動(dòng)開發(fā)]gpio子系統(tǒng)及中斷實(shí)現(xiàn)led亮滅

    編寫LED燈的驅(qū)動(dòng),使用GPIO子系統(tǒng),里面添加按鍵的中斷處理 1.應(yīng)用程序發(fā)送指令控制發(fā)光二極管亮滅 2.按鍵1按下,led1電位反轉(zhuǎn);按鍵2按下,led2電位反轉(zhuǎn);按鍵3按下,led3電位反轉(zhuǎn)? ?

    2024年02月14日
    瀏覽(18)
  • 嵌入式Linux驅(qū)動(dòng)開發(fā)之點(diǎn)燈

    嵌入式Linux驅(qū)動(dòng)開發(fā)之點(diǎn)燈

    ? 使用驅(qū)動(dòng)開發(fā)的方式點(diǎn)亮一個(gè)LED燈??纯磧烧哂猩秴^(qū)別不? 首先查看原理圖,看看我們的板子上的LED等接在哪一個(gè)IO口上面。 好了,看原理圖我們知道LED燈接在芯片的GPIO1的第三個(gè)引腳上面,也就是GPIO1_IO03。 先掌握三個(gè)名詞 CCM: Clock Controller Module (時(shí)鐘控制模塊) IOMUXC : I

    2024年02月01日
    瀏覽(29)
  • OpenHarmony實(shí)戰(zhàn)開發(fā)-如何實(shí)現(xiàn)一個(gè)輕量級(jí)輸入法應(yīng)用。

    OpenHarmony實(shí)戰(zhàn)開發(fā)-如何實(shí)現(xiàn)一個(gè)輕量級(jí)輸入法應(yīng)用。

    ? 本示例使用inputMethodEngine實(shí)現(xiàn)一個(gè)輕量級(jí)輸入法應(yīng)用kikaInput,支持在運(yùn)行OpenHarmony OS的智能終端上。 使用說明 1.使用hdc shell aa start ability -a InputMethod -b cn.openharmony.inputmethodchoosedialog命令拉起切換輸入法彈窗,點(diǎn)擊kikainput切換輸入法到當(dāng)前應(yīng)用。 2.點(diǎn)擊應(yīng)用中的編輯框,拉起

    2024年04月24日
    瀏覽(89)
  • 【IMX6ULL驅(qū)動(dòng)開發(fā)學(xué)習(xí)】08.IMX6ULL通過GPIO子系統(tǒng)函數(shù)點(diǎn)亮LED

    【IMX6ULL驅(qū)動(dòng)開發(fā)學(xué)習(xí)】08.IMX6ULL通過GPIO子系統(tǒng)函數(shù)點(diǎn)亮LED

    通過GPIO子系統(tǒng)函數(shù)點(diǎn)亮LED 1、GPIO子系統(tǒng)函數(shù) 1.1 確定 led 的GPIO標(biāo)號(hào),查看內(nèi)核中的gpiochip 查看 gpiochip ,以正點(diǎn)原子的IMX6ULL阿爾法開發(fā)板為例 查看原理圖,發(fā)現(xiàn)led接的引腳是 GPIO1_IO3,對(duì)應(yīng) /sys/kernel/debug/gpio 中的 gpiochip0 組,gpiochip0 組從0開始算起, 所以 GPIO1_IO3 對(duì)應(yīng)的標(biāo)號(hào)就

    2024年02月10日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包