色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

英創信息技術用GPIO實現多路外部中斷及脈沖計數簡介

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-02-11 16:58 ? 次閱讀

英創工控主板都給用戶提供了豐富的GPIO資源,在ESMARC系列的板卡上配置了32位GPIO,GPIO(General-purpose input/output)即通用輸入輸出,在實際使用中有多種用途,而作為外部中斷輸入便是較常用的功能,通過對外部輸入中斷的響應,可以滿足多種應用需求,脈沖計數就是一種典型的應用。英創主板已經給用戶提供了兩路中斷功能,是采用異步IO的方式,電平上升沿觸發中斷,通過信號量SIGIO通知應用程序,關于詳細的資料可以參考網站:《ESM335x外部中斷輸入應用》。

為了讓用戶能夠使用到更多外部輸入中斷,英創公司進一步在驅動中增加了相應的功能和接口,利用IO多路復用的技術讓所有GPIO都能夠作為外部中斷輸入,通過程序設置使能,一旦管腳電平發生變化,內核就會通知應用程序,這時使用select或者poll函數就可以接收到內核發出的消息。通過這種方式,用戶可以將主板的32位GPIO全部作為外部中斷輸入,而原來提供的采用異步IO方式的兩路中斷我們原則上就不再做更新和維護,建議客戶使用我們最新提供的方法。下面就以兩路GPIO的脈沖計數功能為例,介紹如何通過select或者poll函數實現外部中斷響應。

首先要啟用中斷輸入功能,這一步需要調用英創公司提供的設置GPIO為輸入狀態的API函數來實現。也就是在程序中調用一次函數,設置GPIO為輸入狀態,就能把對應的GPIO管腳設置為外部中斷輸入功能,如設置GPIO0和GPIO23為中斷輸入,代碼如下:

int GPIO_OutDisable(fd, GPIO0 | GPIO23)

當設置完成后,GPIO作為輸入狀態,同時會監測外部輸入電平變化,并通過內核驅動通知應用層。應用程序使用select或者poll函數來監聽GPIO的句柄的讀事件就能夠獲取到通知,用戶可以通過多線程的方式來實現,通過select函數實現代碼如下:

while( 1 )
{
//設置讀事件
FD_ZERO(&fdRead);
FD_SET(fd,&fdRead);
//設置超時時間
aTime.tv_sec= 0;
aTime.tv_usec= 20000;
ret =select(fd+1,&fdRead,NULL,NULL,&aTime);
if(ret < 0 )
{
printf("error!\n");
break;
}
if(ret > 0)
{
//判斷是否讀事件
if(FD_ISSET(fd,&fdRead))
{
dwPinState = GPIO0 | GPIO23;
rc = GPIO_PinState(fds.fd, &dwPinState);
if(rc< 0)
{
printf("GPIO_PinState::failed %d\n", rc);
returnrc;
}
//根據上升沿對脈沖計數
if(dwPinState& GPIO0)
pulse1_num++;
if(dwPinState& GPIO23)
pulse2_num++;
//計數到500就退出
if(pulse1_num == 500 && pulse2_num == 500)
{
printf("the pules number is 500\n");
break;
}
}
}
}
close(fd);
return 0;

使用poll函數也是類似的,同樣的需要先使能GPIO的外部中斷輸入功能,即調用一次設置GPIO為輸入狀態的函數,然后使用poll函數來監聽GPIO的句柄的讀事件就能夠獲取到通知,具體代碼如下:

while(1)
{
structpollfdfds;
int timeout;
//設置監聽句柄
fds.fd = fd;
//設置讀事件
fds.events = POLLIN;
//設置超時時間
timeout = 20000;
ret = poll(&fds, 1, timeout);
if (ret < 0 )
{
printf("error!\n");
break;
}
if (ret > 0)
{
//判斷是否讀事件
if (fds.revents == POLLIN)
{
dwPinState = GPIO0 | GPIO23;
rc = GPIO_PinState(fds.fd, &dwPinState);
if(rc< 0)
{
printf("GPIO_PinState::failed %d\n", rc);
returnrc;
}
//根據上升沿對脈沖計數
if(dwPinState& GPIO0)
pulse1_num++;
if(dwPinState& GPIO23)
pulse2_num++;
//計數到500就退出
if(pulse1_num == 500 && pulse2_num == 500)
{
printf("the pules number is 500\n");
break;
}
}
}
}
close(fd);
return 0;

當輸入電平發生變化,select和poll函數偵測到讀事件,就可以進行相應的操作,示例代碼通過判斷上升沿來計數脈沖數,經過測試,上述代碼能對兩路2KHz的脈沖實現可靠計數。用戶還可以根據實際的應用需求,把上述代碼修改為支持多路脈沖計數功能。

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

    關注

    7

    文章

    6085

    瀏覽量

    35296
收藏 人收藏

    評論

    相關推薦

    stm32 GPIO中斷配置教程

    在嵌入式開發中,STM32微控制器因其高性能和豐富的外設而廣受歡迎。GPIO(通用輸入/輸出)中斷是STM32微控制器中常用的功能之一,它允許開發者在特定引腳上檢測到外部信號變化時快速響應。 1.
    的頭像 發表于 11-19 15:53 ?691次閱讀

    中科達榮獲2024年軟件和信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件和信息技術服務競爭力百強企業”以及“2024年軟件和信息技術服務優秀企業”。
    的頭像 發表于 10-30 11:44 ?462次閱讀

    具有脈沖計數接口的 LMT01-Q1 0.5°C 精度雙引腳數字輸出溫度傳感器數據表

    電子發燒友網站提供《具有脈沖計數接口的 LMT01-Q1 0.5°C 精度雙引腳數字輸出溫度傳感器數據表.pdf》資料免費下載
    發表于 08-13 09:20 ?0次下載
    具有<b class='flag-5'>脈沖計數</b>接口的 LMT01-Q1 0.5°C 精度雙引腳數字輸出溫度傳感器數據表

    具有脈沖計數接口的 LMT01 0.5°C 精度雙引腳數字輸出溫度傳感器數據表

    電子發燒友網站提供《具有脈沖計數接口的 LMT01 0.5°C 精度雙引腳數字輸出溫度傳感器數據表.pdf》資料免費下載
    發表于 08-13 09:19 ?0次下載
    具有<b class='flag-5'>脈沖計數</b>接口的 LMT01 0.5°C 精度雙引腳數字輸出溫度傳感器數據表

    esp8266的脈沖計數問題求解

    我正在編寫 nodemcu esp8266 的代碼,它涉及脈沖計數、存儲和返回 nodemcu,使用 raspberry pi 作為服務器。為此,我使用了 3 個 nodemcu esp8266
    發表于 07-10 06:49

    脈沖計數器的工作原理和基本結構

    脈沖計數器,作為電子測量和自動化控制領域中一種重要的設備,其工作原理和基本結構對于理解其功能和性能至關重要。脈沖計數器主要用于統計和測量脈沖信號的個數,具有高精度、高速度、高可靠性等特點,廣泛應用
    的頭像 發表于 05-15 17:14 ?2395次閱讀

    脈沖計數器的分類和作用

    在電子技術和數字系統中,脈沖計數器作為一種基本而重要的邏輯器件,其應用廣泛且功能多樣。脈沖計數器不僅能夠實現基本的計數操作,還具備多種輸出功
    的頭像 發表于 05-15 17:11 ?1187次閱讀

    簡單認識脈沖計數

    在數字電路和電子測量領域中,脈沖計數器作為一種基本而重要的工具,其應用十分廣泛。脈沖計數器,也被稱為脈沖頻率計或脈沖數計,主要用于統計和測量輸入脈沖
    的頭像 發表于 05-15 17:08 ?1746次閱讀

    在STM8L中如何使用定時器的寄存器對外部脈沖進行計數

    我現在使用的是STM8L152單片機,想利用tim2 或則tim3 進行外部脈沖計數(1個脈沖信號輸入后,tim2或tim3定時器的數值寄存器值自動+1或者-1)。 請高手不吝賜教,謝謝。
    發表于 05-11 06:05

    STM8L TIMx ETR并不能夠實現完全的外部時鐘計數是怎么回事?

    在工程中,原來利用GPIO外部中斷實現脈沖計數,因為是低功耗設計,所以MCU平時都是Halt狀態。覺得如果利用ETR的輸入,配合TIM的
    發表于 04-23 07:20

    stm8外部中斷用來脈沖計數外部中斷開始計數,LED燈就不正常了的原因?

    外部中斷用來脈沖計數。不計數時,定時器正常,每秒翻轉一次LED燈。外部中斷開始
    發表于 04-22 07:29

    STM32中斷分組及外部中斷的配置過程分享

    STM32中斷分組   STM32 的每一個GPIO都能配置成一個外部中斷觸發源,這點也是 STM32 的強大之處。STM32 通過根據引腳的序號不同將眾多
    發表于 04-08 08:05

    電路中如何實現脈沖計數功能和相位檢測

    在進行DA轉換,頻率脈沖電壓轉換,pwm轉變成對應的模擬量,電路是怎么實現對固定要求長度或固定頻率脈沖個數進行計數進而轉換成模擬量的功能? 在進行變頻器有源逆變pwm回饋時,如何檢測電
    發表于 01-31 19:55

    外部中斷的工作原理 外部中斷方式有哪些 為什么要使用外部中斷

    外部中斷的工作原理是單片機響應外部事件的一種機制** **。
    的頭像 發表于 01-28 17:37 ?3601次閱讀

    arm中斷是怎么實現

    ARM中斷實現是通過中斷控制器和異常模式實現的。ARM處理器通過中斷控制器來接收和處理外部
    的頭像 發表于 01-05 15:18 ?892次閱讀
    主站蜘蛛池模板: 最新毛片网| 婬香婬色天天视频| 亚洲精品91| 亚洲精品午夜久久久伊人| 一边吃奶一边添P好爽故事| 在线中文字幕亚洲日韩| 999av视频| 嘟嘟嘟WWW在线观看视频高清| 国产精品无码亚洲区艳妇| 好男人好资源在线播放| 快穿做妓女好爽H| 拍戏被CAO翻了H| 无人在线观看免费高清视频播放| 亚洲精品色情婷婷在线播放 | 色偷偷影院| 亚洲AV无码久久流水呻蜜桃久色 | 我与恶魔的h生活ova| 亚洲三区视频| 99re久久超碰视频精品| 国产CHINESE HD精品| 久久99亚洲热最新地址获取| 免费在线看视频| 午夜想想爱| 2020亚洲国产在线播放在线 | 99pao成人国产永久免费视频| 成人在线免费视频| 精品久久久久久久高清| 欧美xxbb| 亚洲精品美女久久久久99| 99视频免费在线| 国厂精品114福利电影| 男男校园园bl文全肉高h寝室| 无码欧美喷潮福利XXXX| 最新亚洲中文字幕在线观看| 国产成人小视频在线观看| 久久免费高清| 四虎影视国产精品亚洲精品hd | 亚洲国产在线精品国| 99久久免费国产精品特黄| 国产一区二区青青精品久久| 欧美雌雄双性人交xxxx|