Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Система тактирования
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
d7d1cd
Привет всем. В MSP430F149 есть внутренний генератор системы тактирования. Какой он частоты? И как от него "затактировать" таймер А?
SSerge
http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/arh/4.htm
http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/arh/11.htm

Если коротко, модуль тактирования вырабатывает три разных клока:
MCLK - для тактирование процессора, а
SMCLK и ACLK используются для тактирования периферии.
При настройке периферии почти у всех можно выбрать от какого клока будет тактироваться устройство.
d7d1cd
Спасибо за ответ. Все это я уже читал. Мне необходимо сделать таймер, чтобы он вызывал прерывание примерно через каждые 5 сек. К МК подключен один резонатор на частоту 8МГц. Как мне настроить таймер при таких условиях?
rezident
Цитата(d7d1cd @ Oct 5 2012, 07:47) *
Мне необходимо сделать таймер, чтобы он вызывал прерывание примерно через каждые 5 сек. К МК подключен один резонатор на частоту 8МГц. Как мне настроить таймер при таких условиях?
У MSP430F149 таймеры 16-и разрядные. При тактовой 8МГц, если даже использовать все предделители, можно получить период переполнения таймера лишь 8*8*65536/8МГц=0,524288с. Поэтому чисто аппаратно 5 сек отмерить не получится. Нужно программно "расширить" разрядность таймера, скажем до 32-х разрядов. Вводите 32-х разрядную переменную, которую в прерывании от переполнения таймера увеличиваете на 2^16. К значению этой переменной в произвольный (требуемый вам) момент времени прибавляете значение TAR и получаете 32-х разрядный отсчет с дискретностью счета таймера. Чтобы точно отмерить 5сек, в прерывании от переполнения (там где инкремент счетчика на величину 65536 идет) анализируете беззнаковую разницу текущего значения переменной 32-х разрядного счетчика и уставки. Если разница оказывается меньше 65536, то устанавливаете в регистр сравнения CCRx остаток от деления (5c*8МГц/8/8)%65536=35176 и разрешаете прерывание от совпадения CCRx. Если хочется еще точнее, то учитывайте 6 тактов MCLK, требуемых для перехода по вектору прерывания, и такты на сохранение контекста в прерывании.
MrYuran
Цитата(d7d1cd @ Oct 5 2012, 06:47) *
Мне необходимо сделать таймер, чтобы он вызывал прерывание примерно через каждые 5 сек.

Придется делать виртуальный таймер.
Например, сконфигурировать прерывания таймера на фиксированный интервал (например, 5мс) а внутри завести счетчик, который будет считать либо тики, либо миллисекунды. Далее по достижению определенного значения (1000 тиков или 5000мс) сформировать эвент (флаг) для ожидающего потока.

Можно, как resident посоветовал, если событие одно и частые прерывания нежелательны (например, в спячке). Я так делал, когда нужно было точно отмерить некий интервал, не перегружая систему излишними прерываниями, которые сказывались на скорости реакции и точности измерений.
d7d1cd
Вопрос: если выводы МК XIN и XOUT не задействованы (к ним не подключен резонатор), то осциллятор LFXT1 работать не будет и, следовательно, ACLK тоже будет нерабочим. Правильно?
E.V.G.
Да. Без кварца ACLK не будет. Но на XIN можно подать внешнюю частоту с другого источника и тогда она появится. Я так делал, когда мне понадобилось получить частоту для тактирования периферии меньшей величины. Взял выход SMCLK и завёл на XIN. С помощью DIVA поделил на нужное мне число.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.