軟開關設計漫談_軟體篇

來源:互聯網
上載者:User

   //========================================================================
  //TITLE:
  //    軟開關設計漫談_軟體篇
  //AUTHOR:
  //    norains
  //DATE:
  //    Sunday 19-may-2009
  //Environment:
  //    WINDOWS CE 5.0
  //========================================================================
  
  相對於硬體來說,軟開關的軟體代碼更為簡單,只需要檢測DETECT_KEY即可。該功能的實現主要是通過GPIO,而wince並沒有對GPIO做上層定義,並且每款CPU的GPIO的操作方式又各自不同,所以本文無法給出一個完整可用的代碼,只能用虛擬碼作為樣本講解。雖然是虛擬碼,但對於瞭解其流程還是有一定的意義。
  
void Power_On()
{
  ...
 
  //設定GPIO_SHDN為high
  SetGPIO_HIGH(GPIO_SHDN);
 
  ...
}

DWORD PWR_IntrThread(PVOID pParam)
{
  ....
 
  //使能中斷
  EnableInterrupt();
 
  //初始化中斷
  InterruptInitialize(btnSysIntr, hNotifyEvent, 0, 0)
 
  while(TRUE)
  {
    //等待中斷事件
   dwRet = WaitForSingleObject(hNotifyEvent, INFINITE);
   
   if(dwRet == WAIT_OBJECT_0)
   {
     //中斷處理完畢,讓中斷再次進入處理
    InterruptDone(btnSysIntr);
    
    //再次等待中斷處理事件
    dwRet = WaitForSingleObject(hNotifyEvent, 1000);
    
    if(dwRet == WAIT_TIMEOUT)
    {
      //當其位WAIT_TIMEOUT時,意味著為長按,進入poweroff函數
     EnterPowerOff();
    }
   }
  }
 
  ....
}

void EnterPowerOff()
{
  ...

  while(TRUE)
  {
   if(IsGPIOHigh(GPIO_DETECT_KEY) != FALSE)
   {
    //S1已經鬆開,跳出迴圈
    break;
   }
  }
 
  //關閉系統電源
  SetGPIO_LOW(GPIO_SHDN);

  ...
}

  這裡唯一需要注意的是EnterPowerOff函數,在這裡必須要檢測S1是否已經鬆開。如果還沒有鬆開S1就將GPIO_SHDN置為LOW,因為S1端還有VDD33D電壓輸入到PWR_ON端,所以系統還是無法關閉。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.