




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章時鐘控制模塊一、概述二、定時/計數器模塊三、PWM模塊四、實時時鐘模塊五、看門狗模塊六、低功耗實驗七、附錄---中斷功能一、概述時鐘的概念:
時鐘就是一連串連續(xù)的、周期的和占空比固定的時鐘脈沖信號。時鐘的作用:
時鐘發(fā)生器提供給芯片一個連續(xù)的脈沖信號讓芯片完成一定任務。一種是利用內部的晶體振蕩器,我們稱之為振蕩模式,如圖(a)所示;另一種是使用外部振蕩源提供的脈沖信號,此為從屬模式,如圖(b)所示。(a)(b)1.1時鐘電路的設計方法LPC2000系列芯片的時鐘來源:
1、振蕩模式:使用外部晶體; 2、從屬模式:從XTAL1腳輸入占空比為1/2的時鐘信號。1.2LPC2220的時鐘外設功能模塊的時鐘pclk的得來: 高頻率的cclk經過一個分頻器分頻后的時鐘pclk作為其時鐘源。處理器的時鐘cclk的得來:Fosc經過PLL鎖相環(huán)模塊加以倍頻得到。二、定時/計數器模塊定時/計數器的功能
計數功能:
是指對外部脈沖信號進行計數,不需要基準時鐘。
定時功能:
功能需要用到某個基準時鐘,通過對基準時鐘的計數來完成定時功能。定時/計數器用途:
1)產生所需頻率的脈沖; 2)在頻率測量中的應用; 3)在累加計數中的應用; 4)定時/計數器在計時中的應用。計數器在累加計數原理框圖LPC2220系列有定時器0和定時器l兩個定時器。兩個定時器除了外設基地址不相同以外,其他都相同。定時器對外設時鐘pclk周期進行計數;當計數數值等于匹配寄存器的值時,可以產生中斷或執(zhí)行其它動作;利用這一特性可實現定時功能。它還包括捕獲輸入,用于在輸入信號發(fā)生跳變時捕獲定時器值,并可選擇產生中斷。利用這一特性可實現對外部脈沖進行計數。1.1LPC2220的定時器模塊 特性:帶可編程32位預分頻器的32位定時器/計數器。具有4路捕獲通道??蛇x擇使捕獲事件產生中斷,當輸入信號跳變時可取得定時器的瞬時值。具有4個32位匹配寄存器,并有4個對應于匹配寄存器的外部輸出。 功能:1、匹配輸出2、捕獲輸入1.2定時器的特性與功能當MR0~MR3與定時器計數器TC發(fā)生匹配時,內核將會按照MCR設置的方法產生中斷、停止或復位TC等;根據EMR的設置控制匹配后在相應引腳輸出高電平、低電平或者執(zhí)行電平翻轉等。定時器---匹配輸出當有捕獲觸發(fā)信號產生時,捕獲電路將會立即把當時的定時器值TC復制到對應觸發(fā)通道的捕獲寄存器CR0~CR3中。通過設置CCR可將捕獲設置為上升沿觸發(fā)、下降沿觸發(fā)、雙邊沿觸發(fā),并可設置為捕獲中斷。定時器---捕獲輸入1.3定時器的內部結構1定時器的內部結構232位定時器TC的計數頻率由外設時鐘pclk輸入經過PR進行分頻控制得到,PR指定預分頻數的最大值;PC為分頻計數器,當PC累加到等于PR值時,TC+1,且PC從0開始重新計數;TCR控制定時器的啟動/停止、計數復位。當定時器TC與匹配寄存器MR0~MR3發(fā)生匹配時,將會按照MCR設置的方法產生中斷、停止或復位TC等。1.4寄存器描述
標號名稱描述訪問復位值TxIR中斷寄存器可以寫IR來清除中斷。可讀取IR來識別哪個中斷被掛起R/W0TxTCR定時器控制寄存器TCR用于控制定時器計數器功能。定時器計數器可通過TCR禁止或復位R/W0TxTC定時器計數器32位的TC每經過PR+1個pclk周期加1。TC通過TCR進行控制0TxPR預分頻寄存器保存預分頻計數的最大值PRR/W0TxPC預分頻計數器32位的PC每經過PR+1個pclk時,TC加1R/W0TxMCR匹配控制寄存器MCR用于控制在匹配時是否產生中斷或復位TCR/W0TxMR(0~3)匹配寄存器(0~3)可通過MCR設定在匹配時復位TC,停止TC和PC和/或產生中斷R/W0TxCCR捕獲控制寄存器它控制用于用于裝載捕獲寄存器的捕獲輸入邊沿以及在發(fā)生捕獲時是否產生中斷R/W0TxCR(0~3)捕獲寄存器(0~3)當CAP(0.0~0.3)或CAP(1.0~1.3)產生捕獲事件時,CR(0~3)裝載TC的值RO0TxEMR外部匹配寄存器EMR控制外部匹配引腳MAT0.0~MAT0.3或MAT1.0~MAT1.3RW0中斷寄存器
中斷寄存器包含了4個位用于匹配中斷,4個位用于捕獲中斷。IR功能描述復位值0MR0中斷匹配通道0的中斷標志01MR1中斷匹配通道1的中斷標志02MR2中斷匹配通道2的中斷標志03MR3中斷匹配通道3的中斷標志04CR0中斷捕獲通道0事件的中斷標志05CR1中斷捕獲通道1事件的中斷標志06CR2中斷捕獲通道2事件的中斷標志07CR3中斷捕獲通道3事件的中斷標志01.5定時器的操作方法 ①設置定時計數器的時鐘頻率,定時器計數時鐘頻率計算公式如下: 計數時鐘頻率=Fpclk/(PR+1) ②設置定時器的工作模式。 ③若使用定時器的相關中斷,則設置VIC中斷使能寄存器,使能中斷; ④設置TCR,啟動定時器定時。1.6實驗目的與內容實驗1:定時器定時輸出
目的:學會LPC2220內部模塊定時器的使用與其定時功能的設置。 內容:利用LPC2220的定時器0定時,5秒時間到則控制蜂鳴器叫一聲。實驗2:定時器捕獲輸入 目的:學會LPC2220內部模塊定時器的匹配輸出與捕獲輸入的使用。 內容:首先,把定時器0的匹配輸出來產生脈沖波(借鑒實驗1);同時,匹配輸出(P0.22)輸入到捕獲輸入(P0.27)中。每發(fā)生一次捕獲事件,就對發(fā)生的次數進行統計,并將統計的次數在數碼管中顯示。實驗1參考程序/***************************************************************************名稱:__irq
TimeO_IRQ()*功能:定時器0中斷服務子程序(控制蜂鳴器鳴叫)。*************************************************************************/void__irq
TimeO_IRQ(void){ if((IO1PIN&BEE)==0) BEEON(); //打開蜂鳴器
else BEEOFF(); //關閉蜂鳴器
T0IR=0x01; //清除中斷標志
VICVectAddr=0x00; //中斷結束}/*****************************************************************************名稱:TimeO_Init()*功能:初始化定時器0模塊,并開啟定時器0的中斷功能****************************************************************************/voidTime0_Init(void){ T0TC=0; //定時器計數器設置為0 T0PR=0; //時鐘不分頻
T0MCR=0x03; //設置T0MR0匹配后復位T0TC,并產生中斷標志
T0MR0=Fpclk*5; //設置5s匹配值
T0IR=0x01; //清除中斷標志
T0TCR=0x03; //啟動定時器0 /*設置定時器0中斷*/
VICIntSelect=0x00; //所有中斷設置為向量中斷
VICVectCntl0=0x24; //定時器0中斷分配最高優(yōu)先級
VICVectAddr0=(uint32)TimeO_IRQ; //設置中斷向量地址
VICIntEnable=0x00000010; //使能定時器0中斷}實驗1參考程序/*****************************************************************************名稱:main()*功能:控制定時器0,使之產生5秒的延時*入口參數:無*出口參數:無****************************************************************************/int
main(void){ IO1DIR=IO1DIR|BEE;//設置控制蜂鳴器引腳P1.24為I/O輸出
Time0_Init(); //定時器0初始化
while(1); //死循環(huán)
return(0);}實驗1參考主程序volatileuint32count;/***************************************************************************名稱:__irqTime0_IRQ()*功能:定時器0中斷服務子程序(計數值加1)。*************************************************************************/void__irqTime0_IRQ(void){ count++; T0IR=0xff; //清除中斷標志
VICVectAddr=0x00; //中斷結束}實驗2參考子程序/*****************************************************************************名稱:Read()*功能:讀取當前計數值。****************************************************************************/uint8Read(){
return(count);} 定時器讀取當前計數值程序定時器初始化函數/*****************************************************************************名稱:Time0_Init()*功能:初始化定時器0.****************************************************************************/voidTime0_Init(void){
T0TC=0; //定時器0計數器清0 T0PR=0; //時鐘不分頻
T0MCR=0x02; //設置T0MR0匹配后復位T0TC,但不產生中斷標志
T0MR0=Fpclk*5; //設置5s匹配值
T0CCR=0x028; //設置CAP0.1功能:上升沿有效,并產生中斷標志
T0IR=0xFF; //清除中斷標志
T0TCR=0x03; //啟動定時器1
/*設置定時器0中斷*/
VICIntSelect=0x00; //所有中斷設置為向量中斷
VICVectCntl0=0x24; //定時器0中斷分配最高優(yōu)先級Slot0 VICVectAddr0=(uint32)Time0_IRQ;//設置中斷向量地址
VICIntEnable=0x00000010; //使能定時器1中斷}/*****************************************************************************名稱:main()*功能:使能定時器0匹配輸出和捕獲輸入,并控制LED數碼管顯示捕獲值*入口參數:無*出口參數:無****************************************************************************/int
main(void){ PINSEL1=0x00403000;//設置P0.22引腳為MAT0.0匹配輸出功能,P0.27為CAP0.1捕獲輸入
count=0; Time0_Init(); //定時器0初始化
NumbTube_Init(); //數碼管初始化
while(1) NumbTube_Display(Read(),0);//顯示外部捕獲的次數
return(0);}實驗2參考主程序三、PWM模塊概述
PWM是PulseWidthModulation的縮寫,即脈沖寬度調制。PWM原理
PWM是一種對模擬信號電平進行數字編碼的方法。通過高分辨率計數器的使用,方波的占空比被調制,用來對一個具體模擬信號的電平進行編碼。等效的實現是基于采樣定理中的一個重要的結論。用不同寬度的矩形波(b)來代替正弦波(a),通過對矩形波的控制來模擬輸出不同頻率的正弦波。例如,把正弦半波N等分,看成N個相連的脈沖序列,寬度相等,但幅值不等;用矩形脈沖代替,等幅,不等寬,中點重合,面積(沖量)相等,寬度按正弦規(guī)律變化。正弦波等效的PWM波形如圖所示除了等效正弦波形,還可以等效成其他所需波形。根據PWM控制技術的特點,主要有以下8類等效方法:
1、相電壓控制PWM;
2、線電壓控制PWM;
3、電流控制PWM;
4、空間電壓矢量控制PWM[7];
5、矢量控制PWM[8];
6、直接轉矩控制PWM[8];
7、非線性控制PWM; 8、諧振軟開關PWM。
1.1PWM的應用及優(yōu)點
PWM的應用
WM控制技術廣泛的運用在從測量、通信到功率控制與變換的許多領域中。
優(yōu)點 ①從處理器到被控系統信號都是數字形式的,無需進行數模轉換; ②讓信號保持為數字形式可將噪聲影響降到最小1.2LPC2220的PWM模塊特性如下:
1、帶可編程32位預分頻器的32位定時器; 2、7個匹配寄存器,可實現6個PWM(PWM1~PWM6)輸出;
3、支持單邊沿控制和雙邊沿控制PWM輸出;
4、脈沖周期和寬度可以是任何的定時器計數值;
5、當不使能PWM模式,則可以作為一個標準的定時器。LPC2220的PWM模塊中一共有1個定時計數器和7個匹配寄存器。PWM功能建立在匹配器事件之上,定時計數器對外設時鐘進行計數,在達到指定的定時值時可選擇中斷或執(zhí)行其他的動作。單邊沿控制或雙邊沿控制: 單邊沿控制PWM輸出在每個周期T開始時總是為高電平; 雙邊沿控制PWM輸出可在一個周期T內的任何位置產生邊沿。不同占空比的單邊沿與正負脈沖雙邊沿的PWM輸出LPC2220的PWM模塊單邊沿控制PWM輸出每個單邊沿控制PWM輸出需要用到2個匹配寄存器。匹配寄存器PWMMR0控制PWM周期,另一個匹配寄存器來控制PWM邊沿的位置。所有單邊沿控制PWM輸出在PWM周期開始時都為高電平,在達到其匹配值都會變成低電平。
單邊沿控制PWM輸出示意圖雙邊沿控制PWM輸出每個雙邊沿控制PWM輸出需要用到3個匹配寄存器。PWMMR0匹配寄存器控制PWM周期,其他匹配寄存器控制2個PWM邊沿位置。置位匹配寄存器的值小于復位匹配寄存器的值,將在一個PWM周期中產生一個正脈沖;置位匹配寄存器的值大于復位匹配寄存器的值,將在一個PWM周期中產生一個負脈沖。PWM通道單邊沿PWM(PWMSELn=0)雙邊沿PWM(PWMSELn=1)置位復位置位復位1PWMMR0PWMMR1PWMMR0PWMMR12PWMMR0PWMMR2PWMMR1PWMMR23PWMMR0PWMMR3PWMMR2PWMMR34PWMMR0PWMMR4PWMMR3PWMMR45PWMMR0PWMMR5PWMMR4PWMMR56PWMMR0PWMMR6PWMMR5PWMMR6PWM通道的置位和復位寄存器1.3PWM內部結構介紹PWMTC的計數頻率由pclk時鐘信號經過PWMPR進行分頻控制得到;
PWMTCR控制定時器的啟動/停止、計數復位;PWMIR會設置相關中斷標志,若已打開中斷允許則會產生中斷。1.4PWM寄存器介紹PWM共有15個相關寄存器;4個與定時/計數器相關的寄存器;7個匹配寄存器;1個PWM中斷寄存器保存中斷標志;1個鎖存使能寄存器;2個控制寄存器。名稱描述訪問復位值PWMIRPWM中斷寄存器:可以寫IR來清除中斷。也可以讀取IR來識別哪個中斷被掛起R/W0PWMTCRPWM定時器控制寄存器:TCR用于控制定時器計數功能。定時器的計數器可以通過TCR禁止或復位R/W0PWMTCPWM定時器計數器:TC每經過PR+1個pclk周期加一。TC通過TCR進行控制R/W0PWMPRPWM預分頻寄存器:指定預分頻的最大值PRR/W0PWMPCPWM預分頻計數器:每當32位PC的值增加到等于PR的值時,TC加一R/W0PWMMCRPWM匹配控制寄存器:MCR用于控制在匹配時是否產生中斷或者復位TCR/W0PWMMR(0~6)PWM匹配寄存器(0~6):它們可以通過MCR設定在匹配時復位TC,停止TC和PC和/或產生中斷。R/W0PWMPCRPWM控制寄存器:使能PWM輸出并選擇PWM的通道類型為單邊沿或者是雙邊沿輸出R/W0PWMLERPWM鎖存使能寄存器:使能新的PWM匹配值R/W0PWM中斷寄存器(PWMIR)PWMIR功能描述復位值0PWMMR0中斷PWM匹配通道0的中斷標志01PWMMR1中斷PWM匹配通道1的中斷標志02PWMMR2中斷PWM匹配通道2的中斷標志03PWMMR3中斷PWM匹配通道3的中斷標志04~7保留用戶不要向該位寫入108PWMMR4中斷PWM匹配通道4的中斷標志09PWMMR5中斷PWM匹配通道5的中斷標志010PWMMR6中斷PWM匹配通道6的中斷標志01.5PWM的操作方法控制寄存器PWMMCR設置定時器比較匹配,PWMMR(0~6)寄存器與PWMTC計數器進行比較。當比較匹配時,將按照PWMMCR設置的方法產生中斷或復位PWMTC等。另外,PWMLER鎖存使能寄存器。比較匹配寄存器功能方框圖如下:1.6PWM基本操作步驟: 1、連接PWM功能引腳輸出; 2、設置PWM定時器的時鐘分頻值,得到所要的定時器時鐘; 3、設置比較匹配控制與相應的比較值; 4、設置PWM的輸出方式并允許PWM輸出及鎖存使能控制; 5、設置PWMTCR,啟動定時器,使能PWM; 6、運行過程中要更改比較值時,更改以后要設置鎖存使能。1.7實驗目的與內容實驗目的:學會LPC2220內部模塊PWM的使用。實驗內容:利用LPC2220的PWM模塊產生周期與占空比可調的脈沖波,觀察LED燈變化。實驗參考程序#defineCYCLE_DATA10*Fpclk//設置PWM的周期為10秒/**************************************************************************名稱:PWM5_SET(uint8DUTY_DATA)*功能:使用PWM5輸出占空比可調的PWM信號*參數:DUTY_DATA為占空比參數,取值為0~9,值越大占空比越小**************************************************************************/voidPWM5_SET(uint8DUTY_DATA){ PWMPR=0x00;//不分頻,計數頻率為Fpclk PWMMCR=0x02;//設置PWMMR0匹配時復位PWMTC PWMPCR=0x2000;//允許PWMMR5單邊沿輸出
PWMMR0=CYCLE_DATA;//設置PWM5的周期為10秒
PWMMR5=(10-DUTY_DATA)*Fpclk;//設置PWM5的占空比
PWMLER=0x21;//PWMMR0和PWMMR5鎖存
PWMTCR=0x09;//啟動定時器,PWM使能}/*****************************************************************************名稱:main()*功能:使用PWM5輸出占空比可調的PWM信號****************************************************************************/int
main(void){ uint8key; PINSEL1=(PINSEL1&0xfffff7ff)|0x00000400;//設置PWM5連接到P0.21引腳
KEY_Init(); //調用鍵盤初始化函數
PWM5_SET(1); //PWM5初始化為周期10秒,占空比1/10的脈沖波
while(1) { key=KEY_Read(); //讀取按鍵值給變量key
if((key>=0)&&(key=<9))PWM5_SET(key); //重新設置PWM5的占空比
} return(0);}1.8實驗步驟與結果
單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數處;繼續(xù)全速運行。
連接電路,將PWM插座的3腳連接到LED燈的插孔處,可以看到LED燈的閃爍。按下鍵盤上的1~9號按鍵,LED等的閃爍情況將發(fā)生相應的變化。四、實時時鐘模塊概念:
實時時鐘(RTC)是一種由晶體控制精度的向主系統提供時間和日期的器件。特性: 它能實時刷新時間與日期信息,還可以根據實際需要設置報警,鬧鈴等,功耗非常低,一般都在uW級。實時的應用:
實時時鐘得以廣泛應用在時鐘日歷,電子表,計算機,手機等領域。1.1LPC2220的實時時鐘模塊概述 LPC2220系列自帶的實時時鐘可用來日期及時分秒計時、定時報警等。其計數時鐘是通過對Fpclk進行分頻得到,它的基準時鐘分頻器允許調節(jié)任何頻率高于65.536KHZ的外設時鐘源,并產生一個32.768KHZ的基準時鐘。特性
①帶日歷和時鐘功能;②超低功耗設計;③提供秒、分、小時、日、月、年和星期;④可編程基準時鐘分頻允許調節(jié)RTC以適應不同的晶振頻率。
1.2
實時時鐘模塊的內部結構實時時鐘的時鐘源pclk在經過基準時鐘分頻器分頻后,調整出頻率為32.768KHz的基準時鐘clk32k,然CTC對時鐘節(jié)拍計數進行計數。CTC每秒計數32768個時鐘,用于產生秒的時鐘節(jié)拍clk1Hz。當秒脈沖信號clk有效時,時間計數寄存器組將會實時更新。當報警寄存器組中某個寄存器與時間計數寄存器組中相對應的寄存器經比較器比較相等后,將產生相應的中斷標志。1.3
實時時鐘模塊的內部工作原理
RTC可以產生兩種中斷: 1、計數器增量中斷; 2、報警寄存器中斷。1.增量中斷CIIR中的每個位都對應一個時間計數器。如果CIIR使能某一個特定的計數器,那么該計數器的值每增加一次就產生一個中斷。增量中斷控制原理圖1.4
實時時鐘模塊RTC的中斷2.報警中斷報警寄存器允許用戶設定產生中斷的日期和/或時間。如果所有非屏蔽報警寄存器與它們對應的時間計數器的值相匹配時,則會產生中斷。報警器中斷控制原理圖實時時鐘模塊RTC的中斷1.5RTC基本操作方法 實時時鐘的時鐘源是由外設時鐘pclk通過基準時鐘分頻器,調整出32768Hz的頻率,然后供給CTC計數器。它每秒計數32768個時鐘,到1秒計數完成之后,就會更新完整時間寄存器和RTC時間寄存器。1.6RTC基本操作步驟1、設置RTC基準時鐘分頻寄存器PREINT和基準時鐘分頻寄存器PREFRAC;其值計算如下:
PREIN=int(pclk/32768)-1PREFRAC=pclk–(PREIN+1)×327682、初始化RTC時間寄存器的值;3、報警中斷設置;4、啟動RTC,即CCR的CLKEN位置位;5、讀取完整時間計數器的值,或等待中斷。RTC相關寄存器介紹組名寄存器名描述混合寄存器組ILR中斷位置寄存器CTC時鐘節(jié)拍計數器(只讀)CCR時鐘控制寄存器CIIR計數器遞增中斷寄存器AMR報警屏蔽寄存器CTIME0~2完整時間寄存器0~2時間計數器組SEC、MIN、HOUR秒寄存器、分寄存器、小時寄存器DOM、DOY日期(月)寄存器、日期(年)寄存器DOW、MONTH、YEAR星期寄存器、月寄存器、年寄存器報警寄存器組ALSEC、ALMIN、ALHOUR秒報警值、分報警值、小時報警值ALDOM、ALDOY日期(月)報警值、日期(年)報警值ALDOW、ALMONTH、ALYEAR星期報警值、月報警值、年報警值基準時間分頻器PREINT預分頻值
,整數部分PREFRAC預分頻值
,小數部分1.7實驗目的與內容實驗目的:
學會LPC2220內部模塊RTC的使用。實驗內容:
設置LPC2220的RTC模塊,初始化實時時鐘。將分值、秒值在數碼管中實時顯示,當分值增加時蜂鳴器蜂鳴報警。1.8實驗參考程序---結構體定義為了方便時間的讀取和設置,我們定義了一個TIME結構體,結構體中包含了年、月、日、周、時、分、秒各項信息。同時還定義了Set_Time和Get_Time兩個函數。typedef
struct{uint16year; //年
uint16mon; //月
uint16day; //日
uint16dow; //周
uint8 hour; //時
uint8 min; //分
uint8 sec; //秒
}TIME;/****************************************************************************名稱:SET_Time(TIME*time)*功能:設置時間。*入口參數:time保存時間日期的TIME結構變量的指針****************************************************************************/voidSet_Time(TIME*time){ CCR=0x00; YEAR=time->year; //初始化年
MONTH=time->mon; //初始化月
DOM=time->day; //初始化日
DOW=time->dow; //初始化星期
HOUR=time->hour; //初始化小時
MIN=time->min; //初始化分
SEC=time->sec; //初始化秒
CCR=0x01; //啟動RTC}實驗參考程序---SET_Time函數/****************************************************************************名稱:GetTime(TIME*t)*功能:讀取RTC時鐘值。*入口參數:t保存日期的TIME結構變量的指針****************************************************************************/voidGetTime(TIME*t){ t->year=YEAR; t->mon=MONTH; t->day=DOM; t->dow=DOW; t->hour=HOUR; t->min=MIN; t->sec=SEC;}實驗參考程序---GetTime函數/*********************************************************************文件名:RTC_IRQ()*功能:中斷服務程序,當分值增加時蜂鳴器蜂鳴報警********************************************************************/void__irq
RTC_IRQ(void){
if((CIIR&0x02)!=0) { //------------分報警--------- BEEON(); //打開蜂鳴器
DelayMS(1); BEEOFF(); } while((ILR&0x01)!=0) //清除中斷標志
ILR=0x01;
VICVectAddr=0; //中斷結束}實驗參考程序---中斷服務子程序/*********************************************************************文件名:RTC_Init()*功能:RTC模塊初始化函數********************************************************************/{ PREINT=Fpclk/32768-1;//設置基準時鐘分頻器
PREFRAC=Fpclk-(Fpclk/32768)*32768; AMR=0xff; //屏蔽報警
CIIR=0x02; //設置分值的增量產生一次中斷
ILR=0x03; //清除中斷標志
VICIntSelect=0x00000000; //設置所有的通道為IRQ中斷
VICVectCntl5=0x20|13; //實時時鐘中斷分配到IRQ5 VICVectAddr5=(uint32)RTC_IRQ; //設置按鍵中斷服務程序的地址
VICIntEnable=VICIntEnable|(1<<13);//使能實時時鐘中斷}實驗參考程序---RTC初始化子程序/***************************************************************************名稱:main()*功能:使能實時時鐘,控制數碼管顯示實時時鐘的值*入口參數:無*出口參數:無*************************************************************************/int
main(void){ uint32 data; TIMEa,b;
NumbTube_Init(); //數碼管初始化
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點、0分、0秒
Set_Time(&b); //設置時鐘值
while(1) {
GetTime(&a); //取得當前RTC各個寄存器的值
data=(a.min*100)+a.sec; NumbTube_Display(data,3); //顯示分,秒
} return(0);}實驗參考程序---主程序1.9實驗步驟與結果實驗的步驟和結果如下:1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實驗的程序代碼,編譯鏈接整個工程。如果編譯通過則在相應的目錄下產生我們所需要的二進制文件和可執(zhí)行映像文件。2.運行H-Flasher軟件,將產生的二進制文件燒寫到實驗板上。3.打開AXD調試環(huán)境,并加載剛剛產生的可執(zhí)行映像文件進行調試。4.單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數處;繼續(xù)全速運行。觀察實驗板,實驗板實時將時間進行刷新并顯示。五、看門狗模塊看門狗,又叫WatchDogTimer,也是一個定時器電路??撮T狗的作用是當系統出現程序進入死循環(huán),或者程序跑飛等情況時,它能夠自動復位整個系統??撮T狗是利用一個定時器來監(jiān)控主程序的運行。在主程序運行之前,我們對定時器設置了一個定時時間T并開始倒計時;在主程序必須要在定時時間T內完成并對定時器進行復位。如果出現死循環(huán),或者說PC運行指針跑飛了,當倒計時為零之后就會給出一個復位信號到MCU,使MCU復位。一、LPC2220的看門狗模塊自帶的看門狗的特性: 1、帶內部預分頻器的可編程32位定時器; 2、如果沒有周期性重裝,則產生片內復位; 3、看門狗由軟件使能,但只能由硬件復位或看門狗復位/
中斷來禁止看門狗; 4、錯誤/不完整的喂狗時序會導致復位/中斷; 5、具有指示看門狗復位的標志; 6、可選擇Tpclk×4倍數的時間周期:最小看門狗間隔為(Tpclk×4×256),最大間隔為(Tpclk×4×232)。先給WDTC寄存器設置好32位倒計數器的值,最小值為OxFF;然后,對看門狗進行一次正確的喂狗,此時如果置位了WDEN位,那么就可以使能計數器了。看門狗使能之后,32位倒計數器開始倒計時,可以通過訪問當前WDT計數器來查看計數器的值;在倒計數器溢出之前,如果能正確喂狗,倒計數器復位到初始值,重新開始倒計數,依此循環(huán);但如果計數器正在計數時,處理器執(zhí)行了一次錯誤的喂狗,或者倒計數器溢出,則看門狗會復位處理器或者產生中斷。1.1看門狗模塊工作過程1.2看門狗使用方法
1.在WDTC寄存器中設置看門狗定時器的固定裝載值;2.在WDMOD寄存器中設置模式,并使能看門狗;3.通過向WDFEED寄存器順序寫入OxAA和Ox55啟動看門狗;4.在看門狗向下溢出之前應當再次喂狗以防止復位/中斷;1.3看門狗寄存器描述名稱描述復位值WDMOD看門狗模式寄存器。該寄存器包含看門狗定時器的基本模式和狀態(tài)0WDTC看門狗定時器常數寄存器。該寄存器決定超時值0xFFWDFEED看門狗喂狗寄存器。(先為0xAA,然后為0x55)NAWDTV看門狗定時器值寄存器(當前定時器值)0xFF1.4實驗目的與內容實驗目的:學會LPC2220內部模塊看門狗的使用。實驗內容:設置LPC2220的看門狗模塊,然后程序進入死循環(huán),等待WDT復位。1.5實驗參考程序#define WDTFeed() WDFEED=0xAA; WDFEED=0x55 //喂狗程序/***************************************************************************名稱:main()*功能:運行WDT,并控制蜂鳴器連續(xù)叫三聲(每一聲的延續(xù)時間為1秒,間隔為1秒)* 然后處理器進入死循環(huán),等待WDT復位(等待的時間為8秒)**************************************************************************/int
main(void){ uint8i; IO1DIR=IO1DIR|BEE; //設置控制蜂鳴器引腳P1.24為I/O輸出
WDTC=Fpclk*2; //WDT計數時間為2*4=8秒
WDMOD=0x03; //設置看門狗溢出復位,并啟動WDT
WDTFeed(); //進行喂狗操作,把WDTC的值裝入看門狗定時器
for(i=0;i<3;i++) //連續(xù)叫三聲
{ BEEON();DelayMS(1); //延時為1毫秒
BEEOFF();DelayMS(1); }while(1); //死循環(huán)
return(0);}1.6實驗步驟與結果
單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數處;繼續(xù)全速運行,蜂鳴器會叫3聲,然后進入死循環(huán)。當到達8秒鐘后,程序會重新復位并運行。六、低功耗實驗這對于便攜式和移動性較強的嵌入式產品尤其重要。這些產品不是一直都有充足的電源供應,往往是靠電池來供電,設計人員從每一個細節(jié)來考慮降低功率消耗,從而盡可能地延長電池使用時間。在嵌入式系統的設計中,低功耗設計是許多設計人員必須面對的問題:
一方面要求供電設備的功耗盡可能的低;
一方面希望它能實現更多的功能。
兩個方面綜合考慮:硬件設計和軟件設計。從硬件設計考慮降低功耗問題,主要有三條途徑:
1、選擇合適的處理器;
2、接口電路的合理設計;
3、處理器支持的動態(tài)電源管理。設計者仍需盡量將應用的低功耗特性反映在軟件中,以避免那些“看不見”的功耗損失。主要有如下三條途徑
1、用中斷代替查詢
2、用“宏”代替“子程序”
3、盡量減少CPU的運算量。降低功耗的途徑1.1LPC2220中的功率控制---節(jié)電模式LPC2220支持兩種節(jié)電模式:空閑模式和掉電模式。1.空閑模式 在空閑模式下,指令的執(zhí)行被掛起直到復位或者中斷,但系統的時鐘cclk一直有效;通過定時器的定時器中斷可使處理器恢復工作;空閑模式使處理器、存儲系統和相關的控制器以及內部總線不再消耗功率。2.掉電模式 在掉電模式下,振蕩器關閉,芯片沒有任何內部時鐘。處理器狀態(tài)、寄存器和外設寄存器以及內部的SRAM值在掉電模式下被保持。復位或者特定的不需要時鐘仍能工作的中斷可使處理器恢復運行。定時器中斷不能喚醒處理器。在掉電模式下芯片的功耗幾乎為零。LPC2220中的功率控制---節(jié)電模式節(jié)電模式控制寄存器PCON外設功率控制寄存器(PCONP)
LPC2220的功率控制---外設功率控制1.2實驗目的與內容實驗目的:學會LPC2220內部模塊低功耗的使用。實驗內容1:設置LPC2220的低功耗模塊,控制LPC2220進入掉電模式,并允許外部中斷喚醒。每按一次中斷按鍵(位于實驗板的右下角),芯片被喚醒一次。實驗內容2:設置LPC2220的低功耗模塊,控制處理器進入空閑模式,當有定時器中斷時,芯片被重新喚醒。實驗1參考程序/*********************************************************************名稱:main()*功能:蜂鳴器叫一聲,然后控制處理器進入掉電模式,當有外部中斷時,喚醒處理器*********************************************************************/int
main(void){IO1DIR=IO1DIR|BEE; //設置控制蜂鳴器引腳P1.24為I/O輸出
PINSEL0=0x20000000; //設置I/O口連接,P0.14設置為EINT1EXTMODE=0x02; //EINT1使用邊沿觸發(fā)
EXTPOLAR=0x00; //EINT1下降沿有效
EXTINT=0x0F; //清除外部中斷標志
VICIntEnable=VICIntEnable|0x00008000; //使能EINT1中斷
EXTWAKE=0x02; //允許外部中斷1喚醒掉電的CPUPCONP=0x0800; //EMC使能,關閉其他的片內外設
while(1) {BeeON(); //控制蜂鳴器叫一聲,時間為1毫秒
DelayMS(2);
BeeOFF();PCON=0x02; //系統進入掉電模式
}return(0);}實驗1步驟與結果1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實驗的程序代碼,編譯鏈接整個工程。如果編譯通過則在相應的目錄下產生我們所需要的二進制文件和可執(zhí)行映像文件。2.運行H-Flasher軟件,將產生的二進制文件燒寫到實驗板上。3.打開AXD調試環(huán)境,并加載剛剛產生的可執(zhí)行映像文件進行調試。4.單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數處;繼續(xù)全速運行,蜂鳴器會叫1聲,然后進入掉電模式,一直等待外部中斷按鍵(實驗板中的標號為“key”按鍵)程序才喚醒。每喚醒一次,蜂鳴器響一次。實驗2參考程序/*********************************************************************名稱:main()*功能:蜂鳴器首先叫兩聲,然后處理器進入空閑模式。當有定時器0定時2S結束后,*定時器產生中斷,重新喚醒處理器。*********************************************************************/int
main(void){IO1DIR=IO1DIR|BEE; //設置控制蜂鳴器引腳P1.24為I/O輸出
T0TC=0; //定時器設置為0T0PR=0; //時鐘不分頻
T0MCR=0x03; //設置T0MR0匹配后復位T0TC,并產生中斷標志
T0MR0=Fpclk*2; //設置2S匹配值
T0TCR=0x01; //啟動定時器0while(1) {BeeON();DelayMS(2);BeeOFF(); DelayMS(2);
BeeON();DelayMS(2);BeeOFF(); PCON=1; //系統進入空閑模式
}return(0);}實驗2步驟與結果1.在CodeWarriorIDE集成開發(fā)環(huán)境中,使用“FollowMeStudyARM”工程模板建立新工程。然后在工程中添加本實驗的程序代碼,編譯鏈接整個工程。如果編譯通過則在相應的目錄下產生我們所需要的二進制文件和可執(zhí)行映像文件。2.運行H-Flasher軟件,將產生的二進制文件燒寫到實驗板上。3.打開AXD調試環(huán)境,并加載剛剛產生的可執(zhí)行映像文件進行調試。4.單擊全速運行按鈕(快捷鍵F5),程序會運行并停留在main()主函數處;繼續(xù)全速運行,蜂鳴器會叫兩聲,芯片然后進入低功耗模式。定時器定時2秒后會產生一次中斷,定時器的中斷將自動喚醒芯片,程序得到繼續(xù)運行的機會。實驗現象是:每2秒喚醒一次,蜂鳴器響2次。七、附錄---中斷功能中斷的概念
中斷的目的是為了暫停主程序的運行,先去執(zhí)行中斷服務程序。在中斷源提出中斷請求后,嵌入式系統執(zhí)行完當前指令便進行中斷響應,一旦中斷服務程序執(zhí)行完畢后,仍須返回到主程序被中斷處繼續(xù)執(zhí)行原先程序,其過程如圖所示:中斷源分為兩種:
1、外部中斷源: 由外部電路提供中斷的來源稱為外部中斷源。
2、內部中斷源: 引起ARM芯片執(zhí)行指令或內部功能模塊所引起的中斷來源稱為內部中斷源。中斷優(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內部包含了眾多的寄存器用來記錄哪個中斷使能、中斷優(yōu)先級分配、中斷狀態(tài)、向量IRQ的優(yōu)先級別分配與服務程序地址等等。中斷源與VIC連接示意圖模塊標識VIC通道號模塊標識VIC通道號WDT看門狗中斷(WDINT)0PWM0匹配0~6(MR0~MR6)8-保留軟件中斷1I2CSI(狀態(tài)改變)9ARM內核EmbeddedICE,DbgCommRx2SPI0SPI中斷標志(SPIF)模式錯誤(MODF)10ARM內核EmbeddedICE,DbgCommTx3定時器0匹配0~3(MR0~MR3)捕獲0~3(CR0~CR3)4SPI0SPI中斷標志(SPIF)模式錯誤(MODF)11定時器1匹配0~3(MR0~MR3)捕獲0~3(CR0~CR3)5PLLPLL鎖定(PLOCK)12UART0Rx線狀態(tài)(RLS)發(fā)送保持寄存器空(THRE)Rx數據可用(RDA)字符超時指示(CTI)6RTC計數器增加(RTCCIF)報警(RTCALF)13UART1Rx線狀態(tài)(RLS)發(fā)送保持寄存器空(THRE)Rx數據可用(RDA)字符超時指示(CTI)Modem狀態(tài)中斷(MSI)7系統控制外部中斷0(EINT0)14系統控制外部中斷1(EINT1)15系統控制外部中斷2(EINT2)16系統控制外部中斷3(EINT3)17A/DA/D轉換器18LPC2220對每個中斷源采用唯一的VIC通道號來標識,見下表所列:
1.3
LPC2220的中斷處理流程 LPC2220支持兩種中斷:IRQ中斷和FIQ中斷。 當產生IRQ中斷時,微控制器會暫停用戶程序,然后切換到IRQ模式。執(zhí)行完中斷服務程序后運行指針返回到用戶程序的斷點。啟動代碼中的異常向量表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的寄存器描述名稱描述訪問復位值VICIRQStatusIRQ狀態(tài)寄存器。該寄存器讀出定義為IRQ并使能的中斷的狀態(tài)RO0VICFIQStatusFIQ狀態(tài)寄存器。該寄存器讀出定義為FIQ并使能的中斷的狀態(tài)RO0VICRawIntr所有中斷的狀態(tài)寄存器。該寄存器讀出32個中斷請求/軟件中斷的狀態(tài),不管中斷是否使能或分類RO0VICIntSelect中斷選擇寄存器。該寄存器將32個中斷請求的每個都分配為FIQ或IRQR/W0VICIntEnable中斷使能寄存器。該寄存器控制32個中斷請求和軟件中斷的使能R/W0VICIntEnClr中斷使能清零寄存器。該寄存器允許軟件將中斷使能寄存器中的一個或多個位清零W0VICSoftInt軟件中斷寄存器。該寄存器的內容與32個不同外設的中斷請求相“或”來產生中斷R/W0VICSoftIntClear軟件中斷清零寄存器。該寄存器允許軟件將軟件中斷寄存器中的一個或多個位清零W0VICProtection保護使能寄存器。該寄存器可以限制非特權模式下的軟件對VIC寄存器的訪問R/W0VICVectAddrIRQ中斷服務程序地址寄存器。當發(fā)生一個IRQ中斷時,IRQ服務程序可讀出該寄存器并跳轉到讀出的地址R/W0VICDefVectAddr默認向量地址寄存器。該寄存器保存了非向量IRQ的中斷服務程序(ISR)地址R/W0VICVectAddr0~15向量地址寄存器0~15。向量地址寄存器0~15保存了16個向量IRQslot的中斷服務程序地址R/W0VICVectCntl0~15向量控制寄存器。向量控制寄存器0~15分別控制16個向量IRQslot中的一個。Slot0優(yōu)先級最高,而Slot15優(yōu)先級為最低R/W01.5中斷功能使用舉例
VIC操作方法:
1、首先設置IRQ/FIQ中斷;
2、然后設置向量中斷對應的服務程序入口地址;
3、接著設置中斷允許。
VICIntSelect寄存器控制中斷源的IRQ或FIQ選擇,每一個中斷源與V
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲合作合同
- 工程裝修合同補充協議
- 合同和協議合同協議書
- 濟南護理職業(yè)學院《植物學實驗》2023-2024學年第二學期期末試卷
- 遼寧城市建設職業(yè)技術學院《服裝色彩學》2023-2024學年第二學期期末試卷
- 天津師范大學津沽學院《光電子電路設計》2023-2024學年第二學期期末試卷
- 重慶安全技術職業(yè)學院《生活適應的設計與教學》2023-2024學年第二學期期末試卷
- 上海健康醫(yī)學院《中小學數學課程標準與教材研究》2023-2024學年第二學期期末試卷
- 遼源職業(yè)技術學院《基礎寫作(一)》2023-2024學年第二學期期末試卷
- 黃河交通學院《自動化專業(yè)技能訓練》2023-2024學年第二學期期末試卷
- 雪鐵龍云逸C4說明書
- 《健美操裁判法》課件
- 2022輸變電工程建設安全管理規(guī)定
- 備課專業(yè)化讀書分享課件
- 《爆破作業(yè)單位許可證》申請表
- 人教版二年級數學下冊教材分析
- 市政道路雨、污水管道工程施工技術課件
- 全冊(教學設計)-蘇教版勞動六年級下冊
- 【淺談小學英語教學中的德育滲透3800字(論文)】
- 尺寸鏈的計算表格
- 2023年江蘇省南京市市場監(jiān)督管理局所屬事業(yè)單位招聘5人(共500題含答案解析)筆試歷年難、易錯考點試題含答案附詳解
評論
0/150
提交評論