《嵌入式操作系統(tǒng)及ARM Cortex-MO》課件第十二章_第1頁(yè)
《嵌入式操作系統(tǒng)及ARM Cortex-MO》課件第十二章_第2頁(yè)
《嵌入式操作系統(tǒng)及ARM Cortex-MO》課件第十二章_第3頁(yè)
《嵌入式操作系統(tǒng)及ARM Cortex-MO》課件第十二章_第4頁(yè)
《嵌入式操作系統(tǒng)及ARM Cortex-MO》課件第十二章_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十二章

數(shù)字電壓表實(shí)例 12.1 ADC工作原理 12.2 數(shù)字電壓表功能設(shè)計(jì) 12.3 數(shù)字電壓表程序設(shè)計(jì)

本章介紹了LPC824片內(nèi)ADC模塊的工作原理,在此基礎(chǔ)上,綜合運(yùn)用LPC824學(xué)習(xí)板上的滑動(dòng)變阻器、LCD顯示屏和LPC824微控制器的ADC模塊設(shè)計(jì)一個(gè)數(shù)字電壓表,可以動(dòng)態(tài)地顯示電壓變化曲線。 LPC824內(nèi)置了12bit的ADC模塊,最高采樣頻率為1.2MHz,可支持兩個(gè)序列同時(shí)轉(zhuǎn)換。在LPC824學(xué)習(xí)板上,用10kΩ滑動(dòng)變阻器輸出0~3.3V模擬電壓送給LPC824的ADC0通道3輸入端,如第三章圖3-2和圖3-6所示。ADC0通道3管腳ADC_3復(fù)用了管腳PIO0_23,需要將PIO0_23配置為ADC_3功能(見(jiàn)第二章表2-5第16位);配置SYSAHBCLKCTRL寄存器(參考表2-18)第24位為1,打開(kāi)ADC模塊時(shí)鐘;配置PDRUNCFG寄存器(見(jiàn)表2-13)的第4位為0,打開(kāi)ADC模塊的電源,該位默認(rèn)為1。ADC模塊相關(guān)的寄存器列于表12-1中。表12-1 ADC模塊相關(guān)的寄存器(偏移地址:0x4001C000)12.1

ADC工作原理12.1

ADC工作原理 下面依次介紹表12-1中各個(gè)寄存器的含義。

ADC控制寄存器CTRL的各位含義如表12-2所示。表12-2 CTRL寄存器的各位含義

除了第29位和第31位外,ADC轉(zhuǎn)換序列A控制寄存器SEQA_CTRL和轉(zhuǎn)換序列B控制寄存器的結(jié)構(gòu)相同,如表12-3所示。表12-3請(qǐng)看下頁(yè)12.1

ADC工作原理表12-3 ADC轉(zhuǎn)換序列控制寄存器12.1

ADC工作原理 ADC轉(zhuǎn)換序列A全局?jǐn)?shù)據(jù)寄存器(SEQA_GDAT)和轉(zhuǎn)換序列B全局?jǐn)?shù)據(jù)寄存器(SEQB_GDAT)結(jié)構(gòu)相同,如表12-4所示。表12-4 轉(zhuǎn)換序列全局?jǐn)?shù)據(jù)寄存器

12.1

ADC工作原理 ADC通道0~11的數(shù)據(jù)寄存器DAT0~DAT11的結(jié)構(gòu)相同,且與表12-4所示的轉(zhuǎn)換序列全局?jǐn)?shù)據(jù)寄存器的結(jié)構(gòu)相同。對(duì)于TSSOP20封裝的LPC824(見(jiàn)圖3-2),只有通道ADC_2、ADC_3、ADC_9、ADC_10和ADC_11,相應(yīng)的只有DAT2、DAT3、DAT9、DAT10和DAT11寄存器有效,其余寄存器保留。

ADC低比較門限寄存器THR0_LOW和低比較門限寄存器THR1_LOW的結(jié)構(gòu)相同,只有第[15∶4]位域有效,用符號(hào)THRLOW表示,設(shè)置與ADC轉(zhuǎn)換結(jié)果相比較的低電壓值。ADC高比較門限寄存器THR0_HIGH和高比較門限寄存器THR1_HIGH的結(jié)構(gòu)相同,只有第[15∶4]位域有效,設(shè)置與ADC轉(zhuǎn)換結(jié)果相比較的高電壓值。

ADC通道門限選擇寄存器CHAN_THRSEL如表12-5所示。表12-5 ADC通道門限選擇寄存器CHAN_THRSEL

12.1

ADC工作原理12.1

ADC工作原理12.1

ADC工作原理 ADC中斷開(kāi)放寄存器INTEN的結(jié)構(gòu)如表12-6所示。表12-6 ADC中斷開(kāi)放寄存器INTEN

12.1

ADC工作原理 ADC標(biāo)志寄存器FLAGS如表12-7所示。表12-7 ADC標(biāo)志寄存器FLAGS12.1

ADC工作原理12.1

ADC工作原理 擬基于LPC824學(xué)習(xí)板設(shè)計(jì)具有以下功能的數(shù)字電壓表: (1)在LCD顯示屏上實(shí)時(shí)顯示電壓值,保留2位小數(shù)。 (2)動(dòng)態(tài)演示電壓測(cè)量值的變化曲線。 (3)對(duì)電壓測(cè)量值進(jìn)行FIR濾波,在LCD屏上顯示平滑濾波后的電壓值。12.2

數(shù)字電壓表功能設(shè)計(jì) 將LPC824學(xué)習(xí)板上的P2的第1-2腳相連(見(jiàn)圖3-4),恢復(fù)與計(jì)算機(jī)間串口通信的功能。在項(xiàng)目ZLX16的基礎(chǔ)上,新建項(xiàng)目ZLX24,保存在目錄D:\ZLXLPC824\ZLX24下,此時(shí)的項(xiàng)目ZLX24與ZLX16相同,然后,按表12-8所示修改項(xiàng)目ZLX24。表12-8 項(xiàng)目ZLX24在ZLX16的基礎(chǔ)上的改動(dòng)部分12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì) 下面介紹表12-8中添加到項(xiàng)目ZLX24中的文件。

程序段12-1文件task02.c 1 //Filename:task02.c 2 3 #include"includes.h" 4 5 externOS_EVENT*Mbox02;

6

第5行聲明外部定義的消息郵箱Mbox02。

7 voidTask02(void*data) 8 { 9 INT8Uerr;

10 INT32U*ADCMsg;

11

第10行定義32位無(wú)符號(hào)整型指針ADCMsg,用于指向來(lái)自郵箱Mbox02的消息。

12.3

數(shù)字電壓表程序設(shè)計(jì) 12 data=data;

13 14 DrawADCFrame();

15

第14行調(diào)用DrawADCFrame函數(shù)在LCD屏上畫如圖12-1所示的框架。圖12-1 LCD屏顯示的框架

12.3

數(shù)字電壓表程序設(shè)計(jì) 16 while(1) 17 { 18 OSTimeDlyHMSM(0,0,0,500);

19 ADCStart();

20 ADCMsg=OSMboxPend(Mbox02,0,&err);

21 DispADCValue(ADCMsg[0]);

22 } 23 }

用戶任務(wù)Task02每0.5秒執(zhí)行一次(第18行),每次執(zhí)行時(shí),首先調(diào)用ADCStart函數(shù)啟動(dòng)ADC轉(zhuǎn)換(第19行);然后第20行請(qǐng)求消息郵箱Mbox02,當(dāng)ADC模塊通道3轉(zhuǎn)換完成后,將轉(zhuǎn)換后的結(jié)果作為消息發(fā)送到消息郵箱Mbox02中;當(dāng)請(qǐng)求消息郵箱Mbox02成功后,第21行調(diào)用DispADCValue函數(shù)在LCD屏上輸出當(dāng)前的ADC采樣值、濾波后的ADC采樣值和ADC采樣值的變化曲線。12.3

數(shù)字電壓表程序設(shè)計(jì)

程序段12-2文件task02.h 1 //Filename:task02.h 2 3 #ifndef_TASK02_H 4 #define_TASK02_H 5 6 #defineTask02StkSize 70 7 #defineTask02ID 2 8 #defineTask02Prio (Task02ID+3) 9 10 voidTask02(void*);

11 12 #endif

文件task02.h中宏定義了用戶任務(wù)Task02的堆棧大小為70字、任務(wù)ID號(hào)為2和優(yōu)先級(jí)號(hào)為5,第10行聲明了任務(wù)函數(shù)Task02的原型。12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì) 第13~77行為圖12-2所示位圖圖像的點(diǎn)陣數(shù)組,大小為128×64點(diǎn)陣。圖12-2 BMP格式的框架圖像

12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)12.3

數(shù)字電壓表程序設(shè)計(jì)

程序段12-4文件adc.h 1 //Filename:adc.h 2 3 #include"datatype.h" 4 5 #ifndef_ADC_H 6 #define_ADC_H 7 8 voidADCInit(void);

9 voidADCStart(void);

10 voidDrawADCFrame(void);

11 voidDispADCValue(Int32U);

12 voidDrawADCValue(Int08U);

13 voidClearADCPic(void);

14 voidDispADCFltVal(Int32U);

15 16 #endif

文件adc.h中聲明了文件adc.c中定義的函數(shù)原型,如第8~14行所示,這些函數(shù)依次為ADC模塊初始化、啟動(dòng)ADC轉(zhuǎn)換、繪制圖像框架、打印ADC轉(zhuǎn)換的當(dāng)前電壓值、動(dòng)態(tài)繪制ADC轉(zhuǎn)換的電壓值、清除LCD屏上的電壓圖像、打印FIR濾波后的電壓值。12.3

數(shù)字電壓表程序設(shè)計(jì) 根據(jù)上述程序段12-1至程序段12-4的描述,可知任務(wù)Task02相關(guān)的工作流程如圖12-3所示。圖12-3 任務(wù)Task02的工作流程

12.3

數(shù)字電壓表程序設(shè)計(jì)

在圖12-3中,用戶任務(wù)Task02每0.5秒執(zhí)行一次,每次執(zhí)行時(shí)啟動(dòng)ADC轉(zhuǎn)換,控制LPC824片上的ADC模塊開(kāi)始工作,當(dāng)ADC模塊轉(zhuǎn)換完成后(這里使用了序列A),觸發(fā)ADC_SEQA_IRQHandler中斷服務(wù)函數(shù),在該中斷服務(wù)函數(shù)中讀取ADC轉(zhuǎn)換的結(jié)果(這里為電壓值),將結(jié)果保存在ADCVal[0]中,然后,將轉(zhuǎn)換結(jié)果作為消息釋放到消息郵箱Mbox02中。任務(wù)Task02啟動(dòng)ADC轉(zhuǎn)換后,則請(qǐng)求消息郵箱Mbox02,如果請(qǐng)求不成功,則循環(huán)等待直到請(qǐng)求成功。如果請(qǐng)求成功,則從

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論