Помогите разобраться новичку. Пытался самостоятельно - не вышло. Ниже кусок когда (максимально упрощенный). Суть в банальном прерывании от таймера, которое срабатывает по достижении определённого значения, но вот срабатывает оно (прерывание) очень странно. Точнее имеются странные показания регистров при делителе частоты = 1 (значения приведены ниже).
Код
.org 0xf800 ;код с этого адреса
init:
mov.w #WDTPW+WDTHOLD, &WDTCTL;остановить WD
mov.b &0x10FC, &DCOCTL ;установка DCO
mov.b &0x10FD, &BCSCTL1 ;на частоту 8МГц
mov.b #0x06, BCSCTL2 ;Источник сигнала для MCLK и SMCLK - DCOCLK. делитель MCLK-1. делитель SMCLK-8. резистор внутр.
mov.w #0280h, SP ;стек с адреса #0x0280
eint ;общее разрешение прерываний
loop:
mov.w #TASSEL_2+ID_0+MC_1+TACLR, TACTL;источник сигнала - SMCLK/делитель частоты - 1/прямой счет/сброс таймера
mov.w #CM_0+CCIE, TACCTL0 ;нет захвата+разрешить прерывание (по переполнению)
mov.w #10000, TACCR0 ;предел счета
call #delay_proc
jmp loop
delay_proc:
mov.w #GIE+CPUOFF,SR ;LPM0
ret
TimerA_int: ;обработчик прерывания Timer_A
nop ;для отладки
clr.w TACTL ;остановить таймер
reti ;вернуться из прерывания
.org 0xfffe ;адрес вектора прерывания проц-ры сброса
dw init ;обработчик прерывания
.org 0xfff2 ;адрес вектора прерывания Таймера_А, по переполнению
dw TimerA_int ;обработчик прерывания
В таком виде прерывание от таймера срабатывает, но попав обработчик регистры имеют непонятные значения:
До входа в обработчик TACTL=0x210
TA0CCTL0=0x10
TA0CCTL1=0x00
TA0CCTL2=0x00
TAR=0x00
TA0CCR0=0x2710
TA0CCR1=0x00
TA0CCR2=0x00
При входе в обработчикTACTL=0x211TA0CCTL0=0x10
TA0CCTL1=0x01TA0CCTL2=0x01TAR=0x00TA0CCR0=0x2710
TA0CCR1=0x00
TA0CCR2=0x00
Т.е. в регистре
TAR значение 0x00 вместо 0x2710. И устанавливаются флаги CCIFG в регистрах
TA0CCTL1 и
TA0CCTL2Стоит отметить, что при других значениях делителя частоты (ID_1, ID_2, ID_3. регистр TACLR) значения вполне адекватные.
Например при значении
ID_1 состояния регистров следующие:
До входа в обработчик TACTL=0x250
TA0CCTL0=0x10
TA0CCTL1=0x00
TA0CCTL2=0x00
TAR=0x00
TA0CCR0=0x2710
TA0CCR1=0x00
TA0CCR2=0x00
При входе в обработчикTACTL=0x250
TA0CCTL0=0x10
TA0CCTL1=0x00
TA0CCTL2=0x00
TAR=0x2710
TA0CCR0=0x2710
TA0CCR1=0x00
TA0CCR2=0x00
Помогите пожалуйста разобраться в чём моя ошибка?
P.S.: Прошу прощения за форматирование текста