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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【產品應用】AWorksLP樣例詳解(MR6450)-- GPIO

AGk5_ZLG_zhiyua ? 來源:未知 ? 2022-12-16 11:40 ? 次閱讀
e6135ef8-7cf2-11ed-8abf-dac502259ad0.gif AWorksLP對外設進行了高度抽象化,為同一類外設提供了相同的接口,應用程序可以輕松跨平臺。本文以MR6450平臺為例,介紹AWorksLP GPIO外設基本用法。

e622fe1c-7cf2-11ed-8abf-dac502259ad0.jpg??簡介

GPIO(General Purpose Input and Output)是通用輸入輸出口。通俗地說,就是一些引腳,可以通過它們對外輸出電平信號或者通過它們讀取外部的電平信息。將I/O口用作普通輸入/輸出功能時,有兩種常見的使用方式:一種是用作普通的輸入/輸出接口;一種是用作中斷輸入接口,即當指定的輸入狀態事件發生(比如:下降沿)時,觸發用戶自定義的回調函數。

e622fe1c-7cf2-11ed-8abf-dac502259ad0.jpg??接口介紹

函數列表:

函數原型

簡要描述

aw_err_t aw_pin_cfg (int pin, uint32_t flags);

配置引腳屬性

aw_err_t aw_gpio_get (int pin);

讀取引腳的輸入/輸出值

aw_err_t aw_gpio_set (int pin, int value);

設置引腳輸出值

aw_err_t aw_gpio_toggle (int pin);

翻轉引腳的輸出值,即高電平變低電平,低電平變高電平

aw_err_t aw_gpio_trigger_cfg (int pin, uint32_t flags);

配置引腳“觸發條件”,觸發條件可位或

aw_err_t aw_gpio_trigger_connect (int pin, aw_pfuncvoid_t pfunc_callback, void *p_arg);

連接一個回調函數到引腳

aw_err_t aw_gpio_trigger_disconnect (int pin, aw_pfuncvoid_t pfunc_callback, void *p_arg);

斷開引腳的回調函數

aw_err_t aw_gpio_trigger_on (int pin);

開啟引腳的觸發功能

aw_err_t aw_gpio_trigger_off (int pin);

關閉指定引腳的觸發功能

使用aw_pin_cfg (int pin, uint32_t flags)接口配置pin為gpio功能時,flags參數詳見下表。

GPIO屬性配置表:

GPIO屬性

宏定義

描述

GPIO模式

AW_PIN_CFG_GPIO_INPUT

1<<0

輸入模式

AW_PIN_CFG_GPIO_OUTPUT

2<<0

輸出模式

AW_PIN_CFG_GPIO_OUTPUT_LOW

3<<0

輸出模式且輸出低

AW_PIN_CFG_GPIO_OUTPUT_HIGH

4<<0

輸出模式且輸出高

上下拉功能

AW_PIN_CFG_FLOAT

0<<3

浮空

AW_PIN_CFG_PULL_UP

1<<3

上拉

AW_PIN_CFG_PULL_DOWN

2<<3

下拉

AW_PIN_CFG_PULL_UP_DOWN

3<<3

同時使能上下拉

輸出模式

AW_PIN_CFG_OUTPUT_MODE_DRIVE

0<<5

直接輸出

AW_PIN_CFG_OUTPUT_MODE_OPEN_DRAIN

1<<5

開漏輸出

AW_PIN_CFG_OUTPUT_MODE_PUSH_PULL

2<<5

推挽輸出

配置時,flags參數可以是一個或者多個相關宏定義的組合,簡單示例如下:

aw_pin_cfg(pin, AW_PIN_CFG_GPIO_INPUT);
 /* 引腳配置為輸出,浮空(無上下拉),直接輸出 */
aw_pin_cfg(pin, AW_PIN_CFG_GPIO_OUTPUT);
aw_pin_cfg(pin, AW_PIN_CFG_GPIO_INPUT | AW_PIN_CFG_PULL_DOWN ); 
aw_pin_cfg(pin, AW_PIN_CFG_GPIO_OUTPUT| AW_PIN_CFG_OUTPUT_MODE_PUSH_PULL)
注意:
  • 調用配置時,若上表中GPIO屬性值存在缺省時,則會使用未偏移前對應值為0的宏定義默認填充,如上述示例中line3;
  • 配置時需一次性將flags進行傳入,不能每次傳遞一個屬性進行配置進行多次調用,否則可能和期望配置結果不匹配。
使用 aw_gpio_trigger_cfg(int pin, uint32_t flags)接口配置引腳中斷時,flags參數見下表。

GPIO中斷配置表:

宏定義

描述

AW_GPIO_TRIGGER_HIGH

高電平觸發

AW_GPIO_TRIGGER_LOW

低電平觸發

AW_GPIO_TRIGGER_RISE

上升沿觸發

AW_GPIO_TRIGGER_FALL

下降沿觸發

配置時,flags參數可以是一個或者多個上表宏定義的組合,簡單示例如下:

aw_gpio_trigger_cfg (pin, AW_GPIO_TRIGGER_HIGH);
aw_pin_cfg(pin, AW_GPIO_TRIGGER_RISE);
aw_pin_cfg(pin, AW_GPIO_TRIGGER_RISE | AW_GPIO_TRIGGER_HIGH ); 
/* 雙邊沿觸發 */
aw_pin_cfg(pin, AW_GPIO_TRIGGER_RISE | AW_GPIO_TRIGGER_FALL);
注意:
  • 當設置為不合理條件觸發組合(如 AW_GPIO_TRIGGER_HIGH | AW_GPIO_TRIGGER_FALL)時,該函數會返回-AW_EINVAL。

e622fe1c-7cf2-11ed-8abf-dac502259ad0.jpg??使用樣例

AWorksLP SDK相關使用請參考《AWorksLP SDK快速入門(MR6450)——開箱體驗》一文,本文不再贅述。1.通用IO功能

{SDK}demosperipheralgpio路徑下為通用GPIO例程,例程具體代碼如下:

#include "aworks.h"
#include "aw_delay.h"
#include "aw_gpio.h"
#include "aw_vdebug.h"


/**
 * rief GPIO demo 入口
 * 
eturn 無
 */
void demo_gpio_entry (int gpio)
{
  int i = 0;


  aw_kprintf("
GPIO demo testing...
");


  /* LED以1s的周期閃爍5次 */
  for (i = 0; i < 5; i++) {
    aw_gpio_set(gpio, 0);


    aw_mdelay(500);


    aw_gpio_set(gpio, 1);


    aw_mdelay(500);
  }


  /* LED以0.2s的周期持續閃爍 */
  for (i = 0; i < 40; i++) {
    aw_gpio_toggle(gpio);
    aw_mdelay(100);
  }
 
  aw_kprintf("
GPIO demo exit...
");
}

上述代碼中使用aw_gpio_set和aw_gpio_toggle接口分別實現了500ms時間間隔的引腳5次反轉以及100ms時間間隔引腳40次反轉。在HPM的SDK中,傳入該例程函數的引腳為RUN燈,所以最終的實驗現象是LED燈先以較慢的速度閃爍,后以較快的速度閃爍,RUN燈的位置如圖1所示。

e65d55a8-7cf2-11ed-8abf-dac502259ad0.png

圖1運行燈

2.中斷功能

{SDK}demosperipheralint路徑下為通用中斷例程,例程具體代碼如下:

#include "aworks.h"
#include "aw_gpio.h"
#include "aw_sem.h"
#include "aw_vdebug.h"
#include "aw_delay.h"
#include "aw_int.h"


/**rief 記錄是否產生中斷 */
AW_SEMB_DECL_STATIC(__gpio_intr_semb);
#define TRIGGER_FLAG AW_GPIO_TRIGGER_RISE


static void __test_gpio_trig_isr (void* arg)
{
  int interrupt_pin = (int)arg;
#if TRIGGER_FLAG == AW_GPIO_TRIGGER_LOW || TRIGGER_FLAG == AW_GPIO_TRIGGER_HIGH
  /* 關閉觸發中斷,避免電平觸發時不停地進中斷導致程序無法繼續運行 */
  aw_gpio_trigger_off(interrupt_pin);
#endif
  AW_SEMB_GIVE(__gpio_intr_semb);
}


void demo_interrupt_entry (int output_pin, int interrupt_pin)
{
  aw_err_t  err;
  int     i;
  
  aw_kprintf("
interrupt demo testing...
");
  
   /* 信號量初始化 */
  AW_SEMB_INIT(__gpio_intr_semb, AW_SEM_EMPTY, AW_SEM_Q_FIFO);
  
  /* 連接中斷回調函數 */
  err = aw_gpio_trigger_connect(interrupt_pin,
                 __test_gpio_trig_isr,
                 (void *)interrupt_pin);
  if (err != AW_OK) {
     aw_kprintf("gpio trigger connect failed!
");
     return;
   }
   
  /* 配置為 TRIGGER_FLAG 對應方式觸發 */
  err = aw_gpio_trigger_cfg(interrupt_pin, TRIGGER_FLAG);
  if (err != AW_OK) {
    aw_kprintf("gpio trigger cfg failed!
");
    return;
  }
   
  /* 開啟引腳的觸發 */
  err = aw_gpio_trigger_on(interrupt_pin);
  if (err != AW_OK) {
    aw_kprintf("gpio trigger on failed!
");
    return;
  }
   
  for (i = 0; i < 50; i++) {
   
    /* 設置輸出管腳為低電平 */
    aw_gpio_set(output_pin, 0);
   
    /* 等待中斷觸發 */
    err = AW_SEMB_TAKE(__gpio_intr_semb, 1000);
    if (err == AW_OK) {
      aw_kprintf("enter gpio interrupt!
");
    }
#if TRIGGER_FLAG == AW_GPIO_TRIGGER_LOW || TRIGGER_FLAG == AW_GPIO_TRIGGER_HIGH
    /* 打開在回調函數中關閉的觸發中斷 */
    err = aw_gpio_trigger_on(interrupt_pin);
    if (err != AW_OK) {
      aw_kprintf("gpio trigger on failed!
");
      return;
    }
#endif
    /* 設置輸出管腳為高電平 */
    aw_gpio_set(output_pin, 1);
      
    aw_mdelay(100);
  }
      
  /* 斷開中斷連接回調函數 */
  aw_gpio_trigger_disconnect(interrupt_pin,
                __test_gpio_trig_isr,
                (void *)interrupt_pin);
      
  /* 關閉引腳的觸發 */
  aw_gpio_trigger_off(interrupt_pin);
       
  /* 終止信號量 */
  AW_SEMB_TERMINATE(__gpio_intr_semb);
      
  aw_kprintf("interrupt demo exit...
");
}

在例程代碼中通過aw_gpio_trigger_connect、aw_gpio_trigger_cfg、aw_gpio_trigger_on三個接口配置interrupt_pin引腳中斷觸發模式為AW_GPIO_TRIGGER_RISE、中斷回調函數為__test_gpio_trig_isr并對中斷進行使能,同時配置output_pin持續翻轉作為中斷源的提供引腳,當output_pin 輸出滿足例程的中斷條件時,會觸發中斷進入__test_gpio_trig_isr函數釋放__gpio_intr_semb信號量,在例程中獲取信號量成功后并打印"enter gpio interrupt!"。

例程中默認使用中斷例程輸出信號引腳為PIN_PF08、中斷測試引腳為PF09,但由于本文測試所使用開發板并未引出該組引腳,故使用開發板上絲印URX1(PIN_PE24)做信號輸出引腳與UTX1(PIN_PE25)做中斷引腳進行測試,需修改main.c文件中TEST_OUTPUT_PIN與TEST_INTERRUPT_PIN宏定義,修改后如下所示:


#define TEST_OUTPUT_PIN     PIN_PE24
#define TEST_INTERRUPT_PIN    PIN_PE25 

修改完成后,重新編譯工程并下載固件至開發板中,將開發板絲印URX1與UTX1引腳短接,并使用串口工具連接至DUART接口,則可看到在上位機中打印下圖信息,表明中斷觸發成功。

e6ac7fb6-7cf2-11ed-8abf-dac502259ad0.png

圖2串口打印信息注意事項:
  • aw_gpio_trigger_connect函數所連接的回調函數是在中斷中進行調用的,故該函數的實現需盡量的簡短、高效,避免執行時間過長,否則可能會影響OS的實時性;
  • 若中斷觸發條件為電平觸發時,需在中斷回調中關閉對應引腳中斷,否則電平持續階段會一直產生中斷。

由于篇幅限制,樣例中僅選取了部分特性進行講解,在使用時需根據實際情況配置相應的觸發條件以滿足項目需求,更多引腳屬性功能使用以及中斷組合特性可自行調整測試。

本文對GPIO外設接口及樣例做了詳細介紹,當然其他外設也會陸續發布,請大家關注后續推文更新~

e6c42332-7cf2-11ed-8abf-dac502259ad0.jpg

e6d703b2-7cf2-11ed-8abf-dac502259ad0.jpg

e7677d84-7cf2-11ed-8abf-dac502259ad0.jpge77bdd38-7cf2-11ed-8abf-dac502259ad0.jpge78e8cf8-7cf2-11ed-8abf-dac502259ad0.jpge7adb31c-7cf2-11ed-8abf-dac502259ad0.jpge7bcf584-7cf2-11ed-8abf-dac502259ad0.jpge7ce55fe-7cf2-11ed-8abf-dac502259ad0.jpg


原文標題:【產品應用】AWorksLP樣例詳解(MR6450)-- GPIO

文章出處:【微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 致遠電子
    +關注

    關注

    13

    文章

    409

    瀏覽量

    31501

原文標題:【產品應用】AWorksLP樣例詳解(MR6450)-- GPIO

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    深度解析 | 基于HPM6450的RISC-V核心板究竟有哪些過人之處?

    本文導讀隨著AIoT時代的到來,RISC-V作為新興架構,其精簡及開源的特性在物聯網的應用領域有很大的優勢,為此ZLG致遠電子推出MR6450系列是基于先楫HPM6450的全新RISC-V核心板
    的頭像 發表于 02-08 13:45 ?261次閱讀
    深度解析 | 基于HPM<b class='flag-5'>6450</b>的RISC-V核心板究竟有哪些過人之處?

    GPIO使用教程 GPIO接口應用

    GPIO(General-Purpose Input/Output,通用輸入/輸出)接口是電子設備中的一個重要組成部分,主要用于控制和讀取設備的數字信號。它通過簡單的高(1)或低(0)電平來與系統
    的頭像 發表于 01-31 10:10 ?506次閱讀

    40mR/650V SiC 碳化硅MOSFET,替代30mR 超結MOSFET或者20-30mR的GaN!

    BASiC基本半導體40mR/650V SiC 碳化硅MOSFET,替代30mR 超結MOSFET或者20-30mR的GaN! BASiC基本半導體40mR/650V SiC 碳化硅M
    發表于 01-22 10:43

    關于cc2541程序代碼

    CC2541哪里有cc2541的模數轉換模塊和藍牙模塊的程序代碼呀?初學不懂
    發表于 01-20 07:14

    深蕾半導體開發者中心上線多個AI Demo

    近日深蕾半導體開發者中心更新了VS680 AI演示視頻、AI Demo、VS680快速開發手冊等相關內容。
    的頭像 發表于 01-10 14:48 ?134次閱讀
    深蕾半導體開發者中心上線多個AI Demo<b class='flag-5'>樣</b><b class='flag-5'>例</b>

    GPIO錯誤排查與解決

    在嵌入式系統和微控制器編程中,通用輸入輸出(GPIO)是最常見的接口之一。然而,在使用GPIO時,我們可能會遇到各種錯誤。 1. 理解GPIO GPIO是微控制器上的一組引腳,可以被配
    的頭像 發表于 01-09 09:46 ?647次閱讀

    為何ZLG致遠電子要推出LGA嵌入式核心板?

    MR6450等5個系列,共12個型號的LGA形態的嵌入式核心板,涵蓋了ARM9、A7、RISC-V等不同處理器架構。為什么有板對板連接器之后,我們還要推出LGA
    的頭像 發表于 11-30 01:04 ?291次閱讀
    為何ZLG致遠電子要推出LGA嵌入式核心板?

    GPIO內部電路的原理

    原理 前言 GPIO內部結構概覽 GPIO內部結構詳解 保護電路 輸出電路 推挽輸出 開漏輸出 輸入電路 總結 參考資料 GPIO內部結構概覽 結構關系圖如下圖所示
    的頭像 發表于 11-20 09:24 ?499次閱讀
    <b class='flag-5'>GPIO</b>內部電路的原理

    差分硅振替換SiTime產品應用于SSD,相位抖動低于350fs

    差分硅振替換SiTime產品應用于SSD,相位抖動低于350fs
    的頭像 發表于 11-08 09:41 ?297次閱讀
    差分硅振替換SiTime<b class='flag-5'>產品應用</b>于SSD,相位抖動低于350fs

    SOC GPIO操作

    sapphire Soc提供了兩個GPIO組每組有4個GPIO,定義為GPIO[3:0],其中只有GPIO[1:0]可以支持中斷。中斷在程序中打開了
    的頭像 發表于 11-01 11:06 ?228次閱讀

    使用官方SDK開發6450

    官網提供的SDK芯片類型沒有包含HPM6450,如何添加6450到SDK中有人知道么?
    發表于 10-24 14:51

    STM32 GPIO八種模式及工作原理詳解

    一. 前言 ??GPIO全稱General Purpose Input Output,是微控制數字輸入/輸出的基本模塊,可以實現微控制器與外部環境的數字進行交換。借助GPIO微控制器可以實現對外
    的頭像 發表于 07-22 09:32 ?7064次閱讀
    STM32 <b class='flag-5'>GPIO</b>八種模式及工作原理<b class='flag-5'>詳解</b>

    武漢凡谷:現階段已有產品應用到5.5G系統

    近日,武漢凡谷在接受機構調研時表示,公司具備5.5G方面的產品,如多頻多通道濾波器,現階段有相關的產品應用到客戶的5.5G系統。
    的頭像 發表于 05-20 09:54 ?640次閱讀

    什么是GPIOGPIO組成原理

    GPIO全拼叫General Purpose Input Output(通用輸入輸出)簡稱IO口也叫總線擴展器,GPIO口是由引腳,功能寄存器組成,不同的架構中的GPIO封裝不同,所使用的引腳數與寄存器數不同,具體可以參考芯片手
    發表于 04-28 12:30 ?7606次閱讀
    什么是<b class='flag-5'>GPIO</b>?<b class='flag-5'>GPIO</b>組成原理

    AI時代下的場效應管功能運用與產品應用

    AI時代下的場效應管功能運用與產品應用
    的頭像 發表于 03-25 15:07 ?746次閱讀
    AI時代下的場效應管功能運用與<b class='flag-5'>產品應用</b>
    主站蜘蛛池模板: 美女好紧好大好爽12p | 天天干夜夜操美女 | 免费国产午夜高清在线视频 | 美女扒开尿口给男人桶 | 美女网站一区二区三区 | a免费网站 | 国产成人精品日本亚洲直接 | a在线观看网站 | 天堂网www最新版在线资源 | 国产精品嫩草影院一二三区入口 | 日本高清视频色www在线观看 | 成人免费无毒在线观看网站 | 亚洲一区二区影视 | 亚州一级 | 激情文学亚洲色图 | 天堂网色 | 亚洲夂夂婷婷色拍ww47 | 手机看片99| 在线观看精品视频看看播放 | 五月天丁香婷 | 欧美视频不卡一区二区三区 | 日本黄色片段 | 亚洲色图综合图区 | 啪啪.com| 波多野结衣在线观看一区二区三区 | 特黄大片aaaaa毛片 | 加勒比在线免费视频 | 扒开双腿猛进湿润18p | 免费伦费一区二区三区四区 | 伊人网综合在线视频 | 免费又爽又黄的禁片1000部 | 在线免费看黄的网站 | 免费在线观看的视频 | 久久亚洲综合色 | 久久精品第一页 | 黄色靠逼网站 | 一级毛片一级黄片 | 日本欧美一区二区免费视 | 韩国最新三级网站在线播放 | 亚洲热热久久九九精品 | 天堂国产 |