輕量系統(tǒng)設(shè)備通常需要進(jìn)行外設(shè)控制,例如溫濕度數(shù)據(jù)的采集、燈開關(guān)的控制,因此在完成內(nèi)核開發(fā)后,需要進(jìn)行設(shè)備驅(qū)動的開發(fā)。
主要Hi3861芯片介紹如何運(yùn)用 IoT 硬件子系統(tǒng)進(jìn)行輕量系統(tǒng)設(shè)備的驅(qū)動開發(fā)。
在輕量系統(tǒng)的聯(lián)接模組中,智能家居遠(yuǎn)程控制能力的實(shí)現(xiàn),最終是通過 IoT 硬件子系統(tǒng)部件發(fā)送指令到特定的家居設(shè)備。
Hi3861芯片提供設(shè)備操作接口有:GPIO、PWM、UART、I2C、SPI、ADC、WATCHDOG、FLASH、LOWPOWER、RESET 等。
一、GPIO 概述
GPIO(General-purpose input/output)即通用型輸入輸出,用于控制芯片引腳的數(shù)字輸入和數(shù)字輸出。通常,GPIO 控制器通過分組的方式管理所有 GPIO 管腳,每組 GPIO 有一個(gè)或多個(gè)寄存器與之關(guān)聯(lián),通過讀寫寄存器完成對 GPIO 管腳的操作。
GPIO 是芯片上一根能完成多種功能的管腳,用戶可以通過 GPIO 口和硬件進(jìn)行數(shù)據(jù)交互(如UART),控制硬件工作(如 LED,蜂鳴器等),讀取硬件的工作狀態(tài)信號(如中斷信號)等。
例如 GPIO_00 引腳復(fù)用表如下:(剩余引腳復(fù)用信息,請查看廠商芯片手冊)。
管腳 | 管腳名稱 | 類型 | 驅(qū)動(mA) | 電壓(V) | 描述 |
---|---|---|---|---|---|
復(fù)用信號0:GPIO_00 | |||||
復(fù)用信號1:UART1_TXD | |||||
復(fù)用信號2:SPI1_CLK | |||||
2 | GPIO_00 | I/O | 1 | 3.3/1.8 | 復(fù)用信號3:PWM3_OUT |
復(fù)用信號4:I2C_SDA | |||||
復(fù)用信號5:RTC_OSC_32K | |||||
復(fù)用信號6:RTC32K_XOUT | |||||
復(fù)用信號7:保留 | |||||
GPIO 接口定義了操作 GPIO 管腳的標(biāo)準(zhǔn)方法集合,包括:
- 設(shè)置管腳方向:方向可以是輸入或者輸出(暫不支持高阻態(tài))
- 讀寫管腳電平值:電平值可以是低電平或高電平
- 設(shè)置管腳中斷服務(wù)函數(shù):設(shè)置一個(gè)管腳的中斷響應(yīng)函數(shù),以及中斷觸發(fā)方式
- 使能和禁止管腳中斷:禁止或使能管腳中斷
GPIO 引腳復(fù)用流程如下:
二、GPIO模塊相關(guān)API
頭文件路徑:base/iothardware/peripheral/interfaces/inner_api/iot_gpio.h
接口函數(shù) | 描述 |
---|---|
unsigned int IoTGpioInit(unsigned int id) | 確定GPIO管腳號 |
unsigned int IoTGpioSetDir(unsigned int id, IotGpioDir dir) | 設(shè)置管腳方向 |
unsigned int IoTGpioSetOutputVal(unsigned int id, IotGpioValue val) | 設(shè)置管腳電平 |
unsigned int IoTGpioRegisterIsrFunc(unsigned int id, IotGpioIntType intType, IotGpioIntPolarity intPolarity, GpioIsrCallbackFunc func, char *arg) | 設(shè)置管腳中斷 |
三、實(shí)例
//代碼功能:定義 GPIO_00 號口為輸出模式且輸出高電平。
#include "iot_gpio.h"
IoTGpioInit(GPIO_00);
IoTGpioSetDir(GPIO_00 , IOT_GPIO_DIR_OUT);
IoTGpioSetOutputVal(GPIO_00 , IOT_GPIO_VALUE0);
while (1) {
IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE1);
sleep(1);
IoTGpioSetOutputVal(LED_GPIO, IOT_GPIO_VALUE0);
sleep(1);
}
四、GPIO HDF驅(qū)動開發(fā)
在HDF框架中,同類型設(shè)備對象較多時(shí)(可能同時(shí)存在十幾個(gè)同類型配置器),若采用獨(dú)立服務(wù)模式,則需要配置更多的設(shè)備節(jié)點(diǎn),且相關(guān)服務(wù)會占據(jù)更多的內(nèi)存資源。相反,采用統(tǒng)一服務(wù)模式可以使用一個(gè)設(shè)備服務(wù)作為管理器,統(tǒng)一處理所有同類型對象的外部訪問(這會在配置文件中有所體現(xiàn)),實(shí)現(xiàn)便捷管理和節(jié)約資源的目的。GPIO模塊采用統(tǒng)一服務(wù)模式(如圖1所示)。
在統(tǒng)一模式下,所有的控制器都被核心層統(tǒng)一管理,并由核心層統(tǒng)一發(fā)布一個(gè)服務(wù)供接口層,因此這種模式下驅(qū)動無需再為每個(gè)控制器發(fā)布服務(wù)。
GPIO模塊各分層作用:
接口層:提供操作GPIO管腳的標(biāo)準(zhǔn)方法。
核心層:提供GPIO管腳資源匹配,GPIO管腳控制器的添加、移除以及管理的能力,通過鉤子函數(shù)與適配層交互,供芯片廠家快速接入HDF框架。
適配層:由驅(qū)動適配者將鉤子函數(shù)的功能實(shí)例化,實(shí)現(xiàn)與硬件相關(guān)的具體功能。
文章來源:http://www.zghlxwxcb.cn/news/detail-834478.html
4.1、LED驅(qū)動程序(待續(xù)…)
4.2、LED驅(qū)動配置(待續(xù)…)
堅(jiān)持就有收獲
文章來源地址http://www.zghlxwxcb.cn/news/detail-834478.html
到了這里,關(guān)于HCIA-HarmonyOS設(shè)備開發(fā)認(rèn)證V2.0-IOT硬件子系統(tǒng)-GPIO的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!