精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)用GPIO實(shí)現(xiàn)多路外部中斷及脈沖計(jì)數(shù)簡(jiǎn)介

英創(chuàng)信息技術(shù) ? 來(lái)源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-02-11 16:58 ? 次閱讀

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

為了讓用戶能夠使用到更多外部輸入中斷,英創(chuàng)公司進(jìn)一步在驅(qū)動(dòng)中增加了相應(yīng)的功能和接口,利用IO多路復(fù)用的技術(shù)讓所有GPIO都能夠作為外部中斷輸入,通過(guò)程序設(shè)置使能,一旦管腳電平發(fā)生變化,內(nèi)核就會(huì)通知應(yīng)用程序,這時(shí)使用select或者poll函數(shù)就可以接收到內(nèi)核發(fā)出的消息。通過(guò)這種方式,用戶可以將主板的32位GPIO全部作為外部中斷輸入,而原來(lái)提供的采用異步IO方式的兩路中斷我們?cè)瓌t上就不再做更新和維護(hù),建議客戶使用我們最新提供的方法。下面就以兩路GPIO的脈沖計(jì)數(shù)功能為例,介紹如何通過(guò)select或者poll函數(shù)實(shí)現(xiàn)外部中斷響應(yīng)。

首先要啟用中斷輸入功能,這一步需要調(diào)用英創(chuàng)公司提供的設(shè)置GPIO為輸入狀態(tài)的API函數(shù)來(lái)實(shí)現(xiàn)。也就是在程序中調(diào)用一次函數(shù),設(shè)置GPIO為輸入狀態(tài),就能把對(duì)應(yīng)的GPIO管腳設(shè)置為外部中斷輸入功能,如設(shè)置GPIO0和GPIO23為中斷輸入,代碼如下:

int GPIO_OutDisable(fd, GPIO0 | GPIO23)

當(dāng)設(shè)置完成后,GPIO作為輸入狀態(tài),同時(shí)會(huì)監(jiān)測(cè)外部輸入電平變化,并通過(guò)內(nèi)核驅(qū)動(dòng)通知應(yīng)用層。應(yīng)用程序使用select或者poll函數(shù)來(lái)監(jiān)聽GPIO的句柄的讀事件就能夠獲取到通知,用戶可以通過(guò)多線程的方式來(lái)實(shí)現(xiàn),通過(guò)select函數(shù)實(shí)現(xiàn)代碼如下:

while( 1 )
{
//設(shè)置讀事件
FD_ZERO(&fdRead);
FD_SET(fd,&fdRead);
//設(shè)置超時(shí)時(shí)間
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;
}
//根據(jù)上升沿對(duì)脈沖計(jì)數(shù)
if(dwPinState& GPIO0)
pulse1_num++;
if(dwPinState& GPIO23)
pulse2_num++;
//計(jì)數(shù)到500就退出
if(pulse1_num == 500 && pulse2_num == 500)
{
printf("the pules number is 500\n");
break;
}
}
}
}
close(fd);
return 0;

使用poll函數(shù)也是類似的,同樣的需要先使能GPIO的外部中斷輸入功能,即調(diào)用一次設(shè)置GPIO為輸入狀態(tài)的函數(shù),然后使用poll函數(shù)來(lái)監(jiān)聽GPIO的句柄的讀事件就能夠獲取到通知,具體代碼如下:

while(1)
{
structpollfdfds;
int timeout;
//設(shè)置監(jiān)聽句柄
fds.fd = fd;
//設(shè)置讀事件
fds.events = POLLIN;
//設(shè)置超時(shí)時(shí)間
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;
}
//根據(jù)上升沿對(duì)脈沖計(jì)數(shù)
if(dwPinState& GPIO0)
pulse1_num++;
if(dwPinState& GPIO23)
pulse2_num++;
//計(jì)數(shù)到500就退出
if(pulse1_num == 500 && pulse2_num == 500)
{
printf("the pules number is 500\n");
break;
}
}
}
}
close(fd);
return 0;

當(dāng)輸入電平發(fā)生變化,select和poll函數(shù)偵測(cè)到讀事件,就可以進(jìn)行相應(yīng)的操作,示例代碼通過(guò)判斷上升沿來(lái)計(jì)數(shù)脈沖數(shù),經(jīng)過(guò)測(cè)試,上述代碼能對(duì)兩路2KHz的脈沖實(shí)現(xiàn)可靠計(jì)數(shù)。用戶還可以根據(jù)實(shí)際的應(yīng)用需求,把上述代碼修改為支持多路脈沖計(jì)數(shù)功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6085

    瀏覽量

    35225
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    stm32 GPIO中斷配置教程

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

    中科創(chuàng)達(dá)榮獲2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)

    及前百家企業(yè)”名單。中科創(chuàng)達(dá)憑借非凡的技術(shù)實(shí)力與持續(xù)的創(chuàng)新能力,成功入選“2024年度軟件和信息技術(shù)服務(wù)競(jìng)爭(zhēng)力百?gòu)?qiáng)企業(yè)”以及“2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)”。
    的頭像 發(fā)表于 10-30 11:44 ?391次閱讀

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

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

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

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

    esp8266的脈沖計(jì)數(shù)問(wèn)題求解

    我正在編寫 nodemcu esp8266 的代碼,它涉及脈沖計(jì)數(shù)、存儲(chǔ)和返回 nodemcu,使用 raspberry pi 作為服務(wù)器。為此,我使用了 3 個(gè) nodemcu esp8266
    發(fā)表于 07-10 06:49

    脈沖計(jì)數(shù)器的工作原理和基本結(jié)構(gòu)

    脈沖計(jì)數(shù)器,作為電子測(cè)量和自動(dòng)化控制領(lǐng)域中一種重要的設(shè)備,其工作原理和基本結(jié)構(gòu)對(duì)于理解其功能和性能至關(guān)重要。脈沖計(jì)數(shù)器主要用于統(tǒng)計(jì)和測(cè)量脈沖信號(hào)的個(gè)數(shù),具有高精度、高速度、高可靠性等特點(diǎn),廣泛應(yīng)用
    的頭像 發(fā)表于 05-15 17:14 ?2234次閱讀

    脈沖計(jì)數(shù)器的分類和作用

    在電子技術(shù)和數(shù)字系統(tǒng)中,脈沖計(jì)數(shù)器作為一種基本而重要的邏輯器件,其應(yīng)用廣泛且功能多樣。脈沖計(jì)數(shù)器不僅能夠實(shí)現(xiàn)基本的計(jì)數(shù)操作,還具備多種輸出功
    的頭像 發(fā)表于 05-15 17:11 ?1019次閱讀

    簡(jiǎn)單認(rèn)識(shí)脈沖計(jì)數(shù)

    在數(shù)字電路和電子測(cè)量領(lǐng)域中,脈沖計(jì)數(shù)器作為一種基本而重要的工具,其應(yīng)用十分廣泛。脈沖計(jì)數(shù)器,也被稱為脈沖頻率計(jì)或脈沖數(shù)計(jì),主要用于統(tǒng)計(jì)和測(cè)量輸入脈沖
    的頭像 發(fā)表于 05-15 17:08 ?1661次閱讀

    在STM8L中如何使用定時(shí)器的寄存器對(duì)外部脈沖進(jìn)行計(jì)數(shù)?

    我現(xiàn)在使用的是STM8L152單片機(jī),想利用tim2 或則tim3 進(jìn)行外部脈沖計(jì)數(shù)(1個(gè)脈沖信號(hào)輸入后,tim2或tim3定時(shí)器的數(shù)值寄存器值自動(dòng)+1或者-1)。 請(qǐng)高手不吝賜教,謝謝。
    發(fā)表于 05-11 06:05

    STM8L TIMx ETR并不能夠實(shí)現(xiàn)完全的外部時(shí)鐘計(jì)數(shù)是怎么回事?

    在工程中,原來(lái)利用GPIO外部中斷實(shí)現(xiàn)脈沖計(jì)數(shù),因?yàn)槭堑凸脑O(shè)計(jì),所以MCU平時(shí)都是Halt狀態(tài)。覺得如果利用ETR的輸入,配合TIM的
    發(fā)表于 04-23 07:20

    stm8外部中斷用來(lái)脈沖計(jì)數(shù),外部中斷開始計(jì)數(shù),LED燈就不正常了的原因?

    外部中斷用來(lái)脈沖計(jì)數(shù)。不計(jì)數(shù)時(shí),定時(shí)器正常,每秒翻轉(zhuǎn)一次LED燈。外部中斷開始
    發(fā)表于 04-22 07:29

    電路中如何實(shí)現(xiàn)脈沖計(jì)數(shù)功能和相位檢測(cè)

    在進(jìn)行DA轉(zhuǎn)換,頻率脈沖電壓轉(zhuǎn)換,pwm轉(zhuǎn)變成對(duì)應(yīng)的模擬量,電路是怎么實(shí)現(xiàn)對(duì)固定要求長(zhǎng)度或固定頻率脈沖個(gè)數(shù)進(jìn)行計(jì)數(shù)進(jìn)而轉(zhuǎn)換成模擬量的功能? 在進(jìn)行變頻器有源逆變pwm回饋時(shí),如何檢測(cè)電
    發(fā)表于 01-31 19:55

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

    外部中斷的工作原理是單片機(jī)響應(yīng)外部事件的一種機(jī)制** **。
    的頭像 發(fā)表于 01-28 17:37 ?3425次閱讀

    arm中斷是怎么實(shí)現(xiàn)

    ARM中斷實(shí)現(xiàn)是通過(guò)中斷控制器和異常模式實(shí)現(xiàn)的。ARM處理器通過(guò)中斷控制器來(lái)接收和處理外部
    的頭像 發(fā)表于 01-05 15:18 ?846次閱讀

    stm32f1如何將外部中斷關(guān)掉hal庫(kù)

    Layer)來(lái)簡(jiǎn)化芯片和外設(shè)的驅(qū)動(dòng)開發(fā)。在STM32F1中,外部中斷的關(guān)閉是通過(guò)HAL庫(kù)中的相應(yīng)函數(shù)來(lái)實(shí)現(xiàn)的。下面我將詳細(xì)介紹如何使用HAL庫(kù)關(guān)閉外部
    的頭像 發(fā)表于 12-22 13:52 ?3221次閱讀