Здравствуйте. Пишу программный эмулятор SPI (mega128) с использованием внешнего прерывания EINT2. Номер режима SPI - 3, прерывание настроено по фронту. Вначале включение-отключение программного блока происходило управлением переменной
Код
ISR (INT2_vect)
{
if (m_enable_collect == TRUE){
....
....
....
{
}
Всё работало. Но для ускорения и снижения накладных расходов на проверку переменной решил управлять с помощью выставления и снимания бита в EIMSK.
Код
if (m_SPI_start){
EIFR = 0;
EIMSK = (1 << INT2);
} else {
EIFR = 0;
EIMSK = 0;
}
Столкнулся с такой особенностью, что теперь при включении EINT генерится одно лишнее прерывание в самом начале. Возможно потому что линия уже в единице. Оно может и не лишнее, но нежелательное. Подскажите, можно ли обойти его хардварными способами. Программными можно, но тогда по быстродействию не пройдём.
1. До