<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > 用uc/OS-2操作系統實(shí)現省電模式

用uc/OS-2操作系統實(shí)現省電模式

——
作者:北京大學(xué)信息科學(xué)技術(shù)學(xué)院 閆曄 王志軍 時(shí)間:2005-12-23 來(lái)源:電子產(chǎn)品世界 收藏

摘  要:本文介紹了基于A(yíng)RM7內核的Philips lpc2214 MCU在uc/OS-2實(shí)時(shí)多任務(wù)中的低功耗設計與實(shí)現,該方法可以推廣到其它的嵌入式系統應用中。

關(guān)鍵詞:  低功耗;uc/OS-2 RTOS;Philips lpc2214

引言

    嵌入式系統的低功耗設計越來(lái)越成為人們關(guān)心的焦點(diǎn)。一般的嵌入式MCU都有空閑和掉電兩種省電模式,但如何在嵌入式中實(shí)現這兩種模式則是開(kāi)發(fā)者面臨的一個(gè)難題。本文將給出這個(gè)問(wèn)題的一種解決方案,它使用Philips lpc2214 MCU作為處理器構建硬件平臺,并在其上運行uc/OS-2實(shí)時(shí),通過(guò)合理地設置處理器的相關(guān)寄存器和在uc/OS-2上建立相應的任務(wù),來(lái)實(shí)現MCU的掉電模式。

lpc2214簡(jiǎn)介   

  lpc2214是Philips公司的一款嵌入式微控制器(MCU),它采用ARM7TDMI內核,片上資源十分豐富,擁有16K RAM,256K Flash,兩個(gè)標準串行端口,兩個(gè)SPI端口,一個(gè)I2C端口,內部實(shí)時(shí)時(shí)鐘,看門(mén)狗,A/D轉換,外部存儲器接口(最大支持64M)等。這樣,只需一片lpc2214,加上少許外圍電路,就可以輕松地組成一個(gè)嵌入式系統。

  lpc2214具備兩種省電模式:空閑(IDLE)和掉電(POWER-DOWN)。通過(guò)配置相應的寄存器,就可以使其進(jìn)入相應的省電模式??臻e模式時(shí),系統時(shí)鐘一直有效,處理器,存儲器系統和相關(guān)控制器及內部總線(xiàn)不再消耗功率,可通過(guò)中斷使處理器恢復運行;掉電模式時(shí),振蕩器關(guān)閉,片內外設不再消耗功率,復位或者外部中斷可以喚醒掉電模式。典型條件下,MCU的工作電流大概在60mA,而掉電模式下的靜態(tài)電流只有10uA左右。

uc/OS-2簡(jiǎn)介

  uc/OS-2屬實(shí)時(shí)多任務(wù)操作系統,用ANSI C編寫(xiě),含小部分匯編代碼,可通過(guò)移植用于不同架構的微處理器。至今,從8位到64位,uc/OS-2已在超過(guò)40種不同架構的微處理器上運行,其應用領(lǐng)域廣泛。

  uc/OS-2是可搶占的實(shí)時(shí)操作系統,即當前正在運行的任務(wù)會(huì )被后來(lái)進(jìn)入就緒態(tài)下的更高優(yōu)先級的任務(wù)所搶占。這項工作是由調度器(scheduler)完成的。每當正在運行的任務(wù)結束自己對CPU的占用,或者一個(gè)新的任務(wù)建立時(shí),調度器都會(huì )進(jìn)行一次新的調度保證當前任務(wù)及就緒態(tài)任務(wù)中的最高優(yōu)先級任務(wù)獲得到CPU的使用權。

在操作系統中實(shí)現掉電功能
 

  空閑和掉電這兩種省電模式的實(shí)現方法幾乎是相同的,只有寄存器和喚醒方式的不同,故本文只介紹掉電模式的實(shí)現。
 

lpc2214中的相關(guān)寄存器
 

  lpc2214中控制MCU進(jìn)入空閑模式和掉電模式相關(guān)的寄存器是:
 
  PCON:功率控制寄存器;
 
  PCONP:外設功率控制寄存器;

  掉電模式的喚醒是通過(guò)外部中斷實(shí)現的,與外部中斷相關(guān)的寄存器是: 

  EXTINT:  外部中斷標志寄存器;
 
  EXTWAKE: 外部中斷喚醒寄存器;
 
  EXTMODE: 外部中斷方式寄存器;
 
  EXTPOLAR:外部中斷極性寄存器
 
lpc2214掉電功能的具體實(shí)現

    在這里通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明:系統復位后創(chuàng )建一個(gè)任務(wù)TaskStart(),它負責初始化與外部中斷相關(guān)的寄存器,同時(shí)在該任務(wù)中建立N個(gè)用戶(hù)任務(wù)Task1(), Task2(),...TaskN()和1個(gè)用于進(jìn)入掉電模式的任務(wù)Task_Powerdown()。 uc/OS-2開(kāi)始運行后,Task1()至TaskN()模擬N個(gè)實(shí)際任務(wù)的運行,Task_Powerdown()則負責在N個(gè)任務(wù)都空閑時(shí)將處理器切換進(jìn)掉電模式。當有外部中斷時(shí),則在中斷服務(wù)程序中將處理器喚醒。要說(shuō)明的是,Task1()至TaskN()的優(yōu)先級都必須高于Task_Powerdown()的優(yōu)先級,且N+1不應大于系統最大任務(wù)數。主要代碼及注釋如下: 

int main (void)  //主函數,系統執行入口

OSInit(); //初始化

OSTaskCreate(TaskStart,(void*)0, &TaskStartStk[TASK_STK_SIZE-1],0);

//建立第一個(gè)任務(wù),優(yōu)先級最高為0

OSStart(); //開(kāi)始運行uc/OS-2             

return 0;  //其實(shí)永遠不會(huì )返回

 }

void  TaskStart(void *pdata)  //創(chuàng )建N個(gè)用戶(hù)任務(wù)和1個(gè)掉電任務(wù)

{

pdata = pdata;

OSTaskCreate(Task1,(void*)0,&TaskStk1[TASK_STK_SIZE - 1], 1); //創(chuàng )建任務(wù)Task1()

OSTaskCreate(Task2,(void*)0,&TaskStk2[TASK_STK_SIZE - 1], 2);//創(chuàng )建任務(wù)Task2()

         ... ... 

OSTaskCreate(TaskN,(void*)0,&TaskStkN[TASK_STK_SIZE - 1], N);//創(chuàng )建任務(wù)TaskN()

OSTaskCreate(Task_Powerdown,(void*)0, &TaskStk[TASK_STK_SIZE - 1], N+1);

//創(chuàng )建掉電任務(wù)Task_Powerdown()

PCONP = 0x0000;//禁止所有片內外設

... ... //設置外部中斷的相應寄存器

for(;;)

         {

            ... ... 

//任務(wù)代碼,結束后釋放CPU的使用權

          }

void  Task1(void *pdata)  //用戶(hù)任務(wù)1

{

      pdata = pdata;

         for(;;) 

         {

           ... ... //任務(wù)代碼

          }

}
 

 void  Task_Powerdown (void *pdata)   //MCU掉電任務(wù),等待外部中斷喚醒
 

{
 

     pdata = pdata;
 

        for(;;)
 

        {
 

PCON = 2; //使MCU進(jìn)入掉電模式
 

... ...  //外部中斷喚醒后,CPU交給用戶(hù)任務(wù)

         }
 

}

void __irq IRQ_EINT1(void)  //外部中斷的中斷處理程序
 

{
 

while((EXTINT & 0x02)!=0)  //清除中斷標志
 

{
 

            EXTINT = 0x02;
 

}
 

       VICVectAddr = 0x00; //中斷處理結束
 

}  
 

流程圖見(jiàn)圖1

 

圖1    掉電模式流程圖

結語(yǔ)


  本文介紹了在lpc2214微控制器上運行實(shí)現掉電的方法,簡(jiǎn)單明了。從中不難看出,這種方法有普遍意義,可以廣泛地應用于各種嵌入式系統設計中。

參考文獻:

1. 邵貝貝譯,‘嵌入式實(shí)時(shí)操作系統uc/OS-2’(第2版),北京航空航天大學(xué)出版社,2004.5.

2. 周立功等,‘ARM嵌入式系統實(shí)驗教程’,北京航空航天大學(xué)出版社,2004.12.

3.  lpc2212/lpc2214 Product Data, Philips Inc.,2004.



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>