Прибор для измерения частоты на базе микроконтроллера MSP430, страница 5

Размерность счетчиков количества импульсов измеряемых сигналов определяется как время измерения *  число импульсов в секунду. Для сигнала с частотой 1000 Гц (с учетом максимально возможной погрешности): 100сек * 1001им/сек = 100100. В одном регистре (16 бит) можно сохранить только 65535 импульсов, поэтому в качестве счетчика импульсов используем 2 регистра (48 бит). Возможно использовать в качестве счетчиков и 3 байта RAM, но обращение к RAM занимает больше времени, чем обращение к регистрам, поэтому используем регистры.

Очевидно, что чем реже ядро МК выводится из режима малого энергопотребления прерываниями, тем меньше энергопотребление прибора. Поэтому настраиваем BT на максимально возможный период генерирования прерываний 2с. Тогда при необходимом интервале в 100 сек. максимальное значение счетчика прошедших секунд будет равно 50. Значит, в качестве этого счетчика можно выбрать 1 байт RAM или 1 регистр. По указанной выше причине выбираем регистр.    

Программа разделяется на несколько частей:

·  Подпрограмма Init_Sys

·  Процедуры обработки прерываний от BT BT_ISR

·  Процедуры обработки прерываний от порта в/в P0.34_ISR

При включении прибора, выполняется подпрограмма инициализации системы Init_Sys. Здесь обнуляются все счетчики, настраивается на частоту 0.5 Гц Basic Timer, линии P0.3 и P0.4 порта в/в настраиваются как входы и на генерацию прерываний по приходу спадающего фронта. Разрешаются прерывания от BT и линий 1-4 порта в/в, все другие маскируемые прерывания запрещаются. Устанавливается бит GIE глобального разрешения всех индивидуально разрешенных прерываний (в регистре SR).

Затем MSP430 ожидает прихода прерываний от BT или порта в/в в режиме LPM3. В этом режиме ядро приостановлено, ACLK формируется и равна номинальному значению, DCO и FLL отключены. Как только приходит запрос на прерывание, МК переходит в активный режим и выполняет процедуру обработки прерывания.

Если прерывание пришло с линии P0.3 или P0.4 порта, то управление передается на обработчик прерываний P0.34_ISR. Здесь с помощью флагов прерываний определяется, с какой именно линии пришло прерывание. С помощью команд ADD и ADC производится инкремент соответствующего счетчика и сброс флага прерывания. Затем выполняется команда EINT, разрешающая обработку вложенных прерываний. Т.е. если во время обработки прерывания от одной линии произошло событие, вызывающее прерывание, на другой линии порта, то обрабатывается это новое прерывание. По команде RETI МК снова переходит в режим LPM3.

Если прерывание пришло от BT, то управление передается на обработчик прерываний BT_ISR. Здесь инкрементируется счетчик sec_counter и затем происходит проверка, не прошло ли 100 секунд. Если нет, то по команде RETI МК переходит в режим LPM3. Если 100 секунд прошло, то значения счетчиков импульсов двух сигналов сохраняются в стеке и происходит безусловный переход на метку RESET, т.е. программа запускается с начала и можно измерять частоту новых сигналов. Предварительно необходимо вытащить из стека сохраненные там значения регистров PC и SR, т.к. команда JMP не позволит выполниться команде RETI.

VII. Реализация интерфейса RS232

     Последовательный интерфейс пересылки данных между МК и ПК осуществляется с помощью интерфейса USART. Периферийный интерфейс USART с помощью одной аппаратной конфигурации поддерживает 2 последовательных протокола: универсальный асинхронный протокол UART, или RS232, и синхронный последовательный протокол SPI.  

     С помощью регистра UCTL настроим USART на работу в режиме UART (сбросить бит SYNC), и выберем формат кадра данных 8N1: 8 бит данных, бит паритета отсутствует, 1 стоп-бит(CHAR=1, SP=0, PEN=0).  

     Для реализации протокола UART необходимы следующие аппаратные и программные ресурсы МК MSP430x3xx:

·  Вывод порта P0.1 для получения данных и вывод порта P0.2 для передачи данных из МК

·  8-bit T/C

·  регистр или байт/слово RAM для буферизации получаемых битов RXD (из регистра TCCTL) или передаваемых битов TXD (назовем его RXTXData)