在《EM335x主板ISA總線的高級應用》一文中介紹了WEC7版的ESM335x精簡ISA總線數據"塊"讀寫方法,對于多字節(jié)數據塊的連續(xù)讀寫,采用塊讀寫方式可以減少驅動程序API的調用次數,提高ISA總線的訪問效率。
數據塊讀寫功能是通過設備驅動的DeviceIoControl來完成的,需要用到以下數據結構:
typedef struct
{
PBYTE pReadBuf; //ISA讀數據buffer, 只能一個buffer有效
PBYTE pWriteBuf; //ISA寫數據buffer, 只能一個buffer有效
DWORD dwDataLength; //length of data in byte
DWORD dwDataPortOfs; //讀寫的起始地址 = 0x00 – 0xFF
DWORD dwInc; //= 0: 固定地址, > 0: 讀寫后地址自動增加
} ISA_BLOCK_INFO, *PISA_BLOCK_INFO;
在上述數據結構中:
pReadBuf為進行讀操作時的數據buffer,讀操作具體為8-bit數據讀。注意:數據結構中,pReadBuf和pWrietBuf只能有一個有效。
pWriteBuf為進行寫操作時的數據buffer,寫操作具體為8-bit數據讀。注意:數據結構中,pReadBuf和pWrietBuf只能有一個有效。
dwDataPortOfs為讀寫的端口地址,范圍為0x00 – 0xFF。
dwDataLength為本數據塊讀或寫的字節(jié)數。
dwInc為每次讀寫后,地址的自動增量,dwInc = 0:表示固定地址讀寫,dwInc > 0: 表示每次讀寫后,地址會自動增加dwInc,作為下一次的讀寫地址。當地址超過0xFF時,會折回到地址0x00。
數據塊讀寫方式雖然減少了頻繁調用系統(tǒng)API而產生的系統(tǒng)開銷,但數據讀寫過程還是需要CPU的全程參與,為了進一步提高CPU的利用效率,我們升級了ISA的驅動程序,實現了DMA方式的數據傳輸?;谥С諨MA操作的ISA驅動,應用程序在調用DeviceIoControl進行塊讀寫操作時,如果訪問固定地址(即將設置參數dwInc為0),則驅動程序就會自動啟用DMA方式進行數據傳輸。
采用DMA進行數據傳輸可以進一步提高ISA總線的數據傳輸速度,同時大大降低總線數據傳輸對CPU負載率的影響。當不使用DMA進行數據傳輸,ESM335x CPU全速運行時(CPU負載100%),ISA總線的讀寫速度在3MB/s左右,使用DMA方式后,ESM335x ISA總線速度可達到5MB/s左右,扣除驅動程序必要處理開銷,在應用層實測的數據塊讀速度為4.17MB/s、數據塊寫速度為4.5MB/s,而此時CPU的負載率在15%左右。
-
嵌入式主板
+關注
關注
7文章
6107瀏覽量
37084
發(fā)布評論請先 登錄
DS92LV241x:高速數據傳輸的理想選擇
深入剖析DS92LV242x:高速數據傳輸的理想之選
探索DS92LV042x:高速數據傳輸解決方案的理想之選
探索DS92LV242x:高速數據傳輸的理想之選
CW32 DMA的主要特性
Amphenol ICC SD Express Push - Push連接器:高速數據傳輸新選擇
單片機之間可以進行無線數據傳輸嗎
RVMCU課堂「18」: 手把手教你玩轉RVSTAR—DMA數據傳輸篇
高海拔草原牧草生長態(tài)勢監(jiān)測數據無線組網傳輸,無線數據傳輸系統(tǒng) #人工智能 #工業(yè)自動化 #計算機網絡 #電工
SPI數據傳輸緩慢問題求解
捷多邦的IoT PCB:數據傳輸的未來
英創(chuàng)信息技術ESM335x工控主板ISA總線DMA數據傳輸簡介
評論