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寄存器,主要是用來標識哪個中斷產生了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章