對於手機、pda的嵌入式平台的關機鬧鐘都使用rtc實現,rtc是乙個硬體。
rtc中儲存兩個時間,乙個是普通的滴答時間,另乙個是提醒時間,rtc猶如乙個滴答計時器,當rtc中時鐘到達指定的提醒時間的時候,就會發出中斷,讓系統開機,從而達到關機鬧鐘的功能。
在linux中,當系統啟動之後,會啟動乙個叫atd的deamon程序,用於操作rtc。
atd中會用while迴圈不停的查詢/var/spool/at/***.pid和/var/spool/at/trigger兩個管道是否有資料,如果有則重新設定rtc的滴答時間或是提醒時間(/var/spool/at/***.pid是以提醒的時間的utc的秒數來命名的;而/var/spool/at/trigger中有資料"w"表示需要將系統當前時間寫到rtc中)。當設定乙個提醒時間到rtc之後,會使用select監聽/var/spool/at/***.pid和/var/spool/at/trigger兩個管道及rtc提醒時間的中斷訊息。
rtc硬體對應的裝置檔案是/dev/rtc。
下面省略了open和close介面
對rtc裝置的讀操作主要是返回目前rtc的中斷情況的乙個狀態值(**中用rtc_irq_status標識),這個值是乙個unsigned long型別的資料,該資料的定義如下:
其他bit
低8bit
中斷次數
中斷型別
下面的巨集定義了中斷的型別:
#define rtc_irqf 0x80
#define rtc_pf 0x40
#define rtc_af 0x20
#define rtc_uf 0x10
rtc_pf標識periodic interrupt flag。
rtc_af標識alarm interrupt flag
rtc_uf標識update interrupt flag
沒有中斷產生的時候,rtc沒有資料可讀。
rtc misc driver實現的ioctl命令包括: 命令
解釋rtc_aie_off
關閉alarm中斷
rtc_aie_on
開啟alarm中斷
rtc_pie_on
開啟週期性中斷
rtc_pie_off
關閉週期性中斷
rtc_uie_on
開啟update型別的中斷
rtc_uie_off
關閉update型別的中斷
rtc_alm_read
讀取alarm的時間
rtc_alm_set
設定alarm的時間
rtc_rd_time
讀取當前的rtc時間
rtc_set_time
設定當前的rtc時間
rtc_irqp_read
讀取當前週期性中斷的頻率
rtc_irqp_set
設定當前週期性中斷的頻率
1)同時只能有乙個程序開啟/dev/rtc裝置進行操作;
2)對rtc寫alarm之後,不能關閉裝置號,否則設定的alarm無效,必須在alarm中斷到達之後關閉才有效
說明:上面是分析qtopia得出的結論,如果有分析不清楚或是表達不得當的地方,請多多指教!
嵌入式Linux中RTC的操作說明
對於手機 pda的嵌入式平台的關機鬧鐘都使用rtc實現,rtc是乙個硬體。rtc中儲存兩個時間,乙個是普通的滴答時間,另乙個是提醒時間,rtc猶如乙個滴答計時器,當rtc中時鐘到達指定的提醒時間的時候,就會發出中斷,讓系統開機,從而達到關機鬧鐘的功能。在linux中,當系統啟動之後,會啟動乙個叫at...
藍橋杯嵌入式 RTC
bkp裡是關於備份暫存器的庫函式,pwr裡是關於電源管理的庫函式 ifndef rtc h define rtc h include stm32f10x.h void rtc init u8 hh,u8 mm,u8 ss endif include rtc.h void rtc init u8 hh...
嵌入式linux下操作GPIO
本文 在嵌入式裝置中對gpio的操作是最基本的操作。一般的做法是寫乙個單獨驅動程式,網上大多數的例子都是這樣的。其實linux下面有乙個通用的gpio操作介面,那就是我要介紹的 sys class gpio 方式。首先,看看系統中有沒有 sys class gpio 這個資料夾。如果沒有請在編譯核心...