新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于TMS320DM642驅(qū)動(dòng)模型的驅(qū)動(dòng)程序開發(fā)

基于TMS320DM642驅(qū)動(dòng)模型的驅(qū)動(dòng)程序開發(fā)

——
作者:武漢大學(xué) 金朝輝 時(shí)間:2007-01-26 來(lái)源:《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》 收藏

隨著新技術(shù)不斷涌現(xiàn)和dsp實(shí)時(shí)系統(tǒng)日趨復(fù)雜,不同類型的外部設(shè)備越來(lái)越多,為這些外部設(shè)備編寫設(shè)備驅(qū)動(dòng)程序已成為依賴操作系統(tǒng)管理硬件的內(nèi)在要求。但是,由于內(nèi)存引腳、響應(yīng)時(shí)間和電源管理等條件的限制,為一個(gè)給定的dsp系統(tǒng)編寫設(shè)備驅(qū)動(dòng)程序有時(shí)會(huì)很困難。針對(duì)設(shè)備驅(qū)動(dòng)程序開發(fā)者遇到的上述難題,ti公司為c64x系列dsp的開發(fā)者提供了一種"類/微型驅(qū)動(dòng)模型(class/mini-driver model)",該模型在功能上將設(shè)備驅(qū)動(dòng)程序分為依賴硬件層和不依賴硬件層,兩層之間使用通用接口。實(shí)踐結(jié)果表明,采用類/微型驅(qū)動(dòng)模型進(jìn)行設(shè)計(jì)后,應(yīng)用軟件可以復(fù)用絕大部分相似設(shè)備的驅(qū)動(dòng)程序,從而提高驅(qū)動(dòng)程序的開發(fā)效率。

1 類/微型驅(qū)動(dòng)模型簡(jiǎn)介

在類/微型驅(qū)動(dòng)模型中,類驅(qū)動(dòng)通常用于實(shí)現(xiàn)多線程i/o請(qǐng)求的序列化和同步功能;同時(shí)對(duì)設(shè)備實(shí)例進(jìn)行管理。在包括視頻系統(tǒng)i/o和異步i/o的典型實(shí)時(shí)系統(tǒng)中,只有少數(shù)的類驅(qū)動(dòng)需要表示出外部設(shè)備的類型。

類驅(qū)動(dòng)通過(guò)每個(gè)外部設(shè)備獨(dú)有的微型驅(qū)動(dòng)對(duì)該設(shè)備進(jìn)行操作,微型驅(qū)動(dòng)則通過(guò)控制外設(shè)的寄存器、內(nèi)存和中斷資源來(lái)實(shí)現(xiàn)對(duì)外部設(shè)備的控制,微型驅(qū)動(dòng)程序必須將特定的外部設(shè)備有效地表示給類驅(qū)動(dòng)。例如:視頻顯示設(shè)備存在一些不同的幀存,應(yīng)用軟件會(huì)根據(jù)不同的i/o操作進(jìn)行幀存的分配,此時(shí)微型驅(qū)動(dòng)必須映射視頻顯存,使得類驅(qū)動(dòng)可對(duì)不連續(xù)的內(nèi)存(分別存放rgb或yuv分量)設(shè)計(jì)特定的i/o請(qǐng)求,類/微型驅(qū)動(dòng)模型允許發(fā)送由開發(fā)者定義數(shù)據(jù)結(jié)構(gòu)的i/o請(qǐng)求包給微型驅(qū)動(dòng)來(lái)控制外部設(shè)備,此分層結(jié)構(gòu)使設(shè)備驅(qū)動(dòng)的復(fù)用能力得到加強(qiáng),并且豐富了發(fā)送給微型驅(qū)動(dòng)i/o請(qǐng)求包的結(jié)構(gòu)。

類/微型驅(qū)動(dòng)模型的結(jié)構(gòu)如圖1所示,上層應(yīng)用程序并非直接控制微型驅(qū)動(dòng),而是使用一個(gè)或一個(gè)以上的類驅(qū)動(dòng)對(duì)其進(jìn)行控制。每個(gè)類驅(qū)動(dòng)在應(yīng)用程序代碼中表現(xiàn)為一個(gè)api函數(shù),并且通過(guò)微型驅(qū)動(dòng)的接口iom與微型驅(qū)動(dòng)進(jìn)行通信,類驅(qū)動(dòng)使用dsp/bios的中的api函數(shù)來(lái)實(shí)現(xiàn)諸如同步等系統(tǒng)服務(wù)(dsp/bios是ti公司推出的一種實(shí)時(shí)操作系統(tǒng),實(shí)際上它是一組可重復(fù)調(diào)用系統(tǒng)模塊的abi函數(shù)集合)。到目前為止dsp/bios共定義了3種類驅(qū)動(dòng):流輸入輸出管理模塊(sio/dio)、管道管理模塊(pip/pio)和通用輸入輸出模塊(gio)。在pip/pio和sio/pio類驅(qū)動(dòng)中,調(diào)用的api函數(shù)已存在于dsp/bios的pip和sio模塊中,這些api函數(shù)將參數(shù)傳給相應(yīng)的適配模塊(adapter),適配模塊再與微型驅(qū)動(dòng)交換數(shù)據(jù)。在gio類驅(qū)動(dòng)中,調(diào)用的api函數(shù)直接與微型驅(qū)動(dòng)通信(需在ccs2.2以上)。

本文引用地址:http://butianyuan.cn/article/21200.htm

每個(gè)微型驅(qū)動(dòng)都為類驅(qū)動(dòng)和dsp/ bios設(shè)備驅(qū)動(dòng)管理提供了標(biāo)準(zhǔn)接口,微型驅(qū)動(dòng)采用芯片支持庫(kù)(chip support library)管理外圍設(shè)備的寄存器,內(nèi)存和中斷資源。

2 類驅(qū)動(dòng)的編寫

流輸入輸出管理模塊和管道管理模塊是dsp/bios提供的兩個(gè)接口模塊,用于支持dsp和外設(shè)之間的數(shù)據(jù)交換。這兩種模塊的數(shù)據(jù)傳輸都可通過(guò)類驅(qū)動(dòng)中的適配模塊和微型驅(qū)動(dòng)的iom連接。sio的適配模塊稱為dio:pip的稱為pio。類/微型驅(qū)動(dòng)模型還可使用第三種接口模塊--通用輸入輸出模塊,其傳輸模塊是基于流輸入輸出模式的同步i/o模式,更適合文件系統(tǒng)i/o。在編寫類驅(qū)動(dòng)時(shí),可以直接調(diào)用gio的讀寫api函數(shù),這些函數(shù)的接口已內(nèi)置于微型驅(qū)動(dòng)的iom中。

2.1 流輸入輸出管理模塊和sio的適配模塊

dsp/bios中的流輸入輸出管理模塊為每個(gè)dsp/bios線程提供了一種獨(dú)立的i/o機(jī)制,它支持動(dòng)態(tài)創(chuàng)建。流輸入輸出管理模塊有自己的驅(qū)動(dòng)模型,稱為dev。dev程序和微型驅(qū)動(dòng)的編寫方法相似,都要實(shí)現(xiàn)函數(shù)表中的打開,關(guān)閉和緩存管理等函數(shù),然而結(jié)構(gòu)比較復(fù)雜,相比之下,sio的適配模塊可以簡(jiǎn)化流輸入輸出模塊和iom之間的連接,使得通信和同步變得更簡(jiǎn)單。

2.2 管道管理模塊和pip的適配模塊

dsp/bios中的管道管理模塊提供了管理異步i/o的"數(shù)據(jù)管道",每個(gè)管道對(duì)象都擁有一塊同樣大小的緩存,這些緩存分為同樣數(shù)量且等長(zhǎng)的小塊;小塊的數(shù)量和長(zhǎng)度在dsp/bios中設(shè)置。雖然小塊的長(zhǎng)度是固定的,但應(yīng)用程序可把小于這個(gè)長(zhǎng)度的數(shù)據(jù)放入緩存小塊中,一個(gè)管道有兩個(gè)結(jié)束狀態(tài):寫完緩存和讀完緩存。通常,無(wú)論是哪個(gè)結(jié)束狀態(tài)都會(huì)激活i/o設(shè)備。數(shù)據(jù)通知函數(shù)用來(lái)執(zhí)行讀/寫同步任務(wù)以及通知pip緩存填滿或清空。寫數(shù)據(jù)時(shí),pip_alloc函數(shù)用來(lái)獲得緩存,pip_put函數(shù)用于將數(shù)據(jù)寫入緩存;寫完后,讀數(shù)據(jù)通知函數(shù)notifyreader將被調(diào)用。當(dāng)讀數(shù)據(jù)時(shí),pip_get函數(shù)用來(lái)接收緩存中的數(shù)據(jù),pip_free函數(shù)在數(shù)據(jù)不再被使用時(shí)將緩存清空,清空完后,寫數(shù)據(jù)通知函數(shù)notifywriter將被調(diào)用。

2.3 通用輸入輸出模塊

通用輸入輸出模塊在提供必要的同步讀/寫api函數(shù)及其擴(kuò)展函數(shù)的同時(shí),將代碼和使用數(shù)據(jù)緩存的大小盡量簡(jiǎn)化。如圖2所示,應(yīng)用程序可以調(diào)用gio的api函數(shù)直接與微型驅(qū)動(dòng)的iom交換數(shù)據(jù),這些api函數(shù)使得gio成為第三種類驅(qū)動(dòng)。

函數(shù)表指針是應(yīng)用程序和微型驅(qū)動(dòng)函數(shù)表(fxns)的接口;創(chuàng)建模式包括輸入(iom_input)、輸出(iom_output)和雙向(iom_inout);iom_packet在類驅(qū)動(dòng)和微型驅(qū)動(dòng)間執(zhí)行異步操作時(shí)使用,同步對(duì)象地址指向特定通道的同步信號(hào),通道實(shí)例地址則指向微型驅(qū)動(dòng)創(chuàng)建的通道實(shí)例。

3 微型驅(qū)動(dòng)的設(shè)計(jì)和實(shí)現(xiàn)

類/微型驅(qū)動(dòng)模型中的微型驅(qū)動(dòng)直接控制外部硬件設(shè)備。只要微型驅(qū)動(dòng)創(chuàng)建了規(guī)定的函數(shù),應(yīng)用程序就可以方便地通過(guò)dio適配模塊、pio適配模塊或(和)gio類驅(qū)動(dòng)調(diào)用。規(guī)定的函數(shù)包括:通道綁定函數(shù)(mdbinddev)、通道創(chuàng)建/刪除函數(shù)(mdcreatechan/mddeletechan)、i/o請(qǐng)求發(fā)送函數(shù)(mdsubmitchan)、中斷服務(wù)函數(shù)(isrs)和設(shè)備控制函數(shù)(mdcontrolchan)。這些規(guī)定的函數(shù)將放入微型驅(qū)動(dòng)的函數(shù)接口表(iom_fxns)中的相應(yīng)位置,供應(yīng)用程序通過(guò)適配模塊或gio類驅(qū)動(dòng)調(diào)用。函數(shù)接口表的結(jié)構(gòu)如下:


微型驅(qū)動(dòng)支持的控制代碼和控制操作,特別要注明該代碼的針對(duì)對(duì)象(針對(duì)通道實(shí)例還是設(shè)備實(shí)例)。例如,改變外設(shè)波特率的控制代碼,必須注明是針對(duì)某個(gè)通道還是所有通道的,否則容易給應(yīng)用程序帶來(lái)錯(cuò)誤。

4 用minidriver實(shí)現(xiàn)視頻數(shù)據(jù)的輸入和輸出

如圖3所示,從視頻采集芯片采集來(lái)的視頻數(shù)據(jù)通過(guò)edma從視頻接口(video port)傳輸?shù)骄彺嬷?,此過(guò)程可以通過(guò)minidriver實(shí)現(xiàn),本設(shè)計(jì)在minidriver中通過(guò)判斷視頻接口是否有完整的幀數(shù)據(jù)來(lái)實(shí)現(xiàn)幀緩存的管理和edma的重裝載及清零更新;在清零后minidriver通知上層類驅(qū)動(dòng)有空幀緩存可以使用。這樣就實(shí)現(xiàn)了數(shù)據(jù)的連續(xù)傳送。

數(shù)據(jù)輸出時(shí),使用下文設(shè)計(jì)的pci minidriver實(shí)現(xiàn)。

4.1 微型驅(qū)動(dòng)的設(shè)計(jì)與編寫




isrs為和mdcontrolchan的結(jié)構(gòu)與mdsubmitchan的結(jié)構(gòu)類似,本文不再做敘述。

4.2 在dsp/bios中注冊(cè)微型驅(qū)動(dòng)

打開dsp/bios配置工具,如圖4所示,首先右擊user-defined devices圖標(biāo),選擇插入選項(xiàng),并重新命名為pcichan;然后右擊pcichan,選擇屬性選項(xiàng),如圖5所示進(jìn)行注冊(cè)。


4.3 編寫類驅(qū)動(dòng)

本例的類驅(qū)動(dòng)使用通用輸入輸出模塊,首先右擊圖4中的gio-general input/output manager,選擇"啟動(dòng)gio",在應(yīng)用程序中,gio_create函數(shù)使用微型驅(qū)動(dòng)pcichan來(lái)創(chuàng)建通道實(shí)例;通過(guò)調(diào)用gio_submit函數(shù)來(lái)完成應(yīng)用程序?qū)ci設(shè)備的讀/寫操作等,源代碼如下:


通過(guò)上述3個(gè)步驟,pci設(shè)備的dsp/bios驅(qū)動(dòng)設(shè)計(jì)就基本上完成了,應(yīng)用程序可以通過(guò)使用類驅(qū)動(dòng)來(lái)復(fù)用pci設(shè)備,這樣極大地提高了驅(qū)動(dòng)的工作效率,也大大簡(jiǎn)化了對(duì)pci外設(shè)的控制。



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉