Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как сделать счетчик на Timer B?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
cornflyer
Задача: посчитать импульсы на входе TBCLK (pin 83) за 1 сек. Импульсы приходят асинхронно от датчика.
По прерыванию Basic Timer'а (срабатывает каждую секунду) читаю TBR.

Но в мануале написано:

"When the timer clock is asynchronous to the CPU clock, any read from TBR should occur while the timer is not operating or the results may be
unpredictable."

т.е. прежде чем прочитать содержимое регистра счетчика TBR, его нужно остановить. И вообще как включить режим счетчика не написано. Ладно, включаю мозГ и пытаюсь привести все в систему =>

Управляющий регистр таймера B - TBCTL:
1 / Биты TBSSELx поставил в 00, т.е. выбрал Timer_B clock source = TBCLK.
2 / Биты MCx поставил 10, т.е. выбрал Continuous mode: the timer counts up to the value set by CNTLx.
3 / Биты CNTLx поставил 00, т.е. разрядность счетчика 16-bit, TBR(max) = 0FFFFh.

Если выставить биты MCx в 00, то получим "Stop mode: the timer is halted", т.е. таймер типа остановлен.

Так значит мне перед чтением надо обнулять биты MCx в регистре TBCTL !?

Всем спасибо за внимание и поддержку!!!!
rezident
Вы понимаете и делаете все верно. Для того чтобы не останавливать счетчик перед считыванием его значения, я предлагаю вам использовать регистр(ы) захвата этого же таймера. Перед тем как прочитать значение TBR вы должны программно имитировать захват, по которому значение TBR (синхронно частоте TBCLK) запишется в один из выбранных вами регистров TBCCRx. А из этого регистра вы уже спокойно считаете значение.
cornflyer
Цитата(rezident @ Nov 30 2006, 11:28) *
Вы понимаете и делаете все верно. Для того чтобы не останавливать счетчик перед считыванием его значения, я предлагаю вам использовать регистр(ы) захвата этого же таймера. Перед тем как прочитать значение TBR вы должны программно имитировать захват, по которому значение TBR (синхронно частоте TBCLK) запишется в один из выбранных вами регистров TBCCRx. А из этого регистра вы уже спокойно считаете значение.

Но ведь процессор тактируеца от MCLK. А MCLK асинхронен с TBCLK. Счетчик тактируеца от TBCLK.
Eсли проц начнет читать из TBR или TBCCRx, а в это время пришел сингал на TBCLK? Что тогда будет?
rezident
Цитата(cornflyer @ Nov 30 2006, 13:47) *
Но ведь процессор тактируеца от MCLK. А MCLK асинхронен с TBCLK. Счетчик тактируеца от TBCLK.
Eсли проц начнет читать из TBR или TBCCRx, а в это время пришел сингал на TBCLK? Что тогда будет?

При чтении TBR результат может быть неопределенным, потому что одновременно с чтением может произойти запись в этот регистр (инкремент счетчика). Но при чтении из TBCCRx результат будет однозначным, т.к. записью в регистр захвата вы будете управлять программно сами. А в момент чтения значение TBCCRx меняется не будет.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.