Недавно начал осваивать МК и столкнулся с проблемой. Суть ее в том что прерывание по таймеру срабатывает не на том канале сравнения, т.е. активирую маску прерывания для OCIE3A, а прерывание происходит для канала "C" ( бряк срабатывает на 35 векторе, а не на 33. В описании это Timer/Counter3 Compare Match C и Timer/Counter3 Compare Match A ).
Вот код примера:
Код: Выделить всё
.include "m2560def.inc"
.def temp = R16
.equ kdel = 760
.cseg
.org 0
start:
rjmp init
reti
reti
reti
reti
reti
reti
reti
reti
reti ; (10)
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti ; (20)
reti
reti
reti
reti
reti ; (25)
reti
reti
reti
reti
reti ; (30)
reti
reti
reti ; (33) Compare match A
reti
reti ; (35) Compare match C
reti
reti ; (37)
reti
reti ; (39)
reti ; (40)
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti ; (50)
reti
reti
reti
reti
reti
reti
reti ; (57)
init:
ldi temp, low(RAMEND)
out SPL, temp
ldi temp, high(RAMEND)
out SPH, temp
ldi temp, 0x0D ; режим таймера
sts TCCR1B, temp
ldi temp, high(kdel); старший полубайт кода совпадения
sts OCR1AH, temp
ldi temp, low(kdel) ; младший полубайт
sts OCR1AL, temp
ldi temp, 0b00000010
sts TIMSK1, temp
ldi temp, 0x80
out ACSR, temp
main:
sei
m1:
rjmp m1
Подскажите, где проблема ?



