天天看點

enable_irq_wake()低功耗模式

低功耗模式

實作你所有驅動的supend和resume函數.注冊一個中斷喚醒源,一般是GPIO,RTC中斷 .然後調用echo mem > state将系統挂起到記憶體中,這時候SDRAM在進行self-refresh的動作.基本電源的消耗在這裡了

目前2.6.kernel已經為你作好了。你隻需要在你每個驅動裡按照接口函數suspend(...),和resume()将這個驅動的suspend 和resume完成.因為調用apm指令後,kernel會依次調用你注冊驅動裡的suspend函數,将各種外設都進入節電模式.最後CPU進入power down 模式 相同的,當用RTC或者GPIO中的一個将cpu從power down 模式喚醒.依次也會調用各個驅動裡的resume函數将外設喚醒,進入正常工作狀态. 當然這個中斷喚醒源你必須自己定義enable_irq_wake(irq);

另外,在2.6裡,要對驅動的suspend裡面添加相應裝置進入節電狀态的代碼,在resume裡添加相應裝置從低功耗傳回正常工作模式的代碼.

鍵盤驅動初始化時加入enable_irq_wake,當按鍵中斷來時,就可以喚醒貪睡的核心

在編寫驅動時有關中斷的操作是經常要用到的,核心驅動中已經編寫了一些中斷配置函數可以友善的供使用,其與gpio操作配置函數配合使用效果更好。

void disable_irq(unsigned int); //關閉相應中斷号中斷

void enable_irq(unsigned int);//開啟相應中斷号中斷

int set_irq_type(unsigned int irq, unsigned int type);//設定中斷為何種觸發模式

void disable_irq_wake(unsigned int irq); //禁止中斷喚醒功能

void enable_irq_wake(unsigned int irq);//使能中斷喚醒功能

外部中斷的驅動初始化時應該完成以下幾個步驟:

1.把對應的引腳設定成中斷功能

2.設定中斷類型(IRQ或者FIQ)

3.設定觸發方式

4.使能此中斷

設定觸發方式的函數接口

int set_irq_type(unsigned int irq, unsigned int type);

中斷pending寄存器,主要是用來辨別哪個中斷産生了.