Правильная ссылка на эту страницу
http://az-design.ru/Support/HardWare/AMI/D19790301Elc035.shtml

Максимальное использование возможностей микропроцессора 9900 для управления в реальном времени

УДК 681.325.5.013.4

Дэвис
Фирма American Microsystems Inc. (Санта-Клара, шт.Калифорния)

Н. Davis. Getting the most out of the 9900 for realtime control, pp. 140—143.

Высокое быстродействие, мощный набор команд и рациональная архитектура микропроцессора 9900 в сочетании с эффективными способами программирования позволяют с успехом реализовать многие приложения реального времени. Описано применение микропроцессора 9900 для обработки сигналов, управления вводом-выводом и обслуживания принтеров.

Приложения реального времени требуют столь высокого быстродействия и точности, что микропроцессоры обычно в состоянии решать только простейшие из подобных задач. Микропроцессор 9900, однако, обладает необходимым быстродействием, рациональной архитектурой и мощным набором команд, что обеспечивает достаточную точность и позволяет использовать его в более серьезных приложениях реального времени.

Одним из наиболее важных приложений подобного рода является обработка сигналов. Практически все схемы обработки сигналов требуют вычислений значений синусов и косинусов. После ознакомления с набором команд микропроцессора 9900 естественным начальным решением могло бы быть использование разложения в ряд Тейлора для этих функций. В некоторых случаях такой подход будет вполне оправданным. Однако если даже умножение можно выполнять быстро, вычисления при помощи ряда Тейлора неэффективны, поскольку за то время, которое требуется для выполнения одного умножения, можно использовать примерно четыре с половиной другие команды. Поэтому более быстро результаты можно было бы получить путем использования соответствующих методов программирования.

Наиболее целесообразным решением является применение алгоритма Кордик (Cordic — coordinate rotation digital computer) и арифметики с масштабированием (целочисленной арифметики). Эти два подхода, широко используемые для вычислений функций синусов и косинусов в карманных калькуляторах, легко реализуются на микропроцессоре 9900.

Арифметика с масштабированием — это разновидность арифметики с плавающей запятой. Однако в арифметике с масштабированием число разбивается на целую и дробную части, разделяемые двоичной запятой, вместо того чтобы представлять его в виде знака, мантиссы и порядка. Регистры микропроцессора аналогичным образом разделяются на две части, по одной для каждой части числа. При выполнении арифметических операций с плавающей запятой стандартная подпрограмма в машине следит за положением десятичной запятой; арифметика с масштабированием, однако, требует, чтобы программист следил за положением двоичной запятой при помощи масштабирования или сдвига чисел в соответствующую позицию в регистре. Арифметика с масштабированием не обладает высокой точностью или динамическим диапазоном арифметики с плавающей запятой, однако она обеспечивает более высокое быстродействие и поэтому полезна для тех приложений реального времени, где высокая точность не обязательна, а скорость является критическим фактором.

Сдвиг и масштабирование

Выполнение арифметических операций с масштабированием на микропроцессоре 9900 облегчается наличием в его наборе команд инструкций сдвига. Операция сдвига ценна также тем, что сдвиг содержимого регистров вправо дает тот же самый результат, как деление на степень 2, а сдвиг влево — как умножение на степень 2. Команды арифметического сдвига вправо и влево, предусмотренные в микропроцессоре 9900, позволяют сдвигать содержимое любого регистра на величину, заданную значением регистра 0 или константой. Это очень удобно, поскольку теперь степень 2 можно хранить в регистре 0, так что результирующий сдвиг эквивалентен умножению или делению на 2 в этой степени.

Метка   Инструкция             Комментарии
CORDIC  SLA    R1,8            ; A0= θ*28
        CLR    R2              ; X=0
        LI     R3,19898        ; Y=0,6072526*(215)
        CLR    R4              ; X0=0
        MOV    R3,R5           ; Y0=0
        CLR    R0              ; сдвиг на 0 бит (i=0)
        CLR    R6              ; обнуление счетчика
        NEG    R1              ; Ai=—Ai
L10     MOV    R1,R1           ; проверка знака Аi
        JLT    L20             ; переход на L20, если минус
        S      R5,R2           ; Xi=Xi-1-Yi-1/2i-1
        A      R4,R3           ; Yi=Yi-1+Xi-1/2i-1
        S      @ARCTAN(R6),R1  ;  Аii-1-arctg(1/2i-1)
        JMP    L30             ; переход на L30
L20     A      R5,R2           ; Xi=Xi-1+Yi-1/2i-1
        S      R3,R3           ; Yi=Yi-1-Xi-1/2i-1
        A      @ARCTAN(R6),R1  ; Ai=Ai-1+arctg(1/2i-1)
L30     ING    R0              ; приращение величины сдвига
        INCT   R6              ; на 1 следующий арктангенс
        MOV    R2,R4           ; R4=Xi/2i
        SRA    R4,R0  
        MOV    R3,R5           ; R5=Yi/2i
        SRA    R4,R0  
        CI     R0,12           ; повторение до i=12
        JNE    L10  
        В      *R11  
ARCTAN  DATA   11520           ; arctg (1) * 256
        DATA   6800            ; arctg (1/2) * 256
        DATA   3593            ; arctg (1/4) * 256
        DATA   1824            ; arctg (1/8) * 256
        DATA   916             ; arctg (1/16) * 256
        DATA   458             ; arctg (1/32) * 256
        DATA   229             ; arctg (1/64) * 256
        DATA   115             ; arctg (1/128)* 256
        DATA   57              ; arctg (1/256) * 256
        DATA   29              ; arctg (1/512) * 256
        DATA   14              ; arctg (1/1024) * 256
        DATA   7               ; arctg (1/2048) * 256

Рис.1. Эффективность. Алгоритм Кордик позволяет вычислять синус и косинус угла 0, используя только операции сложения, вычитания и сдвига. Регистр 1 содержит масштабированное значение угла θ. После 12 итераций регистр 2 содержит синус θ, а регистр 3 — косинус θ.

Алгоритм Кордик основывается на том факте, что любой угол между 0° и 90° может быть приближенно представлен как сумма или разность ряда базовых углов и использует арифметику с масштабированием для получения точного ответа без применения операций умножения. Пусть набор базовых углов определяется как угол1=arctg(1/2i-1), di определяется как знак предыдущего угла Ai-1 и Rn=1/cos d1A1 . . . . . . cos dnAn. Как правило, 12 итераций дают достаточную точность, и при n=12 значение Rn — константа, равная 1,647. Если начальное значение А0=—(данный угол θ), Х0=0, Y0=1/Rn=0,60725 и i изменяется от 1 до 12, то алгоритм можно сформулировать следующим образом:

Xi = Xi-1 – di * Yi-1/2i-1

Yi = Yi-1 + di * Xi-1/2i-1

Ai = Ai-1 – di * arctg(1/2i-1)

Если значения арктангенсов хранятся в таблице, то для реализации данного алгоритма требуются только операции сдвига, сложения и вычитания. Микропроцессор 9900 делает это весьма легко, поскольку в его наборе команд ужо имеются 16-бит арифметические операции, и он может выполнять сдвиги на переменное число разрядов. После 12 итераций X12 = sinθ и Y12 = cosθ. Полный алгоритм Кордик и таблица базовых углов приведены на рис.1.

Благодаря использованию вычислительной мощности микропроцессора 9900 с соответствующими алгоритмами типа Кордик можно выполнять и другие операции реального времени, например цифровую фильтрацию, причем со скоростями, которые для других микропроцессоров невозможны. Оптимальные цифровые фильтры Винера и другие теоретически оптимальные методы фильтрации, например метод Кальмана, можно практически осуществить при помощи микропроцессора 9900.


Рис.2. Фильтр нижних частот. Цифровая фильтрация — одно из приложений реального времени, для которых хорошо подходит микропроцессор 9900, особенно при использовании теоретически оптимальных методов фильтрации. Простой фильтр нижних частот (а) может быть представлен цифровым фильтром (б), где а — это характеристика фильтра, а τ — интервал выборки.

В качестве примера простого алгоритма цифрового фильтра рассмотрим фильтр нижних частот (рис.2). Представление Лапласа для передаточной функции этого фильтра, выраженное при помощи комплексной частоты s, имеет вид

где характеристика фильтра a —1/CR. Эта характеристика приблизительно равна 2s, где s — это верхняя частота фильтра на уровне 3 дБ.

Поскольку VI(t) является импульсной функцией для момента времени t = 0, VI(s)=1 и G(s) = V0(s). Проблема нахождения G(s) сводится, таким образом, к получению выходного сигнала фильтра при поступлении на его вход импульса. Решая уравнение для G(s), получаем G(t)=ae-aτ, где τ — это интервал выборки. Поскольку VI(t) является функцией выборки, нас интересует только значение V0(t) при 0, τ, 2τ, . . ., nτ. Используя преобразование

переходим от V0(t) к V0(s), и

Сумма этой геометрической прогрессии составляет

Поскольку формула в этом виде не очень подходит для расчетов на компьютерах, переписываем G(s) следующим образом:

Рис.3 иллюстрирует, как реализуется на компьютере обычный цифровой фильтр нижних частот. Отметим, что характеристика фильтра а и величина еτ являются константами и могут изменяться по программе в процессе ее выполнения, позволяя тем самым оптимизировать соотношение выходного сигнала и шума.

Чтобы уменьшить объем программы до минимума, предполагается, что входная величина а и е-аτ масштабированы и имеют значение, меньшее 1. Быстродействие данной программы обеспечивает максимальную частоту выборки 19 200 выборка/с, причем возможно дальнейшее увеличение скорости, если для передаваемых и принимаемых данных использовать способы ВВ по карте памяти.

Замена операции сложения комбинацией вычитания и отрицания дает цифровой фильтр верхних частот. При соответствующих сочетаниях этих функций можно получить полосовые фильтры и режекторные фильтры с уменьшенными частотами выборки.

Инструкция           Комментарии
LI       R12,AD     ; указатель  АЦ-преобразователя
LDCR     R1,11      ; прием 11 бит
MPY      @А,R1      ; A1=A*a
MPY      @ЕАТ,R3    ; В1=В*е-аτ
А        R1,R3      ; В=А11
LI       R12,DA     ; указатель  ЦА-преобразователя
STCR     R3,11      ; выдача  данных
IDLE                ; ожидание следующей  выборки

Рис.3. В цифровом виде. Данная блок-схема и соответствующий программный код микропроцессора 9900 реализуют цифровой фильтр нижних частот. Здесь опять-таки для вычисления характеристики фильтра а и е-аτ используется масштабируемая арифметика. Показанная программа обеспечивает частоту выборки до 19200 выборка/с.

В компьютерных и микрокомпьютерных системах управление устройствами ВВ зачастую требует обработки сигналов реального времени. Микропроцессор 9900 с успехом может использоваться и в этих случаях, поскольку предусматривает взаимодействие с регистровым устройством связи (РУС). Данные передаются и принимаются этим устройством в последовательной форме при помощи трех специализированных линий процессора. Специальные инструкции РУС позволяют передавать поля данных от 1 до 16 бит. Благодаря легкости выполнения операций над полями ВВ переменной длины можно легко проектировать интерфейсы ВВ, имеющие упрощенные схемные компоновки, повышенные плотности и уменьшенные стоимости компонентов.

Управление вводом-выводом

Например, для управления кнопочными и другими переключателями, используемыми в большинстве устройств ввода, может потребоваться до половины кода прикладной программы. Обычно состояние некоторого переключателя опрашивается, и соответствующее действие инициируется под программным управлением. Эти переключатели могут опрашиваться группами или индивидуально, а их состояния могут восприниматься в зависимости от контекста или последовательности.

Многие микропроцессоры позволяют опрашивать переключатели только группами, требуя тем самым дополнительных программных средств, чтобы определить переключатель, с которого поступает сигнал. Например, по одной инструкции могут приниматься данные переключателей, другая инструкция может маскировать нежелательные биты, а третья может производить проверку совпадения с конкретным двоичным кодом.

В то же время одна инструкция РУС микропроцессора 9900 — проверка бита (ТВ) — может проверять состояние любой одной линии ВВ РУС и устанавливать или сбрасывать соответствующий бит регистра состояния в зависимости от положения переключателя. Условные переходы «Переход, если равно» (JEQ) и «Переход, если не равно» (JNE) используются затем для передачи управления в соответствующую секцию программы.

Особенно важен тот факт, что этот метод не требует никаких программных регистров или ячеек памяти, чтобы проверять индивидуальные биты. Сопутствующими инструкциями для однобитового выхода РУС являются: установка бита в единицу (SBO) и установка бита в нуль (SBZ). Подобно инструкции ТВ, они не требуют места в рабочей памяти.

Чтобы определить бит, на который действует любая из этих инструкций, следует дважды прибавить смещение, указанное в поле операнда, к регистру 12. Результат — это адрес, который является удвоенным логическим адресом, поскольку самый младший бит адресной шины — это внутренний бит процессора.

Хотя однобитовые инструкции РУС помогают оптимизировать программные и аппаратные средства для опроса индивидуальных переключателей, часто желательно считывать состояния нескольких переключателей. При помощи одной инструкции «запоминание РУС» (STCR) любое число битов от 1 до 16 может быть передано в регистр или память, причем место начального бита определяется регистром 12.

Метка   Инструкция   Комментарии
PRINT   SBZ     DRIVE   ; начало перемещения головки
Р10     ТВ      POS1    ; ожидание позиции 1
        JNE     P10   
        LI      R7,DEDB ; предельная задержка для борьбы с дребезгом
Р20     DEC     R7   
        JNE     P20     ; ожидание
Р30     LI      R2,5    ; 5 столбцов
        MOVB    *R1+,R3 ; прием знаков в R3
        SRL     R3,8    ; помещение в младший байт
        ANDF    R3,73F  ; ограничение верхним регистром кода ASCII
        MPY     R2,R3   ; прием значения смещения
        AI      R4,TAB  ; R4=табличный индекс
Р40     MOVB*   R4+,R3  ; R3+ следующий столбец точек
        SRL     R3,8   
        LDCR    R3,9   
        LI      R7,45   ; 300-мкс таймер для отсчета времени включения
Р50     DEC     R7   
        JNE     P50     ; R7=0 при выходе
        LDCR    R7,9    ; сброс драйверов
        LI      R7,IDG  ; ожидание между точками (в среднем 1,2 мс)
Р60     DEC     R7   
        JNE     P60   
        DEC     R2      ; следующий столбец точек
        JNE     P40     ; продолжение до 5 столбцов
        LI      R7,ICG  ; ожидание между знаками (в среднем 1,2 мс)
Р70     DEC     R7   
        JNE     P70   
        DEC     R8      ; все знаки выданы?
        JNE     P30     ; продолжение до конца выдачи
Р80     ТВ      POS1    ; ожидание возврата в исходное положение
        JEQ     P80   
        SBO     DRIVE   ; останов головки
        RT              ; возврат

Рис.4. Распечатка. Данная программа — драйвер принтера с матрицей 5*7 точек использует преимущества программной синхронизации. Программные циклы (строки Р20, Р50, P60, P70 и Р80) обеспечивают необходимые выдержки времени между точками и между знаками, позволяя печатающей головке перемещаться относительно каретки.

Например, пара инструкций

LI     R12,BEG
STCR   Rl,3

передаст три бита в регистр 1 из устройства РУС, начиная с бита BEG. Если использовать эти две инструкции, то, чтобы реализовать практически любые операции ввода, потребуются минимальные аппаратные и программные средства.

Управление принтерами

Быть может, наиболее распространенным устройством вывода данных во многих приложениях является точечно-матричный принтер. Им также легко управлять, используя регистровое устройство связи и соответствующие обслуживающие программы. Микропроцессорные системы зачастую имеют некоторое свободное время, когда приходится распечатывать результаты. Если рационально использовать это время, то можно существенно уменьшить число применяемых компонентов и сложность периферийного оборудования.

Основная задача программного обеспечения принтера (драйвера принтера) заключается в том, чтобы включать и выключать конкретные линии на заранее определенные периоды времени. Чтобы осуществить это, можно воспользоваться программными циклами синхронизации. Программная синхронизация основывается на том, что при фиксированной длительности периода тактирующего сигнала для выполнения каждой инструкции требуется конкретное количество времени. Точность программной синхронизации пропорциональна точности тактовой частоты процессора. Тактовая частота процессора обычно имеет точность, достаточно высокую для программной синхронизации, однако в некоторых случаях могут потребоваться кварцевые генераторы, чтобы обеспечить повторяемость от устройства к устройству.

Простым примером применения программной синхронизации является программа для борьбы с дребезгом контактов переключателя. Поскольку контакт переключателя может иметь дребезг в течение периода длительностью до 40 мс после первого замыкания, программа должна гарантировать, что переключатель не будет повторно опрашиваться в течение этого периода.

Например, пара инструкций

L10    ТВ    SWITCH
       JEQ   L10

заставляет процессор ожидать, пока не закончится переходный период срабатывания переключателя. Если за этими инструкциями последуют:

        инструкции       период выполнения
        LI     Rx,2000   ; 12 тактов
L20     DEC    Rx        ; 10 тактов
        JNE    L20       ; 10 тактов, повторенные 2000 раз

то процессор будет выжидать в течение 20*2000+12 тактов, или 13,33 мс для тактовой частоты 3 МГц. Этот программный цикл можно было бы, безусловно, точно подобрать по длительности и сократить на количество времени, затраченного на минимальный путь к подпрограмме выборки (опроса переключателя), чтобы повысить тем самым производительность.

Второе требование к драйверу принтера — трансляция кодов ASCII в соответствующие коды точек. В этой программе предполагается стандартное кодирование для матрицы 5*7 точек в сегменте данных программы. Базовый драйвер принтера приведен на рис.4; в соответствующие секции драйвера можно ввести дополнительные инструкции для обнаружения ошибок.

Дочерние статьи:

Микропроцессор 9900: краткий очерк

Выходные данные:

Журнал "Электроника" том 52, No.05 (557), 1979г - пер. с англ. М.: Мир, 1979, стр.56

Electronics Vol.52 No.5 March 1, 1979 A. McGraw-Hill Publication

Раздел: МЕТОДЫ, СХЕМЫ, АППАРАТУРА

Тема:     Микропроцессоры





Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:44 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/HardWare/AMI/D19790301Elc035.shtml