Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
TCCR1A=TCCR1C=0;
TCNT1=0;
TCCR1B=4; // Установка делителя
OCR1A=0x03AA; // Значение не от фонаря, а для замеров интервалов времени
TIFR=0x10; // Сброс флага перед запуском таймера
_NOP(); // Вставил для надежности, не несет смысла и не помогает решить проблему
on(T1CompAIntEn); // Включение прерывания по компаратору А --- TIMSK|=(1 << OCIE1A)
_________________________________________________
Запуск таймера:
TCNT1=0;
(
Компилятор дает это:
LDI R16,0x00 Load immediate
LDI R17,0x00 Load immediate
OUT 0x2D,R17 Out to I/O location (TCNT1H)
OUT 0x2C,R16 Out to I/O location (TCNT1L)
По такому же принципу он присваивает все остальные 16-разр. регистры: верно, сначала старший байт, потом младший
)
TIFR=0x10; // Сброс флага
(
LDI R16,0x10
OUT 0x36,R16
)
_NOP();
on(T1CompAIntEn); // Очередное включение прерывания
___________________________________________________
Очередные обнуления и запуски таймера у меня происходят периодически при приеме внешнего сигнала по INT7, таймер должен сбрасываться, и он сбрасывается, но тем не менее сразу после сброса, когда бит I в SREG устанавливается в 1, почему-то возникает прерывание.