哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何快速訪(fǎng)問(wèn)ISA總線(xiàn)端口

英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2019-09-26 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

精簡(jiǎn)ISA總線(xiàn)是英創(chuàng)工控主板的特色之一,我們基于ISA總線(xiàn)推出了多串口、多網(wǎng)口、多CAN接口等擴(kuò)展模塊,我們的很多用戶(hù)也基于ISA總線(xiàn)設(shè)計(jì)了自己的專(zhuān)有擴(kuò)展單元并取得了成功。為了充分發(fā)揮ISA總線(xiàn)的性能,對(duì)于ISA總線(xiàn)的訪(fǎng)問(wèn),我們除了提供最基本的設(shè)備驅(qū)動(dòng)API操作函數(shù)外,還先后增加了ISA總線(xiàn)的塊讀寫(xiě)操作方法和ISA總線(xiàn)的DMA操作方法。當(dāng)ISA總線(xiàn)以DMA方式進(jìn)行數(shù)據(jù)傳輸時(shí),在最大限度的利用ISA總線(xiàn)帶寬的同時(shí),又減少了ISA操作占用CPU的時(shí)間,所以利用DMA是進(jìn)行批量數(shù)據(jù)傳輸時(shí)的首選方式。

在實(shí)際的應(yīng)用中,除了成批量的數(shù)據(jù)訪(fǎng)問(wèn)外,也可能會(huì)存在對(duì)外設(shè)進(jìn)行頻繁的字或字節(jié)訪(fǎng)問(wèn)。英創(chuàng)主板的ISA總線(xiàn)周期通常在200ns左右,而應(yīng)用程序調(diào)用一次設(shè)備驅(qū)動(dòng)程序API(WriteFile,ReadFile)花費(fèi)的時(shí)間卻需要數(shù)微秒的時(shí)間,這顯然大大降低了對(duì)外設(shè)單字(或單字節(jié))的訪(fǎng)問(wèn)效率。為了解決這一問(wèn)題,我們利用了WinCE的虛擬地址映射技術(shù),在ISA驅(qū)動(dòng)程序中實(shí)現(xiàn)了在使用ISA的應(yīng)用進(jìn)程地址空間內(nèi)分配一段虛擬地址空間,并將其與ISA接口的物理地址空間進(jìn)行了綁定。簡(jiǎn)單來(lái)講就是實(shí)現(xiàn)了在WinCE應(yīng)用程序中可以直接訪(fǎng)問(wèn)ISA總線(xiàn)的外設(shè)地址空間,從使用的角度看,我們實(shí)現(xiàn)了以下5個(gè)函數(shù)。ISAMmMap用于獲得ISA總線(xiàn)的基地址,其余4個(gè)函數(shù)分別為字讀/寫(xiě)和字節(jié)讀/寫(xiě)操作函數(shù)。

HANDLE ISAMmMap(HANDLE hISA); // 映射ISA總線(xiàn)物理地址空間
BYTE ISARead8(HANDLE hMmMap, DWORD dwPortOffset); // 讀單字節(jié)
void ISAWrite8(HANDLE hMmMap, DWORD dwPortOffset, BYTE ucValue); // 寫(xiě)單字節(jié)
WORD ISARead16(HANDLE hMmMap, DWORD dwPortOffset); // 讀單字
void ISAWrite16(HANDLE hMmMap, DWORD dwPortOffset, WORD wValue); // 寫(xiě)單字


下面是上述5個(gè)函數(shù)實(shí)現(xiàn)的源代碼,在ISAMmMap函數(shù)中調(diào)用DeviceIoControl,通過(guò)IOCTL_VIRTUAL_COPY_EX命令獲取ISA總線(xiàn)的基地址。

// Function: Get the base address of ISA Port
// Input: hISA: Handle of ISA1:
// Return: Base address of the ISA Port
HANDLE ISAMmMap(HANDLE hISA)
{
DWORD dwMemBase;
if(DeviceIoControl(hISA, //打開(kāi)“ISA1:”返回的Handler
IOCTL_VIRTUAL_COPY_EX, // IOCTL命令碼
NULL,0, // 不使用輸入?yún)?shù)
&dwMemBase, sizeof(DWORD), // 得到ISA基地址
NULL, NULL))
return (HANDLE)dwMemBase;
return NULL;
}
// Function: read a byte from a port on ISA bus
// Input: hMmMap: Base address of the ISA Port
// dwPortOffset = 0, 1, .. 255, address of port on ISA
// Return: the byte data read
BYTE ISARead8(HANDLE hMmMap, DWORD dwPortOffset)
{
WORD *pPortAddr;
WORD wValue;
dwPortOffset &= 0xff;
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (WORD*)((DWORD)hMmMap + dwPortOffset);
wValue = *pPortAddr;
return (BYTE)wValue;
}
// Function: write a byte to a port on ISA bus
// Input: hMmMap: Base address of the ISA Port//
// dwPortOffset = 0, 1, .. 255, address of port on ISA
// ucValue = the byte data to be written
void ISAWrite8(HANDLE hMmMap, DWORD dwPortOffset, BYTE ucValue)
{
WORD *pPortAddr;
dwPortOffset &= 0xff;
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (WORD*)((DWORD)hMmMap + dwPortOffset);
*pPortAddr = (WORD)ucValue;
}
// Function: read a word from a port on ISA bus
// Input: hMmMap: Base address of the ISA Port
// dwPortOffset = 0, 2, 4, .. 254, address of port on ISA
// Return: the word data read
WORD ISARead16(HANDLE hMmMap, DWORD dwPortOffset)
{
DWORD *pPortAddr;
DWORD dwValue;
dwPortOffset &= 0xFE; // 2-byte alignment
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (DWORD*)((DWORD)hMmMap + dwPortOffset);
dwValue = *pPortAddr;
// the high-byte of data is at value[23..16]
return (WORD)(((dwValue >> 8) & 0xFF00) | (dwValue & 0xFF));
}
// Function: write a word to a port on ISA bus
// Input: hMmMap: Base address of the ISA Port
// dwPortOffset = 0, 2, 4, .. 254, address of port on ISA
// wValue = the word data to be written
void ISAWrite16(HANDLE hMmMap, DWORD dwPortOffset, WORD wValue)
{
DWORD *pPortAddr;
DWORD dwValue;
dwPortOffset &= 0xFE; // 2-byte alignment
dwPortOffset <<= 1;?????????????? // D[0..7] <=> A[1..8] in AD-muxed mode
pPortAddr = (DWORD*)((DWORD)hMmMap + dwPortOffset);
dwValue = wValue;
// dispatch high-byte of data to value[23..16]
*pPortAddr = ((dwValue << 8) & 0x00ff0000) | (dwValue & 0x000000ff);
}


我們?cè)贓SM3352上,分別測(cè)試了利用地址映射方法直接訪(fǎng)問(wèn)ISA外設(shè)地址和調(diào)用設(shè)備驅(qū)動(dòng)API函數(shù)讀寫(xiě)ISA地址,測(cè)得的結(jié)果是當(dāng)進(jìn)行字(WORD)讀寫(xiě)時(shí),應(yīng)用程序直接訪(fǎng)問(wèn)ISA外設(shè)地址比調(diào)用設(shè)備驅(qū)動(dòng)API函數(shù)快10倍以上,當(dāng)時(shí)行字節(jié)(BYTE)讀寫(xiě)時(shí),應(yīng)用程序直接訪(fǎng)問(wèn)ISA外設(shè)地址比調(diào)用設(shè)備驅(qū)動(dòng)API函數(shù)快15倍以上。

下面是測(cè)試程序源代碼:

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hISA, hMmMap;
BYTE ucValue;
WORD wValue;
DWORD dwStartTick, dwEndTick, i, k, cnt=2000;
hISA = CreateFile(_T("ISA1:"), // 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);
hMmMap = ISAMmMap(hISA);
if(hMmMap == NULL)
return -1;
printf("ISA read/write speed test\r\n");
printf("Memory Map VS Device Driver API\r\n");
dwStartTick = GetTickCount();
for(i=0; i for(k=0; k<256; k++)
{
ISAWrite8(hMmMap, k, 0x55);
ucValue = ISARead8(hMmMap, k);
}
dwEndTick = GetTickCount();
printf("1. Memory map BYTE read/write %d KBytes, Take time:%d ms\r\n", 256 * 2 *cnt / 1024, dwEndTick - dwStartTick);
dwStartTick = GetTickCount();
for(i=0; i for(k=0; k<256; k++)
{
ISA_WriteUchar( hISA, k, 0x55 );
ISA_ReadUchar( hISA, k, &ucValue );
}
dwEndTick = GetTickCount();
printf("2. Device driver API BYTE read/write %d KBytes, Take time:%d ms\r\n", 256 * 2 * cnt/ 1024, dwEndTick - dwStartTick);
cnt /= 2;
dwStartTick = GetTickCount();
for(i=0; i for(k=0; k<256; k++)
{
ISAWrite16(hMmMap, k, 0x55AA);
wValue = ISARead16(hMmMap, k);
}
dwEndTick = GetTickCount();
printf("3. Memory map WORD read/write %d KBytes, Take time:%d ms\r\n", 256 * 4 * cnt / 1024, dwEndTick - dwStartTick);
dwStartTick = GetTickCount();
for(i=0; i for(k=0; k<256; k++)
{
ISA_WriteWord( hISA, k, 0x55AA );
ISA_ReadWord( hISA, k, &wValue );
}
dwEndTick = GetTickCount();
printf("4. Device driver API WORD read/write %d KBytes, Take time:%d ms\r\n", 256 * 4 * cnt / 1024, dwEndTick - dwStartTick);
CloseHandle(hISA);
return 0;
}



下面是在ESM3352上兩種訪(fǎng)問(wèn)方式的測(cè)試結(jié)果:

要實(shí)現(xiàn)應(yīng)用程序直接訪(fǎng)問(wèn)ISA外設(shè)地址空間需要更新ISA驅(qū)動(dòng)程序,需要的用戶(hù)可與英創(chuàng)聯(lián)系。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ISA
    ISA
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    44543
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6107

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ISA(PC/104)總線(xiàn)信號(hào)時(shí)序簡(jiǎn)介

    ISA(PC/104)總線(xiàn)信號(hào)時(shí)序簡(jiǎn)介 1.0 ISA概況2.0 ISA文獻(xiàn)2.1 ISA規(guī)范2.2 I
    發(fā)表于 05-25 01:13

    單片機(jī)P口接PCI/ISA數(shù)據(jù)總線(xiàn)

    RT當(dāng)我單片機(jī)P口直接連接PCI/ISA數(shù)據(jù)總線(xiàn)的時(shí)候計(jì)算機(jī)啟動(dòng)時(shí)會(huì)不會(huì)出現(xiàn)數(shù)據(jù)總線(xiàn)占線(xiàn)情況而啟動(dòng)不了還是為了保險(xiǎn)起見(jiàn)中間接244另:STM8單片/51單片機(jī)上電時(shí)端口默認(rèn)是輸入還是輸
    發(fā)表于 08-01 11:09

    EM335x主板ISA總線(xiàn)的高級(jí)應(yīng)用

    一次API調(diào)用對(duì)一個(gè)地址端口讀寫(xiě)多個(gè)數(shù)據(jù)的操作。數(shù)據(jù)塊讀寫(xiě)能有效提高數(shù)據(jù)讀寫(xiě)的效率,在數(shù)據(jù)采集傳輸中有廣泛的應(yīng)用?! ∫獙?duì)ISA總線(xiàn)進(jìn)行讀寫(xiě),首先需要打開(kāi)設(shè)備文件“ISA1:”如下: 
    發(fā)表于 07-11 11:04

    PCI9052總線(xiàn)接口芯片及其ISA模式應(yīng)用

    或I/O映射可直接使PCI總線(xiàn)ISA總線(xiàn)相連,從而將ISA總線(xiàn)快速地轉(zhuǎn)換到PCI
    發(fā)表于 12-17 11:23

    ISA總線(xiàn)信號(hào)時(shí)序簡(jiǎn)介

    ISA總線(xiàn)信號(hào)時(shí)序簡(jiǎn)介:1.0 ISA概況2.0 ISA文獻(xiàn)2.1 ISA規(guī)范2.2 ISA書(shū)籍
    發(fā)表于 05-21 11:06 ?242次下載

    ISA總線(xiàn)引腳定義

    ISA總線(xiàn)引腳定義 ISA 是 Industry Standard Architecture 的縮寫(xiě)
    發(fā)表于 11-23 18:46 ?5409次閱讀
    <b class='flag-5'>ISA</b><b class='flag-5'>總線(xiàn)</b>引腳定義

    ISA總線(xiàn)接口定義

    ISA總線(xiàn)接口定義     為16位系統(tǒng)總線(xiàn),ISA槽有98個(gè)腳,數(shù)據(jù)線(xiàn)有16條,地址線(xiàn)有27條,其余為控制信號(hào)線(xiàn),接地線(xiàn),電源線(xiàn)和時(shí)鐘。其工作頻率為
    發(fā)表于 05-31 14:17 ?6803次閱讀

    ISA總線(xiàn)原理

    ISA總線(xiàn)的原理 ISA總線(xiàn)概況   ISA總線(xiàn)來(lái)源于IBM-PC微計(jì)
    發(fā)表于 12-09 11:22 ?9757次閱讀
    <b class='flag-5'>ISA</b><b class='flag-5'>總線(xiàn)</b>原理

    ISA插槽,什么是ISA插槽,ISA插槽外形圖

    ISA插槽,什么是ISA插槽,ISA插槽外形圖 ISA插槽是基于ISA總線(xiàn)(Industria
    發(fā)表于 04-26 18:12 ?8175次閱讀

    PCI9052總線(xiàn)接口芯片及其ISA模式應(yīng)用

    PCI9052總線(xiàn)接口芯片及其ISA模式應(yīng)用 PCI9052是PLX公司開(kāi)發(fā)的服從PCI協(xié)議的從模式接口芯片,它能夠?qū)崿F(xiàn)ISA總線(xiàn)到PCI總線(xiàn)
    發(fā)表于 05-04 21:48 ?2399次閱讀
    PCI9052<b class='flag-5'>總線(xiàn)</b>接口芯片及其<b class='flag-5'>ISA</b>模式應(yīng)用

    ISA總線(xiàn)和Futurebus+總線(xiàn)

    ISA總線(xiàn)和Futurebus+總線(xiàn) ISA總線(xiàn)1. ISA
    發(fā)表于 05-21 11:15 ?3297次閱讀
    <b class='flag-5'>ISA</b><b class='flag-5'>總線(xiàn)</b>和Futurebus+<b class='flag-5'>總線(xiàn)</b>

    基于ISA總線(xiàn)的高速同步數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)

      一種基于ISA總線(xiàn)的高速同步數(shù)據(jù)采集擴(kuò)展卡,討論了經(jīng)合理的邏輯控制以協(xié)調(diào)高速A/D轉(zhuǎn)換與快速存儲(chǔ)操作的總線(xiàn)接口技術(shù),以及用極少的PC機(jī)I/O口地址資源實(shí)現(xiàn)數(shù)據(jù)的
    發(fā)表于 06-06 09:53 ?2045次閱讀

    基于ISA總線(xiàn)的同步通信控制器

    基于ISA總線(xiàn)的同步通信控制器
    發(fā)表于 02-07 18:09 ?11次下載

    英創(chuàng)信息技術(shù)精簡(jiǎn)ISA總線(xiàn)Linux編程–Part1

    精簡(jiǎn)ISA總線(xiàn)接口是一種8-bit寬度的雙向并行擴(kuò)展總線(xiàn),其特點(diǎn)是地址數(shù)據(jù)分時(shí)復(fù)用8-bit總線(xiàn),加上4條總線(xiàn)控制信號(hào),即可實(shí)現(xiàn)對(duì)外部數(shù)據(jù)的
    的頭像 發(fā)表于 02-07 11:19 ?1861次閱讀
    英創(chuàng)信息技術(shù)精簡(jiǎn)<b class='flag-5'>ISA</b><b class='flag-5'>總線(xiàn)</b>Linux編程–Part1

    英創(chuàng)信息技術(shù)精簡(jiǎn)ISA總線(xiàn)WinCE編程簡(jiǎn)介

    據(jù)線(xiàn)加上4條總線(xiàn)控制信號(hào),即可實(shí)現(xiàn)對(duì)外部數(shù)據(jù)的快速讀寫(xiě),異步訪(fǎng)問(wèn)的最高速率在5MB/s左右。同步訪(fǎng)問(wèn)需要再使能一條總線(xiàn)時(shí)鐘信號(hào)(共13條信號(hào)
    的頭像 發(fā)表于 02-11 16:55 ?2031次閱讀
    英創(chuàng)信息技術(shù)精簡(jiǎn)<b class='flag-5'>ISA</b><b class='flag-5'>總線(xiàn)</b>WinCE編程簡(jiǎn)介
    邹平县| 保定市| 荆州市| 株洲县| 清水县| 革吉县| 宜良县| 增城市| 濮阳市| 宿松县| 沈阳市| 丰原市| 罗平县| 邓州市| 长治市| 蒲城县| 醴陵市| 长春市| 库车县| 团风县| 榆树市| 定边县| 安阳县| 澳门| 本溪市| 岫岩| 项城市| 新闻| 大新县| 根河市| 乡城县| 通化县| 古蔺县| 明星| 丹江口市| 屯留县| 获嘉县| 仁布县| 北票市| 淅川县| 石阡县|