嵌入式時鐘設計_第1頁
嵌入式時鐘設計_第2頁
嵌入式時鐘設計_第3頁
嵌入式時鐘設計_第4頁
嵌入式時鐘設計_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 嵌入式課程設計論文 (2014 - 2015 年度第 二 學期)題 目:基于S3C2410的時鐘設計學 院:信息工程學院班 級:12級計算機4班姓 名:劉榮凱指導教師:杜 俊日 期:2015.06報告(學生選課系統) 摘要 本文說明為多功能時鐘設計方案,基于S3C2410結合RTC模塊,IIC(控制小鍵盤和數碼管等)來做具備定期功能的實時時鐘。 實時時鐘(RTC)單元在系統電源關閉的情況下可以在備用電池下工作。RTC 可以使用STRB/LDRB ARM操作傳輸二進制碼十進制數的 8 位數據給 CPU。數據包括秒、分鐘、小時、日期、天、月、年的時間信息。RTC 單元可以在 32.768KHz

2、的外部晶振下工作,可以可以執行報警功能。關鍵詞:多功能時鐘功能時鐘;S3C2410;RTC;IIC目錄一、實驗題目分析11.1 問題描述11.2功能分析11.3 開發平臺及工具介紹1二、實驗概要設計12.1 實驗基本原理12.2 實驗電路圖4三、實驗詳細過程63.1 具體實驗過程和內容63.2 程序流程圖63.3 實驗和程序問題分析8四、實驗步驟第一大部分(目標機的連接)12五、ADS軟件的使用12六、調試部分13七、實驗輸出界面13八、學習心得14九、參考文獻15 一、實驗題目分析1.1 問題描述結合實時時鐘,IIC(控制小鍵盤和數碼管等)來做具備定期功能的實時時鐘。1.2功能分析至少完成以

3、下功能: (1)能顯示每秒的時刻 (2)按下功能鍵能切換顯示日期 (3)能設置定時鬧鐘,定時到產生某種輸出 (4)可以擴展考慮加入外部中斷,如停止鬧鐘功能等。1.3 開發平臺及工具介紹 實驗器材:CITK2410開發板,JTAG連接線,調試器,并口數據線,串口數據線開發軟件:ADS1.2集成開發環境二、實驗概要設計2.1 實驗基本原理 IIC總線:IIC總線的器件分為主器件和從器件。主器件的功能是啟動在總線上傳送數據,并產生時鐘脈沖,以允許與被尋址的器件進行數據傳送。SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信

4、號。 圖1 起始和停止信號圖 I2C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有在時鐘線上的信號為低電平期間,數據線上的高電平或低電平狀態才允許變化。圖2 數據傳送時序圖 IIC總線(IICSDA、IICSCL)經過VDD33的上拉后,進入ZLG7290數碼管:實驗使用的數碼管是廣州周立公司單片機發展有限公司自行設計的一款數碼管顯示驅動及鍵盤掃描管理芯片。下面是介紹該數碼管的特點還有電路圖(圖3):1 IIC串行接口提供鍵盤中斷信號方便與處理器接口2 可驅動8 位共陰數碼管或64只獨立LED 和64個按鍵3 可控掃描位數可控任一數碼管閃爍4 提供數據譯碼和循環移位

5、段尋址等控制5 8個功能鍵可檢測任一鍵的連擊次數6 無需外接元件即直接驅LED可擴展驅動電流和驅動電壓7 提供工業級器件多種封裝形式PDIP24 SO24采用24引腳封裝引腳圖如圖所示其引腳功能分述如下: 圖3 ZLG7290引腳圖圖4 IIC LED控制器連接電路 實時時鐘(Real Time Clock):S3C2410提供了一個實時時鐘,該時鐘使用獨立的一路1.8V供電,保證主電源切斷時能正常維持RTC工作。S3C2410的RTC支持兩個中斷:Time Tick(固定在一個頻率內發出的時鐘中斷) 和Alarm中斷(在某個時刻產生鬧鈴中斷)。利用這兩個中斷可以設置每一秒中斷一次顯示變化時間

6、,用Alarm中斷實現鬧鐘功能。以下為S3C2410內部RTC模塊結構圖:圖5 S3C2410內部RTC模塊結構 特點:1.BCD數:秒、分鐘、小時、日期、日、月、年;2.閏年生成器;3.報警功能:報警中斷或從掉電模式中喚醒;4.已經解決2000年問題;5.獨立電源引腳(RTCVDD);6.支持對于實時內核時間節拍的毫秒節拍時間中斷。2.2 實驗電路圖2.2.1S3C2410主芯片2.2.2 ZLG7290功能電路圖:圖6 ZLG7290功能電路圖2.2.3 IIC總線接口電路圖:圖7 IIC總線接口電路圖圖8 TC單元在32.768KHz 頻率下振蕩的電路2.2.4 電源電路部分2.2.5

7、時鐘電路部分2.2.6 按鍵電路部分2.2.7 復位電路部分2.3 實驗主要步驟1.初始化配置(各種寄存器)。2.編寫各種相關的中斷程序。3.主函數調用這幾個中斷程序。4.編譯程序。5.使用仿真器調試。三、實驗詳細過程3.1 具體實驗過程和內容(1)實現實時時鐘功能 設置rRTCCON、rTICNT、rRTCALM寄存器;ICNT6:0=127;可以設置rTICNT=(1<<7)|(127)實現每秒中斷一次;以設置鬧鈴寄存器,例如每秒的第幾秒中斷一次,實現定時鬧鐘的功能;設置初始化當前時間;里還包括編寫Time Tick中斷和Alarm中斷的中斷服務程序。(2)初始化IIC總線,寫

8、一個IIC的操作庫。包括發送和接受功能。編寫可以向ZLG7290發出指令的函數。(3)編寫鍵盤中斷處理程序 通過鍵盤中斷,實現數碼管顯示日期和時間的切換,還有停止。(4)使用ADS1.2集成開發環境編譯調試程序(5)使用仿真器調試。3.2 程序流程圖程序入口點2410初始化主函數顯示時間鬧鐘停止延時N切換Y顯示日期圖9初始化 鍵盤中斷Alarm中斷Time tick中斷數碼管顯示時間或日期鬧鐘輸出當前時間圖103.3 實驗和程序問題分析 這次試驗實際上是融合了三個實驗的要求,要實驗實時時鐘的功能,包括顯示當前時間,還有設置鬧鐘,主要使用到2410的RTC的兩個中斷:Time Tick和Alar

9、m中斷。而要實現在數碼管上顯示當前時間,并且按鍵盤時實現時間與日期的切換,需要用到數碼管和IIC總線的知識。而實現的難處在于如何把幾個內容融合并且實現所需的功能,這也是實驗要求做的。3.3.1鍵值讀取模塊int keyScan(void) /讀取按鍵,如果SW17按下,則返回1,否則如果按下SW19,則返回0 /j80,2-3,j81,2-3 int keyValue=0,tValue; tValue=rGPGDAT; if(!(tValue&(1<<3) keyValue=1; /若SW17被按下,則將keyValue賦值為1 else if(!(tValue&(

10、1<<2) keyValue=2; /若SW19被按下,則將keyValue賦值為2 return keyValue;/返回keyValue的值3.3.2 GPIO的端口配置;GPE,GPH bl delay ;調用延時子程序 ldr r0,=GPECON ;r0中為寄存器GPECON的值 ldr r1,r0 ;把r0中的值賦給r1 bic r1,r1,#(3<<11*2)|(3<<12*2) ;把GPE11和GPE12設為輸出方式 orr r1,r1,#(1<<11*2)|(1<<12*2) str r1,r0 ;將r1的的值保存到

11、r1所對應的內存單元中 ldr 0,=GPHCON ;r0中為寄存器GPHCON的值 ldr r1,r0 ;把r0中的值賦給r1 bic r1,r1,#(3<<6*2)|(3<<4*2) ;把GPH6和GPH4設為輸出方式 orr r1,r1,#(1<<6*2)|(1<<4*2) str r1,r0 ;將r1的的值保存到r1所對應的內存單元中3.3.3 程序代碼如下:#include ".INCconfig.h"int h=0,m=0,s=0;extern int counter; /*數碼管全部顯示0*/ void led_

12、init() unsigned char j; for(j=0;j<8;j+) write7279(decode0+j,0); /write7279(decode0+1,0x0A); /write7279(decode0+6,0x0A); /*數碼管顯示數字函數*/ void displed() write7279(decode0+3,h/10); write7279(decode0+2,h%10); write7279(decode0+1,0x0A); write7279(decode0+0,m/10); write7279(decode0+7,m%10); write7279(dec

13、ode0+6,0x0A); write7279(decode0+5,s/10); write7279(decode0+4,s%10); void Main() /char p; Target_Init(); /目標初始化 led_init(); delay10ms(100); while(1); s=counter; if(s>59)s-=60; m+=1;/超過59s,需要進位if(m>59)m-=60; h+=1; send_byte(0x88); /超過59m,需要進位if(h=24)h=0;m=0;counter=0;displed();switch(key_number)

14、 case 0: send_byte(cmd_test); /測試鍵 break; case 1: long_delay();m=m+1; Delay(7000); break; case 2: for(p=0;p<8;p+) /循環右移 send_byte(0xA0); send_byte(0xC8+7); send_byte(p); long_delay(); Delay(7000); for(;) if (key_number!=2) break; Delay(7000); send_byte(0xA2); break; case 4: send_byte(cmd_reset);

15、/復位鍵 break; case 5: write7279(decode1+5,key_number/16*8); write7279(decode1+4,key_number & 0x0f); break; case 9: for(p=0;p<8;p+) /左移 send_byte(0xA1); send_byte(0xC8); send_byte(p); long_delay(); Delay(7000); break; case 10: for(p=0;p<8;p+) /循環左移 send_byte(0xA1); send_byte(0xC8); send_byte(

16、p); long_delay(); Delay(7000); for(;) if (key_number!=10) break; Delay(7000); send_byte(0xA3); break; default: break; key_number = 0xff; Delay(50); 3.3.4定時器定時1秒void Timer1_init(void) rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000; /配置GPG口為信號輸出 rGPGDAT = rGPGDAT | 0x300; rTCFG0 = 255; / Prescaler0=2

17、55 rTCFG1 = 0 << 4; / rTCNTB1 = 48828; / 在pclk=50MHZ下,1秒鐘的記數值rTCNTB1 = 50000000 / 4 / 256 = 48828;rTCMPB1 = 0x00;四、實驗步驟第一大部分(目標機的連接):把開發板電源接口、Muilti-ICE Embeded接口連接好,如下圖,然后打開開發板電源。第一步:打開第二步:選擇File的Load Configuration第三步:選擇第四步:把文件里的內容修改一下,把里邊的7改為9第五步:用記事本修改第四步所講的內容第六步:即將里面的ARM7TDMI全部改為ARM9TDMI,其

18、他不變。第七步:然后點文件,選擇保存。第八步:把修改后的選中,點擊打開第九步:打開之后,會出現說明宿主機找到ARM的CPU了,即宿主機與ARM目標開發板連接上的畫面。五、ADS軟件的使用:第一步:打開,打開效果圖為下圖第二步:將D:ARMWINCE&ADSADS實驗跑馬燈實驗實驗代碼下的拖入上圖中其效果圖為:(本部分是利用已有的工程做的ADS應用實驗,其他應用試驗如法炮制;對于如何新建工程,詳細步驟見實驗一ADS開發環境試驗)第三步:左擊如圖標出的圖標(即調試參數設置),效果圖如下圖所示第四步:選擇Target Settings,進行設置。第五步:選擇ARM Linker,進行設置,其

19、中Scatter欄里的文件路徑為:試驗程序路徑下的scat文件(如圖)。第六步:選擇ARM fromELF選項,設置具體配置。第七步:最后,點擊上圖中的OK,調試配置參數就設置完成了。第八步:對程序進行Make操作。六、調試部分:第一步:打開調試的軟件AXD Debugger第二步:配置目標板。第三步:點擊Configure Target,對其進行設置。第四步:選擇如上圖所示點亮的連接驅動(Muiti-ICE),點擊OK。調試軟件就發現了目標板的ARM CPU。第五步:下載鏡像文件第六步:調試運行。七、實驗輸出界面選取主要界面的截圖。圖11 鍵盤功能圖12 顯示日期圖13 示時間八、學習心得通

20、過本次對ARM920T內核的S3C2410進行實驗,使我對ARM嵌入式世界有了初步認識。ARM是一種高性能、低功耗、高速的微處理器。S3C2410片上資源豐富,其多大117個通用I/O,56個中斷源和24個外部中斷。我以前研究芯片主要是看數據手冊和芯片的外圍電路,但是在剛開始著手ARM時,我是弄得是一頭霧水。在老師的指點下,我開始從芯片的例子程序入手,一個一個地弄明白歷程是怎么執行的,I/O口是怎么配置的,中文字符怎么加入、LCD上的點怎么連成線等等。在經過一番自習琢磨之后,我對嵌入式有了深一步的理解。在歷程中我們很少是對系統的硬件資源進行直接操作的,大部分時候我們是調用歷程里面給出的各種操作

21、函數對芯片進行控制,這樣就使得整個程序更加的有條理,操作對象不再是底層硬件了,而是系統給出的各種函數。我在實驗調試的時候解決了一下幾個問題:通過此次課程作業,讓我嚴重地意識到了自己知識的不全面,以及動手能力的不熟練,當然,也并非沒有收獲。從理論到實踐,我學到了很多東西,不僅鞏固了以前所學的知識,而且也學到了很多書本上不能學到的內容動手實踐能力。起初剛確定題目時,一點思路都沒有,通過組員之間的互相討論,以及在老師的指導幫助下,漸漸開始構思,實驗,反復的檢驗,最終把這次課程作業完成。實驗過程中,我遇到了以下幾個問題:1、如何在數碼管上顯示特殊字符?答:使用解碼方式0可實現除0到F之外的個別特殊字符

22、,如“-”。2、如何實現LED閃爍點亮?答:使用HD7279的純指令88H,通過發送send_byte(0x88);即可實現。3、如何依次點亮數碼管?答:通過改變decode0+j中的j即可4、如何實現I/O口的初始化?答:首先對I/O口進行輸入輸出配置,然后給端口發送響應值。如:rGPGCON = rGPGCON & 0xfff0ffff | 0x00050000;rGPGDAT = rGPGDAT & 0xeff | 0x200;5、新建的工程要盡可能的避免中文路徑(這個整得我很抓狂,在程序執行過程中老是報錯,最終在實驗室老師的指導下得以改正)6、關于參數在中斷函數和主函數兩個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論