在《EM335x主板ISA總線的高級(jí)應(yīng)用》一文中介紹了WEC7版的ESM335x精簡(jiǎn)ISA總線數(shù)據(jù)"塊"讀寫(xiě)方法,對(duì)于多字節(jié)數(shù)據(jù)塊的連續(xù)讀寫(xiě),采用塊讀寫(xiě)方式可以減少驅(qū)動(dòng)程序API的調(diào)用次數(shù),提高ISA總線的訪問(wèn)效率。
數(shù)據(jù)塊讀寫(xiě)功能是通過(guò)設(shè)備驅(qū)動(dòng)的DeviceIoControl來(lái)完成的,需要用到以下數(shù)據(jù)結(jié)構(gòu):
typedef struct
{
PBYTE pReadBuf; //ISA讀數(shù)據(jù)buffer, 只能一個(gè)buffer有效
PBYTE pWriteBuf; //ISA寫(xiě)數(shù)據(jù)buffer, 只能一個(gè)buffer有效
DWORD dwDataLength; //length of data in byte
DWORD dwDataPortOfs; //讀寫(xiě)的起始地址 = 0x00 – 0xFF
DWORD dwInc; //= 0: 固定地址, > 0: 讀寫(xiě)后地址自動(dòng)增加
} ISA_BLOCK_INFO, *PISA_BLOCK_INFO;
在上述數(shù)據(jù)結(jié)構(gòu)中:
pReadBuf為進(jìn)行讀操作時(shí)的數(shù)據(jù)buffer,讀操作具體為8-bit數(shù)據(jù)讀。注意:數(shù)據(jù)結(jié)構(gòu)中,pReadBuf和pWrietBuf只能有一個(gè)有效。
pWriteBuf為進(jìn)行寫(xiě)操作時(shí)的數(shù)據(jù)buffer,寫(xiě)操作具體為8-bit數(shù)據(jù)讀。注意:數(shù)據(jù)結(jié)構(gòu)中,pReadBuf和pWrietBuf只能有一個(gè)有效。
dwDataPortOfs為讀寫(xiě)的端口地址,范圍為0x00 – 0xFF。
dwDataLength為本數(shù)據(jù)塊讀或?qū)懙淖止?jié)數(shù)。
dwInc為每次讀寫(xiě)后,地址的自動(dòng)增量,dwInc = 0:表示固定地址讀寫(xiě),dwInc > 0: 表示每次讀寫(xiě)后,地址會(huì)自動(dòng)增加dwInc,作為下一次的讀寫(xiě)地址。當(dāng)?shù)刂烦^(guò)0xFF時(shí),會(huì)折回到地址0x00。
數(shù)據(jù)塊讀寫(xiě)方式雖然減少了頻繁調(diào)用系統(tǒng)API而產(chǎn)生的系統(tǒng)開(kāi)銷(xiāo),但數(shù)據(jù)讀寫(xiě)過(guò)程還是需要CPU的全程參與,為了進(jìn)一步提高CPU的利用效率,我們升級(jí)了ISA的驅(qū)動(dòng)程序,實(shí)現(xiàn)了DMA方式的數(shù)據(jù)傳輸。基于支持DMA操作的ISA驅(qū)動(dòng),應(yīng)用程序在調(diào)用DeviceIoControl進(jìn)行塊讀寫(xiě)操作時(shí),如果訪問(wèn)固定地址(即將設(shè)置參數(shù)dwInc為0),則驅(qū)動(dòng)程序就會(huì)自動(dòng)啟用DMA方式進(jìn)行數(shù)據(jù)傳輸。
采用DMA進(jìn)行數(shù)據(jù)傳輸可以進(jìn)一步提高ISA總線的數(shù)據(jù)傳輸速度,同時(shí)大大降低總線數(shù)據(jù)傳輸對(duì)CPU負(fù)載率的影響。當(dāng)不使用DMA進(jìn)行數(shù)據(jù)傳輸,ESM335x CPU全速運(yùn)行時(shí)(CPU負(fù)載100%),ISA總線的讀寫(xiě)速度在3MB/s左右,使用DMA方式后,ESM335x ISA總線速度可達(dá)到5MB/s左右,扣除驅(qū)動(dòng)程序必要處理開(kāi)銷(xiāo),在應(yīng)用層實(shí)測(cè)的數(shù)據(jù)塊讀速度為4.17MB/s、數(shù)據(jù)塊寫(xiě)速度為4.5MB/s,而此時(shí)CPU的負(fù)載率在15%左右。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6100瀏覽量
36242
發(fā)布評(píng)論請(qǐng)先 登錄

SPI數(shù)據(jù)傳輸緩慢問(wèn)題求解
I2C總線數(shù)據(jù)傳輸速度要求
MPU數(shù)據(jù)傳輸協(xié)議詳解
總線數(shù)據(jù)傳輸的安全性分析
ptp對(duì)實(shí)時(shí)數(shù)據(jù)傳輸的影響
PCIe數(shù)據(jù)傳輸協(xié)議詳解
CAN總線數(shù)據(jù)傳輸速率 CAN總線在汽車(chē)中的應(yīng)用
CAN總線數(shù)據(jù)傳輸速率設(shè)置
LORA模塊的數(shù)據(jù)傳輸速率
網(wǎng)絡(luò)數(shù)據(jù)傳輸速率的單位是什么

高速串行總線,數(shù)據(jù)鏈傳輸離不開(kāi)它!#高速串行總線 #電路知識(shí) #數(shù)據(jù)傳輸
二總線——MCU有線數(shù)據(jù)傳輸
SDIO支持哪些數(shù)據(jù)傳輸模式?
經(jīng)驗(yàn)分享 | DMA助力實(shí)時(shí)控制

評(píng)論