Mam problem s probuzenim z PD pres externi oreruseni z PCINT16. Neumim moc anglicky ale z datasheetu jsem vycetl ze, by to melo jit. Nevim co delam spatne. Nastavuju registry SREG, GIMSK, PCMSK2.
Do registru SREG není v C žádný důvod vrtat. Tudíž to nedělej(často ani není SREG definován). Pro globální povolení/zakázání přerušení slouží sei() a cli().
Mezi jednotlivými členy má být OR, nikoli AND.GIMSK |= (1<<PCIE2) | ...;
PCMSK2 |= (1<<PCINT16);
sei();Doplnit obsluhu přerušení(ikdyby byla prázdná) a nic víc by nemělo být třeba.
Přerušení se detekuje asynchronně, tudíž by buzení z PD fungovat opravdu mělo.
//Spi
void spi_PD(void)
{
MCUCR |= (1<<SE); //set bit //povoleni Power Down
MCUCR |= (1<<SM0); //set bit
MCUCR |= (1<<SM1); //set bit
GIMSK = 0xC0;
asm(“sleep”);
}
//Vstan
void vstan_PD(void)
{
MCUCR &= (~(1<<SE)); //clear bit vypnuti Power Down
MCUCR &= (~(1<<SM0)); //clear bit
MCUCR &= (~(1<<SM1)); //clear bit
}