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

 
 
> Timer A, Непонятки с работой ТА0 и ТА1
megabuks
сообщение Sep 26 2012, 13:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 26-01-10
Из: Санкт-Петербург
Пользователь №: 55 080



Здравствуйте
Помогите разобраться с таймерами. Контроллер 430G2353.
что должна делать программа - подсчитывать число импульсов поступивших на таймер за период, задаваемый watchdog oм.
если стоит TA0 - все работает как надо
если в этом же коде поменять ТА0 на ТА1 то 1.IAR выдает ошибку (см выделение в тексте) 2.если закоментировать эту строку (где выдается ошибка, то все-равно импульсы не копяться)
Я считал что ТА0 и ТА1 идентичны. где я ошибаюсь?
CODE

bis #TACLR,&TA0CTL
mov #0x0320,&TA0CTL ;TASSEL_3+MC_2;// TACLK, cont mode ;for TACLK + cont.mode need 0x0026 ;0x0320
mov #0xe100,&TA0CCTL2 ; 0e100
;-------------------
mov #0x5a1e,&WDTCTL;wdthold=0,wdtnmies=0,wdtnmi=0,wdttmsel=1(interval mode),wdtcntcl=1(wdtcnt=0000h),wdtssel=1=aclk, wdtisxx=01=/8192

bis #TACLR,&TA0CTL
wait_capt6:
bit #CCIFG,&TA0CCTL2
jz wait_capt6
mov TA0R,r8 тут IAR выдает ошибку
mov &TA0CCR2,r9
......

;-------------
;WDT Interrupt
;-------------
WDT_INT:
xor #CCIS0,&TA0CCTL2

mov #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
reti;

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Sep 26 2012, 18:21
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(megabuks @ Sep 26 2012, 18:41) *
1.IAR выдает ошибку (см выделение в тексте)

Видимо потому, что запись должна быть вида
Код
mov &TA0R,R8

Цитата(megabuks @ Sep 26 2012, 18:41) *
2.если закоментировать эту строку (где выдается ошибка, то все-равно импульсы не копяться)
Я считал что ТА0 и ТА1 идентичны. где я ошибаюсь?

В данном кристалле - да, таймеры идентичны. Возможной причиной может быть отсутствие полного понимания функционирования аппаратуры таймеров. Судя по листингу, у вас подсчет импульсов ведется непосредственно - импульсы подаются на тактовый (счетный) вход TA0 INCLK, так? Временные ворота вы формируете программно, используя WDT и режим захвата CCI2. Если все так, то простое переименование регистров в программе ничего вам не даст. Кроме смены номера таймера нужно еще физически перекоммутировать входные импульсы с пина TA0 INCLK на пин TA1 INCLK. Соответственно нужно настроить функцию соответствующего пина. Нюанс состоит еще и в том, что для TA0 вход INCLK внутренне коммутируется на PinOsc, а для TA1 вход INCLK действительно подключается к внешнему пину P3.7. В общем советую внимательно просмотреть и сравнить функции пинов, подключаемых к таймеру. См. следует datasheet MSP430G2353, а в нем Table 12. Timer0_A3 Signal Connections, Table 13. Timer1_A3 Signal Connections и Table 16. Port P1 (P1.0 to P1.2) Pin Functions, Table 23. Port P3 (P3.0 to P3.7) Pin Functions (28-Pin PW and 32-Pin RHB Packages Only).
Кстати, читать значение непосредственно из регистра TAxR при асинхронном тактировании таймера не рекомендуется. Рекомендуется сформировать программно захват значения TAxR и считать полученное значение уже из регистра TAxCCRx. То бишь строка с ошибкой у вас по сути лишняя. Строкой ниже из TA0CCR2 вы и так читаете искомое значение TA0R.
И еще одно замечание. Отучайтесь использовать "магические числа". Везде по тексту используйте стандартные (TI) символьные обозначения регистров и бит. Тогда программа на АСМе будет читаться также легко как на ЯВУ типа Си.
Код
mov #TASSEL_3+MC2,&TA0CTL;TASSEL_3+MC_2;// TACLK, cont mode;for TACLK + cont.mode need 0x0026;0x0320
mov #CM_3+CCIS_2+CAP,&TA0CCTL2; 0e100

Вот в таком виде текст программы был бы более понятным, не так ли? wink.gif
Go to the top of the page
 
+Quote Post



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

 


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


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