deep sleep
在有XLP功能的MCU,可以透過deep sleep 來讓MCU達到最省電的狀態,進入方法如下:
//Way 1.
asm ("disi #4");
asm ("bset DSCON, #15");
asm ("pwrsav #0");
Nop();
Nop();
//Way 2.
DSCONbits.DSEN=1;
Sleep();
Nop();
Nop();
不過在wake-up之後有個地方要注意, DSCONbits.RELEASE需要 read & clear,否則 TRIS & LAT 會被 core hold住(既使TRIS &LATA已重新config.),
Ex:
void main(){
systeminitial();
if (RCONbits.DPSLP == 1){
RCONbits.DPSLP = 0;
DSCONbits.RELEASE = 0; //the tris & lat has been hold until DSCONbits.RELEASE=0 is executed.
DSWSRC = 0;
}
:
:
:
}
iamqq 發表在 痞客邦 留言(0) 人氣(59)
簡單說變數宣告auto_psv, 就是讓compiler把 const的變數都放在同一個 psv中(同一個32k), 所以auto_psv不能跟address同時使用
且宣告成autp_psv ,並不是不需要PSVPAG=__builtin_psvpage(xxx), 若const太多, 多到超過32k, 還是得在access前"手動"變更PSVPAG
小於32k時不需要,是因為都在同一個psv裡,(之前以為宣告成autp_psv, 就可以不需PSVPAG=__builtin_psvpage(xxx)...@@)
而在ISR宣告時
iamqq 發表在 痞客邦 留言(0) 人氣(853)
1.若無#define USE_AND_OR則
OpenTimer1((T1_ON & T1_IDLE_CON & T1_GATE_ON & T1_PS_1_8 &
T1_SYNC_EXT_ON & T1_SOURCE_INT), PR1_VALUE);
2.若有#define USE_AND_OR則
OpenTimer1((T1_ON | T1_IDLE_CON | T1_GATE_ON | T1_PS_1_8 |
T1_SYNC_EXT_ON | T1_SOURCE_INT), PR1_VALUE);
iamqq 發表在 痞客邦 留言(0) 人氣(65)