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

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

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

3天內不再提示

英創信息技術工控主板快速GPIO操作介紹

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-17 09:56 ? 次閱讀

英創公司EM928x系列和EM335x系列的工控主板均有32位GPIO0 – GPIO31并且為可獨立方向可設置的通用數字IO,所有GPIO的上電初始狀態均為輸入狀態帶上拉電阻。所以在初始化狀態下,每位GPIO管腳所呈現的電平均為高電平。面對豐富的GPIO資源,許多客戶希望將GPIO利用起來做一下其他的應用,比如模擬SPI接口I2C接口,以及一些總線時序等,下面就來看看GPIO的操作。

常規的GPIO操作在英創公司的主板使用手冊中已經有了較為詳細的介紹,下面將主要的步驟例舉出來:

首先需要打開GPIO的設備文件:
fd = open('/dev/em335x_gpio', O_RDWR);

然后根據英創公司提供的接口即可實現對GPIO的操作:
rc = GPIO_OutEnable(fd, 0xffffffff); //使能GPIO
if(rc < 0)
{
printf('GPIO_OutEnable::failed %d\n', rc);
return rc;
}
rc = GPIO_OutClear(fd, GPIO0); //拉低GPIO
if(rc < 0)
{
printf('GPIO_OutClear::failed %d\n', rc);
return rc;
}

這樣通過調用驅動,實現了對GPIO的控制,但是調用驅動就存在用戶空間和內核空間的數據傳輸,還會涉及到系統調度的問題,所以當我們執行一次置低置高的操作,經測試,大概會用掉2.5μs,波形如下圖:

通過驅動程序操作GPIO的波形

對于一般的應用來說,通過驅動來操作GPIO已經能夠滿足需求,直接使用英創公司封裝好的接口函數,即可實現對應用程序的開發。但是當需要用GPIO做實時性要求較高的應用時,簡單的通過驅動來控制GPIO可能就無法實現,比如需要用GPIO來模擬某種時序,調用驅動來操作可能就會讓時序的一個周期過長,無法滿足時序的要求。

針對這種情況,英創公司為客戶提供了一種更快速的GPIO 操作方法,即通過內存映射的方法來操作GPIO,使用mmap()函數將GPIO的硬件地址映射到進程地址空間,實現對內存物理地址的讀寫,直接控制GPIO的寄存器,這是一種直接操作硬件的方式,避免了用戶進程和內核進程的數據交換,極大地提升了效率。

首先將/dev/mem/設備文件中GPIO的地址映射到用戶進程空間的代碼:
void *GPIO_MMAP::gpio_em335x_pin_config(unsigned int BASE)
{
int mem_fd;
void *base;
mem_fd = open('/dev/mem', O_RDWR|O_SYNC);
printf('mem_fd is %d\n', mem_fd);
/* mmap GPIO */
base = mmap(
NULL,//起始地址
GPIO_DEV_SIZE, //映射的文件內容的大小
PROT_READ|PROT_WRITE,// 映射區域可讀可寫
MAP_SHARED,//映射區域的寫入數據會寫回到原來的文件
mem_fd,
BASE//被映射的硬件地址
);
close(mem_fd);
return base;
}

成功執行時,mmap()函數返回被映射區的指針。普通文件被映射到進程地址空間后,進程可以像訪問普通內存一樣對文件進行訪問,不必再調用read(),write()等操作。只需要使用返回的地址指針在對應的寄存器的偏移地址賦值,就可以完成操作。在例程中已經將函數接口引出(詳細的代碼請參考例程):
GPIO.GPIO_OutEnable(GPIO0);//輸出使能
GPIO.GPIO_OutClear(GPIO0);//置為低電平
GPIO.GPIO_OutSet(GPIO0);//置為高電平

通過這樣的方式實現GPIO操作,時序圖如下:

用過內存映射操作的GPIO時序

可以看到,置低置高的操作只用了220ns左右,相比調用驅動程序所需要的2.5μs,大大的提升了效率,也已經達到了實時操作的要求。下面來看一個實際的例子,使用GPIO模擬HPI接口的寫時序,HPI是一個與主機通信的并行接口,主要用于DSP與其他總線或CPU進行通信,在工業控制中,HPI接口是很常用的,所以我們就用HPI接口的時序作為例子,下面這個HPI時序有16位數據線和12位地址線:

HPI寫時序圖

時序要求

我們使用30位GPIO來模擬這個時序,將GPIO0~GPIO15作為16為數據線,GPIO16~GPIO28作為12為地址線,而GPIO28作為片選,GPIO29作為讀寫控制信號。基本的思路流程為:
①將片選,讀寫信號和地址線置為輸出,并且為高電平。數據線置為輸入。
②將數據線的寄存器置為需要的值。
③將數據線置為輸出。
④拉低讀寫信號線,再拉低片選。
⑤這里可以根據時序要求做一點延時,拉高片選,拉高讀寫信號,再將數據線置為輸入。

按照這樣操作就基本完成了一次要求的寫時序,實現的程序代碼

int GPIO_Write(unsigned int AddrBits, unsigned int DataBits)
{
unsigned int DSetBits,DClearBits;
unsigned int ASetBits,AClearBits;
ASetBits= (AddrBits << 16) & 0x0fff0000 ;  // 地址位為1的位
AClearBits= ~ASetBits ^ 0xf000ffff ;//地址位為0的位
printf('0x0%x\n',AClearBits);
GPIO.GPIO_OutSet(ASetBits);
GPIO.GPIO_OutClear(AClearBits);
DSetBits= DataBits & 0x0000ffff ;//數據位為1的位
DClearBits= ~DSetBits ^ 0xffff0000 ;//數據位為0的位

GPIO.GPIO_OutSet(DSetBits);
GPIO.GPIO_OutClear(DClearBits);
GPIO.GPIO_OutEnable(0x0000ffff);//設置數據線為輸出

GPIO.GPIO_OutClear(GPIO29);//讀寫信號
GPIO.GPIO_OutClear(GPIO28);//將片選拉低

GPIO.GPIO_OutSet(GPIO28);//將片選拉高
GPIO.GPIO_OutSet(GPIO29);//讀寫信號

GPIO.GPIO_OutDisable(0x0000ffff);//設置數據線為輸入

return 1;
}

執行程序,可以看到片選和讀寫信號的時序為:

片選和讀寫信號的時序

可以看到一次寫操作的時間大約在1.25μs,如果是調用驅動程序控制GPIO來實現這個時序的模擬,那效率就會變低,詳細的代碼請參考例程。

注意事項:我們推薦客戶直接使用例程中引出的接口進行操作,不推薦客戶對硬件訪問這一部分代碼進行修改,以免在操作的時候出現無法預估的錯誤。

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

    關注

    7

    文章

    6085

    瀏覽量

    35218
收藏 人收藏

    評論

    相關推薦

    國產工控主板有什么優勢、特點?

    隨著國產工控主板的發展,國內企業也在不斷開發新的工控主板,為了滿足國內企業的發展需求,一些國產工控主板
    的頭像 發表于 11-15 10:11 ?90次閱讀

    ?什么是國產工控主板,國產工控主板的特點有哪些?

    什么是國產工控主板呢?國產工控主板是工業計算機的主板,是一種計算機系統的硬件設備,是專門為工業控制場景設計和生產的電路板。它在國內的研發和制
    的頭像 發表于 11-07 10:29 ?109次閱讀

    國產工控主板,信產業發展新引擎

    在當今科技飛速發展的時代,信產業正成為國家戰略的重要支撐。而我們的國產工控主板,以其卓越的性能和可靠的品質,為信產業的發展注入強大動力。國產工控
    的頭像 發表于 11-06 10:29 ?157次閱讀

    SOC GPIO操作

    GPIO_INTERRUPT_LOW_ENABLE 0x2c 原文標題:SOC GPIO操作
    的頭像 發表于 11-01 11:06 ?101次閱讀

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

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

    工控主板有哪些特點?

    ?工控主板是用于工業控制領域的專用主板,具有以下特點: 穩定性:工控主板通常經過嚴格的測試和優化,具有較高的穩定性和可靠性,能夠在惡劣的工業
    的頭像 發表于 10-10 08:55 ?232次閱讀

    國產化背景下的工控主板發展現狀

    ,是信息技術應用創新產業的簡稱,于2016年“信工委會”(信息技術應用創新工作委員會)提出,目的就是要推動我們國內軟硬件關鍵技術的研發
    的頭像 發表于 09-21 16:15 ?333次閱讀

    工控主板在環保智能設備中的應用

    工控主板在環保智能設備中的應用,對于環境監測、資源管理、污染控制等方面起到了至關重要的作用。以下是工控主板在環保智能設備中的一些具體應用:
    的頭像 發表于 07-17 15:54 ?290次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>在環保智能設備中的應用

    淺析安卓工控主板的優勢

    安卓工控主板作為專為工業控制領域設計的硬件平臺,相較于普通商用主板,擁有諸多優勢,以滿足工業環境對穩定、可靠、長期運行的嚴格要求。以下是安卓工控主板
    的頭像 發表于 06-27 14:50 ?310次閱讀

    使用工控主板時該注意哪些事項?

    最近大家都在頻繁問一個問題就是工控主板在什么人為情況下容易出現故障,從而造成工控主板的損壞,那今天小編就來講講,我們在使用工控
    的頭像 發表于 06-05 16:01 ?363次閱讀
    使用<b class='flag-5'>工控</b><b class='flag-5'>主板</b>時該注意哪些事項?

    工控主板容易出現故障的原因有哪些?

    最近大家都在頻繁問一個問題就是工控主板在什么人為情況下容易出現故障,從而造成工控主板的損壞,那今天小編就來講講,我們在使用工控
    的頭像 發表于 05-17 10:57 ?333次閱讀

    工控機主板和普通商用級主板有什么區別?

    工控機主板和普通商用級主板都屬于工業主板范疇,其與普通主板擁有本質區別,下面就分析一下工控主板
    的頭像 發表于 05-13 15:07 ?515次閱讀

    工控主板的性能指標有哪些?

    工控主板是工業控制領域中的關鍵組成部分,它承載著工控系統的核心功能。因此,工控主板的性能指標是評估其質量和性能的重要標準。本文將
    的頭像 發表于 05-10 16:27 ?863次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>的性能指標有哪些?

    工控主板和普通主板的區別有哪些

    工控主板和普通主板是兩種在計算機硬件領域中常見的主板類型,它們在設計、功能和用途上有著明顯的區別。工控
    的頭像 發表于 04-25 16:54 ?1162次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>和普通<b class='flag-5'>主板</b>的區別有哪些

    購買工控主板的三大誤區

    最近有很多人問我什么樣的工控主板算好的,有沒有一個統一的標準。工控主板作為整機的核心組成部分,在性能穩定上有著至關重要的作用,那今天小編就來給大家講解一下在購買
    的頭像 發表于 04-16 16:40 ?304次閱讀