Сброс битов прерывания
|
|
implex | Дата: Пятница, 24.05.2013, 17:50 | Сообщение # 1 |
Группа: Проверенные
Сообщений: 34
Статус: Offline
| Всем привет. Столкнулся с следующим. В начале подпрограммы отключаю прерывание int2 в конце включаю. И если в ходе подпрограммы сработало прерывание, то оно обрабатывается после включения. Я так понимаю это лечится строкой GIFR=64. Что означает цифра 64 и какие есть еще варианты. Встречал следующее Gifr = 128 'сбрасываем бит прерывания INT1
|
|
| |
exersizze | Дата: Пятница, 24.05.2013, 21:20 | Сообщение # 2 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| смотри даташит, в разделе General Interrupt Flag Register (GIFR) (в новых контроллерах он называется EIFR) в ДШ на atmega8 в этом разделе есть вот такая картинка
в этой меге 2 внешних прерывания INT0 и INT1 для каждого из которых есть по одному флагу прерывания INTF0 и INTF1 соответственно. Для сброса флага нужно записать единичку в бит, который соответствует флагу этого прерывания. См. картинку выше: для INT0 нужно записывать 1 в шестой бит, т.е. вот так 01000000 а для INT1 в седьмой - 10000000 вот у получается что для сброса INT0 нужно записывать в регистр GIFR значение 64, а для INT1 - 128
|
|
| |
implex | Дата: Суббота, 25.05.2013, 02:14 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 34
Статус: Offline
| Спасибо! Дошло. Для сброса всех трех прерываний GIFR = 224, а только для Int2 GIFR = 32. Но этими действиями я затрону IVSEL и IVCE в Mega32. Так и не понял на что они влияют. Не обращать на них внимания?
|
|
| |
exersizze | Дата: Суббота, 25.05.2013, 10:43 | Сообщение # 4 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| это ты смотришь на GICR - General Interrupt Control Register в GIFR такого нет
|
|
| |
implex | Дата: Суббота, 25.05.2013, 11:29 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 34
Статус: Offline
| Спишем на время написания моего сообщения Еще раз спасибо)
|
|
| |