国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

英創信息技術精簡ISA總線WinCE編程簡介

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-02-11 16:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ISA總線簡介

英創精簡ISA總線接口是一種8-bit寬度的雙向并行擴展總線,其特點是地址數據分時復用8-bit總線。英創精簡ISA總線支持異步和同步訪問模式,異步訪問模式下ISA總線使用8條數據線加上4條總線控制信號,即可實現對外部數據的快速讀寫,異步訪問的最高速率在5MB/s左右。同步訪問需要再使能一條總線時鐘信號(共13條信號),可實現高達12MB/s的數據傳輸。精簡ISA總線作為英創主板的特色功能之一,在ESM6802、ESM7000、ESM335x等多款型號中均有配置。英創精簡ISA總線的信號定義如下:

主板引腳 信號及說明
E2 ISA_D0,地址數據總線,LSB
E3 ISA_D1,地址數據總線
E4 ISA_D2,地址數據總線
E5 ISA_D3,地址數據總線
E6 ISA_D4,地址數據總線
E7 ISA_D5,地址數據總線
E8 ISA_D6,地址數據總線
E9 ISA_D7,地址數據總線
E10 ISA_RDn,數據讀控制信號
E11 ISA_WEn,數據寫控制信號
E12 ISA_ADVn,地址鎖存控制信號
E13 ISA_CSn,片選信號
F9 GPIO24 / ISA_BCLK,同步時鐘ISA_BCLK

ISA總線數據結構

ISA總線的數據傳輸由ISA_BLOCK_INFO數據結構定義,其說明如下:

typedef struct
{
PBYTE pReadBuf;
PBYTE pWriteBuf;
DWORD dwDataLength;
DWORD dwDataPortOfs;
DWORD dwInc;
} ISA_BLOCK_INFO, *PISA_BLOCK_INFO;

成員說明

pReadBuf

ISA總線讀數據緩存,!=NULL表示為ISA總線讀操作,pReadBuf與pWriteBuf指針不能同時有效

pWriteBuf

ISA總線寫數據緩存, !=NULL表示為ISA總線寫操作,pReadBuf與pWriteBuf指針不能同時有效

dwDataLength

讀/寫訪問的字節長度

dwDataPortOfs

ISA端口地址。ISA總線驅動程序支持應用程序使用不同的地址范圍來區別不同的操作模式,根據ISA端口地址可實現以下幾種總線訪問模式。

Value ISA總線訪問模式
0x0000...0x00FF 異步總線周期,CPU操作
0x1000...0x10FF 異步總線周期,DMA方式傳輸,dwInc需要同時設置為0
0x4000...0x40FF 同步總線周期,DMA方式傳輸,dwInc需要同時設置為0

由于精簡ISA總線的寬度只有8-bit,因此它實際的物理尋址范圍也只有8-bit,即0x00-0xFF。

dwInc

每次ISA讀寫后地址是否增加

Value Meaning
0 固定地址
1 讀/寫后地址自動加1

備注:

ISA總線的CPU操作方式主要用于小量數據的傳輸,比如控制命令、配置數據讀寫等。

DMA方式傳輸可在較低CPU開銷的情況下實現大批量數據的高速傳輸,DMA方式傳輸要求傳輸的數據長度dwDataLength為32的整倍數、同時需要將dwInc設置為0,否則驅動程序會使用CPU方式進行數據傳輸。DMA傳輸方式需要連接在ISA總線的上CPLD/FPGA使用固定的數據端口地址,在CPLD/FPGA內部自己管理地址偏移。

ESM335x工控主板只支持異步訪問模式,在異步DMA方式傳輸時,需要將dwInc設置為0來固定數據端口地址。

ESM6802/ESM7000支持異步和同步DMA訪問模式,但由于SDMA(NXP Smart DMA)的原因,即使將dwInc設置為0,在進行DMA數據傳輸時也無法固定端口地址,因此CPLD/FPGA需要通過額外的方法來識別當前為DMA傳輸。ESM6802/ESM7000在進行異步DMA訪問時,可通過1位GPIO來向外表明當前為異步DMA訪問模式,也可通過CPU操作方式向指定地址寫入特定命令,讓CPLD/FPGA切換到異步DMA傳輸模式。在進行同步DMA訪問時,可結合ISA_BCLK信號來識別當前的傳輸模式。為了避免混淆,在實際應用時建議僅使用一種DMA(同步或異步)訪問模式,推薦使用同步DMA訪問模式以獲得最高的ISA總線速度。

ISA總線速度測試

在ISA_BLOCK_INFO結構體中定義了異步CPU訪問,異步DMA和同步DMA三種ISA總線訪問方式,而異步CPU訪問又可通過驅動API函數和內存映射兩種方式來實現。

驅動API訪問是指應用程序直接調用設備驅動API函數WriteFil/ReadFile進行字/字節的總線讀寫。ISA總線周期通常在200ns左右,而應用程序調用一次設備驅動程序API花費的時間卻需要數微秒的時間,這顯然大大降低了總線單字(或單字節)的訪問效率。為了解決這一問題,我們利用了WinCE的虛擬地址映射技術,在ISA驅動程序中實現了,在使用ISA總線的應用進程地址空間內分配一段虛擬地址空間,并將其與ISA接口的物理地址空間進行綁定。簡單來講就是實現了在WinCE應用程序中可以直接訪問ISA總線的外設地址空間,即內存映射訪問方式。

下圖是ESM3354、ESM7000和ESM6802,ISA總線在各種訪問模式下的總線速度。

圖1ESM335x / ESM7000 / ESM6802 ISA總線速度

下圖是ESM7000 ISA總線在不同訪問模式下,總線速度與CPU使用情況的對比??梢钥吹絻却嬗成浞绞皆L問(異步CPU操作)與異步DMA訪問在總線速度上很接近,但使用DMA傳輸可大大降低對CPU的開銷。因此對于頻繁的字或字節訪問可以使用內存映射方式訪問,而對于成批量數據的讀寫應該使用DMA方式進行傳輸。

圖2ESM7000 ISA總線在不同訪問方式下總線速度與CPU占用率

ISA總線訪問API

對ISA總線的所有訪問方法都包含在isa_api_v3.cpp文件中,如下所示:

#include "StdAfx.h"
#include "bsp_drivers.h"
#include
#include "isa_api_v3.h"
DWORD g_dwISABase = 0;
HANDLE ISA_Open( LPCWSTR lpDevName )
{
HANDLE hISA;
hISA = CreateFile(lpDevName, // name of device
GENERIC_READ|GENERIC_WRITE, // desired access
FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
NULL, // security attributes (ignored)
OPEN_EXISTING, // creation disposition
FILE_FLAG_RANDOM_ACCESS, // flags/attributes
NULL);
if(hISA != INVALID_HANDLE_VALUE)
{
if(DeviceIoControl(hISA, //打開“ISA1:”返回的Handler
IOCTL_VIRTUAL_COPY_EX, // IOCTL命令碼
NULL,0, // 不使用輸入參數
&g_dwISABase, sizeof(DWORD), // 得到ISA基地址
NULL, NULL))
return hISA;
CloseHandle(hISA);
hISA = INVALID_HANDLE_VALUE;
}
return hISA;
}
BOOL ISA_Close( HANDLE hISA)
{
g_dwISABase = 0;
return CloseHandle( hISA );
}
// Function: read a byte from a port on ISA bus
// Input: hISA: the HANDLE returned from ISA_Open function
// dwPortOffset = 0, 1, .. 255, address of port on ISA
// Return: the byte data read
BYTE ISARead8(HANDLE hISA, DWORD dwPortOffset)
{
WORD *pPortAddr;
WORD wValue;
BYTE ucValue;
DWORD dwNbBytesRead = 0;
if(g_dwISABase != 0)
{
dwPortOffset &= 0xff;
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (WORD*)(g_dwISABase + dwPortOffset);
wValue = *pPortAddr;
return (BYTE)wValue;
}
ucValue = (BYTE)(dwPortOffset & 0xFF);
ReadFile(hISA, &ucValue, sizeof(ucValue), &dwNbBytesRead, NULL);
return ucValue;
}
// Function: write a byte to a port on ISA bus
// Input: hISA: the HANDLE returned from ISA_Open function
// dwPortOffset = 0, 1, .. 255, address of port on ISA
// ucValue = the byte data to be written
void ISAWrite8(HANDLE hISA, DWORD dwPortOffset, BYTE ucValue)
{
WORD *pPortAddr;
WORD wValue;
DWORD dwNbBytesWritten = 0;
if(g_dwISABase != 0)
{
dwPortOffset &= 0xff;
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (WORD*)(g_dwISABase + dwPortOffset);
*pPortAddr = (WORD)ucValue;
return;
}
wValue = (WORD)(dwPortOffset & 0xFF);
wValue = (wValue << 8) | ucValue;
WriteFile(hISA, &wValue, sizeof(wValue), &dwNbBytesWritten, NULL);
}
// Function: read a word from a port on ISA bus
// Input: hISA: the HANDLE returned from ISA_Open function
// dwPortOffset = 0, 2, 4, .. 254, address of port on ISA
// Return: the word data read
WORD ISARead16(HANDLE hISA, DWORD dwPortOffset)
{
DWORD *pPortAddr;
DWORD dwValue;
WORD wValue;
DWORD dwNbBytesRead = 0;
if(g_dwISABase != 0)
{
dwPortOffset &= 0xFE; // 2-byte alignment
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (DWORD*)(g_dwISABase + dwPortOffset);
dwValue = *pPortAddr;
// the high-byte of data is at value[23..16]
return (WORD)(((dwValue >> 8) & 0xFF00) | (dwValue & 0xFF));
}
wValue = (WORD)(dwPortOffset & 0xFE);
ReadFile(hISA, &wValue, sizeof(wValue), &dwNbBytesRead, NULL);
return wValue;
}
// Function: write a word to a port on ISA bus
// Input: hISA: the HANDLE returned from ISA_Open function
// dwPortOffset = 0, 2, 4, .. 254, address of port on ISA
// wValue = the word data to be written
void ISAWrite16(HANDLE hISA, DWORD dwPortOffset, WORD wValue)
{
DWORD *pPortAddr;
DWORD dwValue;
DWORD dwNbBytesWritten = 0;
if(g_dwISABase != 0)
{
dwPortOffset &= 0xFE; // 2-byte alignment
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (DWORD*)(g_dwISABase + dwPortOffset);
dwValue = wValue;
// dispatch high-byte of data to value[23..16]
*pPortAddr = ((dwValue << 8) & 0x00ff0000) | (dwValue & 0x000000ff);
return;
}
dwValue = (dwPortOffset << 16) | wValue;
WriteFile(hISA, &dwValue, sizeof(dwValue), &dwNbBytesWritten, NULL);
}
// Function: read a bulk data from a port on ISA bus
// Input: hISA: the HANDLE returned from ISA_Open function
// *tp: a pointer to the ISA_BLOCK_INFO structure
// Return: number of bytes read
DWORD ISAReadBuf(HANDLE hISA, PISA_BLOCK_INFO tp)
{
DWORD dwNbBytesRead = 0;
if(ReadFile(hISA, tp, sizeof(ISA_BLOCK_INFO), &dwNbBytesRead, NULL))
return dwNbBytesRead;
return 0;
}
// Function: read a bulk data from a port on ISA bus
// Input: hISA: the HANDLE returned from ISA_Open function
// *tp: a pointer to the ISA_BLOCK_INFO structure
// Return: the number of bytes written
DWORD ISAWriteBuf(HANDLE hISA, PISA_BLOCK_INFO tp)
{
DWORD dwNbBytesWritten = 0;
if(WriteFile(hISA, tp, sizeof(ISA_BLOCK_INFO), &dwNbBytesWritten, NULL))
return dwNbBytesWritten;
return 0;
}

注意,當采用內存映射方式訪問時,若在多個線程中均有調用字或字節讀寫函數(ISAWrite8, ISAWrite16, ISARead8, ISARead126),需要加互斥鎖,以保證對硬件資源操作的完整性。通過驅動API調用的讀寫函數,在驅動內部已經增加了互斥操作,應用程序不需要再次添加。

ISA異步總線周期讀時序

ISA異步總線周期寫時序

ISA同步總線周期讀時序

ISA擴展單元可根據上述時序來支持高速的同步總線周期讀邏輯電路,其要點包括:

●每個同步周期共12個BCLK時鐘,第1個BCLK下降沿ADVn有效,標志同步周期的開始,之后連續11個BCLK下降沿后同步周期結束。

●每個同步周期傳輸8個字節有效數據,ISA總線從BCLK第5個上升沿開始鎖存數據,連續讀8個字節。

●ISA總線雖然輸出了ADDR地址數據,但這個地址是不固定的,ISA擴展單元應該忽略此地址數據。

ISA同步總線周期寫時序

ISA擴展單元可根據上述時序來支持高速的同步總線周期寫邏輯電路,其要點包括:

●每個同步周期共12個BCLK時鐘,第1個BCLK下降沿ADVn有效,標志同步周期的開始,之后連續11個BCLK下降沿后同步周期結束。

●每個同步周期傳輸8個字節有效數據,ISA擴展單元應從BCLK第5個上升沿開始鎖存數據,連續8個字節。

●ISA總線雖然輸出了ADDR地址數據,但這個地址是不固定的,ISA擴展單元應該忽略此地址數據。

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

    關注

    7

    文章

    6107

    瀏覽量

    37073
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    龍芯中科成功舉辦2025信息技術應用創新產教融合交流會

    11月30日,在教育部教育管理信息中心、山東省電化教育館的支持和指導下,龍芯中科聯合浪潮集團、濟南幼兒師范高等專科學校(以下簡稱“濟南幼高?!保晒εe辦信息技術應用創新產教融合交流會,并同步舉行信息技術應用創新實踐基地啟用儀式
    的頭像 發表于 12-08 14:53 ?777次閱讀

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

    2025年11月13日-15日,由中國教育技術協會主辦、浙江大學與中國教育技術協會網絡安全專業委員會聯合承辦,中國電子工業標準化技術協會信息技術應用創新工作委員會、浙江高校信
    的頭像 發表于 11-21 16:23 ?786次閱讀

    誠邁科技信電腦助力2025第二屆教育信息技術應用創新大賽圓滿收官

    11月15日,由中國教育技術協會主辦、浙江大學與中國教育技術協會網絡安全專業委員會聯合承辦,中國電子工業標準化技術協會信息技術應用創新工作委員會、浙江高校信
    的頭像 發表于 11-17 17:58 ?671次閱讀
    誠邁科技信<b class='flag-5'>創</b>電腦助力2025第二屆教育<b class='flag-5'>信息技術</b>應用創新大賽圓滿收官

    寶馬南京信息技術有限公司開業

    今日,寶馬(南京)信息技術有限公司在南京正式“掛牌運行”。這家華晨寶馬全資子公司由領悅數字信息技術有限公司南京分公司“迭代”而來,代表著一次里程碑式的“進化”。這次升級不僅加速了寶馬在華數字化轉型進程,更通過深化本土創新,為“未來智慧出行”的發展譜寫了核心“代碼”。
    的頭像 發表于 10-29 15:17 ?617次閱讀

    軟通動力入選2025新一代信息技術應用優秀案例

    近日,DBC德本咨詢正式發布“2025新一代信息技術應用優秀案例”榜單,軟通動力信息技術(集團)股份有限公司攜手廣西星網智云科技有限公司,為廣西玉柴機器集團有限公司打造的“玉柴數智化審計業務場景項目”成功入選,位列榜單第二名,充分彰顯了軟通動力在企業數智化轉型領域的深厚
    的頭像 發表于 09-28 17:48 ?1389次閱讀

    易華錄入選國家級信息技術應用創新典型解決方案

    近日,工業和信息化部網絡安全產業發展中心(工業和信息化部信息中心)公布了“2024年信息技術應用創新解決方案”評選結果。易華錄申報的“基于節能高效藍光的超級智能存儲解決方案”憑借顯著的
    的頭像 發表于 08-07 15:35 ?1614次閱讀

    信息技術應用產學協同人才培養行動計劃”正式發布,誠邁科技入選首批參與單位

    設在中國軟件評測中心。誠邁科技作為信技術先鋒企業,受邀成為首批參與單位,與國內頂尖高校、領軍企業和權威機構攜手,共同打造具有中國特色的信息技術人才培養新范式,為
    的頭像 發表于 08-06 17:29 ?1553次閱讀
    “<b class='flag-5'>信息技術</b>應用產學協同人才培養行動計劃”正式發布,誠邁科技入選首批參與單位

    佛瑞亞如何通過信息技術推動業務增長

    在數字化、信息化的浪潮下,信息技術已經不僅是后臺工具,更成為驅動企業發展的關鍵力量。本期Women Inspiring Mobility,我們采訪了佛瑞亞中國區信息技術總監馬瑛,了解她和團隊如何將
    的頭像 發表于 07-29 14:00 ?900次閱讀

    飛騰主板為信產業發展提高硬實力

    信息技術飛速發展的當下,信產業已成為我國實現科技自立自強、保障國家信息安全的關鍵領域。信,即信息技術應用創新,其核心目標是實現
    的頭像 發表于 07-22 18:20 ?707次閱讀

    DEKRA德凱成為沙特通信和信息技術設備技術法規認證機構

    近日,DEKRA德凱成功獲得沙特標準、計量和質量組織(SASO)認可,正式成為沙特通信和信息技術設備技術法規(Technical Regulation for Communications
    的頭像 發表于 07-15 14:27 ?917次閱讀

    中星微技術斬獲2025金???b class='flag-5'>創企業獎

    6月14日,由中國證券報主辦的2025科金牛獎頒獎典禮在上海市舉行,2025科金牛獎獲獎名單現場揭曉。其中中星微技術獲得新一代信息技術金???b class='flag-5'>創
    的頭像 發表于 06-16 14:16 ?1189次閱讀

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

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

    2025第二屆教育信息技術應用創新大賽啟動,誠邁科技邀您挑戰!

    NEWS為進一步落實建設網絡強國和教育強國的戰略部署,推動各級教育行政部門及高校信息技術應用創新能力提升,培養實戰型創新人才。誠邁科技聯合龍芯中科、太初元碁在2025第二屆教育信息技術應用創新大賽
    的頭像 發表于 05-13 17:24 ?1316次閱讀
    2025第二屆教育<b class='flag-5'>信息技術</b>應用創新大賽啟動,誠邁科技邀您挑戰!

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

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

    浪潮下,國產主板有什么新的發展機遇?

    信息技術應用創新浪潮的推動下,國產主板迎來了諸多新的發展機遇。信產業旨在實現信息技術領域的自主可控,這一戰略目標為國產主板的發展提供了廣闊的空間。信浪潮下國產主板的發展機遇多元且
    的頭像 發表于 05-09 09:24 ?721次閱讀
    信<b class='flag-5'>創</b>浪潮下,國產主板有什么新的發展機遇?