|
|
  |
Прерывание переполнения MEGA8535 |
|
|
|
Oct 10 2005, 14:49
|
Группа: Новичок
Сообщений: 5
Регистрация: 10-10-05
Пользователь №: 9 465

|
Уважаемые знатоки ! Разрешите задать ламерский вопрос. Мне надо генерить прерывание переполнения 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-ми дела не имел, подозреваю, что дело в каких-то их особенностях. Подскажите, пожалуйста, в чем может быть дело.
С уважением, Анатолий
|
|
|
|
|
Oct 10 2005, 15:03
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 6-10-05
Пользователь №: 9 276

|
Пиши вот в таком духе, легче будет разбираться. Это для меги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();
}
|
|
|
|
|
Oct 10 2005, 15:40
|
Группа: Новичок
Сообщений: 5
Регистрация: 10-10-05
Пользователь №: 9 465

|
Ботва какая-то получается. И ваш и мой код работают при эмуляции 90S8535, mega8, mega16 и не работают при эмуляции mega8515 и mega8535, закралось у меня подозрение, что это как-то связано с наличием компаратора, я попробовал добавить "OCR0=0;" после "TCNT0=56;" (единственное замеченное отличие по сравнению с 9 примером знаменитого avr123.nm_ru) для всех кроме mega8535 без изменений, а последний начал ругаться при эмуляции, говоря "запись в запрещенное место" (компилируется без проблем, но в обработчик все равно не заходит)
|
|
|
|
|
Oct 10 2005, 16:11
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(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. Где то Ваш косяк...
--------------------
|
|
|
|
|
Oct 10 2005, 16:19
|
Группа: Новичок
Сообщений: 5
Регистрация: 10-10-05
Пользователь №: 9 465

|
Только что проэмулировал код BlackJack в AVRStudio 4.11. Все прекрасно работает, и на М8515 и на М8535. Где то Ваш косяк... [/quote] А мой код попробуйте проэмулировать, если несложно, студией я не пользовался. А компилятор какой, Си, в студию встроенный, или там asm только ? Сейчас обновил WinAVR до последней версии - те же яйца, вид сбоку - M8535,8515 не работают, остальные нормально.
|
|
|
|
|
Oct 10 2005, 16:55
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(karavaev @ Oct 11 2005, 00:19) А мой код попробуйте проэмулировать, если несложно, студией я не пользовался. А компилятор какой, Си, в студию встроенный, или там asm только ? Сейчас обновил WinAVR до последней версии - те же яйца, вид сбоку - M8535,8515 не работают, остальные нормально. Пользуюсь я ИАР С, чего и Вам советую. Можно настроить его, чтоб потом проги написанные на Си эмулировать в АВРСтудио. А в АВРСтудио пишите на родном Асме. А код я Ваш и эмулировал, просто у BlackJack более наглядно видно что куда и как
--------------------
|
|
|
|
|
Oct 10 2005, 17:08
|
Группа: Новичок
Сообщений: 5
Регистрация: 10-10-05
Пользователь №: 9 465

|
Пользуюсь я ИАР С, чего и Вам советую. Можно настроить его, чтоб потом проги написанные на Си эмулировать в АВРСтудио. А в АВРСтудио пишите на родном Асме. А код я Ваш и эмулировал, просто у BlackJack более наглядно видно что куда и как Ок, совет хорош, похоже, придется воспользоваться, жаль, привык я к WinAVR+VMLab .
|
|
|
|
|
Oct 11 2005, 11:19
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата(karavaev @ Oct 10 2005, 20:08) Ок, совет хорош, похоже, придется воспользоваться, жаль, привык я к WinAVR+VMLab . Возмите WinAVR поновее, сборку 2004 или 2005 годов. Из нее объектники нормально в AVRstudio экспортируються.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|