Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е] Страница 16
- Категория: Научные и научно-популярные книги / Радиотехника
- Автор: Пауль Хоровиц
- Год выпуска: -
- ISBN: -
- Издательство: -
- Страниц: 111
- Добавлено: 2019-02-05 12:32:26
Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е] краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е]» бесплатно полную версию:Широко известная читателю по предыдущим изданиям монография известных американских специалистов посвящена быстро развивающимся областям электроники. В ней приведены наиболее интересные технические решения, а также анализируются ошибки разработчиков аппаратуры: внимание читателя сосредотачивается на тонких аспектах проектирования и применения электронных схем.На русском языке издается в трех томах. Том 3 содержит сведения о микропроцессорах, радиотехнических схемах, методах измерения и обработки сигналов, принципах конструирования аппаратуры и проектирования маломощных устройств, а также обширные приложения.Для специалистов в области электроники, автоматики, вычислительной техники, а также студентов соответствующих специальностей вузов и техникумов.
Пауль Хоровиц - Искусство схемотехники. Том 3 [Изд.4-е] читать онлайн бесплатно
Мы прочитали из АЦП байт в дополнительном (до 2) коде, но наш массив DATA и накопитель ячейки (D7) используют длинные дополнительные числа. Для получения длинного целого числа дважды выполняется команда ЕХТ (расширение знака). Расширение знака представляет собой просто копирование самого старшего бита числа влево, пока не заполнится большее по длине целое слово; эта операция сохраняет значение целого со знаком (простое заполнение нулями не сохраняет значения числа). Расширенное целое добавляется к накапливаемому содержимому ячейки в D7, а счетчик ширины канала dwell__per__bin (D6) декрементируется. Если в нем еще не нуль, возврат осуществляется через z__pulse, как описано выше. Полное время выполнения программы обработчика в этом случае составляет 32,3 мкс плюс 9 мкс на процедуру прерывания ЦП и еще 5 мкс на команду RTE, всего 46,3 мкс. Таким образом, главная программа имеет более половины процессорного времени на выполнение простой задачи обновления массива DISPLAY.
Если накопление в канале завершилось, обработчик устанавливает счетчик ширины канала, добавляет накопленное значение в D7 к соответствующему элементу массива DATA (на который указывает А5), инкрементирует соответствующий элемент массива NORM (через А6), очищает регистр-аккумулятор (D7), декрементирует счетчик каналов и (если в счетчике каналов не нуль, т. е. развертка не завершилась) переходит на z__pulse. Обратите внимание на использование автоинкрементного режима адресации. Дополнительное время, расходуемое обработчиком на выполнение этих операций, составляет 14,8 мкс.
Если завершилась и развертка, о чем говорит нуль в счетчике каналов D5, обработчик устанавливает указатели, ЭЛД-индикатор и выходные сигналы. Затем проверяется, не была ли нажата кнопка СТОП; такую проверку следует обязательно выполнять в конце (или начале) развертки, чтобы данные всегда усреднились по целому числу разверток. Если кнопка СТОП была нажата, программа переходит на метку stop sweep, в результате чего устанавливаются выход КОНЕЦ и стоп-флаг, а в вектор INT5 загружается адрес входной точки idle.
Если кнопка СТОП не нажималась, программа проверяет, не следует ли завершить измерения ввиду отработки заданного на передней панели числа разверток (число оставшихся разверток хранится в памяти в переменной num__sweeps), поскольку значение 0 обозначает «безостановочная работа», мы сначала проверяем на нуль; если num__sweeps = 0, это значение сохраняется и осуществляется переход на re__trigger, в противном случае значение num__sweeps декрементируется и снова проверяется на нуль. Если теперь оно равно нулю, это значит, что закончилась последняя запланированная развертка; в этом случае осуществляется переход на stop__sweep. Если развертки не исчерпались, выполняется программный блок re__trigger.
Блок re__trigger определяет режим запуска следующей развертки. Если переменная autoloop, установленная программой main после считывания состояния управляющей панели, имеет значение «истина», в вектор INT5 загружается адрес точки входа sweep__start, в противном случае загружается адрес wait__trig.
Заметьте, что в процессе смены вектора нет опасности прерывания, потому что пока ЦП выполняет обработку прерывания, прерывания запрещены; поскольку мы не включаем их в обработчике прерывания, они остаются запрещенными.
Прерывания от таймера: sweep__start и wait__trig. Эти входные точки используются, если следующее прерывание должно начать развертку, либо мы ожидаем импульса внешнего запуска (длительностью на менее 100 мкс!). Соответствующий адрес загружается в вектор INT5 либо в главной программе при нажатии кнопки ПУСК, либо в обработчике прерываний при завершении обработки не последней развертки (в точке re__trigger); по структурной схеме можно проследить, где это делается. Программный блок sweep__start сразу начинает развертку, и его структура проста: зажигается ЭЛД РАЗВЕРТКА, устанавливается выходной сигнал РАЗВЕРТКА, сбрасывается фиксатор бита кнопки СТОП («запоминание 1»), загружается вектор get__data, а затем происходит естественный переход на метку get__data. При последующих прерываниях вход в обработчик прерываний осуществляется через входную точку get__data.
Вход в обработчик через входную точку wait__trig осуществляется, если следующая развертка не должна начаться до получения внешнего сигнала запуска (параллельный порт А, бит 7). Поскольку нажатие на кнопку СТОП должно «пересиливать» запуск, программа сначала анализирует состояние входа СТОП (и переходит при наличии этого сигнала на метку stop__sweep), а затем входа внешнего запуска; если сигнал запуска отсутствует, происходит переход на метку idle, если присутствует - на метку sweep__start.
11.08. ХарактеристикиИзмерительный прибор на основе микропроцессора можно сконструировать таким образом, чтобы весь сбор данных осуществлялся быстрой аппаратурой, а микропроцессор выполнял лишь функции начального запуска и вывода информации. Такой прибор будет работать с максимальной скоростью, определяемой быстродействием аппаратуры, а микропроцессор придаст ему гибкость и облегчит работу с ним. Разумеется, вы платите сложностью и стоимостью аппаратуры; кроме того, гибкость прибора может оказаться невысокой из-за фиксированной аппаратной организации. Если в противоположность такому подходу вы упрощаете аппаратуру и используете процессор для обработки данных в реальном времени, как это сделано в нашем примере, вы можете удешевить аппаратуру и повысить гибкость прибора за счет, возможно, его быстродействия. Во многих случаях, однако, быстродействие не имеет решающего значения, и выбор оказывается однозначным.
В нашем случае базовая частота выборок и, следовательно, ширина канала ограничиваются скоростью работы процессора. Программа обработки любого прерывания должна завершиться до поступления следующего. При проектировании нашего прибора мы оценили необходимый объем обработки и решили, в значительной степени интуитивно, что 100 мкс хватит для ее выполнения. Естественно, уверенности у нас не было, но в случае необходимости мы были готовы пойти на уменьшение частоты выборок.
Посмотрим теперь на числа. Технические характеристики МП 68008, которые представляют собой том объемом 100 страниц, включают таблицы времен выполнения команд (в числе тактов). С помощью этих таблиц мы рассчитали длительности выполнения программных блоков, упоминавшиеся в тексте. Ниже приведены расчетные данные (с учетом операций векторизации и возврата) для обработчика прерываний;
Входная точка · Время выполнения (мкс)
idle 37
det__data 46,3 (внутри канала)
61 (конец канала)
92 (конец развертки, ручной СТОП)
105 (конец развертки, программный останов)
113 (конец развертки, ожидание внешнего запуска)
114 (конец развертки, автозапуск)
sweep__start 61
wait__trig 46 (нет запуска)
69 (запуск)
Большая часть приведенных длительностей не превышает «длительности пульса» усреднителя сигналов (100 мкс), что, конечно, очень хорошо. В трех случаях, однако, время обработки прерывания оказывается больше 100 мкс. Первая ситуация (конец развертки, программный останов) не страшна, поскольку затрата нескольких липших микросекунд после того, как все данные собраны, не имеет значения. Точно так же вряд ли вас обеспокоит вторая критическая ситуация (ожидание внешнего запуска), так как между сигналом внешнего запуска и началом очередной развертки всегда можно допустить некоторое время ожидания. Однако от последней ситуации (конец развертки, автозапуск) можно ожидать неприятностей, так как в режиме автозапуска мы ожидаем значение полного периода, точно равное 256 х ширина канала. В действительности, однако, здесь все в порядке по следующей причине. При использовании усреднителя сигналов в режиме автозапуска внешнее оборудование всегда запускается от усреднителя (для чего и предусмотрен выходной сигнал РАЗВЕРТКА), и если период будет отличаться на долю процента от ожидаемого, никакой беды не будет. Если, однако, вам необходимо завершать обработку за время, меньшее 100 мкс, используйте МП 68008 с тактовой частотой 10 МГц, отчего все длительности окажутся меньше на 20 %; это даст для наихудшего случая значение, меньшее 100 мкс (фактически 91 мкс). Однако при использовании более быстрого процессора не забудьте подправить программу обработчика, чтобы предоставить АЦП достаточное время для преобразования.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.