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

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

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

3天內不再提示

英創信息技術精簡ISA總線Linux編程 – Part2簡介

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

精簡ISA總線接口是一種8-bit寬度的雙向并行擴展總線,其特點是地址數據分時復用8位總線,加上4條總線控制信號,即可實現對外部數據的快速讀寫。若再使能一條總線時鐘信號(共13條信號),就可實現高達10MB/s以上的數據傳輸。精簡ISA總線作為英創主板的特色功能之一,在ESM6802、ESM7000、ESM7100、ESM335x等多款型號中均有配置。

關于對精簡ISA總線接口的應用編程的基本方法,請參考《精簡ISA總線編程 – Part 1》。本文介紹由應用程序啟動基于DMA的數據塊讀寫,即MemCpy方式的DMA。采用DMA進行ISA總線數據傳送的目的,是為了降低高速傳送大量數據時的CPU開銷。MemCpy方式的DMA是指軟件線程啟動DMA,然后該線程掛起等待DMA操作完成。在多線程環境中,其他線程即可在DMA執行過程中得以并行運行。

ISA總線信號定義如下:

信號及說明 PIN# 信號及說明
RESET_B,硬件復位 1 2 ISA_ADVn,地址鎖存控制信號
ISA_AD0,地址數據總線,LSB 3 4 ISA_AD4,地址數據總線
ISA_AD1,地址數據總線 5 6 ISA_AD5,地址數據總線
ISA_AD2,地址數據總線 7 8 ISA_AD6,地址數據總線
ISA_AD3,地址數據總線 9 10 ISA_AD7,地址數據總線,MSB
MSLn,支持多模塊掛接總線 11 12 ISA_WEn,數據寫控制信號
GPIO9,可選作為IRQ 13 14 ISA_RDn,數據讀控制信號
GPIO8,可選作為IRQ 15 16 ISA_CSn,片選控制信號
GPIO25,可選作為IRQ 17 18 VDD_5V0,+5V供電
GPIO24 / ISA_BCLK,同步時鐘ISA_BCLK 19 20 GND,電源信號地

本文以下部分,將以ESM7000 Linux平臺為例,介紹具體的編程方法。

DMA總線訪問API

應用啟動DMA數據傳輸,需要使用數據結構struct isa_transfer的傳遞參數和數據,structisa_transfer的結構定義如下:

structisa_transfer
{
void *rx_buf; /* != NULL: buffer for bus read */
void *tx_buf; /* != NULL: buffer for bus write */
unsigned len; /* buffer length in byte */
unsigned offset; /* offset,port address on isa bus */
unsigned inc; /* = 0: fixed offset, = 1: offset+1 after r/w */
};

每一個總線周期的操作只能是讀或寫,因此在isa_transfer結構中只能有一個buffer指針不為NULL。以下是執行32字節數據塊寫的代碼,寫入地址為0x4040。順序的數據可方便時序的觀察。

unsignedchargbuf[64 * 1024];
unsignedint i, value;
structisa_transfer t;
unsignedchar *pBuf8;
// write data block
memset(&t, 0, sizeof(structisa_transfer));
t.offset = 0x4040;
t.len = 32; // max len<= 16KB = 16 * 1024
t.tx_buf = gbuf;
// fill data
value = 0x55; // initialvalue
pBuf8 = (unsignedchar*)t.tx_buf;
for(i = 0; i
*pBuf8 = (unsignedchar)(value + i);
pBuf8++;
}
isa_write_buf(fd, &t);

注意offset必須是0x4000 – 0x40FF,驅動程序才會啟動MemCpy方式的DMA傳輸。若從0x4040讀入32字節數據,實現代碼則為:

unsignedchargbuf[64 * 1024];
structisa_transfer t;
// read data block
memset(&t, 0, sizeof(structisa_transfer));
t.offset = 0x4040;
t.len = 32; // max len<= 16KB = 16 * 1024
t.rx_buf = gbuf;
isa_read_buf(fd, &t);

DMA傳輸總線時序說明

圖1、圖2分別為MemCpy方式DMA讀總線時序概要、寫總線時序概要。

圖1DMA讀總線時序

圖2DMA寫總線時序

從上面的時序可見,DMA也是16字節一組,連續4個總線周期組成,每組之間有一定間隔。DMA讀操作的總線速率大約為11.8MB/s,DMA寫操作的總線速率大約為11.2MB/s。

展開DMA寫的總線時序可看到:

圖3DMA寫總線時序—第1組起始部分

圖4DMA寫總線時序—第1組結束部分

圖5DMA寫總線時序—第2組起始部分

圖6DMA寫總線時序—第2組結束部分

在每個總線周期中,地址遞增4。這樣當傳輸長度超過256字節時,ISA地址及會循環。這意味著當采用MemCpy方式DMA進行數據傳輸時,數據端口譯碼不能采用普通的組合電路地址譯碼方式,而必須采用BCLK+ ADV#的同步電路譯碼方式。具體方式就是每個周期的第一個BCLK下降沿鎖存到有效ADV#,標志同步周期的開始,之后經過連續7個BCLK下降沿后同步周期結束。

DMA傳輸時的CPU負載率

與純軟件的同步總線周期傳輸相比,DMA傳輸最大的優點是有效降低了總線傳輸的CPU開銷,使應用程序的其它線程能同步運行。基本的測試代碼如下:

#define MAX_DMA_LEN (16*1024)
unsignedchar gbuf[64 * 1024];
unsignedint i, count = 1;
struct isa_transfer t;
unsignedchar *pBuf8;
longdouble a[4], b[4], loadavg; //for CPU utilization calculation
FILE *fp;
constchar *bus_type_name[] = {"async-cpu","async-dma-mem","async-dma-ext","sync-cpu","sync-dma-mem","sync-dma-ext"};
// fill data
pBuf8 = (unsignedchar*)gbuf;
for(i = 0; i < MAX_DMA_LEN; i++){
*pBuf8 = (unsignedchar)(value + i);
pBuf8++;
}
memset(&t, 0, sizeof(struct isa_transfer));
// get initial values for calculating CPU usage in %
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
fclose(fp);
// write data block loop
while(count) {
i = (count < MAX_DMA_LEN)? count : MAX_DMA_LEN;
t.offset = offset;
t.len = i;
t.tx_buf = gbuf;
isa_write_buf(fd, &t);
count -= i;
}
// get end values for calculating CPU usage in %
fp = fopen("/proc/stat","r");
fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
fclose(fp);
// calculate CPU usage in %
loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) /((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
loadavg *= 100;
i = (offset >> 12) & 0xf;
printf("%s bus write, CPU utilization is : %Lf%%\n",bus_type_name[i], loadavg);

使用100M數據長度來測試總的CPU負載率的情況如下:

模式 MemCpy DMA 純軟件操作
同步總線讀 6.01% 50.3%
同步總線寫 5.71% 50.0%

ESM7000使用的是具有雙核CPU的iMX7D,總CPU負載率50%,表示某個CPU核的負載已經100%。DMA的使用對提高系統整體的性能是非常顯著的。

進一步可測試應用層實際的傳輸速率如下:

模式 傳輸速率 CPU負載
MemCpy DMA同步總線讀 8.67MB/s 6.01%
MemCpy DMA同步總線寫 7.93MB/s 5.71%

若把每個周期傳輸的字節數從4個提升到8個,傳輸率則可有50%的提升。

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

    關注

    87

    文章

    11479

    瀏覽量

    213087
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6097

    瀏覽量

    36199
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    科普|信是什么?一文讀懂“信息技術應用創新”戰略

    什么是信?信,即“信息技術應用創新”,是國家推動IT系統自主可控、安全可控的重要戰略工程。它不僅是技術層面的創新,更承載著保障國家網絡安全、推動產業升級和實現數字主權的重任。簡單來
    的頭像 發表于 06-13 10:06 ?534次閱讀
    科普|信<b class='flag-5'>創</b>是什么?一文讀懂“<b class='flag-5'>信息技術</b>應用創新”戰略

    2025第二屆教育信息技術應用創新大賽正式開賽

    為進一步落實建設網絡強國和教育強國的戰略部署,推動各級教育行政部門及高校信息技術應用創新能力提升,培養實戰型創新人才。龍芯中科聯合太初元碁、誠邁科技在2025第二屆教育信息技術應用創新大賽共同發布信息技術應用創新人工智能方向(賽
    的頭像 發表于 05-13 16:21 ?407次閱讀

    Linux的作用

    學校和教育機構使用Linux來教授計算機科學和信息技術相關的課程。 總之,Linux是一個功能強大、靈活且廣泛應用的操作系統,適用于各種不同的用途和場景。
    發表于 04-04 01:57

    Platform總線簡介

    平臺總線(Platform Bus)是 Linux 內核中的一個基礎架構,用于支持硬件平臺上的設備驅動程序的開發和管理。它提供了一種統一的方式來表示和操作與特定平臺相關的設備。平臺總線的設計目標是將
    發表于 03-31 16:43

    龍芯中科榮獲2024年度信息技術應用創新工作委員會卓越貢獻成員單位

    近日,中國電子工業標準化技術協會信息技術應用創新工作委員會(以下簡稱“信工委會”)在北京召開2024年度工作總結座談會暨信“大比武”總結大會。中國工程院院士、信
    的頭像 發表于 01-23 10:50 ?617次閱讀

    芯盛智能榮獲2024年信息技術應用創新工作委員會卓越貢獻成員單位

    日前,中國電子工業標準化技術協會信息技術應用創新工作委員會(以下簡稱 “信工委會”)2024 年度總結座談會于北京隆重舉行。此次會議對在信工作中作出突出貢獻的成員單位予以表彰。江蘇
    的頭像 發表于 01-20 09:56 ?582次閱讀

    不同類型的總線技術對比

    總線技術是計算機系統中用于連接各個組件(如CPU、內存、硬盤等)的關鍵技術,它們負責數據傳輸和通信。以下是一些常見的總線技術及其對比: 1.
    的頭像 發表于 12-31 09:40 ?1177次閱讀

    飛騰助力首屆教育信息技術應用創新大賽圓滿落幕

    近日,由中國教育技術協會主辦,教育部教育管理信息中心教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信工委會支持,北京航空航天
    的頭像 發表于 12-24 09:57 ?488次閱讀

    有方科技參編的信息技術團體標準發布

    近日,有方科技參編的《信息技術產品供應鏈成熟度 共性指標 第1部分:企業背景評價》《信息技術產品供應鏈成熟度 共性指標 第2部分:技術掌控評價》《
    的頭像 發表于 12-23 10:44 ?568次閱讀

    龍芯中科助力2024首屆教育信息技術應用創新大賽成功舉辦

    近日,2024首屆教育信息技術應用創新大賽在北京航空航天大學成功舉辦。本次大賽由中國教育技術協會主辦,教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信
    的頭像 發表于 12-19 17:02 ?543次閱讀

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

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

    Linux應用編程的基本概念

    Linux應用編程涉及到在Linux環境下開發和運行應用程序的一系列概念。以下是一些涵蓋Linux應用編程的基本概念。
    的頭像 發表于 10-24 17:19 ?599次閱讀

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

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

    加速鯤鵬落地!拓維信息遷移工具榮獲鯤鵬原生開發技術認證

    認證。圖/拓維·數據庫適配中間件取得鯤鵬原生開發N認證在數字化時代的大潮中,信戰略作為國家推動信息技術應用創新、保障信息安全與自主可控的關鍵舉措,其重要性日益凸顯
    的頭像 發表于 09-10 08:03 ?749次閱讀
    加速鯤鵬落地!拓維<b class='flag-5'>信息</b>信<b class='flag-5'>創</b>遷移工具榮獲鯤鵬原生開發<b class='flag-5'>技術</b>認證

    梯度科技入選2023年信息技術應用創新解決方案名單

    日前,工業和信息化部網絡安全產業發展中心(工業和信息化部信息中心)在天津舉辦2024信息技術應用創新發展大會暨解決方案應用推廣大會。會上正式公布了2023年
    的頭像 發表于 09-09 16:29 ?734次閱讀
    主站蜘蛛池模板: 爽a中文字幕一区 | 午夜五月天| 波多野结衣在线观看一区 | 国产一区二区中文字幕 | 亚洲一区视频 | 俺要操| 色偷偷男人天堂 | 午夜精| 爽好舒服快受不了了老师 | 亚洲色图综合网 | bt种子在线www天堂官网 | 欧美亚洲天堂网 | 网站国产 | 亚洲一区免费在线 | 亚洲免费色视频 | 久久精品亚洲精品国产欧美 | 人人揉揉香蕉大青草 | 久久国产香蕉一区精品 | www.青草视频 | 免费人成激情视频在线观看冫 | 午夜高清视频在线观看 | 亚洲 欧美 日韩 丝袜 另类 | 国产欧美另类第一页 | 久久大综合| 在线国产三级 | 久久澳门 | 国产精品视频一区国模私拍 | 五月婷婷丁香花 | 亚洲色图欧美在线 | 日韩免费一级毛片 | 一色桃子juy774在线播放 | 国产高清色播视频免费看 | 精品成人| 久久久噜噜噜久久久 | 狠狠狠色丁香婷婷综合久久五月 | www.av在线.com | 国产毛片农村妇女aa板 | 男女交性动态免费视频 | 欧美婷婷六月丁香综合色 | 你懂的在线免费观看 | 久久免费国产视频 |