Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как по срабатыванию компаратора
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Dmitron
Джентельмены, проясните или дайте пример кода,
Нужно по переднему фронту срабатывания компаратора вычитать данные из таймера А. У меня получился такой код:

// настройка компаратора
CACTL1 = CARSEL+CAREF1+CAON+CAIE;
CACTL2 = P2CA0+CAF;
// настройка таймера
TACTL = TASSEL1 + TACLR+ID0+ID1; // SMCK, clear TAR, devider=8
TACCTL1 = CCIE + CCIS0 + CM0 + CAP; /* прерывание, подключить вход capture к выходу таймера, захват по переднему фронту, capture mode
TACCR1 = 1000; /* регистр, в который по моей мысли должен сохраняться ТАR при срабатывании capture*/
flagCF=1; // флаг
TACTL |= MC0; // пуск таймера, и заряда ёмкости через резюк
while(flagCF); //ждём, пока что-нибудь не сработает
temp2 = TACCR1; // сохраняём
return (temp2);
}
// а вот и прерывания:
#pragma vector=TIMERA0_VECTOR
__interrupt void TA0_timer_ISR (void)
{
TACTL &= ~(MC0+MC1);
flagCF=0; // stop timer
}

#pragma vector=COMPARATORA_VECTOR
__interrupt void TA0_capture_ISR (void)
{
TACTL &= ~(MC0+MC1);
flagCF=0; // stop timer
}

Собственно, как это сделать чудесно расписано, но примера кода нигде нет. И я вроде как всё делаю правильно, таймер запускается, но в регистр не сохраняется. Что бы это могло быть?
rezident
Неправильно мыслите. Читайте внимательно Руководство пользователя.
1. В регистр TACCRx при захвате записывается текущее значение TAR.
2. Чтобы по сигналу от компаратора срабатывал регистр захвата нужно соответствующим (программным) образом эти сигналы скоммутировать (CAOUT назначить сигналом для входа CCI1B регистра CCR1). См. таблицу в разделе timer_A3 (стр.18) даташита MSP430F149.
3. В вашем примере описаны обработчики векторов прерываний от компаратора и от одного регистра таймера. Но у таймера ведь не один вектор прерывания! По необозначенному вами вектору TIMERA1_VECTOR происходит переход при прерывании от CCR1, CCR2 и установке TAIFG.
rezident
Вот Тексасовский пример в котором используется требуемые вам функции компаратора и таймера. Правда он для MSP430F1121, но это не суть важно.
Dmitron
Большое пасибо! попали прямо в точку.
Terminator_2017
Цитата(rezident @ Mar 28 2006, 20:23) *
Вот Тексасовский пример в котором используется требуемые вам функции компаратора и таймера. Правда он для MSP430F1121, но это не суть важно.



Добрый день, а где можно найти этот пример?

А также как реализовать этот пункт: Чтобы по сигналу от компаратора срабатывал регистр захвата нужно соответствующим (программным) образом эти сигналы скоммутировать (CAOUT назначить сигналом для входа CCI1B регистра CCR1).

Заранее спасибо!
Сергей Борщ
QUOTE (Terminator_2017 @ Apr 18 2017, 12:52) *
как реализовать этот пункт: Чтобы по сигналу от компаратора срабатывал регистр захвата нужно соответствующим (программным) образом эти сигналы скоммутировать (CAOUT назначить сигналом для входа CCI1B регистра CCR1)
"Чтение документации из интернета вслух - 100 евро в час". Если уж вам лень самостоятельно прочитать указанный пункт документации:

QUOTE (rezident @ Mar 28 2006, 19:08) *
(CAOUT назначить сигналом для входа CCI1B регистра CCR1). См. таблицу в разделе timer_A3 (стр.18) даташита MSP430F149.



Terminator_2017
Цитата(Сергей Борщ @ Apr 18 2017, 11:14) *
"Чтение документации из интернета вслух - 100 евро в час". Если уж вам лень самостоятельно прочитать указанный пункт документации:


Я спрашивал как в коде это реализовать. Пишу на С++.
Сергей Борщ
QUOTE (Terminator_2017 @ Apr 18 2017, 14:56) *
Я спрашивал как в коде это реализовать. Пишу на С++.
То есть вы пишете на С++, но при этом не знаете, как записать число в регистр управления таймером? Какое число писать и в какой регистр - указано в упомянутой документации.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.