karavaev
Oct 10 2005, 14:49
Уважаемые знатоки !
Разрешите задать ламерский вопрос. Мне надо генерить прерывание переполнения 8-битного таймера 0 на ATmega8535. Использую пару WinAVR( версия 20030913)+VMLab 3.11 текст такой:
SIGNAL(SIG_OVERFLOW0) {
TCNT0=56;
PORTB=!PORTB;
}
int main(void) {
cli();
DDRB=0xFF;
PORTB=0x00;
DDRC=0xFF;
PORTC=0xAA;
TCNT0=56;
TIMSK=0x01; // Разрешено только прерывание переполнения
TCCR0=0x02; // Делитель системного такта на 8
sei();
while(1);
}
Модифицировал Fuses: CKSEL=0x0F CKOPT=0, чтобы 16 МГц кварц можно было поставить (пока тестирую с 6МГц)
В VMLab видно, что прерывание ни разу не вызывается, более того, как только таймер переполняется, в регистре TIFR устанавливается в 1 бит №1 (Output compare) вместо бита №0 (Переполнение) и в таком состоянии TIFR остается вечно, после зашивки в MEGA8535, естественно, железка PB0 не меняет.
Если в проекте ".PRJ" заменить контроллер .MICRO "ATmega8535" на .MICRO "AT90S8535" программа требуемые действия выполняет, прерывание с требуемой частотой генерится и после зашивки в 90S8535 устройство работает корректно.
Я раньше с MEGA-ми дела не имел, подозреваю, что дело в каких-то их особенностях.
Подскажите, пожалуйста, в чем может быть дело.
С уважением, Анатолий
BlackJack
Oct 10 2005, 15:03
Пиши вот в таком духе, легче будет разбираться.
Это для меги88, но сути не меняет. работает.
А дергать ногой лучче так PORTx^=1<<PxX
void InitTimerDriver(void)
{//Настройка таймеров и счетчиков--------------------------
// счет по переполнению (1 мс)
TCCR0B=(1<<CS00)|(1<<CS01);// prescaler 64==172.8kHz
TCNT0=RELOAD_T0_VALUE; //=255-173
TIMSK0|=(1<<TOIE0);//|(1<<TOIE1) ;
// разрешить прерывания по переполнению
TIFR0|=(1<<TOV0);
//сбросим флаг, который мог появиться от маленьких зелененьких человечков
};
/*обработчик прерываний таймера*/
#pragma vector=TIMER0_OVF_vect
__interrupt void timer_interrupt(void)
{
// Вызов функции для обработки очереди таймеров
TimersHandler();
TCNT0=RELOAD_T0_VALUE;// 1мс ReloadTimer();
}
karavaev
Oct 10 2005, 15:40
Ботва какая-то получается. И ваш и мой код работают при эмуляции 90S8535, mega8, mega16 и не работают при эмуляции mega8515 и mega8535, закралось у меня подозрение, что это как-то связано с наличием компаратора, я попробовал добавить "OCR0=0;" после "TCNT0=56;" (единственное замеченное отличие по сравнению с 9 примером знаменитого avr123.nm_ru) для всех кроме mega8535 без изменений, а последний начал ругаться при эмуляции, говоря "запись в запрещенное место" (компилируется без проблем, но в обработчик все равно не заходит)
prottoss
Oct 10 2005, 16:11
Цитата(karavaev @ Oct 10 2005, 23:40)
Ботва какая-то получается. И ваш и мой код работают при эмуляции 90S8535, mega8, mega16 и не работают при эмуляции mega8515 и mega8535, закралось у меня подозрение, что это как-то связано с наличием компаратора, я попробовал добавить "OCR0=0;" после "TCNT0=56;" (единственное замеченное отличие по сравнению с 9 примером знаменитого avr123.nm_ru) для всех кроме mega8535 без изменений, а последний начал ругаться при эмуляции, говоря "запись в запрещенное место" (компилируется без проблем, но в обработчик все равно не заходит)
Только что проэмулировал код BlackJack в AVRStudio 4.11. Все прекрасно работает, и на М8515 и на М8535. Где то Ваш косяк...
karavaev
Oct 10 2005, 16:19
Только что проэмулировал код BlackJack в AVRStudio 4.11. Все прекрасно работает, и на М8515 и на М8535. Где то Ваш косяк...
[/quote]
А мой код попробуйте проэмулировать, если несложно, студией я не пользовался. А компилятор какой, Си, в студию встроенный, или там asm только ? Сейчас обновил WinAVR до последней версии - те же яйца, вид сбоку - M8535,8515 не работают, остальные нормально.
prottoss
Oct 10 2005, 16:55
Цитата(karavaev @ Oct 11 2005, 00:19)
А мой код попробуйте проэмулировать, если несложно, студией я не пользовался. А компилятор какой, Си, в студию встроенный, или там asm только ? Сейчас обновил WinAVR до последней версии - те же яйца, вид сбоку - M8535,8515 не работают, остальные нормально.
Пользуюсь я ИАР С, чего и Вам советую. Можно настроить его, чтоб потом проги написанные на Си эмулировать в АВРСтудио. А в АВРСтудио пишите на родном Асме. А код я Ваш и эмулировал, просто у BlackJack более наглядно видно что куда и как
karavaev
Oct 10 2005, 17:08
Пользуюсь я ИАР С, чего и Вам советую. Можно настроить его, чтоб потом проги написанные на Си эмулировать в АВРСтудио. А в АВРСтудио пишите на родном Асме. А код я Ваш и эмулировал, просто у BlackJack более наглядно видно что куда и как
Ок, совет хорош, похоже, придется воспользоваться, жаль, привык я к WinAVR+VMLab .
beer_warrior
Oct 11 2005, 11:19
Цитата(karavaev @ Oct 10 2005, 20:08)
Ок, совет хорош, похоже, придется воспользоваться, жаль, привык я к WinAVR+VMLab .
Возмите WinAVR поновее, сборку 2004 или 2005 годов.
Из нее объектники нормально в AVRstudio экспортируються.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.