下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘自/szh_515/blog/static/29076175200941811218677/TI公司為開(kāi)發(fā)DSP的外設(shè)驅(qū)動(dòng)程序,推出了DSP/BIOS Device Driver Kit(DDK),定義了標(biāo)準(zhǔn)的設(shè)備驅(qū)動(dòng)模型,并提供了一系列的API接口。外設(shè)驅(qū)動(dòng)程序分為兩層: 類(lèi)驅(qū)動(dòng)(class driver)。類(lèi)驅(qū)動(dòng)程序用來(lái)為應(yīng)用程序提供接口。這部分程序與設(shè)備無(wú)關(guān),主要功能包括維護(hù)設(shè)備數(shù)據(jù)緩沖區(qū),向上提供API接口供應(yīng)用層程序調(diào)用,并協(xié)調(diào)應(yīng)用程序?qū)ν庠O(shè)操作的同步和阻塞;向下提供適配層與迷你驅(qū)動(dòng)層相連,實(shí)現(xiàn)API接口函數(shù)到迷你驅(qū)動(dòng)層程序的映射。類(lèi)驅(qū)動(dòng)程序與硬
2、件無(wú)關(guān),只要外設(shè)驅(qū)動(dòng)模型選定了,類(lèi)驅(qū)動(dòng)程序就定下來(lái)了,不需要做多少修改。 迷你驅(qū)動(dòng)(mini driver)。迷你驅(qū)動(dòng)程序與設(shè)備相關(guān),所以設(shè)計(jì)迷你驅(qū)動(dòng)程序是外設(shè)驅(qū)動(dòng)開(kāi)發(fā)中的重點(diǎn)。迷你驅(qū)動(dòng)程序與類(lèi)驅(qū)動(dòng)層的接口格式是統(tǒng)一的,但迷你驅(qū)動(dòng)程序?qū)Φ讓佑布牟僮魇歉鶕?jù)硬件平臺(tái)的不同而變化的。迷你驅(qū)動(dòng)接收類(lèi)驅(qū)動(dòng)層發(fā)出的IOMPacket命令包,決定對(duì)底層硬件進(jìn)行什么樣的操作。外設(shè)驅(qū)動(dòng)程序模型又可以分為以下3類(lèi):PIP/PIO模型?;跀?shù)據(jù)管道的I/O模型,每個(gè)管道都在維護(hù)自己的一個(gè)緩沖區(qū)。當(dāng)數(shù)據(jù)寫(xiě)入緩沖區(qū),或從緩沖區(qū)取出數(shù)據(jù)時(shí),便會(huì)激發(fā)notifyReader()和notifyWriter()函數(shù)實(shí)現(xiàn)數(shù)據(jù)的
3、同步。SIO/DIO模型?;跀?shù)據(jù)流的I/O模型,一個(gè)數(shù)據(jù)流是單向的,要么是輸入,要么是輸出,而且SIO/DIO模型使用異步方式來(lái)操作I/O,對(duì)于數(shù)據(jù)的讀寫(xiě)、處理可以同時(shí)進(jìn)行。 GIO模型。通用的I/O模型,靈活性很強(qiáng),且沒(méi)有適配層,直接操作迷你驅(qū)動(dòng)程序,主要用來(lái)設(shè)計(jì)新型的設(shè)備驅(qū)動(dòng)模型。比較PIO、SIO和GIOPIO支持更底層的通信,適合設(shè)計(jì)比較簡(jiǎn)單的外設(shè)驅(qū)動(dòng)程序。例如在TI公司的6X11DSK板上實(shí)現(xiàn)的音頻采集和回放,一般都是基于PIO模型的。而SIO模型具有很好的緩沖器分配回收機(jī)制,比較適合描述FVID驅(qū)動(dòng)模型TI公司最初設(shè)計(jì)的GIO 模型存在缺陷的,主要在數(shù)據(jù)緩沖區(qū)管理的問(wèn)題上,應(yīng)用程
4、序在取得設(shè)備驅(qū)動(dòng)程序的緩沖區(qū)進(jìn)行數(shù)據(jù)處理之后,無(wú)法將緩沖區(qū)返回設(shè)備驅(qū)動(dòng)程序。于是TI公司在推出DM642這一款主要用于視頻處理的DSP芯片的同時(shí),對(duì)GIO模型進(jìn)行了改進(jìn),提出了專(zhuān)門(mén)針對(duì)視頻設(shè)備的FVID模型。FVID模型是建立在GIO模型之上的,以FVID_alloc()、FVID_exchange()、FVID_free()函數(shù)對(duì)GIO模型中的GIOsubmit()函數(shù)進(jìn)行封裝,解決了GIO模型中驅(qū)動(dòng)程序不能回收緩沖區(qū)的問(wèn)題。此外FVID模型還專(zhuān)門(mén)設(shè)計(jì)了FVIDframe結(jié)構(gòu)。此結(jié)構(gòu)中包含了常用的視頻信號(hào)的信息,如行數(shù)、列數(shù)、YUV結(jié)構(gòu)、場(chǎng)頻等,很適合描述視頻數(shù)據(jù)幀,為視頻場(chǎng)合設(shè)計(jì)的FVID
5、模型主要是針對(duì)DM64X 系統(tǒng)設(shè)計(jì)的.迷你驅(qū)動(dòng)各個(gè)函數(shù)的具體實(shí)現(xiàn)如下: mdBindDev()函數(shù)。在應(yīng)用程序建立設(shè)備接口(如FVIDcreate()函數(shù))時(shí)被調(diào)用以實(shí)施設(shè)備邦定,完成對(duì)外部設(shè)備的初始化。而與其對(duì)應(yīng)的是mdUBindDev()函數(shù),使用mdUBindDev()函數(shù)會(huì)使設(shè)備處于無(wú)效狀態(tài),不能再使用。 mdCreateChan()函數(shù)。使用此函數(shù)為應(yīng)用程序和驅(qū)動(dòng)程序建立通信通道,同時(shí)為每個(gè)通道申請(qǐng)緩沖區(qū)。在TI公司發(fā)布的FVID模型中,為每個(gè)通道都分配了3個(gè)緩沖區(qū),輪流與外部設(shè)備交換數(shù)據(jù),每個(gè)緩沖區(qū)對(duì)應(yīng)1幀視頻數(shù)據(jù)。與mdCreateChan()對(duì)應(yīng)的是md_DeleteChan(
6、)函數(shù),用于刪除設(shè)備通道,釋放緩沖區(qū)資源。 mdSubmitChan()函數(shù)。負(fù)責(zé)管理緩沖區(qū),分別接受應(yīng)用程序發(fā)出的FVIDALLOC()、FVIDEXCHANGE()、FVIDFREE()三個(gè)命令并進(jìn)行處理。其中FVIDALLOC命令獲取驅(qū)動(dòng)程序中的緩存區(qū),應(yīng)用程序從三個(gè)緩沖區(qū)中取出最新的一幀視頻數(shù)據(jù),對(duì)其中的數(shù)據(jù)做處理,而只剩下的緩沖區(qū)用來(lái)接受外部設(shè)備輸入的數(shù)據(jù)。FVIDEXCHANGE()將使用完的緩存區(qū)與驅(qū)動(dòng)程序的最新數(shù)據(jù)緩存區(qū)交換,應(yīng)用程序處理完1幀數(shù)據(jù),將這1幀數(shù)據(jù)返回驅(qū)動(dòng)程序,再讀入新的1幀數(shù)據(jù)進(jìn)行處理。FVIDFREE()將使用完的緩存區(qū)重新返回給驅(qū)動(dòng)程序,應(yīng)用程序?qū)⑻幚硗甑臄?shù)
7、據(jù)幀返回驅(qū)動(dòng)程序,而不再向驅(qū)動(dòng)程序申請(qǐng)新的數(shù)據(jù)幀。 mdControlChan()函數(shù)。用來(lái)操作外部視頻設(shè)備,完成對(duì)視頻數(shù)據(jù)的采集和輸出。應(yīng)用程序通過(guò)FVID_Control()函數(shù)將命令傳遞給GIO_Control()函數(shù),然后再GIO_Control()傳遞給mdControlChan()函數(shù),最后將命令分發(fā)到指定的設(shè)備。FVID 函數(shù):1.FVID_create()作用:是分配并初始化FVID通道對(duì)象;語(yǔ)法:fvidChan = FVID_create (name, mode, *status, optArgs, *attrs);參數(shù)定義:String name /* handle to
8、 an instance of the device */Int mode /* pointer to buffer allocated by driver */Int *status /* pointer to size of buffer pointed to by */Ptr optArgs /* */FVID_Attrs *attrs /* */其中:name是設(shè)備實(shí)例的句柄,是一個(gè)字符串mode 是選擇的模式,只有兩個(gè)值:IOM_INPUT 設(shè)置采集模式,IOM_OUTPUT設(shè)置顯示模式。status是由下層mini driver返回的狀態(tài)值。attrs 是指向FVID_Attrs結(jié)
9、構(gòu)的指針:FVID_Attrs的定義如下:typedef struct FVID_Attrs Uns timeout; FVID_Attrs;timeout成員用來(lái)指定旗語(yǔ)同步,它的值可以是:SYS_FOREVER:會(huì)讓FVID_alloc, FVID_free and FVID_exchange的調(diào)用不確定的等待到這個(gè)調(diào)用完成.數(shù)字的timeout值會(huì)讓這些APIs阻塞一段指定的時(shí)間(以系統(tǒng)時(shí)鐘). 0值會(huì)讓APIs不阻塞,他們會(huì)立刻返回,這種情況下,應(yīng)用程序會(huì)檢查返回的status值來(lái)保證調(diào)用已經(jīng)成功完成.備注:FVID_alloc, FVID_free 和 FVID_exchange 的
10、調(diào)用只能在 DSP/BIOS task (TSK).FVID_create的返回值:如果通道成功的打開(kāi)了,那么FVID_create返回一個(gè)指向通道的句柄.這個(gè)句柄可以用來(lái)讓后來(lái)的模塊調(diào)用這個(gè)通道.實(shí)列: /* Initialize the attributes */FVID_ATTRS dispAttrs = FVID_ATTRS;/* Create an instance to a video display device */ chan-Handle = FVID_create(“display0”, IOM_INPUT, NULL, NULL,&dispAttrs);2.FVID_co
11、ntrol()作用是:發(fā)送一個(gè)控制命令給下層的mini_driver語(yǔ)法: status = FVID_control (fvidChan, cmd, args);參數(shù)定義:FVID_Handle fvidChan /* handle to an instance of the device */ Int cmd /* control command */ Ptr args /* pointer to control command arguments */ Return Value Int status /* returns IOM_COMPLETED if successful */參數(shù)說(shuō)
12、明:fvidChan 是FVID_create()創(chuàng)建的指向通道的句柄。cmd有兩個(gè)值:IOM_ABORT-作用是中止所以的未定的I/O工作。 IOM_FLUSH-作用是所以采集口的工作被丟棄,所以顯示I/O的工作正常進(jìn)行。Args是要傳遞的命令(參數(shù)或者結(jié)構(gòu)體)的指針。返回值:如果調(diào)用成功,FVID_control返回IOM_COMPLETED .如果有錯(cuò)誤產(chǎn)生,這個(gè)調(diào)用會(huì)返回一個(gè)負(fù)值。實(shí)例:/* abort all pending video driver I/O jobs */FVID_control(fvidChan, IOM_ABORT, NULL);3.FVID-alloc()作用
13、:申請(qǐng)獲得驅(qū)動(dòng)程序緩存單元。語(yǔ)法:status = FVID_alloc (fvidChan, bufp);參數(shù)定義: FVID_Handle fvidChan /* handle to an instance of the device */ Ptr bufp /* pointer to buffer allocated by driver */ Return Value Int status /* returns IOM_COMPLETED if successful */參數(shù)說(shuō)明: fvidChan 是FVID_create()創(chuàng)建的指向通道的句柄。 bufp 是輸出參數(shù),指向所申請(qǐng)的驅(qū)
14、動(dòng)緩存空間的指針。 返回值:如果調(diào)用成功,FVID_alloc()返回IOM_COMPLETED,如果有錯(cuò)誤產(chǎn)生,這個(gè)調(diào)用會(huì)返回一個(gè)負(fù)值。 備注:這個(gè)函數(shù)只能是在外設(shè)已經(jīng)加載和初始化之后才能調(diào)用。其中的句柄應(yīng)該由FVID_create()函數(shù)提供。 實(shí)例:/* allocate a buffer from the device */status = FVID_alloc(chanHandle, dispBuf);4.FVID_exchange()作用:交換應(yīng)用程序和驅(qū)動(dòng)程序緩存空間,實(shí)際作用相當(dāng)于FVID_free()和FVID_alloc()函數(shù)的組合。語(yǔ)法: status = FVID_e
15、xchange (fvidChan, bufp);參數(shù)定義: FVID_Handle fvidChan /* handle to an instance of the device */ Ptr bufp /* pointer to buffer exchanged by driver */ LgUns *pSize /* pointer to size of buffer pointed to by bufp */參數(shù)說(shuō)明: fvidChan 是FVID_create()創(chuàng)建的指向通道的句柄。 bufp 是輸入輸出參數(shù),剛開(kāi)始指向的是應(yīng)用程序需要交換的緩存空間,交換后,指向與驅(qū)動(dòng)程序進(jìn)行緩存
16、空間交換后的內(nèi)存空間。 pSize 是指向bufp內(nèi)存大小的指針。返回值:如果調(diào)用成功,FVID_exchange()返回IOM_COMPLETED,如果有錯(cuò)誤產(chǎn)生,這個(gè)調(diào)用會(huì)返回一個(gè)負(fù)值。 備注:這個(gè)函數(shù)只能是在外設(shè)已經(jīng)加載和初始化之后才能調(diào)用。其中的句柄應(yīng)該由FVID_create()函數(shù)提供。實(shí)例:/* allocate a buffer from the device */status = FVID_exchange(chanHandle, dispBuf);4.FVID_free()作用:釋放返回應(yīng)用程序申請(qǐng)的緩存給驅(qū)動(dòng)程序語(yǔ)法: status = FVID_free (fvidCh
17、an, bufp);參數(shù)定義: FVID_Handle fvidChan /* handle to an instance of the device */ Ptr bufp /* pointer to buffer to be relinquished to driver */ LgUns *pSize /* pointer to size of buffer pointed to by bufp */參數(shù)說(shuō)明: fvidChan 是FVID_create()創(chuàng)建的指向通道的句柄。 bufp 是輸入?yún)?shù),指向的是應(yīng)用程序需要釋放返回的緩存空間。 pSize 是指向bufp內(nèi)存大小的指針。返回
18、值:如果調(diào)用成功,FVID_free()返回IOM_COMPLETED,如果有錯(cuò)誤產(chǎn)生,這個(gè)調(diào)用會(huì)返回一個(gè)負(fù)值。備注:這個(gè)函數(shù)只能是在外設(shè)已經(jīng)加載和初始化之后才能調(diào)用。其中的句柄應(yīng)該由FVID_create()函數(shù)提供。實(shí)例:Example /* free a buffer back to the device */status = FVID_free(chanHandle, dispBuf);5.FVID_delete()作用: 申請(qǐng)關(guān)閉一個(gè)FVID channel 對(duì)象。語(yǔ)法: status = FVID_delete (fvidChan);參數(shù)定義: FVID_Handle fvidChan /* handle to an in
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 25367-2024柴油機(jī)電控共軌系統(tǒng)噴油器總成
- Porantherine-生命科學(xué)試劑-MCE-2296
- 1-Propinoyl-Lysergic-acid-methylisopropylamide-1P-MiPLA-生命科學(xué)試劑-MCE-1036
- 2025年度銀行賬戶(hù)管理與個(gè)人財(cái)富管理合作協(xié)議方
- 2025年度高層建筑基礎(chǔ)鉆孔施工與質(zhì)量控制合同
- 二零二五年度特色餐廳廚師勞動(dòng)合同及勞動(dòng)爭(zhēng)議處理協(xié)議
- 2025年度綠色環(huán)保版商鋪?zhàn)赓U合同
- 2025年度環(huán)保項(xiàng)目短期現(xiàn)場(chǎng)作業(yè)人員勞動(dòng)合同
- 二零二五年度綠色環(huán)保產(chǎn)業(yè)財(cái)產(chǎn)贈(zèng)與協(xié)議
- 2025年度新媒體運(yùn)營(yíng)專(zhuān)員聘用合同簡(jiǎn)易制
- 2025年人教五四新版八年級(jí)物理上冊(cè)階段測(cè)試試卷含答案
- 2025新人教版英語(yǔ)七年級(jí)下單詞表(小學(xué)部分)
- 2025年春季1530安全教育記錄主題
- 礦山2025年安全工作計(jì)劃
- 基本藥物制度政策培訓(xùn)課件
- 2025年包裝印刷項(xiàng)目可行性研究報(bào)告
- 2025年九年級(jí)物理中考復(fù)習(xí)計(jì)劃
- 企業(yè)融資報(bào)告特斯拉成功案例分享
- 給客戶(hù)的福利合同(2篇)
- 《銀行融資知識(shí)》課件
- SWITCH 勇者斗惡龍11S 金手指 版本:v1.0.3 最大金幣 最大迷你獎(jiǎng)?wù)?32倍經(jīng)驗(yàn) 最大攻擊 所有材料
評(píng)論
0/150
提交評(píng)論