В HTML      В PDF
микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Обзоры по типам > Микроконтроллеры

реклама

 
радиационно стойкие ПЗУ Миландр

Продажа силового и бронированного кабеля и провода в Москве

текст еще



Реализация архитектуры MAXQ: представляем MAXQ2000

Семейство микроконтроллеров MAXQ™ производства MAXIM®/Dallas Semiconductor – это высокопроизводительные 16-битные RISC-контроллеры, идеальные для применения в устройствах с автономным питанием и обработкой смешанного сигнала. Разработанная для малошумящих операций, архитектура MAXQ объединяет высокоточные аналоговые функции с цифровыми компонентами, что приводит к уменьшению количества используемых ИС.

MAXQ использует гарвардскую архитектуру памяти для хранения данных, кодов и регистрового пространства на раздельных шинах. Основное преимущество этой архитектуры – переменная длина слова, что позволяет использовать системные и периферийные регистры шириной 8 или 16 бит. В типичном контроллере MAXQ применена 16-битная память данных, кодов и регистров. Поскольку длина командного слова в MAXQ составляет 16 бит, в микроконтроллере всегда задействована 16-битная шина команд. Другое преимущество гарвардской архитектуры заключается в том, что доступ к памяти всегда осуществляется с использованием регистров. Это позволяет реализовать прямой доступ к памяти со стороны периферийных устройств – таких как АЦП и аппаратные сопроцессоры.

Архитектура MAXQ основана на очень простом принципе: все операции в конечном итоге выполняются с помощью простой операции передачи данных. Каждая команда из полного набора 33 команд сводится либо к записи литерального операнда в регистр назначения/ячейку памяти, либо к пересылке данных между регистрами и/или ячейками памяти (см. рис. 1) Простота архитектуры позволяет поставщикам инструментальных средств оптимизировать разработку кодов при минимальных требованиях к объему памяти для большинства приложений. Помимо этого, каждая инструкция в MAXQ выполняется за один такт, что обеспечивает максимально возможную скорость исполнения кода (1 MIPS/МГц) (MIPS – миллион команд в секунду).


Рис. 1. Каждая команда из набора 33 команд сводится либо к записи литерального операнда в регистр назначения/ячейку памяти, либо к пересылке данных между регистрами и/или ячейками памяти

Представляем MAXQ2000

MAXQ2000 – первый из серии продуктов семейства MAXQ. Этот микроконтроллер содержит 16-битное ЦПУ, флэш-память 64 кбайт, 2 кбайт SRAM и 132-сегментный контроллер ЖКИ. Этот контроллер генерирует сигналы для ЖКИ в соответствии с содержимым памяти дисплея. Программа пользователя устанавливает параметры конфигурации и производит запись в память дисплея. Затем контроллер ЖКИ самостоятельно вырабатывает сигналы общих шин и сегментов с заданной частотой, освобождая микроконтроллер от отслеживания состояния дисплея и прямого управления ЖКИ. Помимо этого, микроконтроллер поддерживает четыре режима дисплея:

  1. Статический
  2. Мультиплексный на 1/2 цикла с 1/2 напряжения смещения
  3. Мультиплексный на 1/3 цикла с 1/3 напряжения смещения
  4. Мультиплексный на 1/4 цикла с 1/3 напряжения смещения

Семнадцать байт памяти дисплея доступны для использования контроллером ЖКИ или для хранения данных общего назначения. Еще одну дополнительную функцию ЖКИ обеспечивают встроенные резисторы делителя напряжения – их можно использовать для регулировки контраста, не применяя внешние компоненты. На рисунке 2 показана конфигурация делителя напряжения драйвера ЖКИ для статического дисплея. Каждый из 36 выводов управления сегментами может быть использован для операций ввода/вывода общего назначения, если он не подключен к ЖКИ.


Рис. 2. Конфигурация делителя напряжения драйвера ЖКИ для статического дисплея

MAXQ2000 также предлагает пять вариантов для тактового сигнала:

  1. внутренний кольцевой генератор;
  2. внутренний высокочастотный генератор, использующий внешний кристалл или резонансную схему;
  3. внешний высокочастотный тактовый сигнал;
  4. внутренний генератор 32 кГц с использованием внешнего кристалла или резонансной схемы;
  5. внешний 32 кГц тактовый сигнал.

Разнообразные режимы управления питанием позволяют минимизировать энергопотребление. Режим «деление на 256» позволяет нормально выполнять все операции при уменьшенной (в 256 раз) частоте высокочастотного тактового сигнала. Для дальнейшего снижения энергопотребления применяется режим, позволяющий микроконтроллеру работать от генератора 32 кГц.

Все операции продолжаются в нормальном режиме, но с чрезвычайно низкой тактовой частотой (32кГц/256). Поскольку некоторые входные данные микроконтроллера требуют работы с полной скоростью, предусмотрен режим обратного переключения на максимальную тактовую частоту. Такое обратное переключение выполняется автоматически, когда требуется высокая скорость, например, при работе с UART, SPI™ или при внешних прерываниях.

Высококлассные средства разработки

Проектирование встроенных приложений требует ускорения сроков разработки. Для этого DALLAS® поставляет высококлассные средства для интегрированных сред разработки, инструменты эмуляции и полные внутрисхемные эмуляторы. Для разработки на языке Ассемблер с сайта MAXIM по адресу www.maxim-ic.com/microcontrollers" target="_blank">www.maxim-ic.com/microcontrollers можно загрузить бесплатное средство разработки MAXIDE. Оно содержит ассемблер, интегральную среду разработки (IDE) с цветовым выделением кодовых слов, средства поддержки интерфейса MAXQ JTAG и симулятор для каждого микроконтроллера MAXQ. Среды разработки на языке Си поддерживают партнеры по поставке инструментальных средств. Компания IAR со своим АРМ «IAR Embedded Workbench®» является основным поставщиком инструментальных средств, обеспечивающим полное решение по IDE для MAXQ (см. рис. 3). Другие партнеры также разрабатывают компиляторы и IDE.

АРМ «IAR Embedded Workbench» включает online-обучение для семейства микроконтроллеров MAXQ
Рис. 3. АРМ «IAR Embedded Workbench» включает online-обучение для семейства микроконтроллеров MAXQ

Микроконтроллеры MAXQ имеют средства поддержки для эмуляции JTAG. Каждый микроконтроллер содержит блок эмуляции, позволяющий начать разработку встроенной программы на перепрограммируемых flash-версиях микроконтроллеров при проектировании реальных систем. Разработчики встроенных программ могут в полном объеме проектировать, писать и отлаживать свои приложения, используя реальные микроконтроллеры в реальных схемах.

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

Заключение

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

Программирование в среде MAXQ

Архитектура MAXQ была разработана для прикладных программистов. Каждый микроконтроллер MAXQ содержит аппаратный блок отладки, тесно интегрированный с ядром микроконтроллера. Первой из микросхем этой архитектуры стала MAXQ2000, и в данной статье приведены примеры и дополнительные сведения по использованию АРМ IAR Embedded Workbench вместе с отладочным комплектом MAXQ2000 Evaluation Kit.

Внутрисхемная отладка и программно-загрузочные функции микроконтроллера MAXQ2000 в сочетании со средой разработки IAR Embedded Workbench обеспечивают разработку и тестирование приложений на языках С или Ассемблер. Аппартный блок отладки и загрузчик MAXQ2000 работают через выделенный порт JTAG, обеспечивая полный доступ к отладке при минимальном влиянии на системные ресурсы.

Особенности внутрисхемной отладки

Аппаратный блок отладки, тесно интегрированный с ядром микроконтроллера, управляет функциями отладки MAXQ2000. Этот блок может обращаться к сервисным утилитам встроенного ПЗУ для поддержки широкого спектра операций отладки:

  • Чтение внутренней флеш-памяти программ
  • Чтение/запись памяти данных
  • Чтение стековой памяти
  • Чтение/запись всех системных и периферийных регистров MAXQ2000
  • Пошаговое выполнение программ
  • До четырех адресных контрольных точек для остановки выполнения программы в заданном участке кодовой памяти
  • Две контрольные точки памяти данных для остановки выполнения программы при обращении к заданному участку памяти данных
  • Две регистровые контрольные точки для остановки выполнения программы при записи в определенный системный или периферийный регистр (не могут использоваться одновременно с контрольными точками памяти данных) и при совпадении данных, записываемых в регистр, с заданными значениями
  • Функция проверки пароля (для доступа к остальным функциям отладки).

Вся связь с блоком отладки в MAXQ2000 осуществляется через выделенный JTAG Test Access Port (TAP) интерфейс, отвечающий стандарту IEEE 1149 для JTAG. Этот интерфейс включает четыре сигнала, мультиплексированные с выводами портов MAXQ2000 следующим образом: TMS (выбор режима) – с Р4.2; TCK (тактовый сигнал) – с Р4.0; TDI (входные данные) – с Р4.1; TDO (выходные данные) – с Р4.3.

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

Интерфейс JTAG и блок отладки работают асинхронно с ядром MAXQ2000. Связь по порту JTAG не требует той же тактовой частоты, с которой работает MAXQ2000. Частота TCK не должна превышать 1/8 системной тактовой частоты MAXQ2000.

Установки точек прерывания можно записать и прочитать через блок отладки в то время, как MAXQ2000 выполняет код. Этот режим известен как фоновый, и в нем блок отладки работает независимо от ядра ЦПУ.

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

Поскольку сам JTAG TAP-порт не используется для прикладных программ, выводы, присвоенные порту JTAG, могут использоваться этими программами. Все дополнительные подпрограммы, требующиеся для функций отладки, размещаются в ПЗУ, поэтому единственные системные ресурсы, потребляемые функциями отладки – небольшой объем ОЗУ и один уровень программного стека (используемый для хранения адреса возврата при вызове прграммы отладки). Старшие 19 байт ОЗУ (адреса с 0х07ED по 0x07FF) зарезервированы для использования сервисными программами отладки. Если внутрисхемная отладка не планируется, эти ячейки ОЗУ доступны для использования прикладными программами.

Доступ к интегрированной программной флеш-памяти через JTAG

JTAG TAP-порт также используется для дополнительной функции загрузчика, которая доступна даже в том случае, когда функции отладки не используются. Установив три конфигурационных бита через JTAG TAP интерфейс и затем отключив сигнал reset, можно передать управление встроенным программам загрузки, размещенным в ПЗУ. Биты конфигурации, которые управляют доступом к загрузчику – следующие:

  • SPE: System Program Enable Bit (Разрешить запись в программную память) (ICDF.1). Если этот бит установлен в 1, MAXQ2000 выполняет программу загрузчика в ПЗУ сразу после отключения сигнала reset.
  • PSS[1:0]: Programming Source Select (Выбор источника программирования) (ICDF.3-2). Эти биты определяют какой порт используется для связи с загрузчиком: JTAG (PSS[1:0]==00b) или последовательный 0 UART (PSS[1:0]==01b)

Когда эти биты установлены и MAXQ2000 снят с reset, загрузчик начинает обмен данными с хост-системой по выбранному порту (JTAG или последовательный 0 UART). В любом случае используется один и то же протокол, выполняющий следующие функции:

  • Считывает идентификационный номер MAXQ2000 (идентифицирует версию ПЗУ)
  • Сообщает объем памяти программ и памяти данных
  • Осуществляет чтение, запись, проверку и вычисление контрольной суммы для интегрированной программной флеш-памяти
  • Осуществляет чтение, запись, проверку и вычисление контрольной суммы для ОЗУ
  • Проверка пароля (для получения доступа к командам записи/чтения программной памяти).

Хотя загрузчик и может работать через последовательный 0 UART порт вместо JTAG, интерфейс JTAG необходим для переключения загрузчика в режим последовательной передачи.

Однако прикладная программа также может перевести загрузчик в режим последовательной передачи, нужным образом установив биты SPE и PSS, а затем выполнив reset MAXQ2000 (позволив сработать сторожевому таймеру или с помощью внешних аппаратных средств). Метод активизации загрузчика (например, сигнал на вывод порта) определяется прикладной программой.

Защита функций отладки и загрузчика с помощью пароля

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

Длина пароля составляет 16 слов или 32 байта. Оригинал пароля хранится во внутренней флеш-памяти по адресам от 0x0010 до 0x001F. Эти значения можно включить в прикладную программу в виде статического массива, или это могут быть просто значения командных кодов, хранящихся по этим адресам. В любом случае, пароль записывается автоматически при загрузке прикладной программы. Если прикладная программа не загружена, то пароль формируется по умолчанию и все его слова равны 0хFFFF.

Даже если пароль неизвестен, содержимое внутренней флеш-памяти MAXQ2000 всегда можно стереть с помощью загрузчика. Этот метод эффективно стирает пароль (приводя все слова к виду 0хFFFF) и позволяет работать остальным операциям программирования и отладки. Защита с помощью пароля гарантирует, что существующий код нельзя считать с MAXQ2000, не проверив предварительно соответствие значения 32-байтного пароля.

Использование «COM–JTAG» адаптера

Интегрированные среды разработки для микроконтроллера MAXQ2000 (такие как MAXIDE и IAR Embedded Workbench) включают библиотеки программ для поддержки связи с JTAG-интерфейсом MAXQ2000. Тем не менее, поскольку в PC, на которых установлено это программное обеспечение, обычно нет JTAG-портов, необходимо аппаратное решение для связи двух систем.

Модуль адаптера «COM – JTAG», включенный в отладочный комплект для MAXQ2000, обеспечивает быстрое решение этой проблемы. (Рис. 1) Программное обеспечение для PC (такое, как IAR Embedded Workbench) связывается с модулем адаптера по стандартному последовательному COM-порту. Модуль адаптера затем подключается к JTAG-порту MAXQ2000, передавая команды загрузчику или блоку отладки. Модуль адаптера помимо этого выполняет преобразование уровней сигнала и поддерживает работу микроконтроллеров MAXQ в широком диапазоне напряжений питания, а также избавляет от необходимости использовать PC для обеспечения точной тактовой частоты с целью формирования импульсов JTAG.

Модуль адаптера «COM – JTAG» позволяет программному обеспечению для PC связываться с JTAG TAP-интерфейсом микроконтроллера MAXQ2000
Рис. 1. Модуль адаптера «COM – JTAG» позволяет программному обеспечению для PC связываться с JTAG TAP-интерфейсом микроконтроллера MAXQ2000

Использование аппаратных средств отладочного комплекта MAXQ2000

Отладочный комплект MAXQ2000 Evaluation Kit предоставляет полную аппаратную среду разработки для микроконтроллеров MAXQ2000, включая следующие компоненты:

  • Источник питания на плате для ядра MAXQ2000 и шины питания VDDIO.
  • Регулируемый источник питания (от 1,8 В до 3,6 В), который может быть использован для шин питания VDDIO и VLCD.
  • Контактные выводы для всех сигналов MAXQ2000 и напряжений питания
  • Отдельный разъем для подключения дочерней платы ЖКИ
  • Дочерняя плата ЖКИ с питанием 3 В и 3,5-разрядным статическим ЖКИ-дисплеем
  • Драйверы RS-232 для последовательного порта 0 UART, включая управление потоком данных
  • Кнопки для внешних прерываний и системного сброса (reset) микроконтроллера
  • Многоцелевая АЦП/ЦАП микросхема MAX1407, подключенная к интерфейсу шины SPI микроконтроллера MAXQ2000
  • Интерфейс 1-Wire®, включая держатель для iButton® и микросхему 1-Wire EEPROM
  • Светодиодный дисплей для индикации уровней на выводах порта от P0.7 до P0.0
  • Интерфейс JTAG для загрузки и отладки прикладных программ.

Установка комплекта MAXQ2000 Evaluation Kit и адаптера “COM – JTAG» весьма проста. Подключите платы, следуя приведенной ниже инструкции:

  1. Подключите источник питания постоянного тока напряжением 5В (центральный контакт – положительный, ± 5%) к разъему питания J2 платы адаптера “COM – JTAG»
  2. Подключите источник питания постоянного тока напряжением от 5 до 9 В к разъему питания J1 на плате комплекта MAXQ2000 Evaluation Kit
  3. Соедините последовательным кабелем DB9 разъем J1 на плате адаптера “COM – JTAG» с одним из COM-портов на PC
  4. Соедините кабелем адаптера JTAG 1х9-контактный разъем Р2 на плате адаптера «COM – JTAG» и 2х6 – контактный разъем J4 на плате комплекта MAXQ2000 Evaluation Kit
  5. Включите оба источника питания
  6. В стандартном режиме работы все DIP-переключатели на плате комплекта MAXQ2000 Evaluation Kit должны быть в положении OFF

Разработка прикладных программ с использованием АРМ IAR Embedded Workbench

Среда разработки АРМ IAR Embedded Workbench поддерживает разработку прикладных программ для MAXQ2000 на базе языка С или языка ассемблера. С использованием описанной выше аппаратной конфигурации, включающей комплект MAXQ2000 Evaluation Kit и модуль адаптера «COM – JTAG», IAR Embedded Workbench имеет полный доступ к основанному на JTAG загрузчику и функциям внутрисхемной отладки MAXQ2000.

При разработке прикладных программ для MAXQ2000, IAR Embedded Workbench поддерживает следующие функции:

  • Загрузка скомпилированных прикладных программ в интегрированную программную флеш-память MAXQ2000
  • Пошаговое выполнение программ на уровне С или ассемблера
  • Отображение программной памяти, аппаратного стека, ОЗУ и ПЗУ
  • Отслеживание стека вызовов
  • Установка точек прерывания на уровне С или ассемблера
  • Просмотр и редактирование всех системных и периферийных регистров MAXQ2000

Разработка и компиляция проекта для MAXQ2000

Поскольку в состав IAR Embedded Workbench включена поддержка семейства микроконтроллеров MAXQ, разработка нового проекта для микроконтроллера MAXQ2000 требует только нескольких специфических установок.

После запуска IAR выберите пункт File, затем в меню – New. В диалоговом окне New выберите Workspace и кликните OK. Введите новое имя для рабочей зоны проекта (хранится как файл с расширением .eww) и нажмите Save.

После открытия рабочего окна, выберите Project, затем – Create New Project из меню. Набор инструментов для MAXQ задается для нового проекта по умолчанию. Введите имя файла для нового проекта (хранится как *.ewp) и кликните Create.

Затем выберите Project и Settings из меню. Откроется диалоговое окно с установками для нового проекта, как показано на Рис.2

Раздел General Options диалогового окна Options дает пользователю возможность выбрать тип процессорного ядра (MAXQ10/Q20)
Рис. 2. Раздел General Options диалогового окна Options дает пользователю возможность выбрать тип процессорного ядра (MAXQ10/Q20), количество используемых аккумуляторов и глубину аппаратного стека. Показаны установки для MAXQ2000

По вкладке General Options в диалоговом окне Options необходимо выбрать следующие установки для микроконтроллера MAXQ2000:

  • В установке Processor Variant следует выбрать MAXQ20, поскольку MAXQ2000 имеет ядро этого типа.
  • В Number of accumulators для MAXQ2000 следует выбрать 16
  • В Hardware stack depth для MAXQ2000 следует выбрать 16

По вкладке C-SPY Debugger диалогового окна Options необходимо выбрать следующие установки для микроконтроллера MAXQ2000 (Рис.3):

  • В установке Driver выберите JTAG для подключения платы «COM – JTAG» к COM-порту PC. Две другие возможные установки – Simulator (используется для работы с программным симулятором MAXQ2000) и Emulator (используется для работы с внутрисхемным эмулятором MAXQ2000).
  • Опция Use Device Description File должна быть включена. Файлом описания устройства (*.ddf) должен быть файл для микроконтроллера MAXQ2000 (maxq200x.ddf). Этот файл определяет для среды IAR объем памяти и набор периферийных регистров конкретного микроконтроллера MAXQ.

3 Раздел C-SPY Debugger диалогового окна Options дает пользователю возможность задать установки для сеанса отладки
Рис. 3. 3 Раздел C-SPY Debugger диалогового окна Options дает пользователю возможность задать установки для сеанса отладки. Показаны установки для отладки MAXQ2000 с использованием модуля адаптера «COM – JTAG»

В разделе JTAG диалогового окна Options, поле Command line options содержит наименование COM-порта PC, используемого для связи с платой «COM – JTAG». На рис. 4 показаны установки для подключения к COM-порту 1.

Раздел C-SPY Debugger (JTAG) в диалоговом окне Options дает пользователю возможность изменять настройки под конкретный модуль адаптера «последовательный интерфейс – JTAG»
Рис. 4. Раздел C-SPY Debugger (JTAG) в диалоговом окне Options дает пользователю возможность изменять настройки под конкретный модуль адаптера «последовательный интерфейс – JTAG». Показаны установки для модуля «COM – JTAG» подключенного к PC порту COM1

После установки опций для проекта, выберите Project, затем – Add Files для добавления исходного файла языка С к проекту. После добавления исходного файла (или файлов) выберите Project, затем – Make для его компилирования, после чего выберите Project, затем – Debug для запуска сеанса отладки. Эта операция загружает скомпилированный проект через интерфейс JTAG и переводит IAR в режим отладки, как показано на рис.5.

Используя модуль адаптера «COM – JTAG», АРМ IAR Embedded Workbench может пошагово выполнять процедуры на микроконтроллере MAXQ2000
Рис. 5. Используя модуль адаптера «COM – JTAG», АРМ IAR Embedded Workbench может пошагово выполнять процедуры на микроконтроллере MAXQ2000, а также считывать и изменять данные его внутренней памяти и значения регистров

Операции отладки в IAR

После начала сеанса отладки можно использовать функции Step Over (F10), Step Into (F11) и Step Out (Shift + F11) для пошагового выполнения C-программы проекта. Для запуска программы выберите Debug, затем – Go из меню, или нажмите F5.

Адресные точки прерывания можно установить или удалить, поместив курсор на строку исходного кода и кликнув по кнопке Toggle Breakpoint на панели инструментов. Можно установить до четырех точек прерывания одновременно.

Окно Memory можно использовать для отображения Code (внутренней флэш-памяти), Data (внутреннего ОЗУ), Hw stack (внутреннего 16-уровневого стека) и памяти ПЗУ MAXQ2000. Формат отображения данных из памяти можно выбрать в виде байтов, слов или двойных слов, как hex (для любой ширины), так и ASCII (для байтовой ширины).

Окно Register отображает системные и периферийные регистры MAXQ2000. Они разделены на логические группы:

  • Регистры ЦПУ: регистры аккумуляторов и управления аккумуляторами, регистры указателей данных и управления указателями данных, указатель команд, счетчик циклов и флаги статуса программы.
  • Управление прерываниями: вектор прерывания, модульная маска и регистры идентификации.
  • Циклы: отображает количество выполненных циклов команд.
  • Параллельные порты: регистры входа, выхода и направления портов для Р0, Р1, Р2, Р3 и Р4.
  • Внешние прерывания: разрешение, выбор фронта, флаговые регистры для внешних прерываний.
  • Таймеры: регистры для таймеров/счетчиков от 0 до 2.
  • Последовательный порт: регистры управления и буферные регистры для SPI и последовательных портов
  • Умножитель: регистры, относящиеся к аппаратному модулю умножителя.

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

Заключение

Среда разработки высокого уровня для IAR Embedded Workbench, основанная на языке С, в сочетании с отладочным интерфейсом низкого уровня MAXQ2000, позволяет выполнять тонкую отладку как на уровне языка С, так и на уровне ассемблера. Встроенные средства отладки и внутрисхемного программирования MAXQ2000 и их минимальное влияние на ресурсы системы позволяют использовать те же аппаратные структуры как для разработки прикладных программ, так и для окончательной доводки готового проекта.

Доступ к функциям, хранящимся в ПЗУ MAXQ

Использование таблиц внутри программы пользователя является обычной для программистов практикой при работе с микроконтроллерами. Из-за однотактовой природы ядра MAXQ программа не имеет прямого доступа к кодовому пространству и, следовательно, не может непосредственно считывать таблицы, размещенные внутри пользовательского кода. Чтобы устранить это затруднение, все ПЗУ в MAXQ содержат программы доступа к данным и таблицам, располженным в программной области. В дополнение к этим базовым функциям, ПЗУ каждой модификации MAXQ может содержать специфичные для данного микроконтроллера программы. Поскольку эти программы могут быть размещены в ПЗУ произвольно и их местонахождение может изменяться для каждой новой версии ПЗУ, был разработан стандартный механизм доступа к программам. Это позволяет использовать код, написанный для одной из версий ПЗУ, во всех последующих версиях без переписывания или перекомпилирования.

Во всех вариантах процессора MAXQ ПЗУ включает в себя таблицу адресов для всех поддерживаемых функций. Местоположение таблицы в разных вариантах может быть различным, поэтому ссылка на нее всегда размещается по адресу 800Dh. Затем адреса используемых функций можно найти в таблице с помощью индексирования. Таблица всегда поддерживает один и тот же порядок расположения функций для всех версий определенного ПЗУ. В табл. 1 перечислены функции MAXQ2000 и адреса их вызова из таблицы.

Табл. 1 Таблица пользовательских функций ПЗУ MAXQ2000

FUNCTION NUMBER FUNCTION NAME ENTRY POINT
(USERTABLE = ROM[800Dh])
0 Reserved ROM[userTable + 0]
1 Reserved ROM[userTable + 1]
2 Reserved ROM[userTable + 2]
3 moveDP0 ROM[userTable + 3]
4 moveDP0inc ROM[userTable + 4]
5 moveDP0dec ROM[userTable + 5]
6 moveDP1 ROM[userTable + 6]
7 moveDP1inc ROM[userTable + 7]
8 moveDP1dec ROM[userTable + 8]
9 moveFP ROM[userTable + 9]
10 moveFPinc ROM[userTable + 10]
11 moveFPdec ROM[userTable + 11]
12 copyBuffer ROM[userTable + 12]

Выполнение функции ПЗУ производится за четыре шага. В первом - прочитайте указатель таблицы функций, записанный по адресу 800Dh. Во втором – прибавьте к прочитанному указателю номер нужной функции. В третьем – прочитайте указатель нужной функции, записанный по адресу, вычисленному на втором шаге. Наконец – выполните функцию путем обращения к подпрограмме по адресу, прочитанному на третьем шаге. Приведенный ниже текст на языке ассемблера демонстрирует эти четыре шага, используя функцию микроконтроллера moveDPlinc в качестве примера.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Function:             ReadDataAtDP1
;; Description:          This function uses the utility ROM function “moveDP1inc”
;;                       to read from program memory the data stored at the
;;                       address in DP[1]. If DP[1] is in word mode two
;;                       bytes will be read. If DP[1] is in byte mode only
;;                       one byte is read. DP[1] is then post incremented.
;; Returns:              The result is returned in GR.
;; Destroys:             ACC and DP[0]
;; Notes:                This function assumes that DP[0] is set to word
;;                       mode and the device has 16-bit accumulators.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ReadDataAtDP1:
   move    DP[0], #0800Dh    ; This is where the address of the table is stored.
   move    ACC, @DP[0]       ; Get the location of the function table.
   add     #7                ; Add the index to the moveDP1inc function.
   move    DP[0], ACC        ; Point to where the address of moveDP1 is stored.
   move    ACC, @DP[0]       ; Retrieve the address of the function.
   call    ACC               ; Execute the function.
   ret

Поскольку будущие версии ПЗУ в определенном варианте MAXQ могут хранить служебные функции по разным адресам, использование служебной функции, сходной с функцией ReadDataAtDP1 гарантирует их совместимость в дальнейшем. «Ценой» этой совместимости является больший размер кода и большее время выполнения. В некоторых случаях это может быть неприемлемым, тогда лучше применить прямой вызов функций ПЗУ. Для прямого вызова служебной функции следует просто определить адрес требуемой функции и использовать его в качестве назначения в команде вызова (call).

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

Text:
DB “Hello World!”,0 ; Define a string in code space.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Function:         PrintText
;; Description:      Prints the string stored at the “Text” label.
;; Returns:          N/A
;; Destroys:         ACC, DP[1], DP[0], and GR.
;; Notes:            This function assumes that DP[0] is set to word mode,
;;                   DP[1] is in byte mode, and the device has 16-bit
;;                   accumulators.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PrintText:
   move   DP[1], #Text        ; Point to the string to display.
   move   ACC, DP[1]          ; “Text” is a word address and we need a
   sla                        ; byte address, so shift left 1 bit.
   or     #08000h             ; Code space is mapped to 8000h when running
   move   DP[1], ACC          ; from the ROM, so the address must be masked.
PrintText_Loop:
   call   ReadDataAtDP1       ; Fetch the byte from code space.
   move   ACC, GR
   jump   Z, PrintText_Done   ; Reached the null terminator.
   call   PrintChar           ; Call a routine to output the char in ACC
   jump   PrintText_Loop      ; Process the next byte.
PrintText_Done:
   ret

Заключение

Служебные функции облегчают разработчику чтение данных, хранящихся в программной памяти. Стандартный механизм доступа к программам ПЗУ также позволяет разработчикам писать коды, которые будут работать со всеми вариантами конкретного процессора MAXQ. Библиотеки подпрограмм пользователя могут быть написаны так, что их можно будет повторно использовать с последующими версиями ПЗУ, не опасаясь несовместимости.

Пример пользовательской программы с использованием отладочного комплекта MAXQ2000 Evaluation Kit

Доступность стандартных инструментов языка ANSI Си и сред разработки, включающих эти инструменты, значительно облегчает разработку пользовательских программ для новых или незнакомых процессоров. Инструменты для семейства процессоров MAXQ включают компилятор ANSI Си от компании IAR и интегрированную среду разработки IAR Embedded Workbench. С помощью этих программ, имея начальные знания о регистрах специального назначения MAXQ, разработчик может быстро и без усилий начать писать пользовательские программы для архитектуры MAXQ. Самый легкий способ продемонстрировать, насколько простым может быть процесс разработки для архитектуры MAXQ – пример создания пользовательской программы.

Программа, описываемая здесь, использует процессор MAXQ2000 и отладочный комплект MAXQ2000 Evaluation Kit. Процессор MAXQ2000 обладает широким спектром интегрированных периферийных устройств, включая:

  • 132-сегментный контроллер ЖКИ;
  • интегрированный порт SPI с режимами master и slave;
  • ведущее устройство шины 1-Wire;
  • два последовательных UARTа;
  • аппаратный умножитель;
  • три 16-битных таймера/счетчика;
  • сторожевой таймер;
  • 32-битные часы реального времени с предупредительными сигналами – субсекундным и времени суток;
  • интерфейс JTAG с поддержкой внутрисхемной отладки

Описание пользовательской программы

В этом примере используется контроллер ЖКИ, порт SPI в ведущем режиме, один из UARTов, аппаратный умножитель и один из таймеров. Таймер используется для генерирования периодических прерываний. В момент прерывания MAXQ2000 измеряет температуру и отправляет полученный результат на ЖКИ и один из своих последовательных портов. Порт SPI соединен с системой сбора данных (DAS) MAX1407, которая содержит АЦП. Значения температуры измеряются термистором, подключенным к АЦП, входящему в состав MAX1407.

Использование контроллера ЖКИ

Для использования ЖКИ следует сконфигурировать два управляющих регистра. Как только эти регистры будут установлены, сегменты ЖКИ можно будет включать установкой бита в одном из регистров данных ЖКИ. Приведенный ниже код показывает, как конфигурируется контроллер ЖКИ в описываемом примере пользовательской программы:

void initLCD()
{
   LCRA_bit.FRM = 7;     // Set up frame frequency.
   LCRA_bit.LCCS = 1;    // Set clock source to HFClk / 128.
   LCRA_bit.DUTY = 0;    // Set up static duty cycle.
   LCRA_bit.LRA = 0;     // Set R-adj to 0.
   LCRA_bit.LRIGC = 1;   // Select external LCD drive power.
   LCFG_bit.PCF = 0x0F;  // Set up all segments as outputs.
   LCFG_bit.OPM = 1;     // Set to normal operation mode.
   LCFG_bit.DPE = 1;     // Enable display.

Связь по SPI

Три регистра управляют различными режимами SPI, поддерживаемыми MAXQ2000. Для связи с MAX1407 используется приведенный ниже код для инициализации компонентов SPI и переведения их в нужный режим.

PD5 |= 0x070;              // Set CS, SCLK, and DOUT pins as output.
PD5 &= ~0x080;             // Set DIN pin as input.
SPICK = 0x10;              // Configure SPI for rising edge, sample input
SPICF = 0x00;              // on inactive edge, 8 bit, divide by 16.
SPICN_bit.MSTM = 1;        // Set Q2000 as the master.
SPICN_bit.SPIEN = 1;       // Enable SPI.

Как только установлена конфигурация регистров SPI, регистр SPIB используется для отправки и получения данных. Запись в регистр инициирует двунаправленную передачу данных между ведущим и ведомым устройствами SPI. Бит STBY в регистре SPICN сигнализирует об окончании передачи. Ниже показан код отправки и получения данных SPI.

unsigned int sendSPI(unsigned int spib)
{
   SPIB = spib;            // Load the data to send
   while(SPICN_bit.STBY);  // Loop until the data has been sent.
   SPICN_bit.SPIC = 0;     // Clear the SPI transfer complete flag.
   return SPIB;
}

Запись в последовательный порт

В примере пользовательской программы один из последовательных портов MAXQ2000 используется для вывода текущих значений измеренной температуры. Перед записью каких-либо данных в порт, пользовательская программа должна установить значение скорости передачи (в бодах) и режим работы последовательного порта. Как и в предыдущем примере, следует инициализировать несколько регистров для обеспечения передачи через последовательный порт.

void initSerial()
{
   SCON0_bit.SM1 = 1;     // Set to Mode 1.
   SCON0_bit.REN = 1;     // Enable receives.
   SMD0_bit.SMOD = 1;     // Set baud rate to 16 times the baud clock.
   PR0 = 0x3AFB;          // Set phase for 115200 with a 16MHz crystal.
   SCON0_bit.TI = 0;      // Clear the transmit flag.
   SBUF0 = 0x0D;          // Send carriage return to start communication.
}

Как и в случае передачи данных через SPI, один и тот же регистр используется для приема и передачи последовательных данных. Запись в регистр SBUF0 запускает передачу. При приеме полученные данные могут быть прочитаны из регистра SBUF0. Нижеследующая функция использована в примере пользовательской программы для вывода данных через последовательный порт.

int putchar(int ch)
{
   while(SCON0_bit.TI == 0);      // Wait until we can send.
   SCON0_bit.TI = 0;              // Clear the sent flag.
   SBUF0 = ch;                    // Send the char.
   return ch;
}

Генерирование периодических прерываний с помощью таймера

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

  T2V0 = 0x00000;        // Set current timer value.
  T2R0 = 0x00BDC;        // Set reload value.
  T2CFG0_bit.T2DIV = 7;  // Set div 128 mode.
  T2CNA0_bit.TR2 = 1;    // Start the timer.

Использование этого таймера в качестве источника прерывания требует еще нескольких шагов. Для архитектуры MAXQ прерывания необходимо разрешить на трех уровнях: глобально, для каждого модуля и локально. Используя компилятор IAR, можно разрешить прерывания глобально, вызвав функцию _enable_ interrupt(). Это эффективно устанавливает бит Interrupt Global Enable (IGE) регистра прерывания и управления (IC). Поскольку таймер 0 размещен в модуле 3, необходимо установить бит 3 в регистр маски прерывания (IMR) чтобы разрешить прерывания для модуля 3. Разрешение локального прерывания происходит в результате установки бита разрешения таймерных прерываний (ET2) в регистре А управления таймером (T2CNA). Выполнение этих шагов в примере пользовательской программы показано ниже.

  __enable_interrupt()
  T2CNA0_bit.ET2 = 1;          // Enable interrupts.
  IMR |= 0x08;                 // Enable the interrupts for module 3.

Наконец, использование прерываний требует инициализации вектора прерываний. Компилятор IAR поддерживает применение различных функций обработки прерывания для каждого модуля. Установка обработчика прерывания для конкретного модуля требует использования директивы #pragma vector. Описанию функции обработки прерывания должно также предшествовать ключевое слово _interrupt. В приводимом примере пользовательской программы обработчик прерывания для модуля 3 описывается следующим образом:

   #pragma vector = 3
  __interrupt void timerInterrupt()
{
      // Add interrupt handler here.
}

Заключение

Как показано на примерах этих функций, знание особенностей нескольких периферийных регистров позволяет программистам легко разрабатывать пользовательские программы для процессора MAXQ2000 и всего семейства процессоров MAXQ. Наличие АРМ IAR Embedded Workbench ускоряет процесс разработки, позволяя писать программы на ANSI-совместимом языке Си.

Полный исходный текст для этой пользовательской программы можно загрузить по адресу www.maxim-ic.com/MAXQ_code" target="_blank">www.maxim-ic.com/MAXQ_code. Прочтите описание и комментарии, помещенные в начале текста программы, касающиеся электрической схемы и подготовки к работе. Подробные сведения по использованию IAR Embedded Workbench приведены во второй статье данной публикации, озаглавленной Программирование в среде MAXQ.

Обработка сигнала с помощью умножительно-аккумуляторного блока (MAC) контроллера MAXQ

Традиционно микроконтроллеры и цифровые сигнальные процессоры (DSP) рассматривают как стоящие на противоположных концах спектра микрокомпьютеров. В то время как микроконтроллеры наилучшим образом подходят для приложений, требующих быстрого отклика на несинхронизированные события, DSP блестяще проявляют себя в приложениях, где необходимы интенсивные математические вычисления. Микроконтроллеры можно использовать для арифметических приложений, однако принцип работы большинства микроконтроллеров «одна операция за одну команду» делает такое использование малоэффективным. Сходным образом, DSP можно применить для приложений управления, но внутренняя архитектура большинства DSP делает эту операцию неэффективной как с программной, так и с временной точки зрения.

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

Это противоречие может быть разрешено в современной архитектуре процессоров, такой, как MAXQ. В модульной архитектуре MAXQ в состав микроконтроллера может быть добавлен умножительно-аккумуляторный блок (MAC), легко интегрируемый в архитектуру. С помощью аппаратного блока MAC можно выполнять в одном цикле операции умножения и аккумулирования 16-разрядных операндов без влияния на приложение, выполняемое процессорным ядром. В данной статье приведены примеры того, как модуль MAC можно использовать в типовом микроконтроллере MAXQ для решения реальных задач.

Использование модуля MAC в MAXQ

Обычное применение DSP – фильтрация аналогового сигнала. В данном приложении аналоговый сигнал подается на АЦП, и получившаяся последовательность отсчетов фильтруется в цифровом виде. Реализация фильтра в общем виде может быть описана следующей формулой:

где bi и ai характеризуют прямой и обратный отклики системы.

В зависимости от значений ai и bi цифровые фильтры разделяются на две основные категории – фильтры с конечной импульсной характеристикой (FIR) и фильтры с бесконечной импульсной характеристикой (IIR). Если система не содержит элементов обратной связи (все ai = 0), фильтр относится к классу FIR:

Если же элементы обоих типов (ai и bi) – ненулевые, фильтр относится к классу IIR.

Как видно из вышеприведенной формулы для фильтра FIR, основные математические операции в этом случае – умножение каждого отсчета на входе на постоянную величину и последующее суммирование с накоплением n раз. Ниже приводится фрагмент на языке С, иллюстрирующий этот пример:

    y[n]=0;
    for(i=0; i<n; i++)
            y[n] += x[i] * b[i];

Для микропроцессора с блоком умножителя тот же результат можно получить согласно следующей псевдо-ассемблерной программе:

        move  ptr0, #x         ;Primary data pointer -> samples
        move  ptr1, #b         ;Secondary DP -> coefficients
        move  ctr, #n          ;Loop counter gets number of samples
        move  result, #0       ;Clear result register
ACC_LOOP:
        move  acc, @ptr0       ;Get a sample
        mul   @ptr1            ;Multiply by coefficient
        add   result           ;Add to previous result
        move  result, acc      ;...and save the result back
        inc   ptr0             ;Point to next sample
        inc   ptr1             ;Point to next coefficient
        dec   ctr              ;Decrement loop counter
        jump  nz, ACC_LOOP     ;Jump if there are more samples
        end

Таким образом, даже с участием умножителя, цикл умножения и аккумулирования требует 12 команд и (полагая исполнение каждой команды за один такт) 4+8n тактов.

Умножитель MAXQ является реальным умножительно-аккумуляторным блоком. При выполнении той же операции в архитектуре MAXQ кодовое пространство сокращается с 12 слов до 9 слов, а время выполнения ограничивается 4+5n тактами.

       move   DP[0], #x         ; DP[0] -> x[0]
       move   DP[1], #b         ; DP[1] -> b[0]
       move   LC[0], #loop_cnt  ; LC[0] -> number of samples
       move   MCNT, #INIT_MAC   ; Initialize MAC unit
MAC_LOOP:
       move   DP[0], DP[0]      ; Activate DP[0]
       move   MA, @DP[0]++      ; Get sample into MAC
       move   DP[1], DP[1]      ; Activate DP[1]
       move   MB, @DP[1]++      ; Get coeff into MAC and multiply
       djnz   LC[0], MAC_LOOP

Обратите внимание, что в умножительно-аккумуляторном блоке MAXQ запрошенная операция выполняется автоматически при загрузке второго операнда в блок. Результат записывается в регистр MC. Заметьте, что размер регистра MC составляет 40 бит, поэтому в него может быть просуммировано большое количество 32-битных результатов перемножения, прежде чем наступит переполнение. Это позволяет избежать традиционного подхода, когда после каждой элементарной операции необходимо проверять переполнение. В качестве примера эффективного использования MAC при обработке сигнала, рассмотрим простой пример двухтонового мультичастотного передатчика (DTMF).

Обзор DTMF

DTMF – технология передачи сигнала, использующаяся в телефонной сети для передачи информации об адресе с сетевого терминала (телефон или иное устройство коммуникации) на телефонную станцию. Технология использует два набора из четырех дискретных тональных сигналов, гармонически рассогласованных, т.е. – сигналов «низкочастотной» (до 1 кГц) и «высокочастотной» (более 1 кГц) групп. Каждая цифра на клавиатуре телефона представлена одним тоном из «нижней» группы и одним тоном из «верхней». На Рис. 1 показано распределение тональных сигналов.

Сочетание одной частоты из высокочастотной группы и одной частоты из низкочастотной группы формирует сигнал DTMF
Рис. 1. Сочетание одной частоты из высокочастотной группы и одной частоты из низкочастотной группы формирует сигнал DTMF

Кодер тональных сигналов DTMF

Кодирующая часть передатчика DTMF относительно проста. Требуются два цифровых гене- ратора синусоидального сигнала, каждый из которых может быть настроен на одну из четырех частот из «нижней» или «верхней» группы.

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

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

Рекурсивный генератор генерирует синусоидальный сигнал
Рис. 2. Рекурсивный генератор генерирует синусоидальный сигнал

Для генерирования синусоиды можно использовать рекурсивный цифровой генератор1 (Рис. 2). Генератор выполнен в виде двухполюсного фильтра, описываемого следующим уравнением:

где k – постоянная, определяемая как

Поскольку для номеронабирателя DTMF необходим лишь ограниченный набор тональных сигналов, предварительно рассчитываются и записываются в ПЗУ только восемь значений k. Например, константа k для формирования сигнала второй строки (770 Гц) при частоте отсчетов 8 кГц вычисляется так:

Следует задать еще одно значение: начальный импульс, необходимый для запуска генератора. Ясно, что если Xn-1 и Xn-2 имеют нулевые значения, то каждый последующий Xn будет равен нулю. Для запуска генератора следует установить Xn-1 равным нулю, а Xn-2 рассчитать, как

Полагая амплитуду синусоиды равной единице для нашего примера, получим

Перевести этот алгоритм в программные коды достаточно просто. Сначала инициализируются две промежуточные переменные Х1 и Х2: Х1 инициализируется нулем, а Х2 загружается начальным уровнем возбуждения, вычисленным по формуле, приведенной выше. Чтобы сформировать один отсчет синусоиды, выполните следующие операции:

Каждое новое значение синусоиды вычисляется с использованием одной операции умножения и одной операции вычитания. С помощью однотактного MAC микроконтроллера MAXQ, синусоида формируется следующим образом:

  move   DP[0], #X1         ; DP[0] -> X1
  move   MCNT, #INIT_MAC    ; Initialize MAC unit
  move   MA, #k             ; MA = k
  move   MB, @DP[0]++       ; MB = X1, MC=k*X1, point to X2
  move   MA, #-1            ; MA = -1
  move   MB, @DP[0]--       ; MB = X2, MC=k*X1-X2, point to X1
  nop                       ; wait for result
  move   @--DP[0], MC       ; Store result at X0

Распознавание тонального сигнала в DTMF

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

Алгоритм Герцеля реализован как фильтр второго порядка
Рис. 3. Алгоритм Герцеля реализован как фильтр второго порядка

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

Прежде всего, три вспомогательные переменные (D0, D1 и D2) приравниваются к нулю. Затем, для каждого полученного отсчета Х следует рассчитать:

После получения достаточного количества отсчетов (обычно 205 при частоте отсчетов 8 кГц), вычислите величину Р, используя предварительно рассчитанные значения D1 и D2:

Величина Р пропорциональна значению квадратичной мощности тестовой частоты входного сигнала. Для полного распознавания всех DTMF частот каждый отсчет должен быть обработан восемью фильтрами. У каждого фильтра должно быть собственное значение к и свой набор промежуточных переменных. Поскольку каждая переменная занимает 16 бит, весь алгоритм займет 48 байт промежуточной памяти.

Пример формы входного сигнала декодера DTMF
Рис. 4. Пример формы входного сигнала декодера DTMF

По вычислении значений Р для различных тональных частот, значения для одного тона из «верхней» и одного из «нижней» группы будут существенно выше, чем для других тонов, обычно более чем в два раза, часто на порядок больше. На Рис. 4 показан пример входного сигнала на декодере, а на Рис. 5 – результат применения алгоритма Герцеля. Если полученный спектр не удовлетворяет этим критериям, это означает либо отсутствие DTMF-сигнала, либо наличие шума, блокирующего DTMF-сигнал.

Декодер DTMF распознает амплитуду различных частот
Рис. 5. Декодер DTMF распознает амплитуду различных частот

Таблица, в которой представлен описанный алгоритм, а также пример программы для процессора MAXQ с блоком MAC представлены на сайте MAXIM по адресу www.maxim-ic.com/MAXQ_DTMF" target="_blank">www.maxim-ic.com/MAXQ_DTMF.

Заключение

Микроконтроллер MAXQ, оснащенный блоком MAC, закрывает пробел между традиционными микроконтоллерами и цифровыми сигнальными процессорами. Дополненные аппаратным блоком MAC, микроконтроллеры MAXQ предоставляют новые, прежде недоступные для рынка 16-битных микроконтроллеров возможности обработки сигналов. С однотактовым блоком МАС, выполняющим наиболее востребованные в аналоговых приложениях операции, обработка сигналов в реальном времени становится доступной.

Документация

  Архитектура микроконтроллеров семейства MAXQ
  Rus Руководство пользователя по микроконтроллерам семейства MAXQ. Краткий обзор
  Rus Полная версия руководства пользователя по микроконтроллерам семейства MAXQ

www.dolchevito.ru/" class="sale">недвижимость новостройки | www.lejla.ru/" class="sale">недвижимость вторичный рынок | www.mysa.ru/" class="sale">загородная недвижимость | www.prometej.ru/" class="sale">коммерческая недвижимость | www.real-x.ru/" class="sale">коммерческая недвижимость






 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (495) 514 4110. e-mail:info@eust.ru
©1998-2016 ООО Рынок Микроэлектроники