Управление индикацией
Скачать 1.95 Mb.
|
© МИРЭА, А.Н.Богаченков Алгоритм основной программы Инициализация: - признаков; - отсчетов сигнала; - разрядов портов; - ЦАП; - сторожевого таймера. да Начало Признак старта да нет Сброс признака старта, установка признака процесса Конфигурирование прерываний от кнопки, от таймера частоты дискретизации Фиксированная задержка на 1 мс Загрузка счетчика длительности логического сигнала (процесса) Загрузка счетчика числа отсчетов звукового сигнала Установка признака "звук – пауза" на звуковую посылку Признак процесса Декремент счетчика длительности лог. сигнала Лог. сигнал окончен Счетчик отсчетов = 0 Перезагрузка счетчика числа отсчетов звука или паузы Изменение признака "звук – пауза" нет да Выдача логического сигнала Снятие логического сигнала Сброс признака процесса да нет нет Обслуживание сторожевого таймера или Спящий режим 1 мс прошла да нет 5 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм обработчика прерывания от внешнего сигнала (кнопки) Алгоритм обработчика прерывания с частотой дискретизации Вход Выборка кода ЦАП из таблицы Возврат Счетчик отсчетов не 0 и признак "звук" Задание "нулевого" кода ЦАП Декремент счетчика числа отсчетов да нет не 0 Передача кода в ЦАП Циклическое продвижение индекса отсчета в таблице Счетчик отсчетов обнулен Проверка и сброс флага запроса прерывания Вход Проверка и сброс флага запроса прерывания Возврат Процесс идет Установка признака старта процесса да нет 6 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Исходный текст главного модуля Проект для среды MDK-ARM размещен в D:\ARM\Work\Practical\DacDelay 7 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков 8 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков 9 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Вопросы и задания для самостоятельной работы 1. Сформулируйте требования к уровням сигналов, если, например, устройство работает со звуковым пьезоэлектрическим излучателем и управляет твердотельным реле. 2. Расскажите о вариантах защиты входных разрядов портов от помех, повышенных положи- тельных и отрицательных уровней сигналов. 3. Приведите варианты схем для умощнения выходных разрядов портов как при работе на нагрузку с повышенным напряжением, так и с увеличенным током. 4. Что представляет собой программный признак (флаг)? Какие типы данных используются для реализации флагов? Для каждого из признаков найдите в тексте программы его установ- ку, сброс, проверку. 5. Что представляет собой признак запроса прерывания? Каковы причины выставления по- добных флагов? Расскажите и покажите по тексту программы порядок перехода на обслужи- вание прерывания и возврат из него. Как происходит работа в случае наличия нескольких запросов прерываний? 6. Как решается задача работы с органами управления, имеющими эффект дребезга контак- тов? Покажите на примере приведенной программы. Какие существуют иные варианты ре- шения проблемы? 7. Модифицируйте алгоритм и текст программы, чтобы отдельными органами управления осуществлялся выбор нескольких вариантов параметров генерируемых сигналов. 8. Модифицируйте алгоритм и текст программы для реализации управляющих воздействий через такие временные интервалы, как минуты и часы. Предусмотрите ситуацию, когда в ре- зультате сбоя сторожевой таймер сбрасывает процессор, при этом отсчет времени должен продолжаться. 1 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Цифровые устройства и микропроцессоры II часть Практические занятия Занятие 5 Программирование коммуникационного интерфейса ● Задача. Разрабатываемое устройство с некоторой периодичностью осуществляет сбор данных с датчиков. От главного устройства (например, компьютера) поступают команды: включение некоторого объекта, чтение показаний датчиков, чтение/запись массива данных. Устройство выполняет команды и формирует ответные сообщения. На время выполнения любой из указанных операций включается контрольная индикация. Функциональная схема В качестве главного может выступать компьютер, промышленный контроллер, устрой- ство, подобное разрабатываемому. При наличии проводной связи предоставляется широкий выбор коммуникационных интерфейсов. И хотя в курсе не изучаются беспроводные техно- логии, при необходимости удаленного управления можно воспользоваться готовыми реше- ниями (см. следующую схему). При составлении алгоритма в принципе не так важно, с ка- ким устройством и по какому интерфейсу осуществляется обмен. CPU Главное устройство Сигнал включения объекта Датчики Контрольная индикация Возможные интерфейсы: RS-232, SPI, I2C, параллельный Беспро- водной модуль Беспро- водной модуль CPU Главное устройство Сигнал включения объекта Датчики Контрольная индикация Возможные интерфейсы: RS-232, SPI, I2C, USB, CAN, Ethernet 2 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Пример форматов сообщений Анализ задачи Для форматов сообщений и ответов на них, а также для кодов команд не существует единых стандартов, они могут варьироваться для каждой конкретной системы. Сообщения обычно передаются единым пакетом, каждое из полей сообщения (старто- вый код, номер устройства и т.д.) может иметь различный размер (от одного до 4...8 байт). Приведенные примеры — всего лишь один из возможных вариантов. Например, если обмен производится только с одним устройством, нет смысла передавать его номер. Если все сооб- щения имеют одинаковую длину, то и в поле «Длина» необходимости нет. Но что настоя- тельно рекомендуется использовать, так это контроль достоверности информации с целью гарантии отсутствия каких-либо искажений при передаче и приеме информации. Для иден- тификации возможных ошибок в массиве данных служит поле контрольной суммы, которая вычисляется для всех передаваемых байт по специальному алгоритму (подробнее см. лекци- онный материал). При использовании стандартных встроенных в процессор интерфейсов передачу-прием отдельных слов (на уровне бит) берет на себя соответствующий контроллер, а по сетевым и USB интерфейсам контроллер обслуживает пакеты целиком, включая даже проверку кон- трольных сумм. Практически во всех интерфейсах основной единицей данных является байт (длина сообщений также указывается в байтах). Алгоритм обмена по интерфейсу может быть организован как через программную про- верку состояний приема и отправки байт, так и с использованием системы прерываний. Пер- вый способ более прост и нагляден, но предполагает практически полную занятость процес- сора только обменом по интерфейсу, что нерационально для низкоскоростных RS-232, SPI, I 2 C. Длина сообщ. Номер устр-ва Код команды Код управл. Контр. сумма Управление (включение/выключение) От главного устройства Ответ Старт. код Номер устр-ва Код команды . . . Запись массива данных Элементы массива Контр. сумма Длина сообщ. Номер устр-ва Контр. сумма Код ответа Ответ Длина сообщ. Номер устр-ва Контр. сумма Код ответа Старт. код Номер устр-ва Код команды Контр. сумма Чтение показаний датчиков или массива данных Ответ Длина сообщ. Номер устр-ва Код ответа Номер датчика Данные датчика Номер датчика Данные датчика . . . Элементы массива От главного устройства От главного устройства Старт. код Длина сообщ. Длина сообщ. Контр. сумма 3 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Для организации взаимодействия вычислительного ядра и контроллера интерфейса в системе прерываний обычно используются два аппаратных флага, инициирующих генера- цию запросов прерываний: флаг приема (принятого байта/пакета) — устанавливается при получении контрол- лером байта/пакета от внешнего устройства, т.е. при наличии в буфере приема дан- ных; флаг передачи (пустого буфера передачи) — устанавливается, если текущий байт/пакет отправлен, и контроллер готов получить от процессорного ядра новый код для отправки. Здесь наиболее важным является успеть прочитать из контроллера принятый байт / па- кет до получения следующего, иначе новые данные перезапишут еще непрочитанные. В разрабатываемом алгоритме будет использоваться система прерываний для побайто- вой передачи и приема данных. Текущие программные флаги (представляют собой обычные переменные): флаг принятого сообщения, устанавливается по окончании приема всех байт сооб- щения, сбрасывается по завершении его обработки; флаг процесса передачи, устанавливается, как только будет подготовлено передава- емое сообщение и сбрасывается по окончании его передачи по интерфейсу; флаг сбора данных, устанавливается с определенной периодичностью, задаваемой таймером, сбрасывается по завершении процедуры опроса всех датчиков. Еще одним важным моментом при коммуникациях является задание длины передавае- мых и определение длины принимаемых сообщений. Некоторые варианты: использование блоков данных фиксированной длины — применяется в самых про- стых случаях, а также для устройств с неизменяемыми размерами данных — от- дельными датчиками, АЦП, ЦАП, устройствами ввода (мышь, клавиатура) и т.п. аппаратная поддержка пакетов на уровне контроллера (сетевые интерфейсы, USB), где при передаче длина указывается контроллеру, а при приеме контроллер сам со- общает пользовательской процедуре о полученном объеме данных; включение параметра "длина пакета" в само сообщение (в начальные поля), в про- цессе приема ведется подсчет количества получаемых данных и остановка при по- лучении заданного объема информации; использование таймаута, когда передатчик просто прекращает процесс по оконча- нии передачи всех байт, а на приемной стороне проверяется временной интервал между приходом отдельных байт, и если он превышает некоторый порог, сообще- ние считается полностью принятым. Два последних варианта удобны при побайтовом обмене и будут оба применены в раз- рабатываемом устройстве (в реальности достаточно одного, здесь это сделано чисто в учеб- ных целях). Принципы построения различных интерфейсов рассматриваются в лекционном курсе. В данной задаче не будет акцентировано внимание на реализации устройства индикации и процедуре сбора данных, предлагается проработать эти вопросы самостоятельно. Также к самостоятельной работе относится написание программного кода. Временные диаграммы В приведенных диаграммах используются сигналы (флаги, запросы), которых в дей- ствительности нет (это разряды внутренних регистров процессора). Но для отладочных це- лей такие сигналы можно вывести через свободные разряды портов и реально наблюдать по- средством внешнего регистратора (логического анализатора, осциллографа). 4 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Диаграмма процесса сбора данных, когда таймер программируется точно на требуемую периодичность запуска: Если период достаточно большой, а ядро находится в спящем режиме, возможно сраба- тывание сторожевого таймера. Для исключения такой ситуации прерывания от таймера сбо- ра генерируются с периодом, необходимым для обслуживания сторожевого таймера: Диаграмма процесса приема кодов, когда длина сообщения известна (либо фиксирова- на, либо содержится в самом сообщении), а при приеме ведется точный подсчет числа при- нимаемых байт: Диаграмма, показывающая принцип завершения приема по истечении таймаута: Принимаемые коды Флаг приема Флаг принятого сообщения Запросы прерывания от таймера сбора данных Флаг сбора данных, процесс сбора данных Запросы прерывания от таймера сбора данных Флаг сбора данных, процесс сбора данных Принимаемые коды Флаг приема Значение счетчика таймера таймаута Флаг принятого сообщения Таймаут отсутствия кодов 5 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Диаграмма процесса передачи кодов: После подготовки сообщения программно устанавливается флаг процесса передачи, разрешается работа передающего интерфейса. Тут же от интерфейса следует запрос на пере- даваемые данные, и как только эти данные будут записаны в регистр передачи и начнут пе- редаваться по каналу, интерфейс сформирует новый запрос для загрузки следующих данных. Но даже после программного окончания процесса интерфейс может продолжать передачу кодов, которые уже были в него загружены (это может быть и целый пакет данных). Пример диаграммы общей последовательности работы, например, при выдаче управ- ляющего воздействия (масштаб выдержан приблизительно): Для индикации каждого из режимов могут использоваться как отдельные индикаторы, так и, например, один, управление которым (частота мигания, скважность, яркость и т.п.) ва- рьируются в зависимости от текущего состояния. Передаваемая информация (ответ) Работа индикатора Процесс сбора данных Принимаемая информация M байт Включение некоторого объекта N байт Передаваемые коды Флаг передачи (аппаратный) Флаг процесса передачи (программный) 1 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Цифровые устройства и микропроцессоры II часть Практические занятия Занятие 6 Программирование коммуникационного интерфейса (продолжение) Алгоритм обработчика прерывания от таймера сбора данных Вариант, когда период сбора не превышает допустимый период обслуживания сторожевого таймера Запрос прерывания от таймера с заданной периодичностью выводит процессор из спя- щего режима, в основной программе синхронно реализуется и работа с датчиками, и обслу- живание сторожевого таймера. Вариант, когда период сбора является большим Таймер настраивается на определенный интервал, необходимый для обслуживания сторожевого таймера, а период для сбора данных выбирается кратным этому интервалу. Вход Установка признака сбора данных Возврат Увеличение счетчика интервалов для периода сбора Счетчик достиг заданного значения нет да Обнуление счетчика Вход Установка признака сбора данных Возврат 2 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм основной программы Если получение информации с датчиков производится с большой периодичностью (из- меряемой, например, минутами), и от главного устройства нет запросов, процессор необхо- димо принудительно пробуждать для обслуживания сторожевого таймера. Это можно делать как с помощью отдельного таймера, так и таймера, задающего период сбора данных. Модуль управления индикацией может вызываться как из основной программы, так и из любой другой подпрограммы, включая обработчики прерываний, в зависимости от требу- емого характера индикации. Инициализация портов, интерфейсов, таймеров, сторожевого таймера, системы прерываний. Сброс всех признаков. Признак принятого сообщения Начало Обслуживание сторожевого таймера Спящий режим Признак сбора данных Обработка принятого сообщения, отправка ответа Получение информации с датчиков и размещение ее в памяти Сброс признака сбора данных Управление индикацией да да нет нет 3 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм подпрограммы обработки принятого сообщения Обработчик вызывается, когда сообщение полностью принято, адресовано настоящему устройству. В модифицированном варианте контрольная сумма может вычисляться непосредствен- но в процессе приема (в обработчике по флагу приема), при несовпадении контрольных сумм данная подпрограмма вообще не вызывается. Вход Выдача управляющих воздействий управление чтение датчиков чтение массива Сброс признака принятого сообщения Расчет контрольной суммы принятого сообщения Контрольные суммы совпали нет да Команда Выход Подготовка данных для передачи Подготовка данных для передачи Сохранение массива в памяти запись массива иное Подготовка ответа Подготовка ответа Установка признака процесса передачи Разрешение прерываний от интерфейса передачи Выход 4 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм обработчика прерывания по флагу приема Обработчик вызывается после приема каждого байта. Сам флаг приема в интерфейсах обычно сбрасывается аппаратно по факту чтения содержимого приемного регистра. В модифицированном варианте можно с получением каждого кода сразу вычислять ча- стичную контрольную сумму, а при получении последнего кода, который как раз является эталонной контрольной суммой, проверять соответствие принятой и вычисленной контроль- ных сумм. Вход 0 (старт) Чтение принятого кода, сохранение в промежуточном буфере Номер принятого кода Запоминание длины сообщения Остановка таймера таймаута Выход Код соответствует стартовому Код совпадает с № устр. Длина в допустимых пределах Код последний 1 (№ устр.) 2 (длина) > 2 Установка признака принятого сообщения Копирование в буфер принятого сообщения Обнуление номера принятого кода Инкремент числа (номера) принятых кодов Перезапуска таймера таймаута Выход нет да нет нет да да да нет 5 ЦУМП, Практические занятия, © МИРЭА, А.Н.Богаченков Алгоритм обработчика прерывания от таймера таймаута Таймер запускается с приходом первого байта и перегружается для отсчета времени с начала после приема каждого байта. Если очередной байт не пришел, через заданный вре- менной интервал вызывается данный обработчик, идентифицирующий конец сообщения. Вход Возврат Остановка таймера таймаута Установка признака принятого сообщения Копирование в буфер принятого сообщения Обнуление счетчика принятых кодов |