В общем, контроллеры учить начал недавно. Сейчас столкнулся с такой проблемой: не происходит прерывания по совпадению 16-ти разрядного таймера тиньки.
Сейчас опишу проблему немного подробнее.
На данный момент инициализация таймера у меня выглядит так:
Запускаю в теле программы так:
Вектор прерывания выглядит так:
В обработчике самого прерывания джамп на проверенную функцию, которая отнимает от переменной единичку, и ставит флаг вывода её на дисплей. С кнопок вызов и сама эта функция работают безупречно. Глобальные прерывания разрешены и нигде не запрещаются, вообще нигде. А вот прерывания по совпадению не происходит. Вообще. Ни разу.
Более того, этот код безупречно работает в АВР-симмуляторе, там прерывание случается как положено! А в железе нет.
Помогите, кто чем может
Пы.Сы.: если это будет нужно, выложу весь проект, он у меня в 6-й студии.
Раздел: AVR
Сейчас опишу проблему немного подробнее.
На данный момент инициализация таймера у меня выглядит так:
LDI YH,HIGH(10800)
LDI YL,LOW(10800) ;число сравнения
OUT OCR1AH,YH
OUT OCR1AL,YL
LDI R16,0b00001101
OUT TCCR1B,R16 ;тактовый сигнал Fclk/1024, режим CTC
Запускаю в теле программы так:
LDI R16,1<<OCIE1A
OUT TIMSK,R16
Вектор прерывания выглядит так:
.ORG OC1Aaddr ; Timer/Counter1 Compare Match A
RJMP TIMER_INTERRUPT
В обработчике самого прерывания джамп на проверенную функцию, которая отнимает от переменной единичку, и ставит флаг вывода её на дисплей. С кнопок вызов и сама эта функция работают безупречно. Глобальные прерывания разрешены и нигде не запрещаются, вообще нигде. А вот прерывания по совпадению не происходит. Вообще. Ни разу.
Более того, этот код безупречно работает в АВР-симмуляторе, там прерывание случается как положено! А в железе нет.
Помогите, кто чем может
Пы.Сы.: если это будет нужно, выложу весь проект, он у меня в 6-й студии.
Раздел: AVR