當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]μC/OS-II實(shí)時(shí)內(nèi)核下的A/D驅(qū)動(dòng)程序設(shè)計(jì)

摘要:詳細(xì)分析在μC/OS-II實(shí)時(shí)內(nèi)核驅(qū)動(dòng)程序讀取A/D的三種方法;闡述C8051F015單片機(jī)的A/D轉(zhuǎn)換器的配置、轉(zhuǎn)換特點(diǎn)及其驅(qū)動(dòng)程序讀取A/D采用的方法;針對(duì)C8051F015單片機(jī)分析A/D驅(qū)動(dòng)程序設(shè)計(jì)的方法和思想。這些方法和思想為在μC/OS-II下訪問(wèn)其它類型的A/D提供了很好的借鑒。

    關(guān)鍵詞:μC/OS-II A/D 驅(qū)動(dòng)程序 C8051F015

A/D轉(zhuǎn)換是單片機(jī)數(shù)據(jù)采集系統(tǒng)的重要組成部分,實(shí)時(shí)內(nèi)核下A/D驅(qū)動(dòng)程序的實(shí)現(xiàn)過(guò)程主取決于A/D轉(zhuǎn)換器的轉(zhuǎn)換時(shí)間。本文首先比較和分析μC/OS-II下A/D采樣數(shù)據(jù)的三種方法;其次介紹C8051F015單片機(jī)A/D模數(shù)轉(zhuǎn)換器配置及特點(diǎn);最后,在μC/OS-II內(nèi)核移植到8位單片機(jī)C8051F015的基礎(chǔ)上,介紹編寫A/D驅(qū)動(dòng)程序的一般思想和方法。

1 μC/OS-II實(shí)時(shí)內(nèi)核下的A/D讀方法

實(shí)時(shí)內(nèi)核下,驅(qū)動(dòng)程序采用什么方法讀取A/D采樣數(shù)據(jù)是首先考慮的問(wèn)題。許多因素將影響讀取A/D,如A/D的轉(zhuǎn)換時(shí)間、模擬值的轉(zhuǎn)換頻率、輸入通道數(shù)等,但最主要的取決于A/D的轉(zhuǎn)換時(shí)間。典型的A/D轉(zhuǎn)換典型的A/D轉(zhuǎn)換電路由模擬多路復(fù)用器(MUX)、放大器和模數(shù)轉(zhuǎn)換器(ADC)三部分組成。下面描述讀取A/D的三種方法。

    圖1所示的是第1種讀取方法。假設(shè)A/D轉(zhuǎn)換器的轉(zhuǎn)換時(shí)間較慢(5ms以上)。應(yīng)用程序調(diào)用圖1所示的驅(qū)動(dòng)程序,并傳遞要讀取的通道。驅(qū)動(dòng)程序通過(guò)MUX選擇要讀取的模擬通道(①)開(kāi)始讀。有,延時(shí)幾μs以便使信號(hào)通過(guò)MUX傳遞,并之穩(wěn)定下來(lái)。接著,ADC被觸發(fā)開(kāi)始轉(zhuǎn)換(②)。然后驅(qū)動(dòng)程序延時(shí)一段時(shí)間以完成轉(zhuǎn)換(③_。延時(shí)時(shí)間必須比ADC轉(zhuǎn)換時(shí)間長(zhǎng)。最后驅(qū)動(dòng)程序讀取ADC轉(zhuǎn)換結(jié)果(④)。并將轉(zhuǎn)換結(jié)果返回到應(yīng)用程序(⑤)。

圖2所示的是第2種讀取方法。當(dāng)模擬轉(zhuǎn)換完成后,ADC產(chǎn)生的個(gè)中斷信號(hào)。若ADC轉(zhuǎn)換完成,ISR給信號(hào)量發(fā)一個(gè)信號(hào)(⑤),通知驅(qū)動(dòng)程序,ADC已經(jīng)完成轉(zhuǎn)換。如果ADC在規(guī)定的時(shí)限內(nèi)沒(méi)有完成轉(zhuǎn)換。信號(hào)量超過(guò)(③),則驅(qū)動(dòng)程序不再等待下去。驅(qū)動(dòng)程序和中斷服務(wù)子程序(ISR)的偽代碼如下:

ADRd(ChannelNumber)

{

選擇要讀取的模擬輸入通道;

等待AMUX輸出穩(wěn)定;

啟動(dòng)ADC轉(zhuǎn)換;

等待來(lái)自ADC轉(zhuǎn)換結(jié)束中斷產(chǎn)生的信號(hào)量;

if(超時(shí)){

*eer=信號(hào)錯(cuò)誤;

return;

}else{

讀取ADC轉(zhuǎn)換結(jié)果并將其返回到應(yīng)用程序;

}

}

    ADCoversion Complete ISR {

保存全部CPU寄存器; /*將CPU的PSW、ACC、B、DPL、DPH及Rn入棧*/

通知內(nèi)核進(jìn)入ISR(調(diào)用OSIntEnter()或OSIntNesting直接加1);

發(fā)送ADC轉(zhuǎn)換完成信號(hào); /*利用μC/OS-II內(nèi)核的OSSemPost()*/

通知內(nèi)核退出ISR(調(diào)用OSIntExit());

恢復(fù)所有CPU寄存器;/*將CPU的PSW、ACC、B、DPL、DPH及Rn出棧*/

執(zhí)行中斷返回指令(即RETI);

}

在這種方法里,要求ISR執(zhí)行時(shí)間與調(diào)用等待信號(hào)的時(shí)間之和為A/D轉(zhuǎn)換時(shí)間。

如果A/D轉(zhuǎn)換時(shí)間小于處理中斷時(shí)間與等待信號(hào)所需的時(shí)間之和,則可以用第三種方法。如圖3所示,前兩步(①②同以上兩種方法)結(jié)束后,驅(qū)動(dòng)程序接著在一個(gè)軟件循環(huán)中等待(③)ADC直到完成轉(zhuǎn)換。在循環(huán)等待時(shí),驅(qū)動(dòng)程序檢測(cè)ADC的狀態(tài)(BUSY)信號(hào)。如果等待時(shí)間超過(guò)設(shè)定的定時(shí)值(軟件定時(shí)),則結(jié)束等待循環(huán)(循環(huán)等超時(shí))。如果在循環(huán)等待中,檢測(cè)到ADC發(fā)出轉(zhuǎn)換結(jié)束的信號(hào)(BUSY)時(shí),驅(qū)動(dòng)程序讀取ADC轉(zhuǎn)換結(jié)果(④)并將結(jié)果返回到應(yīng)用程序(⑤)。驅(qū)動(dòng)程序偽代碼如下:

ADRd(ChannelNumber){

選擇要讀取的模擬輸入通道;

等待AMUX輸出穩(wěn)定;

啟動(dòng)ADC轉(zhuǎn)換;

啟動(dòng)超時(shí)定時(shí)器;

while(ADC Busy & Counter 0);/*循環(huán)檢測(cè)*/

if(Counter==0){

*err=信號(hào)錯(cuò)誤;

return;

}else{

讀取ADC轉(zhuǎn)換結(jié)果并將其返回到應(yīng)用程序;

}

}

A、D轉(zhuǎn)換速度快,這種驅(qū)動(dòng)程序的實(shí)現(xiàn)是最好的。

2 C8051F015單片機(jī)的A/D轉(zhuǎn)換器

2.1 C8051C015單片機(jī)

C8051C015的美國(guó)Cygnal公司新推出的高速SOC型C8051Fxxx系列單片機(jī)。它的內(nèi)核CIP-51與MCS-51的指令集完全兼容,CIP-51的系統(tǒng)時(shí)鐘頻率在0~25MHz。C8051Fxxx系列單片機(jī)采用流水線結(jié)構(gòu),與標(biāo)準(zhǔn)的8051相比,指令執(zhí)行速度有很大的提高。CIP-51內(nèi)核的指令執(zhí)行時(shí)間是以系統(tǒng)時(shí)鐘為單位,70%的指令執(zhí)行時(shí)間為1個(gè)或2個(gè)系統(tǒng)時(shí)鐘周期。C8051F015具有32KB的內(nèi)存、2304B的RAM(片內(nèi)256B、片外2048B)。CIP-51內(nèi)核具有標(biāo)準(zhǔn)8052的所有外設(shè)部件,片上還集成有9通道10位A/D轉(zhuǎn)換接口電路、SMBus/I2C、SPI串行接口。

2.2 C8051F015的A/D轉(zhuǎn)換電路

C8051F015的A/D轉(zhuǎn)換電路包括1個(gè)9通道可配置模擬多路開(kāi)關(guān)AMUX(8路用于外部模擬輸入、1路用于芯片環(huán)境溫度的測(cè)量)、1個(gè)可編程增益放大器PGA和1個(gè)100ksps 10位分辨率的逐次逼近型ADC。A/D中還集成了跟蹤保持電路和可編程窗口檢測(cè)器。

ADC有4種啟動(dòng)方式:軟件命令、定時(shí)器2溢出、定時(shí)器3溢出及外部信號(hào)輸入。寄存器ADC0CN是配置啟動(dòng)和跟蹤方式的控制寄存器。每次轉(zhuǎn)換結(jié)束時(shí),ADC0CH的ADBUSY(忙標(biāo)志)的下降沿觸發(fā)中斷,也可用軟件查詢這個(gè)狀態(tài)位。

2.3 ADC轉(zhuǎn)換速度

C8051Fxxx系列單片機(jī)中ADC的速率都是可編程設(shè)置的。表1給出了所需最小分頻系數(shù)與SYSCLK(系統(tǒng)時(shí)鐘)的關(guān)系(ADC0CF為ADC配置寄存器)。

表1 ADC時(shí)鐘分頻系數(shù)與SYSCLK頻率的關(guān)系

SYSCLK頻率/MHz ADC時(shí)鐘分頻系數(shù) ADC0CF的ADCSC2~1
時(shí)鐘頻率<2.5 1 000
2.5~5 2 001
5~10 4 010
10~20 8(復(fù)位值) 011
時(shí)鐘頻率>20 16 1xx

在C8051F015單片機(jī)中,ADC的轉(zhuǎn)換時(shí)鐘周期至少在400ns,轉(zhuǎn)換時(shí)鐘應(yīng)不大于2MHz。一般在啟動(dòng)ADC之前都要處于跟蹤方式,而ADC一次轉(zhuǎn)換完成要用16個(gè)系統(tǒng)時(shí)鐘。另外,在轉(zhuǎn)換之前還要加上3個(gè)系統(tǒng)時(shí)鐘的跟蹤/保持捕獲時(shí)間,所以完成一次轉(zhuǎn)換需19個(gè)ADC轉(zhuǎn)換時(shí)鐘(9.5μs)。

圖1中的方法簡(jiǎn)單,轉(zhuǎn)換時(shí)間在ms級(jí)以上,一般用于變化慢的模擬輸入信號(hào),不適用于C8051F015。圖2中的方法,為了減少μC/OS-II內(nèi)核調(diào)用ISR所用時(shí)間,ISR一般都用于匯編語(yǔ)言編寫。從程序1中ISR偽代碼可以看出,盡管ISR用匯編語(yǔ)言編寫。代碼效率高,但μC/OS-II調(diào)用ISR的時(shí)間與調(diào)用等待信號(hào)時(shí)間之和大于A/D的轉(zhuǎn)換時(shí)間,所以CPU用于ISR和循環(huán)檢測(cè)的開(kāi)銷大。

圖3所示的方法顯然適合于C8051F015單片機(jī),其優(yōu)點(diǎn)是:可以獲得快速的轉(zhuǎn)換時(shí)間;不需要增加一個(gè)復(fù)雜的ISR;轉(zhuǎn)換時(shí)信號(hào)改變時(shí)間更短;CPU的開(kāi)銷??;循環(huán)檢測(cè)程序可被中斷,為中斷信號(hào)服務(wù)。

圖4 A/D驅(qū)動(dòng)程序模塊流程圖

3 A/D驅(qū)動(dòng)程序的編寫

外設(shè)驅(qū)動(dòng)程序是實(shí)時(shí)內(nèi)核和硬件之間的接口,是連接底層硬件和內(nèi)核的紐帶。編寫驅(qū)動(dòng)程序模塊應(yīng)滿足以下主要功能:①對(duì)設(shè)備初始化;②把數(shù)據(jù)從內(nèi)核傳送到硬件從硬件讀取數(shù)據(jù);③讀取應(yīng)用程序傳送給設(shè)備的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù);④監(jiān)測(cè)和處理設(shè)備出現(xiàn)的異常。

A/D轉(zhuǎn)換電路作為一個(gè)模擬輸入模塊,μC/OS-II內(nèi)核應(yīng)把它作為一個(gè)獨(dú)立的任務(wù)(以下稱為ADTask())來(lái)調(diào)用。A/D驅(qū)動(dòng)程序模塊流程如圖4所示。ADInit()初始化所有的模擬輸入通道、硬件ADC以及應(yīng)用程序調(diào)用A/D模塊的參量,并且ADInit()創(chuàng)建任務(wù)ADTask()。ADTb1[]是一個(gè)模擬輸入通道信息、ADC硬件狀態(tài)等參數(shù)配置以及轉(zhuǎn)換結(jié)果存儲(chǔ)表。ADUpdate()負(fù)責(zé)讀取所有模擬輸入通道,訪問(wèn)ADRd()并傳遞給它一個(gè)通道數(shù)。ADRd()負(fù)責(zé)通過(guò)多路復(fù)用器選擇合適的模擬輸入,啟動(dòng)并等待ADC轉(zhuǎn)換,以及返回ADC轉(zhuǎn)換結(jié)果到ADUpdate()。

μC/OS-II這時(shí)內(nèi)核下各原型函數(shù)、數(shù)據(jù)結(jié)構(gòu)和常量的定義如下:

INT16S ADRd(INT8U ch);

/*定義如何讀取A/D,A/D必須通過(guò)AIRd()來(lái)驅(qū)動(dòng)*/

void ADUpdate(void);

/*一定時(shí)間內(nèi)更新輸入通道*/

void ADInit(void);

/*A/D模塊初始化代碼,包括初始化所有內(nèi)部變量(通過(guò)ADInit()初始化ADTb[]),初始化硬件A/D(通過(guò)ADInitI())及創(chuàng)建任務(wù)ADTask()*/

void ADTask (void data);

/*由ADInit()創(chuàng)建,負(fù)責(zé)更新輸入通道(調(diào)用ADUpdate ())*/

void ADInitI (void);

/*初始化硬件A/D*/

AD_TaskPrio:設(shè)置任務(wù)ADTask()的優(yōu)先級(jí)。

AD_TaskStkSize:設(shè)置分配給任務(wù)ADTask()的堆棧大小。

AD_MaxNummber:AMUX的輸入通道數(shù)。

AD_TaskDly:設(shè)定更新通道的間隔時(shí)間。

AD ADTbl[AD_MaxNummber]:AD類型的數(shù)組(AD是定義的數(shù)據(jù)結(jié)構(gòu))。

4 結(jié)論

對(duì)于A/D轉(zhuǎn)換器接口電路驅(qū)動(dòng)程序的編寫歸納出以下幾點(diǎn):

①在決定采用具體的驅(qū)動(dòng)方案之前,分析接口電路的特點(diǎn),尤其是了解A/D的轉(zhuǎn)換速度;

②對(duì)于轉(zhuǎn)換速度快的A/D轉(zhuǎn)換器,可能出現(xiàn)CPU的處理速度與A/D轉(zhuǎn)換速度不匹配,一般的A/D中不帶有FIFO緩沖區(qū),須有內(nèi)存中開(kāi)辟緩沖區(qū);

③在應(yīng)用程序讀取設(shè)備之前,一定要初始化硬件(調(diào)用初始化函數(shù)),合理定義硬件的信息和狀態(tài)變量;

④不同的輸入通道采集到不同類型數(shù)據(jù),環(huán)境、轉(zhuǎn)換精度都會(huì)影響到轉(zhuǎn)換結(jié)果,要對(duì)各個(gè)模擬輸入通道進(jìn)行校準(zhǔn)和補(bǔ)償(通常在應(yīng)用程序中編寫通道補(bǔ)償函數(shù))。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉