Цитата(Vladimir_T @ Nov 21 2006, 06:59)

С учетом рекомендаций и литературы от ATMEL, заменил 8515 на 162. Переопределил необходимую периферию и биты конфигурации (есть различия между ними), но Timer0 не запускается! Посмотрите, в чем есть ошибка. Сделал простую тестовую программку, а она не запускается. Может есть где-нибуть есть сайт с исходниками тестовых программ, как это есть у Texas Instrumens для MSP?
#define START_SYSTEM_TIMER() (TCCR0 |= (1 << CS01); TIMSK |= (1 << TOIE0))
//------------------------------------------------------------------------------
int main()
{
GICR = 1 << IVCE;
GICR = 1 << IVSEL;
// GICR |= (1 << INT1);
// MCUCR |= (1 << SE); // enable sleep mode
EECR |= (1 << EEMWE);
EECR |= (1 << EERIE);
DDRD |= 0x30;
START_SYSTEM_TIMER();
__enable_interrupt ();
for(;;)
{
PORTD ^= 0x20; // For test control from free pins
}
}
#pragma vector = TIMER0_OVF_vect
__interrupt void System_Timer(void)
{
PORTD ^= 0x10; // For test control from free pins
} // System_Timer
В АТМЕГА162 для ТС0 появилась возможность использовать не только прерывание по переполнению (ТО), но и по совпадению (ОС). ИМХО, это более правильный метод. Вот, например, как это работает у меня:
//инициализация ТС0:
TCCR0 = (1<<WGM01) | (1<<CS00) | (1<<CS02); //prescaler=1024
OCR0 = 78; //100 Hz @ 8MHz
TIMSK |= (1<<OCIE0);
//обработчик прерывания ТС0
#pragma vector=TIMER0_COMP_vect
__interrupt void TC0_comp()
{
//обработка прерывания
}