當前我正在玩avr微處理器atmega644p並嘗試將其置於睡眠模式(mode:idle)。檢查avr中的睡眠模式
要做到這一點:我設置SE位= 1和其他3位SM0 SM1和SM2爲0,那麼當我調用功能sleep_cpu()
時,CPU將處於空閒模式。
我使用中斷來執行我的代碼中定義的任務,所以如果我想執行它,我必須禁用睡眠模式。這意味着函數sleep_disable()
必須放在ISR(vector_name)
函數的第一行。
我的邏輯正確嗎?
如何檢查CPU是否處於睡眠模式?我試圖如下事情:
if (SM0 == 0 && SM1 == 0 && SM2 == 0){
printf("Sleep mode begin");
}
因爲我使用的中斷使oviously if語句是在循環中main()
功能,但沒有打印膩子終端上。
爲什麼會發生這種情況?我想這是因爲永遠不會執行if語句由於錯誤的條件
編輯
if語句的位置是上面sleep_cpu()
內環路在main()
功能使該行「睡眠模式開始」應該在CPU進入休眠模式之前打印出來,但在putty終端上仍然沒有打印輸出
就像「嘿,你睡着了嗎?」是無法(確切地)回答「是」的問題,你的處理器不能告訴你它當前正在睡覺,因爲如果它不能執行代碼來告訴你這個問題。通常(取決於處理器和詳細配置),中斷會將其從睡眠模式喚醒。 –
Ahhaha乾杯,發現一個錯誤!我這樣做是因爲由於數據表中的信息,當CPU空閒時,SPI,USART,ADC,定時器/計數器...仍在工作!那麼無論如何檢查一個CPU是否在睡覺?否則沒有辦法檢查輸出是否正確或不... –
我已經更新了循環體中if語句的位置!請看看它! –