《ARM嵌入式接口技術(shù)應(yīng)用》第四章-時(shí)鐘控制模塊_第1頁
《ARM嵌入式接口技術(shù)應(yīng)用》第四章-時(shí)鐘控制模塊_第2頁
《ARM嵌入式接口技術(shù)應(yīng)用》第四章-時(shí)鐘控制模塊_第3頁
《ARM嵌入式接口技術(shù)應(yīng)用》第四章-時(shí)鐘控制模塊_第4頁
《ARM嵌入式接口技術(shù)應(yīng)用》第四章-時(shí)鐘控制模塊_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章時(shí)鐘控制模塊一、概述二、定時(shí)/計(jì)數(shù)器模塊三、PWM模塊四、實(shí)時(shí)時(shí)鐘模塊五、看門狗模塊六、低功耗實(shí)驗(yàn)七、附錄---中斷功能一、概述時(shí)鐘的概念:

時(shí)鐘就是一連串連續(xù)的、周期的和占空比固定的時(shí)鐘脈沖信號。時(shí)鐘的作用:

時(shí)鐘發(fā)生器提供給芯片一個(gè)連續(xù)的脈沖信號讓芯片完成一定任務(wù)。一種是利用內(nèi)部的晶體振蕩器,我們稱之為振蕩模式,如圖(a)所示;另一種是使用外部振蕩源提供的脈沖信號,此為從屬模式,如圖(b)所示。(a)(b)1.1時(shí)鐘電路的設(shè)計(jì)方法LPC2000系列芯片的時(shí)鐘來源:

1、振蕩模式:使用外部晶體; 2、從屬模式:從XTAL1腳輸入占空比為1/2的時(shí)鐘信號。1.2LPC2220的時(shí)鐘外設(shè)功能模塊的時(shí)鐘pclk的得來: 高頻率的cclk經(jīng)過一個(gè)分頻器分頻后的時(shí)鐘pclk作為其時(shí)鐘源。處理器的時(shí)鐘cclk的得來:Fosc經(jīng)過PLL鎖相環(huán)模塊加以倍頻得到。二、定時(shí)/計(jì)數(shù)器模塊定時(shí)/計(jì)數(shù)器的功能

計(jì)數(shù)功能:

是指對外部脈沖信號進(jìn)行計(jì)數(shù),不需要基準(zhǔn)時(shí)鐘。

定時(shí)功能:

功能需要用到某個(gè)基準(zhǔn)時(shí)鐘,通過對基準(zhǔn)時(shí)鐘的計(jì)數(shù)來完成定時(shí)功能。定時(shí)/計(jì)數(shù)器用途:

1)產(chǎn)生所需頻率的脈沖; 2)在頻率測量中的應(yīng)用; 3)在累加計(jì)數(shù)中的應(yīng)用; 4)定時(shí)/計(jì)數(shù)器在計(jì)時(shí)中的應(yīng)用。計(jì)數(shù)器在累加計(jì)數(shù)原理框圖LPC2220系列有定時(shí)器0和定時(shí)器l兩個(gè)定時(shí)器。兩個(gè)定時(shí)器除了外設(shè)基地址不相同以外,其他都相同。定時(shí)器對外設(shè)時(shí)鐘pclk周期進(jìn)行計(jì)數(shù);當(dāng)計(jì)數(shù)數(shù)值等于匹配寄存器的值時(shí),可以產(chǎn)生中斷或執(zhí)行其它動作;利用這一特性可實(shí)現(xiàn)定時(shí)功能。它還包括捕獲輸入,用于在輸入信號發(fā)生跳變時(shí)捕獲定時(shí)器值,并可選擇產(chǎn)生中斷。利用這一特性可實(shí)現(xiàn)對外部脈沖進(jìn)行計(jì)數(shù)。1.1LPC2220的定時(shí)器模塊 特性:帶可編程32位預(yù)分頻器的32位定時(shí)器/計(jì)數(shù)器。具有4路捕獲通道??蛇x擇使捕獲事件產(chǎn)生中斷,當(dāng)輸入信號跳變時(shí)可取得定時(shí)器的瞬時(shí)值。具有4個(gè)32位匹配寄存器,并有4個(gè)對應(yīng)于匹配寄存器的外部輸出。 功能:1、匹配輸出2、捕獲輸入1.2定時(shí)器的特性與功能當(dāng)MR0~MR3與定時(shí)器計(jì)數(shù)器TC發(fā)生匹配時(shí),內(nèi)核將會按照MCR設(shè)置的方法產(chǎn)生中斷、停止或復(fù)位TC等;根據(jù)EMR的設(shè)置控制匹配后在相應(yīng)引腳輸出高電平、低電平或者執(zhí)行電平翻轉(zhuǎn)等。定時(shí)器---匹配輸出當(dāng)有捕獲觸發(fā)信號產(chǎn)生時(shí),捕獲電路將會立即把當(dāng)時(shí)的定時(shí)器值TC復(fù)制到對應(yīng)觸發(fā)通道的捕獲寄存器CR0~CR3中。通過設(shè)置CCR可將捕獲設(shè)置為上升沿觸發(fā)、下降沿觸發(fā)、雙邊沿觸發(fā),并可設(shè)置為捕獲中斷。定時(shí)器---捕獲輸入1.3定時(shí)器的內(nèi)部結(jié)構(gòu)1定時(shí)器的內(nèi)部結(jié)構(gòu)232位定時(shí)器TC的計(jì)數(shù)頻率由外設(shè)時(shí)鐘pclk輸入經(jīng)過PR進(jìn)行分頻控制得到,PR指定預(yù)分頻數(shù)的最大值;PC為分頻計(jì)數(shù)器,當(dāng)PC累加到等于PR值時(shí),TC+1,且PC從0開始重新計(jì)數(shù);TCR控制定時(shí)器的啟動/停止、計(jì)數(shù)復(fù)位。當(dāng)定時(shí)器TC與匹配寄存器MR0~MR3發(fā)生匹配時(shí),將會按照MCR設(shè)置的方法產(chǎn)生中斷、停止或復(fù)位TC等。1.4寄存器描述

標(biāo)號名稱描述訪問復(fù)位值TxIR中斷寄存器可以寫IR來清除中斷。可讀取IR來識別哪個(gè)中斷被掛起R/W0TxTCR定時(shí)器控制寄存器TCR用于控制定時(shí)器計(jì)數(shù)器功能。定時(shí)器計(jì)數(shù)器可通過TCR禁止或復(fù)位R/W0TxTC定時(shí)器計(jì)數(shù)器32位的TC每經(jīng)過PR+1個(gè)pclk周期加1。TC通過TCR進(jìn)行控制0TxPR預(yù)分頻寄存器保存預(yù)分頻計(jì)數(shù)的最大值PRR/W0TxPC預(yù)分頻計(jì)數(shù)器32位的PC每經(jīng)過PR+1個(gè)pclk時(shí),TC加1R/W0TxMCR匹配控制寄存器MCR用于控制在匹配時(shí)是否產(chǎn)生中斷或復(fù)位TCR/W0TxMR(0~3)匹配寄存器(0~3)可通過MCR設(shè)定在匹配時(shí)復(fù)位TC,停止TC和PC和/或產(chǎn)生中斷R/W0TxCCR捕獲控制寄存器它控制用于用于裝載捕獲寄存器的捕獲輸入邊沿以及在發(fā)生捕獲時(shí)是否產(chǎn)生中斷R/W0TxCR(0~3)捕獲寄存器(0~3)當(dāng)CAP(0.0~0.3)或CAP(1.0~1.3)產(chǎn)生捕獲事件時(shí),CR(0~3)裝載TC的值RO0TxEMR外部匹配寄存器EMR控制外部匹配引腳MAT0.0~MAT0.3或MAT1.0~MAT1.3RW0中斷寄存器

中斷寄存器包含了4個(gè)位用于匹配中斷,4個(gè)位用于捕獲中斷。IR功能描述復(fù)位值0MR0中斷匹配通道0的中斷標(biāo)志01MR1中斷匹配通道1的中斷標(biāo)志02MR2中斷匹配通道2的中斷標(biāo)志03MR3中斷匹配通道3的中斷標(biāo)志04CR0中斷捕獲通道0事件的中斷標(biāo)志05CR1中斷捕獲通道1事件的中斷標(biāo)志06CR2中斷捕獲通道2事件的中斷標(biāo)志07CR3中斷捕獲通道3事件的中斷標(biāo)志01.5定時(shí)器的操作方法 ①設(shè)置定時(shí)計(jì)數(shù)器的時(shí)鐘頻率,定時(shí)器計(jì)數(shù)時(shí)鐘頻率計(jì)算公式如下: 計(jì)數(shù)時(shí)鐘頻率=Fpclk/(PR+1) ②設(shè)置定時(shí)器的工作模式。 ③若使用定時(shí)器的相關(guān)中斷,則設(shè)置VIC中斷使能寄存器,使能中斷; ④設(shè)置TCR,啟動定時(shí)器定時(shí)。1.6實(shí)驗(yàn)?zāi)康呐c內(nèi)容實(shí)驗(yàn)1:定時(shí)器定時(shí)輸出

目的:學(xué)會LPC2220內(nèi)部模塊定時(shí)器的使用與其定時(shí)功能的設(shè)置。 內(nèi)容:利用LPC2220的定時(shí)器0定時(shí),5秒時(shí)間到則控制蜂鳴器叫一聲。實(shí)驗(yàn)2:定時(shí)器捕獲輸入 目的:學(xué)會LPC2220內(nèi)部模塊定時(shí)器的匹配輸出與捕獲輸入的使用。 內(nèi)容:首先,把定時(shí)器0的匹配輸出來產(chǎn)生脈沖波(借鑒實(shí)驗(yàn)1);同時(shí),匹配輸出(P0.22)輸入到捕獲輸入(P0.27)中。每發(fā)生一次捕獲事件,就對發(fā)生的次數(shù)進(jìn)行統(tǒng)計(jì),并將統(tǒng)計(jì)的次數(shù)在數(shù)碼管中顯示。實(shí)驗(yàn)1參考程序/***************************************************************************名稱:__irq

TimeO_IRQ()*功能:定時(shí)器0中斷服務(wù)子程序(控制蜂鳴器鳴叫)。*************************************************************************/void__irq

TimeO_IRQ(void){ if((IO1PIN&BEE)==0) BEEON(); //打開蜂鳴器

else BEEOFF(); //關(guān)閉蜂鳴器

T0IR=0x01; //清除中斷標(biāo)志

VICVectAddr=0x00; //中斷結(jié)束}/*****************************************************************************名稱:TimeO_Init()*功能:初始化定時(shí)器0模塊,并開啟定時(shí)器0的中斷功能****************************************************************************/voidTime0_Init(void){ T0TC=0; //定時(shí)器計(jì)數(shù)器設(shè)置為0 T0PR=0; //時(shí)鐘不分頻

T0MCR=0x03; //設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志

T0MR0=Fpclk*5; //設(shè)置5s匹配值

T0IR=0x01; //清除中斷標(biāo)志

T0TCR=0x03; //啟動定時(shí)器0 /*設(shè)置定時(shí)器0中斷*/

VICIntSelect=0x00; //所有中斷設(shè)置為向量中斷

VICVectCntl0=0x24; //定時(shí)器0中斷分配最高優(yōu)先級

VICVectAddr0=(uint32)TimeO_IRQ; //設(shè)置中斷向量地址

VICIntEnable=0x00000010; //使能定時(shí)器0中斷}實(shí)驗(yàn)1參考程序/*****************************************************************************名稱:main()*功能:控制定時(shí)器0,使之產(chǎn)生5秒的延時(shí)*入口參數(shù):無*出口參數(shù):無****************************************************************************/int

main(void){ IO1DIR=IO1DIR|BEE;//設(shè)置控制蜂鳴器引腳P1.24為I/O輸出

Time0_Init(); //定時(shí)器0初始化

while(1); //死循環(huán)

return(0);}實(shí)驗(yàn)1參考主程序volatileuint32count;/***************************************************************************名稱:__irqTime0_IRQ()*功能:定時(shí)器0中斷服務(wù)子程序(計(jì)數(shù)值加1)。*************************************************************************/void__irqTime0_IRQ(void){ count++; T0IR=0xff; //清除中斷標(biāo)志

VICVectAddr=0x00; //中斷結(jié)束}實(shí)驗(yàn)2參考子程序/*****************************************************************************名稱:Read()*功能:讀取當(dāng)前計(jì)數(shù)值。****************************************************************************/uint8Read(){

return(count);} 定時(shí)器讀取當(dāng)前計(jì)數(shù)值程序定時(shí)器初始化函數(shù)/*****************************************************************************名稱:Time0_Init()*功能:初始化定時(shí)器0.****************************************************************************/voidTime0_Init(void){

T0TC=0; //定時(shí)器0計(jì)數(shù)器清0 T0PR=0; //時(shí)鐘不分頻

T0MCR=0x02; //設(shè)置T0MR0匹配后復(fù)位T0TC,但不產(chǎn)生中斷標(biāo)志

T0MR0=Fpclk*5; //設(shè)置5s匹配值

T0CCR=0x028; //設(shè)置CAP0.1功能:上升沿有效,并產(chǎn)生中斷標(biāo)志

T0IR=0xFF; //清除中斷標(biāo)志

T0TCR=0x03; //啟動定時(shí)器1

/*設(shè)置定時(shí)器0中斷*/

VICIntSelect=0x00; //所有中斷設(shè)置為向量中斷

VICVectCntl0=0x24; //定時(shí)器0中斷分配最高優(yōu)先級Slot0 VICVectAddr0=(uint32)Time0_IRQ;//設(shè)置中斷向量地址

VICIntEnable=0x00000010; //使能定時(shí)器1中斷}/*****************************************************************************名稱:main()*功能:使能定時(shí)器0匹配輸出和捕獲輸入,并控制LED數(shù)碼管顯示捕獲值*入口參數(shù):無*出口參數(shù):無****************************************************************************/int

main(void){ PINSEL1=0x00403000;//設(shè)置P0.22引腳為MAT0.0匹配輸出功能,P0.27為CAP0.1捕獲輸入

count=0; Time0_Init(); //定時(shí)器0初始化

NumbTube_Init(); //數(shù)碼管初始化

while(1) NumbTube_Display(Read(),0);//顯示外部捕獲的次數(shù)

return(0);}實(shí)驗(yàn)2參考主程序三、PWM模塊概述

PWM是PulseWidthModulation的縮寫,即脈沖寬度調(diào)制。PWM原理

PWM是一種對模擬信號電平進(jìn)行數(shù)字編碼的方法。通過高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制,用來對一個(gè)具體模擬信號的電平進(jìn)行編碼。等效的實(shí)現(xiàn)是基于采樣定理中的一個(gè)重要的結(jié)論。用不同寬度的矩形波(b)來代替正弦波(a),通過對矩形波的控制來模擬輸出不同頻率的正弦波。例如,把正弦半波N等分,看成N個(gè)相連的脈沖序列,寬度相等,但幅值不等;用矩形脈沖代替,等幅,不等寬,中點(diǎn)重合,面積(沖量)相等,寬度按正弦規(guī)律變化。正弦波等效的PWM波形如圖所示除了等效正弦波形,還可以等效成其他所需波形。根據(jù)PWM控制技術(shù)的特點(diǎn),主要有以下8類等效方法:

1、相電壓控制PWM;

2、線電壓控制PWM;

3、電流控制PWM;

4、空間電壓矢量控制PWM[7];

5、矢量控制PWM[8];

6、直接轉(zhuǎn)矩控制PWM[8];

7、非線性控制PWM; 8、諧振軟開關(guān)PWM。

1.1PWM的應(yīng)用及優(yōu)點(diǎn)

PWM的應(yīng)用

WM控制技術(shù)廣泛的運(yùn)用在從測量、通信到功率控制與變換的許多領(lǐng)域中。

優(yōu)點(diǎn) ①從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進(jìn)行數(shù)模轉(zhuǎn)換; ②讓信號保持為數(shù)字形式可將噪聲影響降到最小1.2LPC2220的PWM模塊特性如下:

1、帶可編程32位預(yù)分頻器的32位定時(shí)器; 2、7個(gè)匹配寄存器,可實(shí)現(xiàn)6個(gè)PWM(PWM1~PWM6)輸出;

3、支持單邊沿控制和雙邊沿控制PWM輸出;

4、脈沖周期和寬度可以是任何的定時(shí)器計(jì)數(shù)值;

5、當(dāng)不使能PWM模式,則可以作為一個(gè)標(biāo)準(zhǔn)的定時(shí)器。LPC2220的PWM模塊中一共有1個(gè)定時(shí)計(jì)數(shù)器和7個(gè)匹配寄存器。PWM功能建立在匹配器事件之上,定時(shí)計(jì)數(shù)器對外設(shè)時(shí)鐘進(jìn)行計(jì)數(shù),在達(dá)到指定的定時(shí)值時(shí)可選擇中斷或執(zhí)行其他的動作。單邊沿控制或雙邊沿控制: 單邊沿控制PWM輸出在每個(gè)周期T開始時(shí)總是為高電平; 雙邊沿控制PWM輸出可在一個(gè)周期T內(nèi)的任何位置產(chǎn)生邊沿。不同占空比的單邊沿與正負(fù)脈沖雙邊沿的PWM輸出LPC2220的PWM模塊單邊沿控制PWM輸出每個(gè)單邊沿控制PWM輸出需要用到2個(gè)匹配寄存器。匹配寄存器PWMMR0控制PWM周期,另一個(gè)匹配寄存器來控制PWM邊沿的位置。所有單邊沿控制PWM輸出在PWM周期開始時(shí)都為高電平,在達(dá)到其匹配值都會變成低電平。

單邊沿控制PWM輸出示意圖雙邊沿控制PWM輸出每個(gè)雙邊沿控制PWM輸出需要用到3個(gè)匹配寄存器。PWMMR0匹配寄存器控制PWM周期,其他匹配寄存器控制2個(gè)PWM邊沿位置。置位匹配寄存器的值小于復(fù)位匹配寄存器的值,將在一個(gè)PWM周期中產(chǎn)生一個(gè)正脈沖;置位匹配寄存器的值大于復(fù)位匹配寄存器的值,將在一個(gè)PWM周期中產(chǎn)生一個(gè)負(fù)脈沖。PWM通道單邊沿PWM(PWMSELn=0)雙邊沿PWM(PWMSELn=1)置位復(fù)位置位復(fù)位1PWMMR0PWMMR1PWMMR0PWMMR12PWMMR0PWMMR2PWMMR1PWMMR23PWMMR0PWMMR3PWMMR2PWMMR34PWMMR0PWMMR4PWMMR3PWMMR45PWMMR0PWMMR5PWMMR4PWMMR56PWMMR0PWMMR6PWMMR5PWMMR6PWM通道的置位和復(fù)位寄存器1.3PWM內(nèi)部結(jié)構(gòu)介紹PWMTC的計(jì)數(shù)頻率由pclk時(shí)鐘信號經(jīng)過PWMPR進(jìn)行分頻控制得到;

PWMTCR控制定時(shí)器的啟動/停止、計(jì)數(shù)復(fù)位;PWMIR會設(shè)置相關(guān)中斷標(biāo)志,若已打開中斷允許則會產(chǎn)生中斷。1.4PWM寄存器介紹PWM共有15個(gè)相關(guān)寄存器;4個(gè)與定時(shí)/計(jì)數(shù)器相關(guān)的寄存器;7個(gè)匹配寄存器;1個(gè)PWM中斷寄存器保存中斷標(biāo)志;1個(gè)鎖存使能寄存器;2個(gè)控制寄存器。名稱描述訪問復(fù)位值PWMIRPWM中斷寄存器:可以寫IR來清除中斷。也可以讀取IR來識別哪個(gè)中斷被掛起R/W0PWMTCRPWM定時(shí)器控制寄存器:TCR用于控制定時(shí)器計(jì)數(shù)功能。定時(shí)器的計(jì)數(shù)器可以通過TCR禁止或復(fù)位R/W0PWMTCPWM定時(shí)器計(jì)數(shù)器:TC每經(jīng)過PR+1個(gè)pclk周期加一。TC通過TCR進(jìn)行控制R/W0PWMPRPWM預(yù)分頻寄存器:指定預(yù)分頻的最大值PRR/W0PWMPCPWM預(yù)分頻計(jì)數(shù)器:每當(dāng)32位PC的值增加到等于PR的值時(shí),TC加一R/W0PWMMCRPWM匹配控制寄存器:MCR用于控制在匹配時(shí)是否產(chǎn)生中斷或者復(fù)位TCR/W0PWMMR(0~6)PWM匹配寄存器(0~6):它們可以通過MCR設(shè)定在匹配時(shí)復(fù)位TC,停止TC和PC和/或產(chǎn)生中斷。R/W0PWMPCRPWM控制寄存器:使能PWM輸出并選擇PWM的通道類型為單邊沿或者是雙邊沿輸出R/W0PWMLERPWM鎖存使能寄存器:使能新的PWM匹配值R/W0PWM中斷寄存器(PWMIR)PWMIR功能描述復(fù)位值0PWMMR0中斷PWM匹配通道0的中斷標(biāo)志01PWMMR1中斷PWM匹配通道1的中斷標(biāo)志02PWMMR2中斷PWM匹配通道2的中斷標(biāo)志03PWMMR3中斷PWM匹配通道3的中斷標(biāo)志04~7保留用戶不要向該位寫入108PWMMR4中斷PWM匹配通道4的中斷標(biāo)志09PWMMR5中斷PWM匹配通道5的中斷標(biāo)志010PWMMR6中斷PWM匹配通道6的中斷標(biāo)志01.5PWM的操作方法控制寄存器PWMMCR設(shè)置定時(shí)器比較匹配,PWMMR(0~6)寄存器與PWMTC計(jì)數(shù)器進(jìn)行比較。當(dāng)比較匹配時(shí),將按照PWMMCR設(shè)置的方法產(chǎn)生中斷或復(fù)位PWMTC等。另外,PWMLER鎖存使能寄存器。比較匹配寄存器功能方框圖如下:1.6PWM基本操作步驟: 1、連接PWM功能引腳輸出; 2、設(shè)置PWM定時(shí)器的時(shí)鐘分頻值,得到所要的定時(shí)器時(shí)鐘; 3、設(shè)置比較匹配控制與相應(yīng)的比較值; 4、設(shè)置PWM的輸出方式并允許PWM輸出及鎖存使能控制; 5、設(shè)置PWMTCR,啟動定時(shí)器,使能PWM; 6、運(yùn)行過程中要更改比較值時(shí),更改以后要設(shè)置鎖存使能。1.7實(shí)驗(yàn)?zāi)康呐c內(nèi)容實(shí)驗(yàn)?zāi)康模簩W(xué)會LPC2220內(nèi)部模塊PWM的使用。實(shí)驗(yàn)內(nèi)容:利用LPC2220的PWM模塊產(chǎn)生周期與占空比可調(diào)的脈沖波,觀察LED燈變化。實(shí)驗(yàn)參考程序#defineCYCLE_DATA10*Fpclk//設(shè)置PWM的周期為10秒/**************************************************************************名稱:PWM5_SET(uint8DUTY_DATA)*功能:使用PWM5輸出占空比可調(diào)的PWM信號*參數(shù):DUTY_DATA為占空比參數(shù),取值為0~9,值越大占空比越小**************************************************************************/voidPWM5_SET(uint8DUTY_DATA){ PWMPR=0x00;//不分頻,計(jì)數(shù)頻率為Fpclk PWMMCR=0x02;//設(shè)置PWMMR0匹配時(shí)復(fù)位PWMTC PWMPCR=0x2000;//允許PWMMR5單邊沿輸出

PWMMR0=CYCLE_DATA;//設(shè)置PWM5的周期為10秒

PWMMR5=(10-DUTY_DATA)*Fpclk;//設(shè)置PWM5的占空比

PWMLER=0x21;//PWMMR0和PWMMR5鎖存

PWMTCR=0x09;//啟動定時(shí)器,PWM使能}/*****************************************************************************名稱:main()*功能:使用PWM5輸出占空比可調(diào)的PWM信號****************************************************************************/int

main(void){ uint8key; PINSEL1=(PINSEL1&0xfffff7ff)|0x00000400;//設(shè)置PWM5連接到P0.21引腳

KEY_Init(); //調(diào)用鍵盤初始化函數(shù)

PWM5_SET(1); //PWM5初始化為周期10秒,占空比1/10的脈沖波

while(1) { key=KEY_Read(); //讀取按鍵值給變量key

if((key>=0)&&(key=<9))PWM5_SET(key); //重新設(shè)置PWM5的占空比

} return(0);}1.8實(shí)驗(yàn)步驟與結(jié)果

單擊全速運(yùn)行按鈕(快捷鍵F5),程序會運(yùn)行并停留在main()主函數(shù)處;繼續(xù)全速運(yùn)行。

連接電路,將PWM插座的3腳連接到LED燈的插孔處,可以看到LED燈的閃爍。按下鍵盤上的1~9號按鍵,LED等的閃爍情況將發(fā)生相應(yīng)的變化。四、實(shí)時(shí)時(shí)鐘模塊概念:

實(shí)時(shí)時(shí)鐘(RTC)是一種由晶體控制精度的向主系統(tǒng)提供時(shí)間和日期的器件。特性: 它能實(shí)時(shí)刷新時(shí)間與日期信息,還可以根據(jù)實(shí)際需要設(shè)置報(bào)警,鬧鈴等,功耗非常低,一般都在uW級。實(shí)時(shí)的應(yīng)用:

實(shí)時(shí)時(shí)鐘得以廣泛應(yīng)用在時(shí)鐘日歷,電子表,計(jì)算機(jī),手機(jī)等領(lǐng)域。1.1LPC2220的實(shí)時(shí)時(shí)鐘模塊概述 LPC2220系列自帶的實(shí)時(shí)時(shí)鐘可用來日期及時(shí)分秒計(jì)時(shí)、定時(shí)報(bào)警等。其計(jì)數(shù)時(shí)鐘是通過對Fpclk進(jìn)行分頻得到,它的基準(zhǔn)時(shí)鐘分頻器允許調(diào)節(jié)任何頻率高于65.536KHZ的外設(shè)時(shí)鐘源,并產(chǎn)生一個(gè)32.768KHZ的基準(zhǔn)時(shí)鐘。特性

①帶日歷和時(shí)鐘功能;②超低功耗設(shè)計(jì);③提供秒、分、小時(shí)、日、月、年和星期;④可編程基準(zhǔn)時(shí)鐘分頻允許調(diào)節(jié)RTC以適應(yīng)不同的晶振頻率。

1.2

實(shí)時(shí)時(shí)鐘模塊的內(nèi)部結(jié)構(gòu)實(shí)時(shí)時(shí)鐘的時(shí)鐘源pclk在經(jīng)過基準(zhǔn)時(shí)鐘分頻器分頻后,調(diào)整出頻率為32.768KHz的基準(zhǔn)時(shí)鐘clk32k,然CTC對時(shí)鐘節(jié)拍計(jì)數(shù)進(jìn)行計(jì)數(shù)。CTC每秒計(jì)數(shù)32768個(gè)時(shí)鐘,用于產(chǎn)生秒的時(shí)鐘節(jié)拍clk1Hz。當(dāng)秒脈沖信號clk有效時(shí),時(shí)間計(jì)數(shù)寄存器組將會實(shí)時(shí)更新。當(dāng)報(bào)警寄存器組中某個(gè)寄存器與時(shí)間計(jì)數(shù)寄存器組中相對應(yīng)的寄存器經(jīng)比較器比較相等后,將產(chǎn)生相應(yīng)的中斷標(biāo)志。1.3

實(shí)時(shí)時(shí)鐘模塊的內(nèi)部工作原理

RTC可以產(chǎn)生兩種中斷: 1、計(jì)數(shù)器增量中斷; 2、報(bào)警寄存器中斷。1.增量中斷CIIR中的每個(gè)位都對應(yīng)一個(gè)時(shí)間計(jì)數(shù)器。如果CIIR使能某一個(gè)特定的計(jì)數(shù)器,那么該計(jì)數(shù)器的值每增加一次就產(chǎn)生一個(gè)中斷。增量中斷控制原理圖1.4

實(shí)時(shí)時(shí)鐘模塊RTC的中斷2.報(bào)警中斷報(bào)警寄存器允許用戶設(shè)定產(chǎn)生中斷的日期和/或時(shí)間。如果所有非屏蔽報(bào)警寄存器與它們對應(yīng)的時(shí)間計(jì)數(shù)器的值相匹配時(shí),則會產(chǎn)生中斷。報(bào)警器中斷控制原理圖實(shí)時(shí)時(shí)鐘模塊RTC的中斷1.5RTC基本操作方法 實(shí)時(shí)時(shí)鐘的時(shí)鐘源是由外設(shè)時(shí)鐘pclk通過基準(zhǔn)時(shí)鐘分頻器,調(diào)整出32768Hz的頻率,然后供給CTC計(jì)數(shù)器。它每秒計(jì)數(shù)32768個(gè)時(shí)鐘,到1秒計(jì)數(shù)完成之后,就會更新完整時(shí)間寄存器和RTC時(shí)間寄存器。1.6RTC基本操作步驟1、設(shè)置RTC基準(zhǔn)時(shí)鐘分頻寄存器PREINT和基準(zhǔn)時(shí)鐘分頻寄存器PREFRAC;其值計(jì)算如下:

PREIN=int(pclk/32768)-1PREFRAC=pclk–(PREIN+1)×327682、初始化RTC時(shí)間寄存器的值;3、報(bào)警中斷設(shè)置;4、啟動RTC,即CCR的CLKEN位置位;5、讀取完整時(shí)間計(jì)數(shù)器的值,或等待中斷。RTC相關(guān)寄存器介紹組名寄存器名描述混合寄存器組ILR中斷位置寄存器CTC時(shí)鐘節(jié)拍計(jì)數(shù)器(只讀)CCR時(shí)鐘控制寄存器CIIR計(jì)數(shù)器遞增中斷寄存器AMR報(bào)警屏蔽寄存器CTIME0~2完整時(shí)間寄存器0~2時(shí)間計(jì)數(shù)器組SEC、MIN、HOUR秒寄存器、分寄存器、小時(shí)寄存器DOM、DOY日期(月)寄存器、日期(年)寄存器DOW、MONTH、YEAR星期寄存器、月寄存器、年寄存器報(bào)警寄存器組ALSEC、ALMIN、ALHOUR秒報(bào)警值、分報(bào)警值、小時(shí)報(bào)警值A(chǔ)LDOM、ALDOY日期(月)報(bào)警值、日期(年)報(bào)警值A(chǔ)LDOW、ALMONTH、ALYEAR星期報(bào)警值、月報(bào)警值、年報(bào)警值基準(zhǔn)時(shí)間分頻器PREINT預(yù)分頻值

,整數(shù)部分PREFRAC預(yù)分頻值

,小數(shù)部分1.7實(shí)驗(yàn)?zāi)康呐c內(nèi)容實(shí)驗(yàn)?zāi)康模?/p>

學(xué)會LPC2220內(nèi)部模塊RTC的使用。實(shí)驗(yàn)內(nèi)容:

設(shè)置LPC2220的RTC模塊,初始化實(shí)時(shí)時(shí)鐘。將分值、秒值在數(shù)碼管中實(shí)時(shí)顯示,當(dāng)分值增加時(shí)蜂鳴器蜂鳴報(bào)警。1.8實(shí)驗(yàn)參考程序---結(jié)構(gòu)體定義為了方便時(shí)間的讀取和設(shè)置,我們定義了一個(gè)TIME結(jié)構(gòu)體,結(jié)構(gòu)體中包含了年、月、日、周、時(shí)、分、秒各項(xiàng)信息。同時(shí)還定義了Set_Time和Get_Time兩個(gè)函數(shù)。typedef

struct{uint16year; //年

uint16mon; //月

uint16day; //日

uint16dow; //周

uint8 hour; //時(shí)

uint8 min; //分

uint8 sec; //秒

}TIME;/****************************************************************************名稱:SET_Time(TIME*time)*功能:設(shè)置時(shí)間。*入口參數(shù):time保存時(shí)間日期的TIME結(jié)構(gòu)變量的指針****************************************************************************/voidSet_Time(TIME*time){ CCR=0x00; YEAR=time->year; //初始化年

MONTH=time->mon; //初始化月

DOM=time->day; //初始化日

DOW=time->dow; //初始化星期

HOUR=time->hour; //初始化小時(shí)

MIN=time->min; //初始化分

SEC=time->sec; //初始化秒

CCR=0x01; //啟動RTC}實(shí)驗(yàn)參考程序---SET_Time函數(shù)/****************************************************************************名稱:GetTime(TIME*t)*功能:讀取RTC時(shí)鐘值。*入口參數(shù):t保存日期的TIME結(jié)構(gòu)變量的指針****************************************************************************/voidGetTime(TIME*t){ t->year=YEAR; t->mon=MONTH; t->day=DOM; t->dow=DOW; t->hour=HOUR; t->min=MIN; t->sec=SEC;}實(shí)驗(yàn)參考程序---GetTime函數(shù)/*********************************************************************文件名:RTC_IRQ()*功能:中斷服務(wù)程序,當(dāng)分值增加時(shí)蜂鳴器蜂鳴報(bào)警********************************************************************/void__irq

RTC_IRQ(void){

if((CIIR&0x02)!=0) { //------------分報(bào)警--------- BEEON(); //打開蜂鳴器

DelayMS(1); BEEOFF(); } while((ILR&0x01)!=0) //清除中斷標(biāo)志

ILR=0x01;

VICVectAddr=0; //中斷結(jié)束}實(shí)驗(yàn)參考程序---中斷服務(wù)子程序/*********************************************************************文件名:RTC_Init()*功能:RTC模塊初始化函數(shù)********************************************************************/{ PREINT=Fpclk/32768-1;//設(shè)置基準(zhǔn)時(shí)鐘分頻器

PREFRAC=Fpclk-(Fpclk/32768)*32768; AMR=0xff; //屏蔽報(bào)警

CIIR=0x02; //設(shè)置分值的增量產(chǎn)生一次中斷

ILR=0x03; //清除中斷標(biāo)志

VICIntSelect=0x00000000; //設(shè)置所有的通道為IRQ中斷

VICVectCntl5=0x20|13; //實(shí)時(shí)時(shí)鐘中斷分配到IRQ5 VICVectAddr5=(uint32)RTC_IRQ; //設(shè)置按鍵中斷服務(wù)程序的地址

VICIntEnable=VICIntEnable|(1<<13);//使能實(shí)時(shí)時(shí)鐘中斷}實(shí)驗(yàn)參考程序---RTC初始化子程序/***************************************************************************名稱:main()*功能:使能實(shí)時(shí)時(shí)鐘,控制數(shù)碼管顯示實(shí)時(shí)時(shí)鐘的值*入口參數(shù):無*出口參數(shù):無*************************************************************************/int

main(void){ uint32 data; TIMEa,b;

NumbTube_Init(); //數(shù)碼管初始化

b.year=2008;b.mon=8;b.day=2;b.dow=5; //2008年、8月、8日、星期5

b.hour=20;b.min=0;b.sec=0; //20點(diǎn)、0分、0秒

Set_Time(&b); //設(shè)置時(shí)鐘值

while(1) {

GetTime(&a); //取得當(dāng)前RTC各個(gè)寄存器的值

data=(a.min*100)+a.sec; NumbTube_Display(data,3); //顯示分,秒

} return(0);}實(shí)驗(yàn)參考程序---主程序1.9實(shí)驗(yàn)步驟與結(jié)果實(shí)驗(yàn)的步驟和結(jié)果如下:1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實(shí)驗(yàn)的程序代碼,編譯鏈接整個(gè)工程。如果編譯通過則在相應(yīng)的目錄下產(chǎn)生我們所需要的二進(jìn)制文件和可執(zhí)行映像文件。2.運(yùn)行H-Flasher軟件,將產(chǎn)生的二進(jìn)制文件燒寫到實(shí)驗(yàn)板上。3.打開AXD調(diào)試環(huán)境,并加載剛剛產(chǎn)生的可執(zhí)行映像文件進(jìn)行調(diào)試。4.單擊全速運(yùn)行按鈕(快捷鍵F5),程序會運(yùn)行并停留在main()主函數(shù)處;繼續(xù)全速運(yùn)行。觀察實(shí)驗(yàn)板,實(shí)驗(yàn)板實(shí)時(shí)將時(shí)間進(jìn)行刷新并顯示。五、看門狗模塊看門狗,又叫WatchDogTimer,也是一個(gè)定時(shí)器電路??撮T狗的作用是當(dāng)系統(tǒng)出現(xiàn)程序進(jìn)入死循環(huán),或者程序跑飛等情況時(shí),它能夠自動復(fù)位整個(gè)系統(tǒng)。看門狗是利用一個(gè)定時(shí)器來監(jiān)控主程序的運(yùn)行。在主程序運(yùn)行之前,我們對定時(shí)器設(shè)置了一個(gè)定時(shí)時(shí)間T并開始倒計(jì)時(shí);在主程序必須要在定時(shí)時(shí)間T內(nèi)完成并對定時(shí)器進(jìn)行復(fù)位。如果出現(xiàn)死循環(huán),或者說PC運(yùn)行指針跑飛了,當(dāng)?shù)褂?jì)時(shí)為零之后就會給出一個(gè)復(fù)位信號到MCU,使MCU復(fù)位。一、LPC2220的看門狗模塊自帶的看門狗的特性: 1、帶內(nèi)部預(yù)分頻器的可編程32位定時(shí)器; 2、如果沒有周期性重裝,則產(chǎn)生片內(nèi)復(fù)位; 3、看門狗由軟件使能,但只能由硬件復(fù)位或看門狗復(fù)位/

中斷來禁止看門狗; 4、錯(cuò)誤/不完整的喂狗時(shí)序會導(dǎo)致復(fù)位/中斷; 5、具有指示看門狗復(fù)位的標(biāo)志; 6、可選擇Tpclk×4倍數(shù)的時(shí)間周期:最小看門狗間隔為(Tpclk×4×256),最大間隔為(Tpclk×4×232)。先給WDTC寄存器設(shè)置好32位倒計(jì)數(shù)器的值,最小值為OxFF;然后,對看門狗進(jìn)行一次正確的喂狗,此時(shí)如果置位了WDEN位,那么就可以使能計(jì)數(shù)器了??撮T狗使能之后,32位倒計(jì)數(shù)器開始倒計(jì)時(shí),可以通過訪問當(dāng)前WDT計(jì)數(shù)器來查看計(jì)數(shù)器的值;在倒計(jì)數(shù)器溢出之前,如果能正確喂狗,倒計(jì)數(shù)器復(fù)位到初始值,重新開始倒計(jì)數(shù),依此循環(huán);但如果計(jì)數(shù)器正在計(jì)數(shù)時(shí),處理器執(zhí)行了一次錯(cuò)誤的喂狗,或者倒計(jì)數(shù)器溢出,則看門狗會復(fù)位處理器或者產(chǎn)生中斷。1.1看門狗模塊工作過程1.2看門狗使用方法

1.在WDTC寄存器中設(shè)置看門狗定時(shí)器的固定裝載值;2.在WDMOD寄存器中設(shè)置模式,并使能看門狗;3.通過向WDFEED寄存器順序?qū)懭隣xAA和Ox55啟動看門狗;4.在看門狗向下溢出之前應(yīng)當(dāng)再次喂狗以防止復(fù)位/中斷;1.3看門狗寄存器描述名稱描述復(fù)位值WDMOD看門狗模式寄存器。該寄存器包含看門狗定時(shí)器的基本模式和狀態(tài)0WDTC看門狗定時(shí)器常數(shù)寄存器。該寄存器決定超時(shí)值0xFFWDFEED看門狗喂狗寄存器。(先為0xAA,然后為0x55)NAWDTV看門狗定時(shí)器值寄存器(當(dāng)前定時(shí)器值)0xFF1.4實(shí)驗(yàn)?zāi)康呐c內(nèi)容實(shí)驗(yàn)?zāi)康模簩W(xué)會LPC2220內(nèi)部模塊看門狗的使用。實(shí)驗(yàn)內(nèi)容:設(shè)置LPC2220的看門狗模塊,然后程序進(jìn)入死循環(huán),等待WDT復(fù)位。1.5實(shí)驗(yàn)參考程序#define WDTFeed() WDFEED=0xAA; WDFEED=0x55 //喂狗程序/***************************************************************************名稱:main()*功能:運(yùn)行WDT,并控制蜂鳴器連續(xù)叫三聲(每一聲的延續(xù)時(shí)間為1秒,間隔為1秒)* 然后處理器進(jìn)入死循環(huán),等待WDT復(fù)位(等待的時(shí)間為8秒)**************************************************************************/int

main(void){ uint8i; IO1DIR=IO1DIR|BEE; //設(shè)置控制蜂鳴器引腳P1.24為I/O輸出

WDTC=Fpclk*2; //WDT計(jì)數(shù)時(shí)間為2*4=8秒

WDMOD=0x03; //設(shè)置看門狗溢出復(fù)位,并啟動WDT

WDTFeed(); //進(jìn)行喂狗操作,把WDTC的值裝入看門狗定時(shí)器

for(i=0;i<3;i++) //連續(xù)叫三聲

{ BEEON();DelayMS(1); //延時(shí)為1毫秒

BEEOFF();DelayMS(1); }while(1); //死循環(huán)

return(0);}1.6實(shí)驗(yàn)步驟與結(jié)果

單擊全速運(yùn)行按鈕(快捷鍵F5),程序會運(yùn)行并停留在main()主函數(shù)處;繼續(xù)全速運(yùn)行,蜂鳴器會叫3聲,然后進(jìn)入死循環(huán)。當(dāng)?shù)竭_(dá)8秒鐘后,程序會重新復(fù)位并運(yùn)行。六、低功耗實(shí)驗(yàn)這對于便攜式和移動性較強(qiáng)的嵌入式產(chǎn)品尤其重要。這些產(chǎn)品不是一直都有充足的電源供應(yīng),往往是靠電池來供電,設(shè)計(jì)人員從每一個(gè)細(xì)節(jié)來考慮降低功率消耗,從而盡可能地延長電池使用時(shí)間。在嵌入式系統(tǒng)的設(shè)計(jì)中,低功耗設(shè)計(jì)是許多設(shè)計(jì)人員必須面對的問題:

一方面要求供電設(shè)備的功耗盡可能的低;

一方面希望它能實(shí)現(xiàn)更多的功能。

兩個(gè)方面綜合考慮:硬件設(shè)計(jì)和軟件設(shè)計(jì)。從硬件設(shè)計(jì)考慮降低功耗問題,主要有三條途徑:

1、選擇合適的處理器;

2、接口電路的合理設(shè)計(jì);

3、處理器支持的動態(tài)電源管理。設(shè)計(jì)者仍需盡量將應(yīng)用的低功耗特性反映在軟件中,以避免那些“看不見”的功耗損失。主要有如下三條途徑

1、用中斷代替查詢

2、用“宏”代替“子程序”

3、盡量減少CPU的運(yùn)算量。降低功耗的途徑1.1LPC2220中的功率控制---節(jié)電模式LPC2220支持兩種節(jié)電模式:空閑模式和掉電模式。1.空閑模式 在空閑模式下,指令的執(zhí)行被掛起直到復(fù)位或者中斷,但系統(tǒng)的時(shí)鐘cclk一直有效;通過定時(shí)器的定時(shí)器中斷可使處理器恢復(fù)工作;空閑模式使處理器、存儲系統(tǒng)和相關(guān)的控制器以及內(nèi)部總線不再消耗功率。2.掉電模式 在掉電模式下,振蕩器關(guān)閉,芯片沒有任何內(nèi)部時(shí)鐘。處理器狀態(tài)、寄存器和外設(shè)寄存器以及內(nèi)部的SRAM值在掉電模式下被保持。復(fù)位或者特定的不需要時(shí)鐘仍能工作的中斷可使處理器恢復(fù)運(yùn)行。定時(shí)器中斷不能喚醒處理器。在掉電模式下芯片的功耗幾乎為零。LPC2220中的功率控制---節(jié)電模式節(jié)電模式控制寄存器PCON外設(shè)功率控制寄存器(PCONP)

LPC2220的功率控制---外設(shè)功率控制1.2實(shí)驗(yàn)?zāi)康呐c內(nèi)容實(shí)驗(yàn)?zāi)康模簩W(xué)會LPC2220內(nèi)部模塊低功耗的使用。實(shí)驗(yàn)內(nèi)容1:設(shè)置LPC2220的低功耗模塊,控制LPC2220進(jìn)入掉電模式,并允許外部中斷喚醒。每按一次中斷按鍵(位于實(shí)驗(yàn)板的右下角),芯片被喚醒一次。實(shí)驗(yàn)內(nèi)容2:設(shè)置LPC2220的低功耗模塊,控制處理器進(jìn)入空閑模式,當(dāng)有定時(shí)器中斷時(shí),芯片被重新喚醒。實(shí)驗(yàn)1參考程序/*********************************************************************名稱:main()*功能:蜂鳴器叫一聲,然后控制處理器進(jìn)入掉電模式,當(dāng)有外部中斷時(shí),喚醒處理器*********************************************************************/int

main(void){IO1DIR=IO1DIR|BEE; //設(shè)置控制蜂鳴器引腳P1.24為I/O輸出

PINSEL0=0x20000000; //設(shè)置I/O口連接,P0.14設(shè)置為EINT1EXTMODE=0x02; //EINT1使用邊沿觸發(fā)

EXTPOLAR=0x00; //EINT1下降沿有效

EXTINT=0x0F; //清除外部中斷標(biāo)志

VICIntEnable=VICIntEnable|0x00008000; //使能EINT1中斷

EXTWAKE=0x02; //允許外部中斷1喚醒掉電的CPUPCONP=0x0800; //EMC使能,關(guān)閉其他的片內(nèi)外設(shè)

while(1) {BeeON(); //控制蜂鳴器叫一聲,時(shí)間為1毫秒

DelayMS(2);

BeeOFF();PCON=0x02; //系統(tǒng)進(jìn)入掉電模式

}return(0);}實(shí)驗(yàn)1步驟與結(jié)果1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實(shí)驗(yàn)的程序代碼,編譯鏈接整個(gè)工程。如果編譯通過則在相應(yīng)的目錄下產(chǎn)生我們所需要的二進(jìn)制文件和可執(zhí)行映像文件。2.運(yùn)行H-Flasher軟件,將產(chǎn)生的二進(jìn)制文件燒寫到實(shí)驗(yàn)板上。3.打開AXD調(diào)試環(huán)境,并加載剛剛產(chǎn)生的可執(zhí)行映像文件進(jìn)行調(diào)試。4.單擊全速運(yùn)行按鈕(快捷鍵F5),程序會運(yùn)行并停留在main()主函數(shù)處;繼續(xù)全速運(yùn)行,蜂鳴器會叫1聲,然后進(jìn)入掉電模式,一直等待外部中斷按鍵(實(shí)驗(yàn)板中的標(biāo)號為“key”按鍵)程序才喚醒。每喚醒一次,蜂鳴器響一次。實(shí)驗(yàn)2參考程序/*********************************************************************名稱:main()*功能:蜂鳴器首先叫兩聲,然后處理器進(jìn)入空閑模式。當(dāng)有定時(shí)器0定時(shí)2S結(jié)束后,*定時(shí)器產(chǎn)生中斷,重新喚醒處理器。*********************************************************************/int

main(void){IO1DIR=IO1DIR|BEE; //設(shè)置控制蜂鳴器引腳P1.24為I/O輸出

T0TC=0; //定時(shí)器設(shè)置為0T0PR=0; //時(shí)鐘不分頻

T0MCR=0x03; //設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志

T0MR0=Fpclk*2; //設(shè)置2S匹配值

T0TCR=0x01; //啟動定時(shí)器0while(1) {BeeON();DelayMS(2);BeeOFF(); DelayMS(2);

BeeON();DelayMS(2);BeeOFF(); PCON=1; //系統(tǒng)進(jìn)入空閑模式

}return(0);}實(shí)驗(yàn)2步驟與結(jié)果1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實(shí)驗(yàn)的程序代碼,編譯鏈接整個(gè)工程。如果編譯通過則在相應(yīng)的目錄下產(chǎn)生我們所需要的二進(jìn)制文件和可執(zhí)行映像文件。2.運(yùn)行H-Flasher軟件,將產(chǎn)生的二進(jìn)制文件燒寫到實(shí)驗(yàn)板上。3.打開AXD調(diào)試環(huán)境,并加載剛剛產(chǎn)生的可執(zhí)行映像文件進(jìn)行調(diào)試。4.單擊全速運(yùn)行按鈕(快捷鍵F5),程序會運(yùn)行并停留在main()主函數(shù)處;繼續(xù)全速運(yùn)行,蜂鳴器會叫兩聲,芯片然后進(jìn)入低功耗模式。定時(shí)器定時(shí)2秒后會產(chǎn)生一次中斷,定時(shí)器的中斷將自動喚醒芯片,程序得到繼續(xù)運(yùn)行的機(jī)會。實(shí)驗(yàn)現(xiàn)象是:每2秒喚醒一次,蜂鳴器響2次。七、附錄---中斷功能中斷的概念

中斷的目的是為了暫停主程序的運(yùn)行,先去執(zhí)行中斷服務(wù)程序。在中斷源提出中斷請求后,嵌入式系統(tǒng)執(zhí)行完當(dāng)前指令便進(jìn)行中斷響應(yīng),一旦中斷服務(wù)程序執(zhí)行完畢后,仍須返回到主程序被中斷處繼續(xù)執(zhí)行原先程序,其過程如圖所示:中斷源分為兩種:

1、外部中斷源: 由外部電路提供中斷的來源稱為外部中斷源。

2、內(nèi)部中斷源: 引起ARM芯片執(zhí)行指令或內(nèi)部功能模塊所引起的中斷來源稱為內(nèi)部中斷源。中斷優(yōu)先級別 ARM芯片把中斷優(yōu)先級別劃分為3大類: 1、FIQ:具有最高優(yōu)先級

2、向量IRQ:具有中等優(yōu)先級

3、非向量IRQ:優(yōu)先級最低

1.1中斷源和中斷優(yōu)先級

1.2

VIC向量中斷控制器

VIC內(nèi)部包含了眾多的寄存器用來記錄哪個(gè)中斷使能、中斷優(yōu)先級分配、中斷狀態(tài)、向量IRQ的優(yōu)先級別分配與服務(wù)程序地址等等。中斷源與VIC連接示意圖模塊標(biāo)識VIC通道號模塊標(biāo)識VIC通道號WDT看門狗中斷(WDINT)0PWM0匹配0~6(MR0~MR6)8-保留軟件中斷1I2CSI(狀態(tài)改變)9ARM內(nèi)核EmbeddedICE,DbgCommRx2SPI0SPI中斷標(biāo)志(SPIF)模式錯(cuò)誤(MODF)10ARM內(nèi)核EmbeddedICE,DbgCommTx3定時(shí)器0匹配0~3(MR0~MR3)捕獲0~3(CR0~CR3)4SPI0SPI中斷標(biāo)志(SPIF)模式錯(cuò)誤(MODF)11定時(shí)器1匹配0~3(MR0~MR3)捕獲0~3(CR0~CR3)5PLLPLL鎖定(PLOCK)12UART0Rx線狀態(tài)(RLS)發(fā)送保持寄存器空(THRE)Rx數(shù)據(jù)可用(RDA)字符超時(shí)指示(CTI)6RTC計(jì)數(shù)器增加(RTCCIF)報(bào)警(RTCALF)13UART1Rx線狀態(tài)(RLS)發(fā)送保持寄存器空(THRE)Rx數(shù)據(jù)可用(RDA)字符超時(shí)指示(CTI)Modem狀態(tài)中斷(MSI)7系統(tǒng)控制外部中斷0(EINT0)14系統(tǒng)控制外部中斷1(EINT1)15系統(tǒng)控制外部中斷2(EINT2)16系統(tǒng)控制外部中斷3(EINT3)17A/DA/D轉(zhuǎn)換器18LPC2220對每個(gè)中斷源采用唯一的VIC通道號來標(biāo)識,見下表所列:

1.3

LPC2220的中斷處理流程 LPC2220支持兩種中斷:IRQ中斷和FIQ中斷。 當(dāng)產(chǎn)生IRQ中斷時(shí),微控制器會暫停用戶程序,然后切換到IRQ模式。執(zhí)行完中斷服務(wù)程序后運(yùn)行指針返回到用戶程序的斷點(diǎn)。啟動代碼中的異常向量表ResetLDRPC,ResetAddrLDRPC,UndefinedAddrLDRPC,SWI_AddrLDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0xb9205f80LDRPC,[PC,#-0xff0] ①LDRPC,FIQ_Addr ②ResetAddr DCDResetInitUndefinedAddr DCDUndefinedSWI_Addr DCDSoftwareInterruptPrefetchAddr DCDPrefetchAbortDataAbortAddr DCDDataAbortNouse DCD0IRQ_Addr DCD0FIQ_Addr DCDFIQ_Handler ③1.4VIC的寄存器描述名稱描述訪問復(fù)位值VICIRQStatusIRQ狀態(tài)寄存器。該寄存器讀出定義為IRQ并使能的中斷的狀態(tài)RO0VICFIQStatusFIQ狀態(tài)寄存器。該寄存器讀出定義為FIQ并使能的中斷的狀態(tài)RO0VICRawIntr所有中斷的狀態(tài)寄存器。該寄存器讀出32個(gè)中斷請求/軟件中斷的狀態(tài),不管中斷是否使能或分類RO0VICIntSelect中斷選擇寄存器。該寄存器將32個(gè)中斷請求的每個(gè)都分配為FIQ或IRQR/W0VICIntEnable中斷使能寄存器。該寄存器控制32個(gè)中斷請求和軟件中斷的使能R/W0VICIntEnClr中斷使能清零寄存器。該寄存器允許軟件將中斷使能寄存器中的一個(gè)或多個(gè)位清零W0VICSoftInt軟件中斷寄存器。該寄存器的內(nèi)容與32個(gè)不同外設(shè)的中斷請求相“或”來產(chǎn)生中斷R/W0VICSoftIntClear軟件中斷清零寄存器。該寄存器允許軟件將軟件中斷寄存器中的一個(gè)或多個(gè)位清零W0VICProtection保護(hù)使能寄存器。該寄存器可以限制非特權(quán)模式下的軟件對VIC寄存器的訪問R/W0VICVectAddrIRQ中斷服務(wù)程序地址寄存器。當(dāng)發(fā)生一個(gè)IRQ中斷時(shí),IRQ服務(wù)程序可讀出該寄存器并跳轉(zhuǎn)到讀出的地址R/W0VICDefVectAddr默認(rèn)向量地址寄存器。該寄存器保存了非向量IRQ的中斷服務(wù)程序(ISR)地址R/W0VICVectAddr0~15向量地址寄存器0~15。向量地址寄存器0~15保存了16個(gè)向量IRQslot的中斷服務(wù)程序地址R/W0VICVectCntl0~15向量控制寄存器。向量控制寄存器0~15分別控制16個(gè)向量IRQslot中的一個(gè)。Slot0優(yōu)先級最高,而Slot15優(yōu)先級為最低R/W01.5中斷功能使用舉例

VIC操作方法:

1、首先設(shè)置IRQ/FIQ中斷;

2、然后設(shè)置向量中斷對應(yīng)的服務(wù)程序入口地址;

3、接著設(shè)置中斷允許。

VICIntSelect寄存器控制中斷源的IRQ或FIQ選擇,每一個(gè)中斷源與V

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論