Jag försöker använda sleepfunktionen på Atmega32 och har problem.
Processorn går i sleep som den ska, men går inte att väcka efteråt.
Jag vill få igång processorn med hjälp av en external interrupt, som aktiveras av låg nivå på ingången.
koden för det hela ser ut på följande vis:
void goToSleep() {
MCUCR = (MCUCR & 0b00001111) | 0b10100000; // sleep enable, mode = power down
MCUCR &= 0b11110011; // ext int 1 trigger on low level
GICR |= 0b10000000; // enables ext int 1
__asm__ __volatile__ ("sleep" ::);
}
// activated by external interrupt 1:
ISR(INT1_vect) {
GICR &= 0b01111111; // disables ext int 1
MCUCR &= 0b01111111; // sleep disable
}
En märklig detalj är att koden fungerar som den ska om jag kör programmet med debugern igång.
Är det någon som har erfarenhet av något liknande?
Sleep mode på atmega 32
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
Har du global interrupt aktiverat?
Använder du avr-gcc finns det lite makron att använda som ev. underlättar
http://www.nongnu.org/avr-libc/user-man ... sleep.html
Använder du avr-gcc finns det lite makron att använda som ev. underlättar
http://www.nongnu.org/avr-libc/user-man ... sleep.html