使用CY8C22X45系列PSoC設計低功耗觸摸按鍵應用系統
3. 開(kāi)發(fā)低功耗的固件代碼
本文引用地址:http://dyxdggzs.com/article/108471.htm實(shí)際上,除了設置適當的芯片參數,固件代碼的編寫(xiě)對系統功耗也有著(zhù)重要影響。PSoC具有良好的可配置性能,其數字模塊和模擬模塊可以配置成不同的功能模塊,根據應用需求,僅在使用時(shí)才將其使能,否則一直讓其停止工作,即可減少系統的工作電流。
和大多數芯片一樣,PSoC也提供低功耗休眠模式,有些型號的PSoC可以提供低至0.1uA的休眠電流。休眠時(shí)系統時(shí)鐘以及所有由系統時(shí)鐘驅動(dòng)的功能模塊都會(huì )停止工作,但是由32K時(shí)鐘驅動(dòng)的模塊仍會(huì )繼續工作。PSoC內部包含一個(gè)休眠定時(shí)器(Sleep Timer),通過(guò)設定其超時(shí)時(shí)間并使能,PSoC即進(jìn)入休眠模式,直到被休眠定時(shí)器的超時(shí)中斷喚醒,除此之外,PSoC休眠中也可以被GPIO的中斷,低電壓檢測中斷,模擬模塊產(chǎn)生的中斷和由32K驅動(dòng)模塊產(chǎn)生的中斷喚醒,因此進(jìn)入休眠前需要清除所有等待中的中斷,否則PSoC無(wú)法進(jìn)入休眠模式。
如果在全局資源里設置好了Sleep Timer的周期,那么僅需兩行代碼即可讓PSoC進(jìn)入休眠模式,第一行代碼使能Sleep Timer中斷,第二行代碼令PSoC進(jìn)入休眠模式。
INT_MSK0 |= INT_MSK0_SLEEP;
M8C_Sleep;
大多數PSoC提供了4種固定的休眠間隔(表格 7),芯片內的Watchdog周期是當前休眠間隔的3倍,如果同時(shí)使用休眠和Watchdog,需要在代碼中的適當位置清除Watchdog計數器,以防系統超時(shí)重置。
可以通過(guò)多次使用M8C_Sleep來(lái)獲得更長(cháng)的休眠時(shí)間,例如,如果休眠時(shí)間為125ms,下述代碼可以獲得約375ms的休眠時(shí)間。
M8C_Sleep; M8C_Sleep; M8C_Sleep;
系統的平均電流取決于工作時(shí)間
,工作電流
,休眠時(shí)間
和休眠電流
,其關(guān)系可以通過(guò)下面的公式表示
大多數觸摸按鍵應用都可以在系統空閑時(shí)進(jìn)入休眠狀態(tài),但是必須可以通過(guò)觸摸某個(gè)或任意一個(gè)按鍵將系統喚醒。傳統的機械按鍵方案僅需將所有按鍵連在一起作為一個(gè)中斷源喚醒MCU即可,但是對于觸摸按鍵技術(shù),都是依靠主動(dòng)掃描按鍵信號來(lái)獲得按鍵觸發(fā)狀態(tài)。因此,設計者需要編寫(xiě)固件代碼來(lái)實(shí)現可靠有效的低功耗休眠。圖 1給出了一種典型的休眠模式工作流程。在進(jìn)入休眠前,設計者需要將PSoC內部所有休眠時(shí)不用的數字模塊和模擬模塊停止工作,以獲得最低的休眠電流,然后根據應用的具體需求,選擇適當的休眠時(shí)間,之后使能數字模塊和模擬模塊,掃描按鍵并判斷是否喚醒系統。
對于掃描按鍵并判斷是否喚醒系統,PSoC也存在著(zhù)三種不同的方式。
評論