Система команд микроконтроллеров ST7 включает в себя 63 инструкции длиной от 1 до 4 байт. Специальный префиксный байт, употребляемый в некоторых командах, служит для расширения стандартной 256-байтной сетки команд 8-разрядных микроконтроллеров.
Каждая команда состоит из четырех элементов (рис. 1.16):
В группу периферийных устройств входят (рис. 1.17): – параллельные порты ввода-вывода (порты A, B, C); – последовательный порт SPI; – интерфейсы SCI, CAN, I2C, USB; – 8- и 16-битные таймеры общего назначения; – сторожевой таймер;
– 10-битный аналого-цифровой преобразователь (АЦП); – блок прерываний.
Обмен данными между микроконтроллером и внешними устройствами производится с помощью портов ввода/вывода. Микроконтроллеры семейства ST7 имеют конфигурируемые порты ввода/вывода, каждый порт может быть настроен для использования либо в качестве входа (с нагрузочным резистором или без него), либо в качестве выхода (с открытым стоком либо двухтактного).
Данный интерфейс обеспечивает стандартный асинхронный формат приема/передачи данных с одним стартовым и одним стоповым битом и длиной информационного слова в 8 или 9 бит. Поддерживается скорость от 300 до 115200 бод.
SCI – дуплексный, UART-типа. Это асинхронная система со стандартным форматом «без возврата к нулю» (NRZ) для переданного или полученного бита. Длина переданного слова 10 - 11 бит (1 старт-бит, 8 - 9 информационных разрядов, 1 стоп-бит). SCI состоит из трех модулей: приемник, передатчик и контроллер скорости пересылки данных в бодах.
Интерфейс порта SPI (Serial Peripheral Interface) предназначен для высокоскоростного обмена между микроконтроллером ST7 и периферийными микросхемами, такими как АЦП и ЦАП, FLASH-память большой информационной емкости, часы реального времени. Данный интерфейс может быть также использован для обмена между двумя микроконтроллерами, расположенными на небольшом расстоянии. Достоинством синхронной последовательной приемо-передачи с использованием протокола SPI является полный дуплексный обмен данными, что в случае необходимости позволяет реализовать экономичную потенциальную развязку между приемником и передатчиком.
Аналого-цифровые преобразователи (АЦП) обеспечивают ввод двоичных значений потенциалов, поступающих на аналоговые входы. Основные характеристики АЦП микроконтроллеров семейства ST7 следующие:
– входные значения – положительные, отрицательные напряжения не конвертируются;
– разрешение – 10 бит;
В микроконтроллерах таймер является одним из важнейших периферийных устройств, поскольку при выполнении задач управления достаточно часто возникает необходимость приема и выдачи управляющих сигналов в заданные моменты времени. Микроконтроллеры семейства ST7 содержат 16-разрядный таймер, который может эффективно использоваться для указанных функций.
Сторожевой таймер представляет собой дополнительный таймер, используемый для защиты системы от ошибок, вызванных зацикливанием программы.
Управление сторожевым таймером ST7 осуществляется с помощью специального регистра WDGCR, включающего два бита управления (биты 6 и 7) и 6 времязадающих битов (рис. 1.21).
Запросы на прерывания могут генерироваться несколькими внутренними (таймеры, порт SPI) или внешними источниками (порты ввода/вывода). Кроме того, в микроконтроллерах семейства ST7 поддерживаются программные прерывания (инструкция TRAP). На рис. 1.22 показаны различные возможные источники прерываний.
Микроконтроллеры семейства ST7 имеют большой набор последовательных интерфейсов – SPI, SCI, I2C, CAN и USB. Следует отметить, что STM одной из первых предложила микроконтроллеры со встроенной поддержкой USB; при этом номенклатура таких микроконтроллеров постоянно расширяется. Так, например, ST7261, ST7262 и ST7263 – это микроконтроллеры для низкоскоростных USB-устройств, применяемые там, где требуется обмен небольшими объемами данных. ST7265 поддерживает высокоскоростной режим, что позволяет передавать большие объемы данных (цифровые изображения, звук). Такие микроконтроллеры применяются, например, в MP3-плеерах, устройствах записи/чтения Flash-карт и т.п.
Микроконтроллеры ST7 имеют наиболее низкую стоимость и менее широкие функциональные возможности по сравнению с другими семействами STM. Большинство микроконтроллеров семейства ST7 ориентировано на использование в относительно несложных устройствах массового применения, однако в линейке присутствуют модели, позволяющие решать достаточно серьезные задачи. В целом номенклатура обеспечивает потребности многих отраслей промышленности в надежных, высокоэффективных и недорогих устройствах управления и контроля.
Микроконтроллер (МК) – универсальный программируемый компонент системы, основным узлом которого является программа управления. В зависимости от встроенного программного кода, разработчик имеет возможность задать необходимые функциональные характеристики системы и легко внести в них коррективы в будущем. Зачастую одно и тоже семейство микроконтроллеров может выполнять различные по сложности задачи.
Язык ассемблера является родным языком для каждого микропроцессора. Это был единственный язык программирования для небольших микроконтроллеров, пока не появились компиляторы языков высокого уровня для различных семейств (с различной архитектурной реализацией).
Процесс написания программы на языке ассемблера требует особой осторожности и внимания, а также большого количества строк программного кода для выполнения относительно маленькой несложной задачи. Однако язык ассемблера был и есть достаточно востребованным, когда речь идет об оптимизации используемых ресурсов (скорость выполнения программы, экономия памяти данных, памяти программ и т.д.), либо когда алгоритм является достаточно простым. В остальных случаях рекомендуется применение языков высокого уровня, таких как C. Помимо этого при написании программы разработчик получает возможность использовать «смешанный» стиль описания, когда в исходный код на языке высокого уровня вставляются ассемблерные вставки.
Разработка программы, в общем случае, состоит из трех основных этапов: анализ, написание кода (кодирование), отладка.
На первом этапе программист должен понять, что программа должна делать. Особенность данного этапа заключается в том, что в большей степени это бумажная работа (представление программы на уровне блочной структуры, составление алгоритмов, определение параметров и типов входных/выходных данных, приблизительный анализ необходимого объема памяти и т.д.).
Следует также различать понятие «ассемблер» и «язык ассемблера», так как под ассемблером понимают не только программный код, но и набор утилит и средств для интерпретации программы в машинный код, с последующей имплементацией его в микроконтроллер.
Выходным результатом программного кода на языке ассемблера является (рис. 2.1):
При незначительном размере программного кода (один файл), ассемблер интерпретирует его в объектный файл (*.obj), который содержит все необходимые машинные инструкции, готовые к использованию. Данная процедура называется абсолютным ассемблированием (работа с абсолютными адресами).
В связи с ростом сложности приложений, выполняемых на микроконтроллерах во встроенных системах, суммарное количество строк одного проекта может быть слишком велико и размещение их всех в одном файле не представляется возможным по ряду причин.
ST7 Ассемблер – кросс-ассемблер (формирует машинный код для процессорного ядра другого типа, чем тот, на котором он исполняется). Обычно такие средства используется для бортовых и встраиваемых компьютеров, а также для микроконтроллеров.
Программный код, написанный на языке ассемблера ST7 и сохраненный в текстовом ASCII формате, называется исходным файлом проекта. Исходный файл проекта имеет расширение *.asm.
Как и для любого ассемблера, исходный файл проекта для микроконтроллеров ST7 имеет строгий формат и синтаксис (см. приложение 4).
Первая строка данного файла зарезервирована для указания *.tab файла, т.е. целевого процессора, под который пишется программа (в нашем случае это st7.tab). Допускается также не указывать *.tab файл, а просто прописать полный путь к нему, т.к. ассемблер ищет его по умолчанию: