|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
IDLE模式下的sleep指令觸發(fā)ADC...我快瘋了... |
| 作者:athlon64fx 欄目:單片機 |
avrstudio模擬是沒有問題的... 寫到片子上運行就不對... 一天了最后發(fā)現(xiàn)是這個問題.. 我已經(jīng)開始懷疑是芯片bug了.. 一開始用winavr的sleep_mode().. 不行.. 后來寫了個 void sleep(void) { SMCR = (0 << SM2) | (0 << SM1) | (0 << SM0) | (1 << SE); asm volatile ("sleep"::); SMCR = 0; } 還是一樣...看來是winavr的庫函數(shù)無關(guān).. void init_adc(void) { ADMUX = ADC_REF | 0x03; ADCSRA = (1 << ADEN) | (0 << ADSC) | (0 << ADATE) | (1 << ADIF) | (1 << ADIE) | (1 << ADPS2) | (0 << ADPS1) | (1 << ADPS0); ADCSRB = (0 << ACME) | (0 << ADTS2) | (0 << ADTS1) | (0 << ADTS0); } 這樣初始化, 我想是沒問題的.. 沒有任何讓 ADSC 置位的語句.. 而且分明是單次轉(zhuǎn)換模式(ADATE = 0).. 但ADC中斷確實在發(fā)生.. 只要去掉 sleep().. 一切OK.. 這到底是為什么? 快瘋了... 對了.. 芯片是M48 |
| 2樓: | >>參與討論 |
| 作者: athlon64fx 于 2006/7/8 16:44:00 發(fā)布:
在中斷函數(shù)里也沒有置位ADSC ISR (ADC_vect) { led_buf[3]++; } |
|
| 3樓: | >>參與討論 |
| 作者: athlon64fx 于 2006/7/8 18:11:00 發(fā)布:
我暈...... 原來手冊上分明寫著自動啟動一次轉(zhuǎn)換.... 以前見過但是忘了... 想當(dāng)然地以為只有ADC降噪模式才讓sleep啟動ADC... 為什么這樣設(shè)計呢? ADC竟然和低功耗有矛盾... 不解... 空閑模式SM2..0 為000 時,SLEEP 指令使MCU 進(jìn)入空閑模式。在此模式下,CPU 停止運行,而 SPI、USART、模擬比較器、ADC、兩線串行接口、定時器/ 計數(shù)器、看門狗和中斷系統(tǒng) 繼續(xù)工作。這個休眠模式只停止了clkCPU 和clkFLASH,其他時鐘則繼續(xù)工作。 象定時器溢出與USART 傳輸完成等內(nèi)外部中斷都可以喚醒MCU。如果不需要從模擬比 較器中斷喚醒MCU,為了減少功耗,可以切斷比較器的電源。方法是置位模擬比較器控 制和狀態(tài)寄存器ACSR 的ACD。如果ADC 使能,進(jìn)入此模式后將自動啟動一次轉(zhuǎn)換。 |
|
| 4樓: | >>參與討論 |
| 作者: athlon64fx 于 2006/7/8 18:16:00 發(fā)布:
avr studio avr studio 軟件模擬的時候為什么 sleep 不觸發(fā) ADC 呢? 我想這是一個bug. |
|
| 5樓: | >>參與討論 |
| 作者: xieyuanbin 于 2006/7/8 18:53:00 發(fā)布:
是BUG avr studio 軟件模擬的時候為什么 sleep 不觸發(fā) ADC 呢? 在studio SIM中,所有的ADC自動觸發(fā)都無效. |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 www.hbjingang.com 浙ICP證030469號 |