Цитата(rezident @ Sep 26 2012, 21:21)

Видимо потому, что запись должна быть вида
Код
mov &TA0R,R8
вот тут прикол в том что запись mov &TA0R,R8 работает а на mov &TA
1R,R8 компилятор ругается

Цитата(rezident @ Sep 26 2012, 21:21)

В данном кристалле - да, таймеры идентичны. Возможной причиной может быть отсутствие полного понимания функционирования аппаратуры таймеров. Судя по листингу, у вас подсчет импульсов ведется непосредственно - импульсы подаются на тактовый (счетный) вход TA0 INCLK, так?
Временные ворота вы формируете программно, используя WDT и режим захвата CCI2.
Да, в данном варианте кода так.
Дело в том, что я делаю сенсорную кнопку. сенсор подключен к порту 2.5 частота с него подается на вход TA0 INCLK.
В начале работы у меня был только контроллер 430g2252. в него я прошил пример от TI. Результат меня устроил.
Я переписал код на асм, используя ТА0 для счета и WDT для формирования временного окна измерения, и опять-же на 430g2252 все работало.
Для проекта, в котором должна использоваться эта кнопка, нужен UART и WDT. Поэтому выбрали 430g2553. соответственно для формирования интервала измерения я решил использовать ТА1. Вот тут и начались чудеса....
строки
Код
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
я заменил на:
Код
bis #TACLR,&TA1CTL
mov.w #0x0110,&TA1CTL;15-10=0(free);9,8=01(aclk);7,6=00(/1);5,4=01(up to taccr0);3=0(free)
;2=0(TACLR);1=0(прерывание запрещено);0=0
mov #0x1fff,&TA1CCR0; interval interrupt
bis #CCIE,&TA1CCTL0; CCR interrupt for TA1 enable
соответственно в прерывании ТА1ССR0
Код
TA1_CCR0_INT:
xor #CCIS0,&TA1CCTL2;0
clr &TA1CTL ;timer halted ta1
reti
И тут затык - как только я пишу значение в &TA1CCR0 возникает флаг прерывания CCIFG,
который не сбросить ни командой bic ни командой mov. Ну и дальше из этого прерывания получается не выйти. Те-же действия но с таймером ТА0 - прекрасно проходят. Тогда и возникла идея поробовать поменять их местами - ТА0 формировать интервал измерения а ТА1 -считать входные импульсы. Да вот действительно не учел, что надо перекомутацию произвести.... Тогда вопрос - а чего делать то теперь - в какую сторону копать???
Цитата(rezident @ Sep 26 2012, 21:21)

Если все так, то простое переименование регистров в программе ничего вам не даст. Кроме смены номера таймера нужно еще
физически перекоммутировать входные импульсы с пина 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).
Да про это я забыл....
Цитата(rezident @ Sep 26 2012, 21:21)

То бишь строка с ошибкой у вас по сути лишняя. Строкой ниже из TA0CCR2 вы и так читаете искомое значение TA0R.
Вообщем-то да, лишняя, остаток от отладок. Просто смутило что на TA1R выдало ошибку
Цитата(rezident @ Sep 26 2012, 21:21)

И еще одно замечание. Отучайтесь использовать "магические числа". Везде по тексту используйте стандартные (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
Вот в таком виде текст программы был бы более понятным, не так ли?

Трудно не согласиться
Сообщение отредактировал megabuks - Sep 26 2012, 20:19