嵌入式綜合實(shí)驗(yàn)_第1頁
嵌入式綜合實(shí)驗(yàn)_第2頁
嵌入式綜合實(shí)驗(yàn)_第3頁
嵌入式綜合實(shí)驗(yàn)_第4頁
嵌入式綜合實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

實(shí)驗(yàn)四綜合實(shí)驗(yàn)設(shè)計(jì)一、 實(shí)驗(yàn)?zāi)康耐ㄟ^熟悉MagicARM2410實(shí)驗(yàn)箱各模塊的功能,再結(jié)合自己所學(xué)的專業(yè)知識以及各模塊的程序設(shè)計(jì)方法,設(shè)計(jì)一個(gè)綜合實(shí)驗(yàn)。二、 實(shí)驗(yàn)要求設(shè)計(jì)一個(gè)綜合實(shí)驗(yàn),要求通過鍵盤改變控制直流電機(jī)的轉(zhuǎn)速,同時(shí)通過RTC和UART模塊,在PC機(jī)超級終端處顯示步進(jìn)機(jī)轉(zhuǎn)速的級別以及時(shí)間。在此實(shí)驗(yàn)中包括了UART、定時(shí)器中斷、RTC、鍵盤LED數(shù)碼管顯示、直流步進(jìn)電機(jī)等模塊。三、 實(shí)驗(yàn)設(shè)計(jì)思路本實(shí)驗(yàn)通過設(shè)計(jì)一個(gè)控制LED數(shù)碼管顯示并接收鍵盤輸入的主程序,在主程序中通過鍵盤輸入調(diào)用直流電機(jī)中控制轉(zhuǎn)速的子程序,不同的鍵值輸入對應(yīng)不同的直流電機(jī)轉(zhuǎn)速。并且在改變轉(zhuǎn)速的同時(shí),通過調(diào)用RTC和UART模塊,分別向PC機(jī)發(fā)送時(shí)間和轉(zhuǎn)速的級別。因此關(guān)鍵是設(shè)計(jì)好主程序,解決好各調(diào)用子程序之間的矛盾和沖突,使他們可以很好的共存。實(shí)驗(yàn)框圖如下:'鍵盤輸入] 〉改變轉(zhuǎn)速 I 二發(fā)送時(shí)間至II]、 1—r- 1-| J PC上顯示LED數(shù)碼管 發(fā)送轉(zhuǎn)速到顯示電機(jī)模式 PC上顯示直流電機(jī)的轉(zhuǎn)速改變是通過改變電壓來完成的,電壓越大,直流電機(jī)的轉(zhuǎn)速越快,而不同電壓所需要的占空比是不一樣的,本實(shí)驗(yàn)就是通過改變占空比來實(shí)現(xiàn)不同電壓的轉(zhuǎn)變,從而控制直流電機(jī)的轉(zhuǎn)速。四、實(shí)驗(yàn)程序由于實(shí)驗(yàn)程序比較長,現(xiàn)只將實(shí)驗(yàn)的主程序的main函數(shù)表示出來,其他調(diào)用程序見附件一。voidmain(void){inti,j;inttemp;uint16key;disp_buf0[0]=0;disp_buf1[0]=1;disp_buf2[0]=2;disp_buf3[0]=3;//直流電機(jī)初始化設(shè)置//TOUT0口設(shè)置rGPBCON=(rGPBCON&(?(0x03<<0)))I(0x02<<0);//rGPBCON[1:0]=10b,設(shè)置TOUT0功能rGPBUP=rGPBUPI0x0001;//禁止TOUT0口的上拉電阻//設(shè)置GPH9為GPIO輸出模式rGPHCON=(rGPHCON&(?(0x03<<18)))I(0x01<<18); //GPH9口rGPHDAT=rGPHDAT&(?(1<<9));//輸出0電平rGPHUP=rGPHUPI(1<<9);//GPIO設(shè)置rGPACON=rGPACON&(?(1<<21)); //A口,RUN燈控制口(GPA21)rGPHCON=(rGPHCON&(?(0x03<<20)))I(0x01<<20); //rGPHCON[21:20]=01b,設(shè)置GPH10為I/O輸出模式//設(shè)置中斷服務(wù)程序VICVectAddr[10]=(uint32)IRQ_Time0; //定時(shí)中斷向量地址設(shè)置VIC旋ctAddr[4]=(uint32)IRQ_Eint4; //外部中斷向量地址設(shè)置//設(shè)置中斷控制器PRIORITY=0x00000000; //使用默認(rèn)的固定的優(yōu)先級rINTMOD=0x00000000; //所有中斷均為IRQ中//GPIO設(shè)置rGPACON=rGPACON&(?(1<<21)); //A口,RUN燈控制口(GPA21)rGPHCON=(rGPHCON&(?(0x03<<20)))I(0x01<<20);//rGPHCON[21:20]=01b,設(shè)置GPH10為I/O輸出模式//初始化I2C接口InitI2C();rINTMSK=0xFFFFFBEF;//使能EINT4中斷rEINTMASK=?0x0000010;//控制LED數(shù)碼管顯示while(i==0){for(j=0;j<1;j++)disp_buf[j]=i;ZLG7290_SendBuf((uint8*)disp_buf,8);DelayNS(10);}//讀取按鍵,設(shè)置鍵值對應(yīng)的顯示位閃爍while(1){DelayNS(1);key=ZLG7290_GetKey();if((key&0xFF00)==0){key=key&0x00FF;}switch(key){case1:ZLG7290_SendBuf((uint8*)disp_buf0,1);PWM_Init(255,255/4);//以1/4占空比改變直流電機(jī)的轉(zhuǎn)速UART_SendStr(直流電機(jī)以spee1運(yùn)行\(zhòng)n");DelayNS(20);//延時(shí)RTC_Init(0); //初始化RTC(非強(qiáng)行方式)RTC_Read(1);//讀日期temp=0;{while(temp==rBCDSEC);break;case2:ZLG7290_SendBuf((uint8*)disp_buf1,1);PWM_Init(255,2*255/4);//以2/4占空比改變直流電機(jī)的轉(zhuǎn)速UART_SendStr(直流電機(jī)以speed2運(yùn)行\(zhòng)n");DelayNS(20);//延時(shí)RTC_Init(0);//初始化RTC(非強(qiáng)行方式)RTC_Read(1);//讀日期temp=0;{while(temp==rBCDSEC);temp=rBCDSEC;RTC_Read(0);//讀時(shí)間DispRTC();//輸出時(shí)間顯示}break;case3:ZLG7290_SendBuf((uint8*)disp_buf2,1);PWM_Init(255,3*255/4);//以3/4占空比改變直流電機(jī)的轉(zhuǎn)速UART_SendStr(直流電機(jī)以speed3運(yùn)行\(zhòng)n");DelayNS(20);//延時(shí)RTC_Init(0);//初始化RTC(非強(qiáng)行方式)RTC_Read(1);//讀日期temp=0;{while(temp==rBCDSEC);break;case4:ZLG7290_SendBuf((uint8*)disp_buf3,1);PWM_Init(255,4*255/4);〃使直流電機(jī)全占空比停止轉(zhuǎn)動(dòng)UART_SendStr(直流電機(jī)停止運(yùn)行\(zhòng)n");DelayNS(20);//延時(shí)RTC_Init(0);//初始化RTC(非強(qiáng)行方式)RTC_Read(1);//讀日期temp=0;{while(temp==rBCDSEC);temp=rBCDSEC;RTC_Read(0); //讀時(shí)間DispRTC(); //輸出時(shí)間顯示}break;default:break;}//endofswitch(key)...}}五、實(shí)驗(yàn)步驟:啟動(dòng)ADS1.2IDE集成開發(fā)環(huán)境,選擇【File]->【New…】,使用ARMExecutableImage工程模板建立一個(gè)工程,名稱為qiub,目錄為D:\arm\myproject\qiub0選擇【File]->【New…】建立一個(gè)新的文件main.c,設(shè)置直接添加到項(xiàng)目中,在Targets一欄中選擇Debug.輸入主程序的程序代碼,并保存,此時(shí)在工程窗口中可以看到main.c文件。打開所建的工程,選擇ADDFlies,向該工程添加實(shí)驗(yàn)所需要的各個(gè)模塊,如圖所示:

瞪qiub.mcp |1=1||回1□[蛾司始守修*A0LinkOrderT:±t-gets|啰 File CodeData暮蕓-1^3head 0 0 ? 旦Dconfig.h 0 0 * 工]Gth 0 0 * Eg]S3C2410.h 0 0 . 二]啰startup 0 0 * * ^1葉 防StartUF.e 0 0 ? *曜- Qtarget 0 Cl ? ? =1曜 目。c 0 0 * ? 可啰-'-urLEule 0 0 ? ,可P-9u:di-+.h | o| o* p轎 心 c 0 0* ?可啰-£3IM也「已 0 0?,fGIcdiirive.h 0 0* 二]啰 心Icdilrive.c 0 0? ,可? - 0 0 * ?工]曜 、置bliss.c 0 0* ?可啰-taI£C o o ? ?旦g]I2C.h 0 0 , 工]轎 £1 I2C-c 0 0 * ?二]g]zlg7290.h 0 0 ? 司常 Q -lgT290.c 0 0 * ?司葉-句* 0 0 ? ?/ 心 main,c 0 0 * ?F15files 0 0工程文件添加完畢后保存,然后選擇【Project!->【Make】,將編譯鏈接整個(gè)工程。如果有錯(cuò)誤按照錯(cuò)誤提示欄提示的錯(cuò)誤進(jìn)行修改,直到鏈接正確。打開JTAG仿真器軟件,并且在電腦開始菜單找到附件一>數(shù)據(jù)通訊一>超級終端;打開超級終端,設(shè)計(jì)超級終端的參數(shù),用于觀察數(shù)據(jù)的接收。選擇【Project!->[Debug],IDE環(huán)境就會啟動(dòng)AXD調(diào)試軟件,如果首次運(yùn)行要記得加載初始化文件ARM2410.txt,初試完畢后,可以執(zhí)行單步或全速運(yùn)行調(diào)試。全速運(yùn)行后,改變鍵盤上的鍵值從0鍵到3鍵,觀察直流電機(jī)的轉(zhuǎn)速改變情況以及超級終端的數(shù)據(jù)接受情況。六、實(shí)驗(yàn)結(jié)果及分析通過改變鍵盤的輸入值,直流電機(jī)的轉(zhuǎn)速發(fā)生改變,當(dāng)鍵盤按下0鍵時(shí),LED數(shù)碼上顯示1,代表直流電機(jī)以1/4占空比模式運(yùn)行,同時(shí)可以從超級終端處觀察到發(fā)送來的數(shù)據(jù)“直流電機(jī)以speel運(yùn)行”,后面緊接著顯示時(shí)間如圖1所示。同樣按下鍵1和鍵2時(shí)可以分別看到LED數(shù)碼上顯示2和3,他們分別代表直流電機(jī)以2/4占空比模式運(yùn)行和3/4占空比模式運(yùn)行。在接收端可以從

超級終端分別觀察到“直流電機(jī)以speed2運(yùn)行”和“直流電機(jī)以speed3運(yùn)行”后面緊跟著的是他們開始旋轉(zhuǎn)的時(shí)間。當(dāng)按下鍵3時(shí),LED數(shù)碼上顯示4,表示直流電機(jī)切換到全占空比模式,即直流電機(jī)停止轉(zhuǎn)動(dòng),此時(shí)可以從超級終端收到“直流電機(jī)停止運(yùn)行”以及開始停止的時(shí)間。通過觀察得知直流電機(jī)的轉(zhuǎn)速與占空比有關(guān),當(dāng)占空比小于1時(shí),且逐漸增大時(shí),直流電機(jī)的轉(zhuǎn)速越來越快,也就是speed1<speed2<speed3;實(shí)驗(yàn)截圖如下:文件⑤編輯(£)查看世)呼叫(£)傳送如)幫助電)□務(wù)福珍如S曾直流電機(jī)以speel運(yùn)行20:57:46 Tuesday, 1/10/2006直流電機(jī)以speed3運(yùn)行20:57:49 Tuesday, 1/10/2006直流電機(jī)以speed2運(yùn)行20:57:51 Tuesday, 1/10/2006直流電機(jī)停止運(yùn)行20:57:53 Tuesday, 1/10/2006直流電機(jī)以speel運(yùn)行120:57:58 Tuesday,1/10/2006直流電機(jī)以speed2運(yùn)行 |20:57:59 Tuesday, 1/10/2006直流電機(jī)停止運(yùn)行20:58:01 Tuesday, 1/10/2006直流電機(jī)以speel運(yùn)行20:58:03 Tuesday, 1/10/2006直流電機(jī)以speel運(yùn)行20:58:04 Tuesday, 1/10/2006直流電機(jī)以speel運(yùn)行20:58:06 Tuesday, 1/10/2006直流電機(jī)以speed2運(yùn)行20:58:07 Tuesday, 1/10/2006直流電機(jī)以speed3運(yùn)行20:58:09 Tuesday, 1/10/2006直流電機(jī)以speed2運(yùn)行20:58:11 Tuesday, 1/10/2006直流電機(jī)以speed2運(yùn)行9HSR-12 TiiP<?rlAu 1 I從截圖可以看出各個(gè)模式之間可以通過按下不同的鍵值相互跳轉(zhuǎn),如果沒有其他鍵按下要求跳轉(zhuǎn),則直流步進(jìn)電機(jī)一直以該模式運(yùn)行。七、實(shí)驗(yàn)心得:(一)本次實(shí)驗(yàn)雖然只是一個(gè)小型的綜合性實(shí)驗(yàn),但是對于我這么一個(gè)初次接觸嵌入式的人來說,還是遇到了很多困難。首先在硬件方面上感到很吃力,很多以前學(xué)過的東西都忘了,比如中斷的優(yōu)先級,以及各寄存器的組織結(jié)構(gòu)等,加上ARM本身復(fù)雜的體系結(jié)構(gòu),使得我不得不一邊操作一邊學(xué)習(xí),遇到哪里不懂的,就去翻書找相應(yīng)的知識,或到網(wǎng)上去找相關(guān)資料。其次是軟件方面的知識還很欠缺,雖然以前學(xué)習(xí)過C語言,以及匯編語言,但好久沒有用過,很多指令都忘了,加上ARM本身的指令集,要想自己真正編寫一個(gè)完整的程序顯得是那么困難。幸好實(shí)驗(yàn)室有很多已經(jīng)編好的實(shí)驗(yàn)程序模板,我可以參照上面的實(shí)驗(yàn)程序,通過一些修改,達(dá)到實(shí)現(xiàn)所要的功能。如果沒有那些源程序,我想我可能會遇到更多的問題。我知道自己還停留在初級水平,甚至連初級水平都沒有達(dá)到,因?yàn)榍度胧剿枰闹R很廣,很全,而你必須在各個(gè)方面都很熟悉,才能得心應(yīng)手。還有經(jīng)驗(yàn)很重要,對于我們初學(xué)者來說,最缺乏的就是經(jīng)驗(yàn),獲取經(jīng)驗(yàn)的最好的方法就是學(xué)習(xí)那些已經(jīng)編好的實(shí)驗(yàn)?zāi)0?,因?yàn)槟切┠0迨墙?jīng)驗(yàn)的總結(jié),那正是我們所要需要的。通過不斷的學(xué)習(xí)他人的實(shí)驗(yàn)成果,才能不斷的積累,當(dāng)積累經(jīng)驗(yàn)到一定的程度的時(shí)候,你就可以得心應(yīng)手的實(shí)現(xiàn)自己想要實(shí)現(xiàn)的各個(gè)功能,那時(shí)你就可以有自己的東西,可以有自己的創(chuàng)新。(二) 在設(shè)計(jì)這個(gè)實(shí)驗(yàn)的過程中,主要經(jīng)歷三個(gè)過程:構(gòu)思,設(shè)計(jì),調(diào)試。首先是想怎么把各個(gè)實(shí)驗(yàn)綜合到一起,實(shí)現(xiàn)各個(gè)模塊的功能,同時(shí)又要有一定的實(shí)際意義。經(jīng)過反復(fù)斟酌決定采用鍵盤控制直流電機(jī)的轉(zhuǎn)速,同時(shí)輸出轉(zhuǎn)速級別以及轉(zhuǎn)速改變的時(shí)間,這樣就把實(shí)驗(yàn)要求的各個(gè)模塊基本都整合到一起了。初步思路出來了以后,就是開始設(shè)計(jì)主程序了,這一階段花了很多時(shí)間。因?yàn)樽约菏堑谝淮卧O(shè)計(jì)程序,很多東西不是很了解,所以必須先學(xué)習(xí)一些例子,了解程序設(shè)計(jì)的一些基本原則。我把實(shí)驗(yàn)室電腦中MagicARM2410光盤的基礎(chǔ)實(shí)驗(yàn)的各個(gè)程序仔細(xì)研究了一下,同時(shí)也熟悉了各個(gè)功能模塊功能實(shí)現(xiàn)的原理,這也為我后面程序設(shè)計(jì)提供了一種參考。有了這些準(zhǔn)備工作,就是開始設(shè)計(jì)自己的實(shí)驗(yàn)程序,通過不斷的添加和修改,再經(jīng)過編譯,確定沒有問題了保存好工程文件。最后就是調(diào)試了,這是最關(guān)鍵的一步,也是最繁瑣的一步,同時(shí)也是學(xué)東西最多的一個(gè)階段。我們不可能設(shè)計(jì)程序出來了就一點(diǎn)問題都沒有,很多時(shí)候都是通過一步步調(diào)試,不斷的修改,一個(gè)個(gè)問題的解決,才能最終成功。我的也不例外,一開始時(shí)什么功能都不能實(shí)現(xiàn),那時(shí)真的很失落,很受打擊。但我告訴自己,必須耐心的調(diào)試,才有可能成功。我通過單步運(yùn)行,觀察程序的運(yùn)行,分析模塊的功能不能實(shí)現(xiàn)的原因,一個(gè)一個(gè)模塊單獨(dú)調(diào)試。在調(diào)試的過程中運(yùn)到了很多問題,比如模塊之間共用相同寄存器而帶來的沖突以及寄存器的某些功能沒有開啟或是關(guān)閉了等。這些問題很多都是通過回過頭去研究實(shí)驗(yàn)?zāi)0宓脑O(shè)計(jì),再結(jié)合英文的s3c2410.pdf文件的介紹,了解各寄存器的初始化以及寄存器每位所代表的功能來解決的。當(dāng)這些問題都解決了,實(shí)驗(yàn)朝著理想的方向前進(jìn),很多功能都能實(shí)現(xiàn)了。此時(shí)先前的挫敗感,一下就消失了,那種調(diào)試成功的喜悅是無法用言語來表達(dá)的。調(diào)試過程是一個(gè)很磨礪人的一個(gè)過程,在反復(fù)失敗的時(shí)候還要繼續(xù)嘗試,這是很痛苦的。很多人就是因?yàn)椴荒艹惺苷勰ザ罱K放棄了,而成功就是建立在無數(shù)次失敗之上的,快樂也是建立在痛苦之上的,只有經(jīng)歷了那個(gè)過程的點(diǎn)點(diǎn)滴滴,才能體會成功的那份喜悅。(三) 在此次實(shí)驗(yàn)中,我還遇到了一些不知道怎么解釋的問題,比如說我改變了輸出的字符時(shí),整個(gè)實(shí)驗(yàn)程序就不能正常運(yùn)行,pc機(jī)上也不能接受發(fā)送的數(shù)據(jù),而當(dāng)我改回來時(shí),程序又能正常運(yùn)行。還有就是當(dāng)我打開定時(shí)中斷時(shí),按下某一鍵時(shí),程序不能跳轉(zhuǎn)了,一直停留在此,好像死機(jī)了一樣。而當(dāng)臥關(guān)閉定時(shí)中斷時(shí),程序又可以正常運(yùn)行。我猜這可能與直流電機(jī)中的定時(shí)器0有沖突或是共用了定時(shí)器0才導(dǎo)致了這樣。(四) 這次實(shí)驗(yàn)讓我學(xué)到了很多東西,懂得了實(shí)驗(yàn)要付出很多艱辛的努力,而所有的這些努力都是值得的。它不僅提升了你的動(dòng)手能力、學(xué)習(xí)能力,分析問題和解決問題的能力,同時(shí)也教會了我如何學(xué)習(xí),如何查找資料。這些東西在課本上是學(xué)不到的,你必須自己親自通過實(shí)驗(yàn)這個(gè)過程來體驗(yàn)感知。實(shí)驗(yàn)過程的點(diǎn)點(diǎn)滴滴都將是我們?nèi)蘸髮W(xué)習(xí)、工作的一筆寶貴的財(cái)富。附件一實(shí)驗(yàn)主程序#include"config.h//定義顯示緩沖區(qū)chardisp_buf[50];chardisp_buf0[10];chardisp_buf1[10];chardisp_buf2[10];chardisp_buf3[10];//ZLG7290控制LED數(shù)碼管閃爍命令#defineGlitter_COM0x70//定義當(dāng)前時(shí)間變量uint8g_year=0;uint8g_month=0;uint8g_date=0;uint8g_day=0;uint8g_hour=0;uint8g_min=0;uint8g_sec=0;//定義星期字符串char*str_day[8]={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};//定義初始化時(shí)鐘值#defineINIT_YEAR0x11/*2011年*/#defineINIT_MONTH0x05/*5月*/#defineINIT_DATE0x21/*21日*/#defineINIT_DAY0x06/*星期六*/#defineINITHOUR0x09/*20時(shí)*/#defineINITMIN0x30/*30分*/#defineINITSEC0x00/*0秒*///延時(shí)voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<50000;i++);}//RTC初始化voidRTC_Init(intforce){interr;uint32bak;//判斷當(dāng)前RTC是否正確運(yùn)行err=0;if(force==0) //若force為0,則判斷當(dāng)前時(shí)鐘是否正確{rRTCCON=0x00; //禁止RTC接口(只允許RTC計(jì)數(shù)和讀數(shù))bak=rBCDYEAR&0xFF;if(bak>0x99)err++; //年判斷bak=rBCDMON&0x1F;if(bak>0x12)err++; //月判斷bak=rBCDDATE&0x3F;if(bak>0x31)err++; //日判斷bak=rBCDHOUR&0x3F;if(bak>0x24)err++; //時(shí)判斷bak=rBCDMIN&0x7F;if(bak>0x59)err++; //分判斷bak=rBCDSEC&0x7F;if(bak>0x59)err++; //秒判斷if(err==0)return;//若時(shí)鐘正確,則直接返回}rRTCCON=0x01; //標(biāo)準(zhǔn)模式,RTC接口使能(允許寫)rBCDYEAR=INIT_YEAR&0xFF;rBCDMON=INIT_MONTH&0x1F;rBCDDATE=INIT_DATE&0x3F;rBCDDAY=INIT_DAY&0x07;//星期,MON:1TUE:2WED:3THU:4FRI:5SAT:6SUN:7rBCDHOUR=INIT_HOUR&0x3F;rBCDMIN=INIT_MIN&0x7F;rBCDSEC=INIT_SEC&0x7F;rRTCCON=0x00; //禁止RTC接口(只允許RTC計(jì)數(shù)和讀數(shù))}//讀時(shí)間voidRTC_Read(uint32date){if(date){g_year=rBCDYEAR;g_month=rBCDMON;g_date=rBCDDATE;g_day=rBCDDAY;}g_hour=rBCDHOUR;g_min=rBCDMIN;g_sec=rBCDSEC;}〃顯示時(shí)間voidDispRTC(void){sprintf(disp_buf,"%02x:%02x:%02x%10s,%2x/%2x/20%02x\n",g_hour,g_min,g_sec,str_day[g_day],g_month,g_date,g_year);UART_SendStr(disp_buf);}//初始化PWM定時(shí)器voidPWM_Init(uint16cycle,uint16duty)if(duty>cycle)duty=cycle; //參數(shù)過濾//設(shè)置定時(shí)器0,即PWM周期和占空比//Fclk=200MHz,時(shí)鐘分頻配置為1:2:4,艮口Pclk=50MHz。rTCFG0=97; //預(yù)分頻器0設(shè)置為98,取得510204HzrTCFG1=0; //TIMER0再取1/2分頻,取得255102HzrTCMPB0=duty;//設(shè)置PWM占空比rTCNTB0=cycle;//定時(shí)值(PWM周期)if(rTCON&0x04)rTCON=(1<<1); //更新定時(shí)器數(shù)據(jù)(取反輸出inverter位)elserTCON=(1<<2)|(1<<1);rTCON=(1<<0)|(1<<3); //啟動(dòng)定時(shí)器}//外部中斷初始化voidEINT_init(void){rGPFCON=(rGPFCON&0xFFFFFCFF)|(0x02<<8); //設(shè)置GPF4引腳為外部中斷EINT4功能rEXTINT0=(0x2<<16); //外部中斷EINT4設(shè)置為下降沿觸發(fā)rINTMSK=rINTMSK&(?(1<<1)); //使能EINT4中斷rEINTMASK=?0x0000010;}〃中斷服務(wù)程序voidIRQ_Eint4(void){inti;inttemp;//按鍵去抖動(dòng)rGPFCON=rGPFCON&(?(0x03<<8));//設(shè)置為GPIO輸入方式for(i=0;i<10000;i++); //延時(shí)去抖動(dòng)if(rGPFDAT)//若是假按鍵,則直接退出rGPFCON=rGPFCONI(0x02<<8);//設(shè)置回EINT4中斷口//清除中斷標(biāo)志rEINTPEND=(1<<4);rSRCPND=(1<<4);rINTPND=rINTPND;return;}rGPFCON=rGPFCON|(0x02<<8); //設(shè)置回EINT4中斷口//執(zhí)行串口發(fā)送數(shù)據(jù)UART_Select(0); //選擇UART0UART_Init(); //初始化UART0UART_SendStr("stoptime\n");RTC_Init(0);//初始化RTC(非強(qiáng)行方式)RTC_Read(1); //讀日期temp=0;while(temp==rBCDSEC);temp=rBCDSEC;RTC_Read(0);//讀時(shí)間DispRTC(); //輸出時(shí)間顯示//清除中斷標(biāo)志rEINTPEND=(1<<4);rSRCPND=(1<<4);rINTPND=rINTPND;}//定時(shí)器1初始化voidIRQ_TimInit(void)

//Fclk=200MHz,時(shí)鐘分頻配置為1:2:4,艮口Pclk=50MHz。//rTCFG0=255; ////rTCFGl=3;rTCMPBl=0x0000; //rTCFG0=255; ////rTCFGl=3;rTCMPBl=0x0000; //rTCNTB1=255102; //rTCON=(1<<8);rTCON=(1<<7)|(1<<10);IRQEnable(); ////TIMER0再取1/4分頻,取得50KHz設(shè)置定時(shí)器為0定時(shí)1秒//更新定時(shí)器數(shù)據(jù)//啟動(dòng)定時(shí)器使能IRQ中斷(CPSR)//定時(shí)中斷服務(wù)程序voidIRQ_Time0(void)//voidIRQ_Time0(void){inti;UART_Select(0); //選擇UART0UART_Init(); //初始化UART0DelayNS(50);for(i=0;i<10;i++){UART_SendStr("continuetime!\n");}//清除中斷標(biāo)志rSRCPND=1<<10;rINTPND=rINTPND;}//主函數(shù)voidmain(void)inti,j;inttemp;uint16key;disp_buf0[0]=0;disp_buf1[0]=1;disp_buf2[0]=2;disp_buf3[0]=3;//直流電機(jī)設(shè)置//TOUT0口設(shè)置rGPBCON=(rGPBCON&(?(0x03<<0)))|(0x02<<0); //rGPBCON[1:0]=10b,設(shè)置TOUT0功能rGPBUP=rGPBUPI0x0001; //禁止TOUT0口的上拉電阻//設(shè)置GPH9為GPIO輸出模式rGPHCON=(rGPHCON&(?(0x03<<18)))I(0x01<<18);//GPH9口rGPHDAT=rGPHDAT&(?(1<<9)); //輸出0電平rGPHUP=rGPHUPI(1<<9);設(shè)置GPH10為I/O輸出模式//設(shè)置中斷服務(wù)程序VICVectAddr[10]=(uint32)IRQ_Time0; //定時(shí)中斷向量地址設(shè)置VICVectAddr[4]=(uint32)IRQ_Eint4;//外部中斷向量地址設(shè)置//設(shè)置中斷控制器rPRIORITY=0x00000000; //使用默認(rèn)的固定的優(yōu)先級rINTMOD=0x00000000; //所有中斷均為IRQ中斷//GPIO設(shè)置rGPACON=rGPACON&(?(1<<21)); //A口,RUN燈控制口(GPA21)rGPHCON=(rGPHCON&(?(0x03<<20)))I(0x01<<20); //rGPHCON[21:20]=01b,設(shè)置GPH10為I/O輸出模式//初始化I2C接口InitI2C()//使能EINT4中斷//使能EINT4中斷rEINTMASK=~0x0000010;//顯示while(i==0){for(j=0;j<1;j++)disp_b

溫馨提示

  • 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

提交評論