![FVID驅(qū)動(dòng)及函數(shù)用法_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-3/11/56c3f762-6a36-4155-904e-c5cf0546c507/56c3f762-6a36-4155-904e-c5cf0546c5071.gif)
![FVID驅(qū)動(dòng)及函數(shù)用法_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-3/11/56c3f762-6a36-4155-904e-c5cf0546c507/56c3f762-6a36-4155-904e-c5cf0546c5072.gif)
![FVID驅(qū)動(dòng)及函數(shù)用法_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-3/11/56c3f762-6a36-4155-904e-c5cf0546c507/56c3f762-6a36-4155-904e-c5cf0546c5073.gif)
![FVID驅(qū)動(dòng)及函數(shù)用法_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-3/11/56c3f762-6a36-4155-904e-c5cf0546c507/56c3f762-6a36-4155-904e-c5cf0546c5074.gif)
![FVID驅(qū)動(dòng)及函數(shù)用法_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-3/11/56c3f762-6a36-4155-904e-c5cf0546c507/56c3f762-6a36-4155-904e-c5cf0546c5075.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、摘自/szh_515/blog/static/29076175200941811218677/TI公司為開發(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)程序分為兩層: 類驅(qū)動(dòng)(class driver)。類驅(qū)動(dòng)程序用來為應(yīng)用程序提供接口。這部分程序與設(shè)備無關(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)層程序的映射。類驅(qū)動(dòng)程序與硬
2、件無關(guān),只要外設(shè)驅(qū)動(dòng)模型選定了,類驅(qū)動(dòng)程序就定下來了,不需要做多少修改。 迷你驅(qū)動(dòng)(mini driver)。迷你驅(qū)動(dòng)程序與設(shè)備相關(guān),所以設(shè)計(jì)迷你驅(qū)動(dòng)程序是外設(shè)驅(qū)動(dòng)開發(fā)中的重點(diǎn)。迷你驅(qū)動(dòng)程序與類驅(qū)動(dòng)層的接口格式是統(tǒng)一的,但迷你驅(qū)動(dòng)程序?qū)Φ讓佑布牟僮魇歉鶕?jù)硬件平臺(tái)的不同而變化的。迷你驅(qū)動(dòng)接收類驅(qū)動(dòng)層發(fā)出的IOMPacket命令包,決定對底層硬件進(jìn)行什么樣的操作。外設(shè)驅(qū)動(dòng)程序模型又可以分為以下3類:PIP/PIO模型。基于數(shù)據(jù)管道的I/O模型,每個(gè)管道都在維護(hù)自己的一個(gè)緩沖區(qū)。當(dāng)數(shù)據(jù)寫入緩沖區(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模型使用異步方式來操作I/O,對于數(shù)據(jù)的讀寫、處理可以同時(shí)進(jìn)行。 GIO模型。通用的I/O模型,靈活性很強(qiáng),且沒有適配層,直接操作迷你驅(qū)動(dòng)程序,主要用來設(shè)計(jì)新型的設(shè)備驅(qū)動(dòng)模型。比較PIO、SIO和GIOPIO支持更底層的通信,適合設(shè)計(jì)比較簡單的外設(shè)驅(qū)動(dòng)程序。例如在TI公司的6X11DSK板上實(shí)現(xiàn)的音頻采集和回放,一般都是基于PIO模型的。而SIO模型具有很好的緩沖器分配回收機(jī)制,比較適合描述FVID驅(qū)動(dòng)模型TI公司最初設(shè)計(jì)的GIO 模型存在缺陷的,主要在數(shù)據(jù)緩沖區(qū)管理的問題上,應(yīng)用程
4、序在取得設(shè)備驅(qū)動(dòng)程序的緩沖區(qū)進(jìn)行數(shù)據(jù)處理之后,無法將緩沖區(qū)返回設(shè)備驅(qū)動(dòng)程序。于是TI公司在推出DM642這一款主要用于視頻處理的DSP芯片的同時(shí),對GIO模型進(jìn)行了改進(jìn),提出了專門針對視頻設(shè)備的FVID模型。FVID模型是建立在GIO模型之上的,以FVID_alloc()、FVID_exchange()、FVID_free()函數(shù)對GIO模型中的GIOsubmit()函數(shù)進(jìn)行封裝,解決了GIO模型中驅(qū)動(dòng)程序不能回收緩沖區(qū)的問題。此外FVID模型還專門設(shè)計(jì)了FVIDframe結(jié)構(gòu)。此結(jié)構(gòu)中包含了常用的視頻信號(hào)的信息,如行數(shù)、列數(shù)、YUV結(jié)構(gòu)、場頻等,很適合描述視頻數(shù)據(jù)幀,為視頻場合設(shè)計(jì)的FVID
5、模型主要是針對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è)備邦定,完成對外部設(shè)備的初始化。而與其對應(yīng)的是mdUBindDev()函數(shù),使用mdUBindDev()函數(shù)會(huì)使設(shè)備處于無效狀態(tài),不能再使用。 mdCreateChan()函數(shù)。使用此函數(shù)為應(yīng)用程序和驅(qū)動(dòng)程序建立通信通道,同時(shí)為每個(gè)通道申請緩沖區(qū)。在TI公司發(fā)布的FVID模型中,為每個(gè)通道都分配了3個(gè)緩沖區(qū),輪流與外部設(shè)備交換數(shù)據(jù),每個(gè)緩沖區(qū)對應(yīng)1幀視頻數(shù)據(jù)。與mdCreateChan()對應(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ù),對其中的數(shù)據(jù)做處理,而只剩下的緩沖區(qū)用來接受外部設(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)程序申請新的數(shù)據(jù)幀。 mdControlChan()函數(shù)。用來操作外部視頻設(shè)備,完成對視頻數(shù)據(jù)的采集和輸出。應(yīng)用程序通過FVID_Control()函數(shù)將命令傳遞給GIO_Control()函數(shù),然后再GIO_Control()傳遞給mdControlChan()函數(shù),最后將命令分發(fā)到指定的設(shè)備。FVID 函數(shù):1.FVID_create()作用:是分配并初始化FVID通道對象;語法: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成員用來指定旗語同步,它的值可以是: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值來保證調(diào)用已經(jīng)成功完成.備注:FVID_alloc, FVID_free 和 FVID_exchange 的
10、調(diào)用只能在 DSP/BIOS task (TSK).FVID_create的返回值:如果通道成功的打開了,那么FVID_create返回一個(gè)指向通道的句柄.這個(gè)句柄可以用來讓后來的模塊調(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語法: 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ù)說
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ū)動(dòng)程序緩存單元。語法: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ù)說明: fvidChan 是FVID_create()創(chuàng)建的指向通道的句柄。 bufp 是輸出參數(shù),指向所申請的驅(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ù)的組合。語法: 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ù)說明: fvidChan 是FVID_create()創(chuàng)建的指向通道的句柄。 bufp 是輸入輸出參數(shù),剛開始指向的是應(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ū)動(dòng)程序語法: 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ù)說明: 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()作用: 申請關(guān)閉一個(gè)FVID channel 對象。語法: status = FVID_delete (fvidChan);參數(shù)定義: FVID_Handle fvidChan /* handle to an in
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鉛壓延加工材合作協(xié)議書
- 2025年清理去石設(shè)備合作協(xié)議書
- 八年級(jí)英語下冊 Unit 9 單元綜合測試卷(人教陜西版 2025年春)
- 2024-2025學(xué)年四川省南充市高坪區(qū)四年級(jí)(上)期末數(shù)學(xué)試卷
- 2025年臨滄市三方合作出資協(xié)議范文(2篇)
- 2025年產(chǎn)品購銷買賣合同(2篇)
- 2025年產(chǎn)權(quán)交易所項(xiàng)目掛牌服務(wù)協(xié)議(6篇)
- 2025年個(gè)人門面出租合同標(biāo)準(zhǔn)樣本(2篇)
- 2025年五年級(jí)語文教學(xué)鑒定總結(jié)模版(三篇)
- 2025年代理委托處理房地產(chǎn)協(xié)議(2篇)
- 《中電聯(lián)團(tuán)體標(biāo)準(zhǔn)-220kV變電站并聯(lián)直流電源系統(tǒng)技術(shù)規(guī)范》
- 中國主要蜜源植物蜜源花期和分布知識(shí)
- 電化學(xué)免疫傳感器的應(yīng)用
- 數(shù)據(jù)中心基礎(chǔ)知識(shí)培訓(xùn)-2024鮮版
- 供電企業(yè)輿情的預(yù)防及處置
- 【高中語文】《氓》課件++統(tǒng)編版+高中語文選擇性必修下冊
- T-WAPIA 052.3-2023 無線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點(diǎn)和控制器
- 第4課+中古時(shí)期的亞洲(教學(xué)設(shè)計(jì))-【中職專用】《世界歷史》(高教版2023基礎(chǔ)模塊)
- 金點(diǎn)子活動(dòng)總結(jié)匯報(bào)
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制完整
- 原料驗(yàn)收標(biāo)準(zhǔn)知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論