Мне нужно сделать генератор импульсов с изменяющейся частотой на таймере 0. И эти импульсы подсчитывать при обработке прерывания. Можно было бы сделать это с использованием встроенного прерывания по переполнению, а для изменения частоты в TCNT записывать начальное значение. Я сначала так и сделал. Проверенный метод. Но мне удобнее было бы сделать это с использованием режима СТС и организовать прерывания по совпадению регистра OCR. Сам режим я включил вставкой кодов Си и все работает, как надо.
Вопрос в том, как организовать прерывание. Команда на Си: interrupt [TIM0_COMPA] void timer0_compa_isr(void) - не воспринимается и компилятор дает ошибку. Я попробовал задать пользовательское прерывание во Flowcod таким образом:
В первом окне - название прерывания, а фактически имя вектора прерывания из даташит.
Во втором инициализация прерывания по совпадению регистра OCR0A: TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0);
В третьем подключение макроса при появлении флага прерывания:
if (TIFR0 & (1<<OCF0A)) //если срабатывает флаг прерывания
{
FCM_%n(); // запустить макрос
}
При компиляции выдается ошибка:
D:\Projects\ ... \soft\CTC_mode_T0.c:208: error: expected identifier or '(' before 'if'.
А у меня вообще нет строки с таким номером. Там программка маленькая - для тестирования. Кол-во строк вместе с комментами до 100 не доходит.
Не пойму, в чем ошибка? какой идентификатор? Скобки вроде правильно стоят.