Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Название:Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Автор:
- Жанр:
- Издательство:Издательский дом «ДМК-пресс»
- Год:2007
- Город:Москва
- ISBN:5-9706-0034-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С краткое содержание
В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах.
Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров.
Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
/*------------------------------------------------------------------------*/
/*filename: timer4.c */
/*МAIN PROGRAМ: Эта программа генерирует две импульсных последовательности*/
/* с использованием таймера и двух каналов подсистемы прерывания */
/* Сигналы формируются на выходах 2 и 3 таймера. */
/*------------------------------------------------------------------------*/
/*подключаемые файлы*/
#include <912b32.h>
/*используемые функции*/
void initialize(void); /*функция инициализации*/
void toggle1_isr(void); /*подпрограмма прерывания toggle1_isr*/
void toggle2_isr(void); /*подпрограмма прерывания toggle2_isr*/
//объявление функции обслуживания прерывания
#pragma interrupt_handler toggle1_isr
#pragma interrupt_handler toggle2_isr
//инициализация векторов прерывания
#pragma abs_address: 0xF7E8
void (*Timer_Channel_3_interrupt_vector[]) () = {toggle2_isr};
void (*Timer_Channel_2_interrupt_vector[]) () = {toggle1_isr};
#pragma end_abs address
void main(void) {
initialize(); /*инициализация подсистемы таймера*/
TMSK1 = 0х0C; /*разрешение прерывания по событию в каналах 2 и 3*/
TFLG1 = 0xFF; /*сброс всех флагов событий от каналов*/
CLI(); /*разрешить прерывания*/
while(l) {
/*ожидание прерывания*/
;
}
}
/*-------------------------------------------------------------*/
/* Функция initialize задает начальные установки модуля таймера*/
/*-------------------------------------------------------------*/
void initialize(void) {
TMSK2 = 0x02; /*назначить коэффициент деления 4*/
TIOS = 0х0C; /*установить каналы 2 и 3 в режим выходного*/
/*сравнения*/
TSCR = 0х80; /*разрешить работу таймера*/
TCTL2 = 0х50; /*назначить режим формирователя уровня */
/*инвертирование для обоих каналов*/
}
/*------------------------------------------------------------------*/
/* Функция toggle1_isr подпрограмма прерывания по событию в канале 2*/
/*------------------------------------------------------------------*/
void toggle1_isr(void) {
TFLG1 = 0x04; /*сброс флага события канала 2*/
ТС2 += 9091; /*задать код сравнения в регистр данных канала*/
}
/*------------------------------------------------------------------*/
/*-------------------------------------------------------------------*/
/* Функция toggle2_isr подпрограмма прерывания по событию в канале 3 */
/*-------------------------------------------------------------------*/
void toggle2_isr(void) {
TFLG1 = 0x08; /*сброс флага события канала 3*/
ТС2 += 4854; /*задать код сравнения в регистр данных канала*/
}
/*-------------------------------------------------------------------*/
Проанализируйте функции toggle1_isr и toggle2_isr. Генерацию каких импульсных последовательностей они обеспечивают?
4.14.5. Счетчик событий
Счетчик событий или аккумулятор импульсов (Pulse Accumulator) — это подсистема модуля таймера, которая разработана специально для подсчета импульсов. Основной элемент счетчика событий — 16 разрядный счетчик, который может работать в двух режимах:
• Счетчик внешних событий. В этом режиме счетчик PACNT подсчитывает число событий, которое детектируется его аппаратными средствам на входе PAI. Тип события (только нарастающий или только спадающий фронт сигнала) определяется посредством программных установок.
• Стробируемый таймер. В этом режиме счетчик PACNT тактируется внутренними импульсами с частотой f BUS /64, а сигналы на входе PAI разрешают или запрещают счет.
Структурная схема подсистемы счетчика событий представлена на рис. 4.45. Изучив ее, вы увидите, что счетчик событий в качестве входа PAI, на который должны поступать внешние импульсы, использует линию PT7 порта PORT T. Таким образом, обслуживание подсистемы счетчика событий альтернативная функция линии 7 порта PORT T. Однако линия PT7 обладает еще одной альтернативной функцией. Она используется как вход или как выход канала 7 подсистемы захвата/сравнения модуля таймера. Какие программные установки в регистрах управления таймера необходимо выполнить, чтобы конфигурировать линию PT7 как вход PAI счетчика событий?
• Сбросить бит IOS7 в регистре TIOS ($0080), тогда в канале 7 будет запрещен режим выходного сравнения;
• Сбросить биты OM7:OL7 регистра TCNTL1($0088),тогда линия PT7 окажется отсоединенной от аппаратных средств канала 7;
• Сбросить бит OC7M7 в регистре OC7M ($0082).

Рис. 4.45. Структура и регистры управления счетчика вешних событий
Если все эти установки выполнены, то сигнал с лиги PT7 будет поступать на вход детектора событий подсистемы счетчика событий. В каждом из режимов работы счетчика детектор выполняет разные функции, однако в обоих режимах работы детектор становится активным при установке бита PAEN регистра управления счетчиком PACTL (рис. 4.45) в 1.
Если подсистема находится в режиме счетчика внешних событий, бит PEDGE определяет: по какому фронту сигнала, нарастающему (при PEDGE = 1) или спадающему (при PEDGE = 0) будет переключаться счетчик. Если детектор фиксирует на входе PAI заданное битом PEDGE изменение входного сигнала, то устанавливается флаг события PAIF.
Если подсистема работает в режиме стробируемого таймера, то бит PEDGE определяет уровень сигнала на входе PAI, при котором будет разрешен счет для внутреннего счетчика PACNT. Если бит PEDGE = 1, то счет разрешен при низком логическом уровне на входе PAI. При этом по нарастающему фронту сигнала на входе PAI будет устанавливаться флаг событий PAIF. Если же бит PEDGE = 0, счет разрешается при высоком уровне PAI, флаг PAIF устанавливается по спадающему фронту PAI.
Если работы подсистемы счетчика событий разрешена, то 16 разрядный счетчик начинает считать с нулевого значения. Текущий код счетчика может быть считан из 16-разрядного регистра текущего состояния счетчика PACNT, который в памяти размещается в двух ячейках памяти: PACNTH — старший байт счетчика событий, PACNTL — младший байт счетчика событий (рис. 4.45). Каждое переполнение 16-разрядного счетчика событий фиксируется установкой триггера переполнения PAOVF. Этот триггер сбрасывается посредством записи в установленный разряд PAOVF единичного значения.
Оба рассмотренных флага: флаг переполнения счетчика PAOVF и флаг события на входе счетчика PAIF, — способны генерировать запросы прерывания. Прерывания от указанных флагов разрешаются битами PAOVI и PAI соответственно. Биты PAOVI и PAI располагаются в регистре флагов счетчика событий PAFLG (рис. 4.45).
В данном разделе мы рассмотрим регистры специальных функций, которые используются для управления режимами работы счетчика событий.
Регистр управления счетчиком событий PACTL (Pulse Accumulator Control Register) располагается в памяти МК по адресу $00A0. Формат регистра представлен на рис. 4.45. Регистр PACTL используется для задания режима работы счетчика событий, для назначения режима работы его детектора событий, для разрешения прерываний от подсистемы счетчика событий, а также для выбора источника тактирования счетчика временной базы модуля таймера.
Читать дальшеИнтервал:
Закладка: