<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > vxworks嵌入式操作系統下串行設備驅動(dòng)程序開(kāi)發(fā)思路

vxworks嵌入式操作系統下串行設備驅動(dòng)程序開(kāi)發(fā)思路

作者: 時(shí)間:2012-10-09 來(lái)源:網(wǎng)絡(luò ) 收藏

i8250Chan[i].outByte = sysOutByte; /*掛接輸出函數,此函數向指定的I/O地址寫(xiě)入1bye*/

i8250Chan[i].inByte = sysInByte; /*掛接輸出函數,此函數從指定的I/O地址讀出1byte*/

i8250HrdInit(i8250Chan[i]);/*調用i8250HrdInit()進(jìn)一步完成初始化*/

}

}

l i8250HrdInit()

本函數完成的主要工作是掛接相應的入口函數,具體說(shuō)明如下:

void i8250HrdInit

(

I8250_CHAN * pChan /* 指向相應設備的指針*/

)

{

if (i8250SioDrvFuncs.ioctl == NULL)

{

i8250SioDrvFuncs.ioctl = (int (*)())i8250Ioctl;/*掛接用于處理控制I8250相關(guān)輸入

輸出命令的函數*/

i8250SioDrvFuncs.txStartup = (int (*)())i8250Startup;/*如果設備工作于中斷模式下,

啟用此函數用于打開(kāi)中斷,使設備開(kāi)始工作*/

i8250SioDrvFuncs.callbackInstall = i8250CallbackInstall;/*安裝上層提供的回調函數,

本例中是安裝的tyIRd()、tyITx()*/

i8250SioDrvFuncs.pollInput = (int (*)())i8250PRxChar;/*掛接輸入輪詢(xún)函數*/

i8250SioDrvFuncs.pollOutput = (int (*)(SIO_CHAN *,char))i8250PTxChar;/*掛接輸出輪詢(xún)函數*/

}

pChan->pDrvFuncs = i8250SioDrvFuncs;/*初始化CHAN結構,掛接接口函數列表*/

i8250InitChannel(pChan); /* reset the channel */

}

由上面掛接的函數可以看出,i8250驅動(dòng)主要實(shí)現了三個(gè)功能:read、write、ioctl,而并沒(méi)有實(shí)現所有和七項功能。同時(shí),值的注意的是,對同一種設備的驅動(dòng)只需掛接一次。

同時(shí)ttyDrv通過(guò)SIO_DRV_FUNCS使用xxDrv(i8250Drv)提供的服務(wù),而xxDrv通過(guò)回調函數(本例中是由i8250CallbackInstall()安裝的tyIRd()、tyITx())完成ttyDrv提出的請求。原理如下圖示:

i8250InitChannel()

本函數的主要作用是初始化特定的CHAN所描述的信道。具體分析如下。

statIC void i8250InitChannel

(

I8250_CHAN * pChan /* pointer to device */

)

{

int oldLevel;

ldLevel = intLock (); /*關(guān)中斷進(jìn)入臨界區*

(void) i8250BaudSet(pChan, I8250_DEFAULT_BAUD);/*設置信道的波特率*/

…………………………………

intUnlock (oldLevel); /*開(kāi)中斷響應,出臨界區*/

}

⑵ 掛接中斷服務(wù)程序

對i8250的硬件初始化完成后,接著(zhù)掛接相關(guān)的中斷服務(wù)程序。主要有sysSerialHwinit2()函數完成。需要注意的是,掛接中斷應放在系統初始化的最后,主要是因為中斷掛接函數iNTCONnect()需要調用malloc()函數,如果在系統的內存分配還未初始化前調用,則會(huì )出錯。下面請看源代碼:

void sysSerialHwInit2 (void)

{

int i;

for (i=0;i

if (i8250Chan[i].int_vec)

{

(void) intConnect (INUM_TO_IVEC (i8250Chan[i].int_vec), i8250Int, (int)i8250Chan[i] );

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>