驅(qū)動(dòng)開發(fā)-RTC時(shí)鐘控制技術(shù)_第1頁
驅(qū)動(dòng)開發(fā)-RTC時(shí)鐘控制技術(shù)_第2頁
驅(qū)動(dòng)開發(fā)-RTC時(shí)鐘控制技術(shù)_第3頁
驅(qū)動(dòng)開發(fā)-RTC時(shí)鐘控制技術(shù)_第4頁
驅(qū)動(dòng)開發(fā)-RTC時(shí)鐘控制技術(shù)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、RTC時(shí)鐘控制技術(shù)一、 確定任務(wù)1、 掌握基本的字符設(shè)備的驅(qū)動(dòng)程序設(shè)計(jì)。2、 掌握基本的文件操作。3、 掌握RTC的工作原理和使用方法。4、 掌握在操作系統(tǒng)下RTC驅(qū)動(dòng)程序的原理。二、 學(xué)習(xí)內(nèi)容 1、 閱讀S5PV210數(shù)據(jù)手冊(cè),熟悉RTC的原理。2、 編寫操作RTC的應(yīng)用程序。3、 編寫makefile文件。4、下載并調(diào)試操作RTC的應(yīng)用程序。三、基礎(chǔ)知識(shí)1、 硬件原理:a) 原理圖:b) 系統(tǒng)框架圖:由圖可知:RTC控制器就是在外部時(shí)鐘的作用下,通過將外部時(shí)鐘頻率分頻為1HZ,送到各個(gè)秒、分、時(shí)、天、月、年計(jì)數(shù)器來計(jì)數(shù)。c) 寄存器簡(jiǎn)介RTCCON控制寄存器是一個(gè)32位低10位有效的控制寄

2、存器,其中RTCEN位控制CPU和RTC之間的交互。RTCRST用于使能時(shí)鐘分頻器。TICNT寄存器是時(shí)鐘滴答計(jì)數(shù)器,當(dāng)TICNT寄存器計(jì)數(shù)減到0時(shí)將產(chǎn)生一個(gè)滴答時(shí)鐘中斷。RTCALM寄存器主要用于控制時(shí)鐘報(bào)警功能,若使能了報(bào)警功能,則到達(dá)設(shè)定時(shí)間時(shí)將產(chǎn)生ALARM_INT和ALARM_WK兩個(gè)信號(hào)。BCDSEC、BCDMIN、BCDHOUR、BCDDAY、BCDWEEK、BCDMON、BCEYEAR寄存器分別用于設(shè)置秒、分、時(shí)、日、星期、月、年的值。(注意這些寄存器是數(shù)據(jù)存儲(chǔ)格式為BCD碼)四、基本原理1、 RTC介紹:實(shí)時(shí)時(shí)鐘RTC器件是一種能提供日歷/時(shí)鐘、數(shù)據(jù)存儲(chǔ)等功能的集成電路,常用

3、作各種計(jì)算機(jī)系統(tǒng)的時(shí)鐘信號(hào)源和參數(shù)設(shè)置存儲(chǔ)電路。RTC具有計(jì)時(shí)準(zhǔn)確、耗電低和體積小等特點(diǎn),特別適用于在各種嵌入式系統(tǒng)中記錄事件發(fā)生的時(shí)間和相關(guān)信息,尤其是在通信工程,電力自動(dòng)化、工業(yè)控制等自動(dòng)化程度較高領(lǐng)域的無人值守環(huán)境。RTC器件與微控制器之間的接口大都采用連線簡(jiǎn)單的串行接口,諸如I2C、SPI、MICROWIRE和CAN等串行總線接口。這些串口由23根線連接,分為同步和異步接口。S3C6410片上已經(jīng)集成了RTC控制器,所以,不需要外接RTC芯片。S3C6410RTC的特點(diǎn):BCD數(shù)據(jù):秒、分、小時(shí)、星期、日期、月份和年份;鬧鐘(報(bào)警)功能:產(chǎn)生定時(shí)中斷或激活系統(tǒng);自動(dòng)計(jì)算閏年;無2000

4、年問題;獨(dú)立的電源輸入。2、 驅(qū)動(dòng)原理:將RTC抽象為一個(gè)字符設(shè)備,通過系統(tǒng)提供的標(biāo)準(zhǔn)接口,來獲取或者設(shè)置RTC時(shí)間。五、代碼設(shè)計(jì) 1、 驅(qū)動(dòng)簡(jiǎn)析(詳細(xì)代碼請(qǐng)查看./arch/arm/mach-s5pv210/smdkc110-rtc.c):static int _devinit smdkc110_rtc_probe(struct platform_device *pdev)smdkc110_rtc_alarmno = platform_get_irq(pdev, 0); /rtc時(shí)鐘定時(shí)中斷res = platform_get_resource(pdev, IORESOURCE_MEM, 0

5、); /獲取rtc平臺(tái)資源smdkc110_rtc_base = ioremap(res-start, res-end - res-start + 1)/映射rtc寄存器地址readw(smdkc110_rtc_base + S3C2410_RTCCON); /讀取RTCCONdevice_init_wakeup(&pdev-dev, 1); /使能喚醒smdkc110_rtc_gettime(&pdev-dev, &tm); /獲取時(shí)間if (tm.tm_mon 12 | tm.tm_mday 31 | tm.tm_year 3840) /判斷時(shí)間值是否超出范圍 /* Set the def

6、ault time. 2012:1:1:12:0:0 */tm.tm_year = 112;tm.tm_mon = 0;tm.tm_mday = 1;tm.tm_hour = 12;tm.tm_min = 0;tm.tm_sec = 0;smdkc110_rtc_settime(&pdev-dev, &tm); /設(shè)置時(shí)間rtc = rtc_device_register(s3c, &pdev-dev, &smdkc110_rtcops, THIS_MODULE); /rtc設(shè)備注冊(cè)platform_set_drvdata(pdev, rtc); /設(shè)置設(shè)備數(shù)據(jù)static int smdkc

7、110_rtc_settime(struct device *dev, struct rtc_time *tm)/* we get around y2k by simply not supporting it */if (year = 1000) dev_err(dev, rtc only supports 0999 yearsn);return -EINVAL;smdkc110_rtc_enable(dev, 1); /使能RTCEN位 ,改變r(jià)tc值writeb(bin2bcd(tm-tm_sec), base + S3C2410_RTCSEC); writeb(bin2bcd(tm-tm

8、_min), base + S3C2410_RTCMIN);writeb(bin2bcd(tm-tm_hour), base + S3C2410_RTCHOUR);writeb(bin2bcd(tm-tm_mday), base + S3C2410_RTCDATE);writeb(bin2bcd(tm-tm_mon + 1), base + S3C2410_RTCMON);/*獲取年份0999*/year100 = year/100;year = year%100;year = bin2bcd(year) | (bin2bcd(year100) tm_sec = readb(base + S3

9、C2410_RTCSEC);rtc_tm-tm_min = readb(base + S3C2410_RTCMIN);rtc_tm-tm_hour = readb(base + S3C2410_RTCHOUR);rtc_tm-tm_mday = readb(base + S3C2410_RTCDATE);rtc_tm-tm_mon = readb(base + S3C2410_RTCMON);rtc_tm-tm_year = readl(base + S3C2410_RTCYEAR);/* the only way to work out wether the system was mid-u

10、pdate * when we read it is to check the second counter, and if it * is zero, then we re-try the entire read */if (rtc_tm-tm_sec = 0 & !have_retried) /防止千年蟲問題have_retried = 1;goto retry_get_time;smdkc110_rtc_enable(dev, 0);rtc_tm-tm_sec = bcd2bin(rtc_tm-tm_sec);rtc_tm-tm_min = bcd2bin(rtc_tm-tm_min);

11、rtc_tm-tm_hour = bcd2bin(rtc_tm-tm_hour);rtc_tm-tm_mday = bcd2bin(rtc_tm-tm_mday);rtc_tm-tm_mon = bcd2bin(rtc_tm-tm_mon);rtc_tm-tm_year = bcd2bin(rtc_tm-tm_year & 0xff) + bcd2bin(rtc_tm-tm_year 8) * 100;rtc_tm-tm_mon -= 1;return 0;2、 測(cè)試代碼編寫(詳細(xì)代碼請(qǐng)查看附件):#include #include #include #include #include #in

12、clude #include #include #include #include struct rtc_time tm;void Usage(char *args)printf(Usage:%s n,args);return ;void help(void)printf(#n);printf(time format:n);printf( tYYYY.MM.DD-hh:mm:ssntYYYY-MM-DD hh:mm:ssn);printf(#n);return ;void str_to_time(char *time)if(time=NULL)printf(errorn);exit(EXIT_

13、FAILURE);size_t ret ;ret = strcspn(time,0123456789);sscanf(time+ret,%4d%*c%2d%*c%2d%*c%2d%*c%2d%*c%2d,&tm.tm_year,&tm.tm_mon,&tm.tm_mday,&tm.tm_hour,&tm.tm_min,&tm.tm_sec);tm.tm_year -=1900;tm.tm_mon -=1;int main(int argc,char *argv)if(argc !=2)Usage(argv0);exit(EXIT_FAILURE);char *t=NULL;size_t len

14、 =0;int tm_fd;int ret;tm_fd = open(/dev/rtc0,O_RDWR);if(tm_fd 0)perror(open device);exit(EXIT_FAILURE);if(!strncmp(argv1,settime,7) | !strncmp(argv1,set,3)help();getline(&t,&len,stdin);str_to_time(t);ret = ioctl(tm_fd , RTC_SET_TIME,&tm);if(ret 0)perror(set time );exit(EXIT_FAILURE);ioctl(tm_fd,RTC_

15、RD_TIME,&tm);printf(Current RTC date/time is %d-%d-%d, %02d:%02d:%02dn, tm.tm_mday, tm.tm_mon+1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min, tm.tm_sec);else if(!strncmp(argv1,gettime ,7) |!strncmp(argv1,get,3)ioctl(tm_fd,RTC_RD_TIME,&tm);printf(Current RTC date/time is %d-%d-%d, %02d:%02d:%02dn, tm.tm_mday, tm.tm_mon+1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min, tm.tm_sec);elseUsage(argv0);exit(EXIT_FAILURE);if(t)free(t);clos

溫馨提示

  • 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)論