rtc_interrupt()

RTC(real_time clock)驅動程式,可以在drivers/char/rtc.c中找到。它是一個從系統定時器中獨立出來的設備,用於設定系統時鐘,提供報警器或周期性的定時器。

基本介紹

基本簡介,處理程式本身,

基本簡介

對大多數體系結構而言,系統時鐘的設定,通常只需要向某個特定的暫存器或I/O地址寫入想要的時間就可以。然而報警器或周期性定時器通常就得靠中斷來實現。

處理程式本身

static irqreturn_r rtc_interrupt(int irq,void *dev_id , struct pt_regs *regs)
{
spin_lock(&rtc_lock);
rtc_irq_data += 0x100;
rtc_irq_data &= ~0xff;
rtc_irq_data |= (CMOS_READ(RTC_INTR_FLAGS) & 0xF0);
if ( rtc_status & RTC_TIMERON)
mod_timer(&rtc_irq_timer, jiffers + HZ/rtc_freq + 2*HZ/100);
spin_unlock (&rtc_lock);
spin_lock(&rtc_task_lock);
if (rtc_callback)
rtc_cllback->func(rtc_callback->private_date);
spin_unlock (&rtc_task_lock);
wake_up_interruptible(&rtc_wait);
kill_fasync (&rtc_async_queue, SIGIO, POLL_IN);
return IRQ_HANDLED;
}
只要計算機一接收到RTC中斷,就會調用這個函式。rtc_irq_data變數是無符號長整數,存放有關RTC的信息,每次中斷時都會更新以反映中斷的狀態。接下來,如果設定了RTC周期性定時器,就要通過函式mod_timer()對其更新。
代碼的最後一部分要通過設定自旋鎖進行保護,它會執行一個可能被預先設定好的回調函式。RTC驅動程式允許註冊一個回調函式,並在每個RTC中斷到來時執行。
最後,這個函式會返回IRQ_HANDLED,表明已經正確地完成了對此設備的操作。因為這個中斷處理程式不支持,而且RTC也沒什麼用來測試虛假中斷的機制,所以該處理程式總是返回IRQ_HADNLED。

相關詞條

熱門詞條

聯絡我們