實(shí)時(shí)時(shí)鐘參考程序_第1頁
實(shí)時(shí)時(shí)鐘參考程序_第2頁
實(shí)時(shí)時(shí)鐘參考程序_第3頁
實(shí)時(shí)時(shí)鐘參考程序_第4頁
實(shí)時(shí)時(shí)鐘參考程序_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、5.6 實(shí)時(shí)時(shí)鐘實(shí)驗(yàn)5.6.1 實(shí)驗(yàn)?zāi)康?. 了解實(shí)時(shí)時(shí)鐘在嵌入式系統(tǒng)中的作用;2. 掌握實(shí)時(shí)時(shí)鐘的使用。5.6.2 實(shí)驗(yàn)內(nèi)容1. 編程實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘功能,每秒顯示實(shí)時(shí)時(shí)鐘;2. 編程實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘告警功能。5.6.3 預(yù)備知識(shí)1. 了解ADT集成開發(fā)環(huán)境的基本功能;2. 學(xué)習(xí)S3C24X0的實(shí)時(shí)時(shí)鐘模塊的使用。5.6.4 實(shí)驗(yàn)設(shè)備1. 硬件:JXARM9-2440教學(xué)實(shí)驗(yàn)箱、PC機(jī);2. 軟件:PC機(jī)操作系統(tǒng) Windows 98(2000、XP) ADT IDE開發(fā)環(huán)境。5.6.5 基礎(chǔ)知識(shí)1. 實(shí)時(shí)時(shí)鐘在嵌入式系統(tǒng)中的作用在一個(gè)嵌入式系統(tǒng)中,實(shí)時(shí)時(shí)鐘單元可以提供可靠的時(shí)鐘,包括時(shí)、分、秒和年

2、、月、日;即使在系統(tǒng)處于關(guān)機(jī)狀態(tài)下它也能夠正常工作(通常采用后備電池供電),它的外圍也不需要太多的輔助電路,典型的就是只需要一個(gè)高精度的晶振。2. S3C24X0的實(shí)時(shí)時(shí)鐘單元下圖為S3C24X0的實(shí)時(shí)時(shí)鐘框圖。它具有以下特點(diǎn):圖5-12 S3C24X0的實(shí)時(shí)時(shí)鐘框圖1)時(shí)鐘數(shù)據(jù)采用BCD編碼;2)能夠?qū)﹂c年的年月日進(jìn)行自動(dòng)處理;3)具有告警功能,當(dāng)系統(tǒng)處于關(guān)機(jī)狀態(tài)時(shí),能產(chǎn)生告警中斷;4)具有獨(dú)立的電源輸入;5)提供毫秒級(jí)時(shí)鐘中斷,該中斷可以用于作為嵌入式操作系統(tǒng)的內(nèi)核時(shí)鐘。3. S3C24X0的實(shí)時(shí)時(shí)鐘寄存器1) 控制寄存器表5-16 控制寄存器寄 存 器地 址讀/寫狀態(tài)描 述復(fù)位值RTCC

3、ON0x57000040R/W實(shí)時(shí)時(shí)鐘控制寄存器0x0RTCCON位描 述復(fù) 位 值CLKRST3實(shí)時(shí)時(shí)鐘計(jì)數(shù)器復(fù)位0不復(fù)位 1復(fù)位0CNTSEL2BCD計(jì)數(shù)選擇,將計(jì)數(shù)器設(shè)置為BCD模式0選擇BCD模式 1保留0CLKSEL1BCD時(shí)鐘選擇0將輸入時(shí)鐘進(jìn)行1/215分頻 1保留0RTCEN0RTC讀寫使能0禁止 1使能02) 告警控制寄存器表5-17 告警控制寄存器寄 存 器地 址讀/寫狀態(tài)描 述復(fù) 位值RTCALM0x57000050R/W告警控制寄存器0x00RTCALM位描 述復(fù) 位 值Reserved7保留0ALMEN6時(shí)鐘告警總使能/禁止0禁止 1使能0YEAREN5年時(shí)鐘告警使能

4、/禁止0禁止 1使能0MONREN4月時(shí)鐘告警使能/禁止0禁止 1使能0DAYEN3日時(shí)鐘告警使能/禁止0禁止 1使能0HOUREN2時(shí)時(shí)鐘告警使能/禁止0禁止 1使能0MINEN1分時(shí)鐘告警使能/禁止0禁止 1使能0SECEN0秒時(shí)鐘告警使能/禁止0禁止 1使能03) 實(shí)時(shí)時(shí)鐘計(jì)數(shù)器表5-18 實(shí)時(shí)時(shí)鐘計(jì)數(shù)器寄存器地址讀寫描述復(fù)位值TICNT0x57000044R/W實(shí)時(shí)時(shí)鐘計(jì)數(shù)器0x00000000TICNT位描述復(fù)位值TICK INT ENABLE7中斷使能/禁止0禁止 1使能0TICK TIME COUNT6:0實(shí)時(shí)時(shí)鐘計(jì)數(shù)器00000004) 告警時(shí)間寄存器包括年、月、日、時(shí)、分、秒

5、。它們都以BCD的格式表示,地址見下表:表5-19 告警時(shí)間寄存器寄存器地址讀/寫狀態(tài)描述復(fù)位值A(chǔ)LMSEC0x57000054R/W秒時(shí)鐘告警值0x00ALMMIN0x57000058R/W分時(shí)鐘告警值0x00ALMHOUR0x5700005CR/W時(shí)時(shí)鐘告警值0x00ALMDAY0x57000060R/W日時(shí)鐘告警值0x00ALMMON0x57000064R/W月時(shí)鐘告警值0x00ALMYEAR0x57000068R/W年時(shí)鐘告警值0x005) 實(shí)時(shí)時(shí)鐘寄存器包括年、月、日、時(shí)、分、秒。它們都以BCD的格式表示,地址見下表:表5-20 實(shí)時(shí)時(shí)鐘寄存器寄存器地址讀/寫狀態(tài)描述復(fù)位值BCDSE

6、C0x57000070R/W秒時(shí)鐘當(dāng)前值不定BCDMIN0x57000074R/W分時(shí)鐘當(dāng)前值不定BCDHOUR0x57000078R/W時(shí)時(shí)鐘當(dāng)前值不定BCDDAY0x5700007CR/W日時(shí)鐘當(dāng)前值不定BCDDATE0x57000080R/W星期值當(dāng)前值不定BCDMON0x57000084R/W月時(shí)鐘當(dāng)前值不定BCDYEAR0x57000088R/W年時(shí)鐘當(dāng)前值不定注意事項(xiàng):1. 以上各寄存器都只能以字節(jié)模式進(jìn)行讀寫操作;2. 當(dāng)系統(tǒng)使用BIG-ENDIAN模式時(shí),各寄存器對(duì)應(yīng)的地址為會(huì)有所改變,具體值請(qǐng)參考S3C44B0X的數(shù)據(jù)手冊(cè)。4. 實(shí)驗(yàn)參考代碼及說明:/* 包含文件 */#in

7、clude "2410addr.h"#include "2410lib.h"#include "2410RTC.h"#include "interrupt.h"/* 表示日期、時(shí)間的數(shù)據(jù)結(jié)構(gòu) */typedef struct ST_DATEshort year; / 年charmon; / 月charday; / 日charweek_day; / 星期charhour; / 時(shí)charmin; / 分charsec; / 秒 st_date;/* 全局變量 */int led_index = 0;int ext0_

8、count = 0;/* functions */void rtc_tick_isr(void);void rtc_int_isr(void);/*/ Function name: rtc_set_date/ Description : 修改實(shí)時(shí)時(shí)鐘當(dāng)前時(shí)間、日期/ Return type: void/ Argument : p_date, 待設(shè)置的日期*/void rtc_set_date(st_date* p_date) rRTCCON = 0x01; rBCDYEAR = p_date->year; rBCDMON = p_date->mon; rBCDDAY = p_dat

9、e->day; rBCDDATE = p_date->week_day; rBCDHOUR = p_date->hour; rBCDMIN = p_date->min; rBCDSEC = p_date->sec; rRTCCON = 0x00;/*/ Function name: rtc_get_date/ Description : 獲取實(shí)時(shí)時(shí)鐘當(dāng)前時(shí)間、日期/ Return type: void/ Argument : p_date, 返回日期的指針*/void rtc_get_date(st_date* p_date) rRTCCON = 0x01; p_

10、date->year= rBCDYEAR ; p_date->mon= rBCDMON ; p_date->day= rBCDDAY ; p_date->week_day= rBCDDATE ; p_date->hour= rBCDHOUR ; p_date->min= rBCDMIN ; p_date->sec= rBCDSEC ; rRTCCON = 0x00;/*/ Function name: rtc_tick_init/ Description : 初始化S3C2410的TICK定時(shí)器/ Return type: void/ Argument

11、 : tick, 設(shè)置的TICK頻率(時(shí)鐘滴答的周期為 (1+tick)/128秒)*/void rtc_tick_init( char tick ) Irq_Request(IRQ_TICK, rtc_tick_isr); rRTCCON = 0x0; /No reset3, Merge BCD counters2, BCD clock select XTAL1, RTC Control disable0 rTICNT = (tick&0x7f)|0x80;/*TICK 中斷使能,周期為(1+tick)/128秒*/ Irq_Enable(IRQ_TICK); /*/ Functio

12、n name: rtc_alarm_set/ Description : 設(shè)置S3C2410的告警時(shí)間以及方式/ Return type: void/ Argument : p_date, 告警的時(shí)間/ mode, 告警模式*/void rtc_alarm_set(st_date* p_date, unsigned char mode) Irq_Request(IRQ_RTC, rtc_int_isr); rRTCCON = 0x01; rALMYEAR = p_date->year; rALMMON = p_date->mon; rALMDATE = p_date->day

13、; rALMHOUR = p_date->hour; rALMMIN = p_date->min; rALMSEC = p_date->sec; rRTCALM = mode; rRTCCON = 0x00; Irq_Enable(IRQ_RTC); /*/ Function name: Main/ Description : JXARM9-2440 實(shí)時(shí)時(shí)鐘實(shí)驗(yàn)主程序/ 完成功能:/ 時(shí)鐘滴答:每秒鐘刷新數(shù)碼管顯示/ 設(shè)置當(dāng)前日期、時(shí)間/ 動(dòng)態(tài)刷新當(dāng)前日期、時(shí)間,通過串口打印出來/ 時(shí)間告警功能:每分鐘的第5秒告警,并進(jìn)行跑馬燈顯示/ Return type: void/

14、Argument : void*/void Main(void)int old_index ;st_date m_date;/* 配置系統(tǒng)時(shí)鐘 */ ChangeClockDivider(2,1); U32 mpll_val = 0 ; mpll_val = (92<<12)|(1<<4)|(1); ChangeMPllValue(mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);/* 中斷初始化 */ Isr_Init(); /* 初始化串口 */ Uart_Init

15、(0,115200); Uart_Select(0); /* 打印提示信息 */Uart_Printf("n-實(shí)時(shí)時(shí)鐘測試程序-n");Uart_Printf("n請(qǐng)將UART0與PC串口進(jìn)行連接,然后啟動(dòng)超級(jí)終端程序(115200, 8, N, 1)n");Uart_Printf("n實(shí)時(shí)時(shí)鐘測試開始n");/* 采用BCD編碼,如2004年需要設(shè)置的值為0x2004 */ m_date.year= 0x2000+0x04 ; m_date.mon= 0x03 ; m_date.day= 0x02 ; m_date.week_day

16、= 0x02 ; m_date.hour= 0x15 ; m_date.min= 0x40 ; m_date.sec= 0x00 ; /* 修改當(dāng)前日期和時(shí)間 */ rtc_set_date(&m_date); m_date.sec= 0x05 ; /* 設(shè)置告警的時(shí)間及方式,0x41表示使能RTC告警,以及使能秒時(shí)鐘告警 */ rtc_alarm_set(&m_date, 0x41);rtc_tick_init(127);old_index = led_index; Uart_Printf("rnrn"); while(1) if(old_index !=

17、 led_index)/* 每隔一秒更新一次數(shù)據(jù)*/ rtc_get_date(&m_date); old_index = led_index; Uart_Printf(/* 時(shí)鐘數(shù)據(jù)為BCD碼格式,以16進(jìn)制顯示 */"bbbbbbbb%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec); ;/*/ Function name: rtc_tick_isr/ Description : TICK中斷處理程序,程序中設(shè)置每秒鐘引發(fā)一次中斷/ Return type: int/ Argument : void*/void rtc_tick_isr(void)Irq_Clear(IRQ_TICK); /* 清除TICK中斷 */ led_index+;/*/ F

溫馨提示

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