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

 
 
> Не работает синхронный захват TIMERB в MSP430FG4619
Ivaxa
сообщение Sep 19 2007, 09:58
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 10-04-07
Пользователь №: 26 914



Настройка таймера:
Код
TBCTL |=(TBSSEL0      // Тактирование от ACLK          
       + MC1);        // Непрерывный режим счета
      
TBCCTL0 |=(CM0        // Захват по обоим фронтам (программный)
         + CM1
         + CCIS1  
         // + SCS      // Синхронный захват (если раскоментировать - не работатет)
         + CAP);      // Режим захвата


Обработчик прерывания (считаю период импульсов с помощью TIMERB):
Код
#pragma vector = PORT1_VECTOR
__interrupt void PORT1_int(void)
{
unsigned int TBR_temp;

TBCCTL0 ^= CCIS0;   // Програмный захват (TBCCR0 = TBR)
TBCTL |= (TBCLR     // Очистка и перезапуск таймера
       +  MC1);
TBR_temp = TBCCR0;  
..................
}


Работает, пока не раскоментирую строку // + SCS.
В этом случае в TBCCR0 всегда или 0 или 1, когда в TBR - нормальные данные, при этом устанавливается почему-то флаг переполнения захвата COV, хотя TBR у меня никогда не переполняется

Но мне нужен именно синхронный захват. Что я делаю неправильно?

Частота входных импульсов примерно 2 Гц, ACLK=32768 Гц.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Sep 19 2007, 10:56
Сообщение #2


Гуру
******

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



Уточните величины тактовых частот MCLK и ACLK. Установка бита SCS приводит к тому, что входной сигнал CCI стробируется тактовой частотой TBCLK=ACLK. Если ACLK значительно ниже MCLK, то скорее всего захват просто не происходит или происходит со значительной задержкой когда TAR уже сброшен. Причиной этому может быть факт, что период одного тактового сигнала ACLK (которым синхронизируется захват) больше, чем время выполнения команд
Код
TBCCTL0 ^= CCIS0;   // Програмный захват (TBCCR0 = TBR)
TBCTL |= (TBCLR     // Очистка и перезапуск таймера
       +  MC1);

См. времянку на рисунке Figure 16-10 в User's Guide
Для исключения этого нужно немного видоизменить процедуру считывания TBCCR0. Примерно так.
Код
TBCCTL0 ^= CCIS0;
while((TBCCTL0&CCIFG)==0); //ждем факта захвата
TBR_temp = TBCCR0;  
TBCTL |= TBCLR | MC1;
TBCCTL0&=~CCIFG;
Go to the top of the page
 
+Quote Post
Ivaxa
сообщение Sep 19 2007, 13:19
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 10-04-07
Пользователь №: 26 914



Спасибо за совет! a14.gif Сделал, так как вы написали - помогло.
Действительно, частота MCLK=3.6864 МГц и поэтому не было синхронизации.
Go to the top of the page
 
+Quote Post



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

 


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


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