реклама на сайте
подробности

 
 
> прерывания таймера. прошу помощи
kavimanus
сообщение May 24 2018, 11:22
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 23-05-18
Пользователь №: 104 608



Помогите разобраться новичку. Пытался самостоятельно - не вышло. Ниже кусок когда (максимально упрощенный). Суть в банальном прерывании от таймера, которое срабатывает по достижении определённого значения, но вот срабатывает оно (прерывание) очень странно. Точнее имеются странные показания регистров при делителе частоты = 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=0x211
TA0CCTL0=0x10
TA0CCTL1=0x01
TA0CCTL2=0x01
TAR=0x00
TA0CCR0=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.: Прошу прощения за форматирование текста
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kavimanus
сообщение May 26 2018, 23:01
Сообщение #2





Группа: Участник
Сообщений: 7
Регистрация: 23-05-18
Пользователь №: 104 608



Хочу поблагодарить всех, кто оказывал помощь. Вопрос более не актуален. Всё работает.

Выводы следующие:

- действительно не стоит полностью полагаться на отладчик (что прискорбно);
- более вдумчиво нужно читать документацию.

Еще раз спасибо за посильную помощь. Все советы были полезны и способствовали решению моего вопроса.
Go to the top of the page
 
+Quote Post
k155la3
сообщение May 28 2018, 08:54
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(kavimanus @ May 27 2018, 02:01) *
Хочу поблагодарить всех, кто оказывал помощь. Вопрос более не актуален. Всё работает.
. . .

sm.gif "Легко отделались" sm.gif Спасибо за отчет.
---
Еще одна причина, по которой может возникать такое непонятное поведение.
Неверное, по тем или иным причинам, "подключение" h-файлов и макроса переключения на конктретный тип процессора.
(при этом, ест-но, наблюдается "фонарная" установка адресов регистров и их битов).
В лучшем случае - не работает вообще. В худшем - проявляется в виде сбоев.

Go to the top of the page
 
+Quote Post
kavimanus
сообщение May 28 2018, 09:34
Сообщение #4





Группа: Участник
Сообщений: 7
Регистрация: 23-05-18
Пользователь №: 104 608



Цитата(k155la3 @ May 28 2018, 11:54) *
sm.gif "Легко отделались" sm.gif Спасибо за отчет.
---
Еще одна причина, по которой может возникать такое непонятное поведение.
Неверное, по тем или иным причинам, "подключение" h-файлов и макроса переключения на конктретный тип процессора.
(при этом, ест-но, наблюдается "фонарная" установка адресов регистров и их битов).
В лучшем случае - не работает вообще. В худшем - проявляется в виде сбоев.


Интересное замечание. Возьму на заметку, спасибо. Хотя, конечно, совсем отказываться от уже прописанных константных значений, и производить побитовую инициализацию, не очень бы хотелось )
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 08:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016