1. Предисловие
Описываемые микроконтроллеры в данное время выпускаются только фирмами Infineon и STMicroelectronics, основываясь на базе микроконтроллера С167 фирмы Infineon (Siemens). Ниже приведено описание микроконтроллеров серии C167 из семейства 16-разрядных микроконтроллеров фирмы Infineon с указанием небольших доработок и изменений, сделанных фирмами Infineon (серии C167CR и C167CS) и STMicroelectronics (серия ST10x167).
Введение
Одной из быстроразвивающихся областей встраиваемых систем управления являются системы реального времени, строящиеся на базе современных микроконтроллеров. Остро стоит необходимость реализовывать сложные алгоритмы управления, использующие на входе большое количество цифровых и аналоговых сигналов, когда сигналы отклика должны генерироваться с минимально возможной временной задержкой. Встроенные системы управления часто являются критичными по площади монтажа, рассеиваемой мощности и стоимости системы в целом, поэтому применение современных высокопроизводительных микроконтроллеров позволяет решить эти проблемы.
Для встраиваемых систем управления необходимо использовать микроконтроллеры, которые обладают следующими свойствами:
- имеют высокую степень системной интеграции;
- уменьшают необходимость в дополнительных периферийных устройствах, и, следовательно, накладные расходы программно-аппаратного обеспечения;
- обеспечивают стабильность и надежность систем.
Непрекращающееся увеличение сложности встраиваемых систем управления требует более существенного увеличения производительности центрального процессорного устройства (ЦПУ) и периферии микроконтроллера по сравнению с традиционными 8-разрядными микроконтроллерами. Исходя из всех этих требований, было разработано семейство 16-разрядных микроконтроллеров, выполненных по технологии КМОП.
Состав семейства 16-разрядных микроконтроллеров
Архитектура целочисленных микроконтроллеров данного семейства оптимизирована для высокоэффективного выполнения инструкций и минимального по времени отклика на внешние воздействия (запросы на прерывание). Программируемые периферийные подсистемы, интегрированные в микроконтроллере, позволяют свести к минимуму необходимость использования внешних периферийных устройств и обмена с ними через внешнюю шину. Высокая гибкость такой архитектуры делает возможным применение микроконтроллера данного семейства в автомобильных и промышленных встраиваемых системах управления, а также в системах связи.
Архитектура ядра микроконтроллеров была разработана по модульному принципу. Это позволило быстро и просто создать целый ряд микроконтроллеров с различным размером внутренней памяти, с разными наборами внутренних периферийных устройств и отличающихся числом контактов ввода / вывода.
Микроконтроллеры серии 8xC166 являются первым поколением семейства 16-разрядных целочисленных микроконтроллеров. В отличие от C167, семейство 8xC166 имеет ограниченный набор интегрированных периферийных устройств, меньшую адресную разрядность и ограниченный по возможностям интегрированный контроллер внешней шины.
Микроконтроллеры серии С167 являются представителями Второго поколения семейства 16-разрядных микроконтроллеров. Эту серию отличает увеличенное линейное (напрямую адресуемое) адресное пространство (с 256 Кбайт до 16 Мбайт), увеличенный размер внутреннего ОЗУ (с 1 Кбайта до 10 Кбайт) и повышенная эффективность управления устройствами внешней шины. Кроме того, добавлены инструкции, позволяющие более эффективно работать с системой прерываний и адресацией данных.
Усовершенствованные модификации микроконтроллеров Второго поколения снабжены такими функциональными возможностями как дополнительное высокоскоростное внутреннее ОЗУ, интегрированные модули CAN-интерфейса, модуль ФАПЧ для внутреннего тактового генератора, позволяющий умножать частоту входного сигнала и т.п.
Разработка эффективных систем и увеличение производительности при уменьшении числа имеющихся компонентов требуют интеграции специфических периферийных устройств, ориентированных на конкретные встраиваемые системы управления. Такая возможность предоставляется при помощи шины XBUS, используемой в микроконтроллерах Второго поколения. XBUS является внутренним представлением интерфейса внешней шины, позволяющим интегрировать новые периферийные устройства без изменения внутренней архитектуры микроконтроллера. Одними из таких периферийных устройств являются модули CAN-интерфейса и область внутреннего ОЗУ XRAM.
Краткая характеристика серий C167x и ST10x167
Серии микроконтроллеров C167x и ST10x167 представляют собой усовершенствованную модификацию семейства 16-разрядных целочисленных микроконтроллеров. Микроконтроллеры совмещают центральное процессорное устройство с высоким быстродействием (до 10 миллионов инструкций в секунду) и внутренние периферийные устройства. Все приведенные далее временные параметры относятся к частоте ядра ЦПУ 20 МГц.
Высокопроизводительное 16-разрядное ЦПУ с четырехступенчатым конвейером:
- 100 нс для выполнения одного машинного цикла инструкции, причем большинство инструкций выполняется за 1 цикл;
- 500 нс для выполнения умножения (двух 16-разрядных чисел), 1 мкс для выполнения деления (32-разрядного числа на 16-разрядное);
- многочисленные внутренние шины данных с высокой пропускной способностью;
- архитектура с поддержкой переключения банков регистров общего назначения (контекста) всего за одну инструкцию;
- до 94 банков по шестнадцать 16-разрядных регистров общего назначения каждый;
- возможность перекрытия банков;
- адресное пространство размером 16 Мбайт для кода и данных (архитектура фон-Неймана);
- системный стек с аппаратным детектированием переполнения / опустошения.
Высокоэффективная система команд:
- используемые типы данных — бит, байт и слово (2-байтовый тип данных);
- гибкие и эффективные режимы адресации байтов, слов и битов: непосредственная, косвенная, непосредственно-косвенная и базовая;
- улучшенные логические операции для управления периферией и работы с пользовательскими флагами;
- аппаратный механизм детектирования восьми исключительных и ошибочных ситуаций, при возникновении которых формируются соответствующие запросы на прерывание.
Внутренняя память:
- до 3 Кбайт внутреннего ОЗУ IRAM под переменные, банки регистров, системный стек и программный код;
- весь объем IRAM может использоваться для прямой битовой адресации;
- до 8 Кбайт внутреннего высокоскоростного ОЗУ XRAM под переменные, программный стек и программный код;
- внутреннее ПЗУ с масочным программированием или Flash-память.
Интерфейс внешней шины:
- мультиплексная или немультиплексная конфигурации шины с возможностью динамического переключения;
- внешняя шина с возможностью динамического переключения между 8- или 16-разрядным режимами;
- изменяемые временные параметры циклов шины для пяти программируемых адресных окон, каждое из которых использует свой сигнал выборки;
- управление разрядностью шины адреса и сигналами выборки внешних устройств.
16-уровневая система прерываний:
- 55 внутренних источников, формирующих запросы на прерывание, большая часть из которых может использоваться для обработки внешних запросов;
- каждый источник имеет свой отдельный вектор прерывания и настраиваемый приоритет;
- 250 / 600 нс средней / максимальной задержки отклика на запрос;
- обработка с высоким разрешением (до 50 нс) внешних запросов.
8-канальный контроллер периферийных событий PEC:
- является аналогом DMA и предназначен для автоматической пересылки данных без вмешательства ЦПУ;
- позволяет использовать счетчик числа передач с вызовом стандартного прерывания после заданного количества передач;
- прерывает работу ЦПУ на один машинный цикл для передачи данных;
- позволяет исключить накладные расходы на сохранение и восстановление состояния системных регистров.
Интегрированные периферийные модули:
- 24- или 16-канальный 10-разрядный аналого-цифровой преобразователь с программируемым временем преобразования (минимум 4,9 мкс), режим автоматического запуска следующего преобразования и режим вставки преобразования для одного канала в режиме преобразования выбранной группы каналов;
- 4-канальный блок широтно-импульсной модуляции с разрешением по времени 50 нс;
- два 16-канальных блока захвата / сравнения с максимальным разрешением по времени 400 нс, работающие в пяти различных режимах с двумя независимыми наборами таймеров / счетчиков и предназначенные для формирования ШИМ-сигналов сложной формы и для измерения временных интервалов;
- блок таймеров общего назначения, состоящий из трех 16-разрядных таймеров / счетчиков с разрешением 400 нс;
- блок таймеров общего назначения, состоящий из регистра захвата / перезагрузки и двух 16-разрядных таймеров / счетчиков с разрешением 200 нс;
- часы реального времени для отсчета текущей даты и измерения временных интервалов;
- асинхронный / синхронный последовательный канал с настройкой скорости обмена до 625 Кбод / 2,5 Мбит / с;
- синхронный последовательный канал с настройкой скорости обмена до 5 Мбит / с и размера передаваемых / принимаемых данных;
- сторожевой таймер с программируемым временным интервалом от 25,6 мкс до 838,9 мс;
- стартовый загрузчик, использующий асинхронный интерфейс для загрузки данных с персонального компьютера и отладки программного кода без эмуляторов;
- до двух интегрированных модулей CAN-интерфейса с настройкой скорости обмена до 1 Мбод.
111 битадресуемых входов / выходов:
- режим третьего состояния при настройке на ввод;
- двухтактный режим или режим с открытым стоком при настройке на вывод;
- выбор порогов лог.0 и лог.1 для входных напряжений.
Режимы пониженного энергопотребления:
- отключение ядра при работе внутренней периферии;
- отключение ядра и внутренней периферии;
- программное понижение тактовой частоты ЦПУ.
- 2. Обзор архитектуры
Структура микроконтроллеров C167 совмещает в себе преимущества архитектур RISC и CISC. Совокупность их функциональных возможностей дала высокопроизводительный микроконтроллер, который является хорошим выбором не только для сегодняшних приложений, но и для последующих разработок.
Микроконтроллеры серии C167 не просто совмещают в себе мощный центральный процессор и набор периферийных устройств, а делают это наиболее эффективным способом.
2.1. Основные принципы работы ЦПУ
Ядро центрального процессора (ЦПУ) состоит из конвейера инструкций, 16-разрядного арифметико-логического устройства (АЛУ), набора регистров специального назначения SFR и ESFR, аппаратных модулей для умножения и деления, генератора битовых масок и модуля циклического сдвига.
Архитектура ЦПУ, для соответствия требованиям высокой производительности и гибкости работы, подверглась целому ряду усовершенствований:
- выполнение большинства инструкций на конвейере осуществляется в среднем за один машинный цикл;
- эффективное выполнение 8- и 16-разрядных арифметических и логических операций;
- расширенная побитовая обработка данных и управление периферией;
- исполнение переходов, вызовов подпрограмм и циклов с использованием кэша;
- использование унифицированного и оптимизированного формата инструкций;
- программирование приоритетов запросов на прерывание.
Быстрое выполнение инструкций
Большинство инструкций микроконтроллера выполняется в среднем за один машинный цикл (100 нс). Инструкции сдвига, независимо от числа сдвигаемых бит, всегда выполняются за одно и тоже время. Если бы конвейерная обработка не использовалась, то выполнение каждой инструкции занимало бы 4 цикла.
Примечание: Приведенные в этой главе временные параметры относятся к частоте тактового генератора (fCPU) 20 МГц.
Инструкции перехода и вызова подпрограмм обычно требуют для выполнения больше одного машинного цикла. Выполнение инструкции условного перехода требует всего лишь одного дополнительного машинного цикла, если переход осуществляется. Большинство инструкций перехода, расположенных внутри цикла, вовсе не требуют дополнительных машинных циклов благодаря аппаратному кэшу. Инструкции умножения и деления требуют для выполнения пять и десять машинных циклов соответственно.
Обработка инструкций на конвейере позволяет существенно сократить время выполнения программ. Использование этой технологии позволяет ядру ЦПУ параллельно обрабатывать разные этапы выполнения четырех последовательно идущих инструкций. Конвейерная обработка состоит из четырех этапов: выборка, декодирование, выполнение и запись результата.
На этапе выборки команда считывается из внутренней или внешней памяти по адресу, определяемому значениями указателя инструкций IP и указателя сегмента кода CSP. Выбранная инструкция декодируется, и считываются необходимые операнды. После этого декодированная инструкция выполняется. Если требуется, производится запись результатов выполнения операции.
Задержки в работе конвейера чаще возникают при одновременном доступе к ресурсам по внешней шине на различных этапах конвейера.
Эффективное выполнение 8- и 16-разрядных арифметических и логических операций
Все арифметические и логические инструкции выполняются в 16-разрядном АЛУ в среднем за один машинный цикл, за исключением умножения и деления. Для аппаратного умножения и деления используется расширенный алгоритм Бута (Booth), реализация которого позволяет производить четырехразрядное умножение и двухразрядное деление за один машинный цикл. Таким образом, для выполнения умножения двух 16-разрядных чисел необходимо четыре машинных цикла, а для деления 32-разрядного числа на 16-разрядное — девять машинных циклов. Вдобавок, для каждой операции требуется еще один дополнительный машинный цикл для управления операндами. Для умножения и деления используются два 16-разрядных регистра MDL и MDH. Выполнение этих операций может быть приостановлено запросом на прерывание, и после обработки запроса выполнение операции будет продолжено.
Автоматическое обновление соответствующих флагов АЛУ в регистре PSW производится после выполнения арифметических или логических операции, инструкций сдвига или пересылки. Значения этих флагов могут использоваться в операциях условного перехода. При входе в процедуру обработки запроса на прерывание значение регистра PSW сохраняется на системном стеке блоком ЦПУ, а при выходе — восстанавливается.
Расширенная побитовая обработка и управление периферией
Инструкции работы с отдельными битами являются более эффективными, с точки зрения быстродействия, по сравнению с другими микроконтроллерами, т.к. не требуют предварительной записи значения в некоторый специальный регистр для изменения определенных разрядов. Инструкции микроконтроллера C167 работают напрямую с битадресуемой областью памяти и битадресуемыми регистрами управления системными ресурсами.
Аналогично байтовым и двухбайтовым логическим инструкциям в микроконтроллере C167 присутствуют битовые логические инструкции, что позволяет сравнивать и изменять биты за один машинный цикл. Помимо инструкций, работающих с одиночными битами, есть инструкции, работающие с битовыми полями, которые также выполняются за один машинный цикл.
Унифицированный и оптимизированный формат инструкций
Система команд микроконтроллера была разработана на основе RISC-архитектуры для достижения оптимальной производительности при конвейерной обработке. Основная концепция данной архитектуры заключается в быстром декодировании инструкций и операндов, что необходимо для снижения задержек на конвейере. Однако эта архитектура не препятствует использованию сложных инструкций, необходимых для создания эффективных программ. При разработке системы команд использовались следующие целевые установки для обеспечения высокой производительности:
- создать мощные инструкции для выполнения часто используемых операций, которые в настоящее время требуют применения целой последовательности команд;
- избегать пересылок во временные регистры типа аккумулятора;
- производить параллельное выполнение операции сохранения состояния при входе в процедуры обработчиков прерываний и подпрограмм;
- не использовать сложной системы декодирования инструкций, используя для этого унифицированный (единообразный) формат;
- избегать сложных способов адресации, которые редко используются;
- сделать наиболее часто используемые инструкции размером в одно слово (два байта).
Эффективное выполнение переходов и циклов
Поскольку в программах существенную часть кода составляют различные переходы, затраты на их выполнение были уменьшены до двух машинных циклов. Причем Второй машинный цикл требуется только в том случае, когда условный переход должен осуществиться, т.е. когда условие перехода является истинным. Сокращение времени выполнения инструкций перехода до двух машинных циклов достигается за счет предварительного вычисления адреса перехода во время декодирования на конвейере.
Конвейер микроконтроллера был улучшен для уменьшения накладных расходов при выполнении циклов. После выполнения одной итерации, инструкции переходов выполняются всегда за один машинный цикл, т.к. адреса переходов вычисляются на первой итерации и хранятся во внутреннем аппаратном кэше. Преждевременный выход из неоконченного цикла не требует дополнительных машинных тактов. Для организации цикла и заполнения кэша не требуется каких-либо специальных инструкций — это выполняется автоматически.
Быстрый поиск по таблице значений требует всего лишь одной инструкции сравнения внутри цикла, которая производит само сравнение и определяет конец таблицы. В случае, когда значения в таблице неупорядочены, в ее конец нужно записать наименьшее отрицательное значение, равное минус 32768 (8000h) для двухбайтового типа данных или минус 128 (80h) для байтового типа данных. Для использования поиска по таблице в инструкции перехода следует указать условие, что переход осуществляется либо при неравенстве указанных для сравнения значений, либо поиск достиг конца таблицы.
При проверке условия перехода используется более эффективное решение, чем инструкции декрементирования с пропуском следующей инструкции при равенстве нулю, которые применяются в других микроконтроллерах. При помощи инструкций совмещенного сравнения и инкрементирования / декрементирования можно реализовать сравнения с любым значением, что позволяет использовать любые диапазоны значений для счетчиков итераций. Это особенно помогает при реализации поиска по таблице.
Сохранение флагов состояния ЦПУ (PSW) во внутреннем системном стеке при вызове процедур обработки прерываний производится автоматически без использования специальных инструкций. Восстановление значения PSW при выходе из обработчика прерывания также производится автоматически.
Инструкции вызова подпрограмм требуют для выполнения того же времени, что и инструкции перехода, т.к. не занимают дополнительных машинных циклов для сохранения на системном стеке адреса возврата.
Обработка запросов на прерывание
Усовершенствование механизмов обработки запросов прерывания позволяет существенно повысить эффективность использования микроконтроллера C167 и добиться минимального времени отклика на внешнее воздействие.
Контроллер периферийных событий PEC является аналогом DMA и позволяет существенно разгрузить ЦПУ при обработке запросов на прерывание, избавляя от накладных расходов по входу и выходу из процедуры обработки запроса. Восемь каналов PEC работают независимо друг от друга и выполняют за один машинный цикл операцию по пересылке байта или слова данных между двумя областями памяти в нулевом сегменте. Каждый канал контроллера PEC имеет свой настраиваемый счетчик числа пересылок. Регистры данных всех внутренних периферийных устройств расположены во внутренней памяти нулевого сегмента. Поэтому пересылка возможна между двумя любыми устройствами. В пересылке могут участвовать:
- девять параллельных портов;
- последовательный асинхронный / синхронный порт;
- последовательный синхронный порт;
- девять таймеров;
- часы реального времени;
- 32 канала захвата / сравнения;
- 4 канала широтно-импульсной модуляции;
- аналого-цифровой преобразователь;
- 15 объектов сообщений у каждого из двух CAN-модулей.
Контроллер прерываний позволяет назначать каждому запросу на прерывание определенный приоритет. Запросы могут быть разнесены по группам, чтобы процедуры обработки с одинаковым уровнем приоритета не прерывали друг друга. Для каждого источника запроса предусмотрен отдельный регистр, который содержит номер группы, уровень приоритета, флаги запроса и разрешения обработки запроса.
Использование переключаемых банков регистров общего назначения (РОН) позволяет сохранить и сменить контекст задачи всего за одну инструкцию. Это особенно полезно для обработчиков прерываний, т.к. позволяет максимально быстро приступить к обработке запроса без необходимости сохранять (и восстанавливать) используемые РОН во внутренней или внешней памяти. Внутренняя память IRAM позволяет организовать без перекрытия до 94 банков (при минимальном размере системного стека), каждый из которых состоит из шестнадцати 16-разрядных РОН. Перекрытие банков можно использовать для передачи параметров вызываемым подпрограммам.
Операции умножения и деления требуют для своего выполнения несколько машинных циклов. Для того чтобы микроконтроллер приступил к обработке поступившего запроса на прерывание как можно быстрее, эти операции могут прерываться для передачи управления процедуре обработки запроса. После возврата из обработчика, операции умножения или деления продолжаются.
Микроконтроллер C167 имеет восемь входов для обработки коротких (не менее 50нс) внешних запросов. Остальные входы могут обрабатывать запросы длительностью не менее 400 нс. Время отклика на прерывание находится в диапазоне от 250 нс до 600 нс (в случае выполнения программы из внутренней памяти), что дает возможность использовать микроконтроллер C167 в системах с высокими требованиями к реакции на внешние воздействия.
Микроконтроллер с архитектурой C167 снабжен аппаратным механизмом детектирования исключительных и ошибочных ситуаций во время исполнения программы. При возникновении таких ситуаций формируется немаскируемый (всегда разрешенный) запрос на прерывание. Аппаратные запросы прерывания в этом случае имеют более высокий приоритет по сравнению с запросами от внутренней периферии.
Прерывания могут формироваться не только аппаратно, но и программно. Программные прерывания инициируются специальной инструкцией TRAP, в которой указывается номер прерывания.
2.2. Внутренние системные ресурсы
Контроллер периферийных событий PEC и управление прерываниями
Контроллер PEC является аналогом DMA и позволяет реагировать на запросы прерываний пересылкой данных (одного или двух байт), которая занимает всего один машинный цикл и не требует сохранения и восстановления состояния программы при входе и выходе из обработчика прерывания.
Контроллер PEC управляет восемью каналами пересылки с помощью отдельных регистров, в которых находятся биты управления и значение счетчика числа пересылок. Помимо этого, для PEC зарезервирована область во внутреннем ОЗУ, в которую записываются 16-разрядные адреса источников и приемников данных. Так как адреса 16-разрядные, то пересылка данных может осуществляться только в пределах нулевого сегмента. В нулевом сегменте расположены внутренняя память и периферийные устройства. Счетчик количества пересылок уменьшается после каждой пересылки и при достижении нуля возникает запрос на прерывание, по которому можно определить завершение очередной серии.
Обработка запросов прерывания стандартным способом производится аналогично другим микроконтроллерам. При получении запроса производится сохранение текущего состояния ЦПУ на системном стеке и осуществляется переход по адресу вектора прерывания. Если приоритет запроса меньше приоритета ЦПУ или равен ему, то обработка запроса откладывается с сохранением флага запроса. После того как уровень приоритета ЦПУ станет ниже уровня запроса, запрос будет автоматически обработан.
Память
Память микроконтроллера C167 организована по принципу архитектуры фон-Неймана, в которой область памяти для кода и данных, регистры и порты ввода / вывода расположены в едином линейном адресном пространстве. Внутренняя шина адреса имеет 24 разряда, т.е. максимальный размер адресуемого пространства составляет 16 Мбайт.
Архитектура микроконтроллера C167 позволяет обращаться к словам и отдельным байтам во всем адресном пространстве, а для части внутреннего ОЗУ обращение может производиться к отдельным битам.
Внутреннее ОЗУ IRAM
Внутреннее ОЗУ IRAM организовано как 1,5 К*16 или 1 К*16 (1536 ячеек или 1024 ячейки по 16 разрядов каждая) и имеет размер до 3 Кбайт. ОЗУ используется для размещения регистров общего назначения, системного стека, хранения переменных и программного кода. Размер IRAM для C167, C167CR и ST10x167 составляет 2 Кбайта, для C167CS — 3 Кбайта.
Используемый банк регистров общего назначения (контекст) может размещаться только в области IRAM. Банк состоит из шестнадцати 16-разрядных регистров. Указатель контекста CP используется для задания базового адреса банка регистров. Число возможных банков ограничено лишь размерами IRAM, причем банки могут перекрываться. Максимально возможное количество банков без перекрытия составляет 94 (для C167CS) с учетом минимального размера системного стека, также расположенного в IRAM. Использование перекрываемых банков для передачи параметров вызываемым функциям является очень эффективным и удобным способом, т.к. требует для передачи параметров выполнения одной инструкции по смене значения CP.
Системный стек размером до 3 Кбайт используется для хранения временных данных, адресов и слова состояния ЦПУ при вызове и возврате из подпрограмм и процедур обработки запросов на прерывание. Системный стек располагается в области IRAM, а чтение и запись в стек производится только словами. Адрес слова определяется значением указателя стека SP.
Регистр переполнения стека STKOV и регистр опустошения стека STKUN используются для того, чтобы выявить, соответственно, ситуации переполнения или опустошения. Каждый раз, когда осуществляется доступ к системному стеку, значения STKOV и STKUN сравниваются со значением SP. При равенстве формируется соответствующий аппаратный запрос на прерывание, указывающий возникновение исключительной ситуации.
Аппаратно реализованное детектирование переполнения / опустошения стека, активация при этом запросов на прерывание, возможность изменения размеров стека, адреса вершины стека и границ для переполнения и опустошения позволяет эффективно использовать системный стек и управлять им с минимальными затратами со стороны программы.
Внутреннее ОЗУ XRAM
Область внутреннего ОЗУ XRAM (до 8 Кбайт) организовано как две области — 1К*16 и 3К*16 (1024 ячейки и 3072 ячейки по 16 разрядов каждая). Размер XRAM для микроконтроллеров C167 фирмы Siemens, C167CR фирмы Infineon и ST10x167 STMicroelectronics составляет 2 Кбайта, а для микроконтроллеров C167CS фирмы Infineon — 8 Кбайт.
Область XRAM используется для хранения переменных и программного кода, и для организации программного стека (пользовательского стека). Память XRAM реализована в виде X-периферии и подключена к шине XBUS. Доступ к XRAM с точки зрения внутренней архитектуры осуществляется как к внешнему ОЗУ, что исключает возможность ее использования под банки РОН и системный стек. XRAM не является битадресуемой областью памяти.
Внутреннее ПЗУ
Внутреннее ПЗУ, в зависимости от модификации микроконтроллера, может быть однократно программируемым, перепрограммируемым или масочным.
Область ПЗУ предназначена для хранения констант и программ. Доступ к ПЗУ осуществляется через 32-разрядную внутреннюю шину данных, что позволяет ЦПУ считывать 4-байтные инструкции за один машинный цикл. Таким образом, выполнение программного кода из внутреннего ПЗУ является самым быстрым.
Области регистров специального назначения SFR и ESFR
Под регистры специального назначения SFR и ESFR в памяти отведено 1 Кбайт адресного пространства. Регистры специального назначения в областях SFR и ESFR (SFR— и ESFR-регистры соответственно) занимают по 512 байт, т.е. 256 ячеек по 16 разрядов каждая, и предназначены для управления работой ЦПУ и различных периферийных устройств.
Интерфейс внешней шины
Для систем, требующих больше памяти или периферийных устройств, чем реализовано в микроконтроллере C167, предусмотрен интерфейс внешней шины.
Доступ к внешней памяти и периферийным устройствам осуществляется через специальный контроллер внешней шины EBC, который позволяет использовать внутри единого линейного адресного пространства до пяти адресных окон. Каждое адресное окно может работать в мультиплексном или немультиплексном режимах с 8-разрядной или 16-разрядной шиной данных и с индивидуальными временными параметрами циклов внешней шины. Это дает возможность подключать к внешней шине различные периферийные устройства, ОЗУ, ПЗУ и т.п. Разрядность внешней шины адреса — 16, 18, 20 или 24 разряда.
Такие важные временные характеристики внешней шины как длительность чтения / записи, длительность сигнала ALE и задержки сигналов чтения / записи могут быть запрограммированы, что позволяет адаптировать внешнюю шину под различные типы внешних устройств и памяти. Доступ к медленным устройствам возможен с помощью специального сигнала готовности READY#.
Приложения, которым требуется меньше 64 Кбайт адресного пространства для кода и / или данных, могут использовать несегментированные режимы.
В режиме несегментированной разрядности внешней шины адреса выводятся только 16 младших разрядов внутреннего 24-разрядного адреса, поэтому один из портов (P4) можно освободить для обычного ввода / вывода.
Режим несегментированной выборки кода позволяет сократить количество сохраняемых регистров на системном стеке для входа в процедуру обработки запроса на прерывание, тем самым освобождая место для большего объема данных. Оба режима работают независимо друг от друга.
Шина XBUS является внутренним представлением интерфейса внешней шины и позволяет получать доступ к специфическим периферийным устройствам, интегрированным в микроконтроллер. Обращение к такой периферии, с точки зрения внутренней архитектуры, выполняется как к внешним устройствам. Это дает возможность стандартизировать интерфейс для интегрированных периферийных устройств специального назначения.
2.3. Устройства внутренней периферии
В микроконтроллерах C167 периферийные устройства не интегрированы в ядро ЦПУ. Такая структура позволяет выполнять максимально возможное количество операций над данными и сигналами параллельно и производить новые модификации микроконтроллеров серий C167 и ST10x167 без внесения изменений в ядро. Каждый функциональный блок обрабатывает данные независимо и обменивается информацией с помощью специальных общих шин. Периферийные устройства управляются посредством регистров специального назначения SFR и ESFR. Эти регистры расположены в областях SFR-регистров (00’FE00h…00’FFFFh) и ESFR-регистров (00’F000h…00’F1FFh).
Состав периферийных устройств микроконтроллера C167 следующий:
- девять параллельных портов, (111 каналов ввода / вывода в сумме);
- два блока таймеров общего назначения GPT1 и GPT2;
- часы реального времени RTC;
- сторожевой таймер WDT;
- два 16-канальных блока захвата / сравнения CAPCOM1 и CAPCOM2;
- 4-канальный блок широтно-импульсной модуляции PWM;
- 24- или 16-канальный 10-разр. аналого-цифровой преобразователь ADC;
- асинхронный / синхронный ASC0 и синхронный SSC;
- до двух модулей CAN-интерфейса.
Каждое периферийное устройство использует свой набор регистров специального назначения, которые позволяют управлять работой этого устройства, а также временно хранить полученные результаты. В отличие от остальных регистров периферийных устройств, XRAM и регистры модулей CAN расположены вне областей SFR или ESFR, и подключены к шине XBUS. С точки зрения внутренней архитектуры, CAN является внешним устройством.
Интерфейсы периферийных устройств
Внутренние периферийные устройства используют два различных интерфейса: интерфейс с ЦПУ и интерфейс с внешними устройствами. Обмен с ЦПУ осуществляется через регистры специального назначения (SFR и / или ESFR) и запросы на прерывание. Регистры специального назначения используются для задания управляющей информации и вывода статуса или результатов работы. При одновременной попытке изменения содержимого регистров SFR и ESFR, программа имеет более высокий приоритет, чем периферийные устройства. Запросы прерывания от периферийных устройств информируют центральный процессор о возникновении определенных событий, например о завершении операции, возникновении ошибок и т.п. Интерфейс с внешними устройствами предоставляет возможность обмена через каналы параллельных портов ввода / вывода. Каналы автоматически переходят под управление периферийного устройства, если разрешается работа последнего.
Параллельные порты
Микроконтроллер C167 имеет до 111 каналов ввода / вывода, организованных в восемь параллельных портов ввода / вывода и один параллельный порт ввода. Все разряды портов, являются битадресуемыми и могут индивидуально программироваться на ввод или вывод соответствующими регистрами направления DPx, за исключением одного порта P5, работающего только на ввод. Установка канала порта на ввод переключает его в третье состояние. После сброса все порты установлены в режим ввода.
Выходные буфера портов ввода / вывода P2, P3, P4 (только для C167CS), P6, P7 и P8 могут быть поразрядно установлены либо в двухтактный режим (push / pull), либо в режим с открытым стоком (open drain).
Все каналы ввода / вывода имеют дополнительные функции:
- порт P0 выводит информацию шин адреса (A15…A0) и данных (D15…D0) при обращении к внешней памяти в режиме мультиплексной шины или только данные в режиме немультиплексной шины;
- порт P1 выводит младшую часть адреса (A15…A0) в режиме немультиплексной шины и предназначен для обработки сигналов блока захвата / сравнения CAPCOM2, а для микроконтроллера C167CS еще и в качестве аналоговых входов АЦП;
- порт P2 обрабатывает короткие запросы на прерывание EXxIN и обеспечивает ввод / вывод данных для блока CAPCOM1;
- порт P3 позволяет вводить и выводить сигналы таймеров, последовательных интерфейсов, тактового сигнала ЦПУ и управления шиной BHE# / WRH#;
- порт P4 выводит старшую часть адресной шины A23…A16 и обеспечивает прием и передачу данных CAN-модулей;
- порт P5 не имеет настройки каналов на вывод данных и используется для входных сигналов АЦП и управляющих сигналов таймеров;
- порт P6 формирует сигналы выборки (CS0#…CS4#) и обрабатывает захват шины (HOLD#, HLDA# и BREQ#) совместно с контроллером внешней шины EBC;
- порт P7 выводит сигналы блока PWM и обеспечивает интерфейс блока захвата / сравнения CAPCOM2 с внешними устройствами;
- порт P8 работает совместно с блоком захвата / сравнения CAPCOM2, а для микроконтроллера C167CS позволяет осуществлять ввод / вывод сигналов CAN-модулей.
При разрешении работы периферийного устройства, соответствующий канал ввода / вывода автоматически переходит под управление этого устройства. Некоторые устройства периферии, использующие канал порта для вывода данных, требуют программной установки направления ввода / вывода, некоторые устанавливают направление самостоятельно.
Цифровые каналы, которые не используются внутренней периферией, могут выполнять функцию цифровых каналов общего назначения.
Последовательные каналы
Последовательная связь с другими микроконтроллерами, процессорами или внешними периферийными устройствами обеспечивается двумя последовательными интерфейсами — асинхронным / синхронным последовательным каналом ASC0 и синхронным последовательным каналом SSC.
Интерфейс ASC0 поддерживает полнодуплексный асинхронный режим работы (скорость приема / передачи до 625Кбод) и полудуплексный синхронный режим (скорость приема / передачи до 2,5Мбит / с).
Интерфейс SSC работает в полнодуплексном и полудуплексном синхронных режимах (скорость приема / передачи до 5Мбит / с).
Каждый модуль последовательного интерфейса имеет собственный генератор тактового сигнала, который задает необходимую скорость обмена данными, в том числе стандартные скорости.
Для передачи, приема и детектирования ошибок отведено три прерывания для канала SSC и четыре прерывания для канала ASC0.
Модуль ASC0 использует для передачи и приема в асинхронном режиме 8- и 9-разрядные пакеты (frame), которые начинаются со стартового бита и заканчиваются одним или двумя стоповыми битами. Бит четности для ASC0 автоматически вычисляется при передаче и проверяется во время приема. Для обмена в мультипроцессорной системе используется механизм различения адресных байтов от байтов данных. В синхронном режиме канал ASC0 передает или принимает 8-разрядные пакеты синхронно с импульсами, вырабатываемыми внутренним тактовым генератором.
Модуль SSC передает или принимает данные пакетами от двух до шестнадцати разрядов синхронно с тактовыми импульсами, которые выводятся внутренним тактовым генератором в режиме ведущего (master). В режиме ведомого (slave) используются тактовые импульсы внешнего устройства. Обмен информацией начинается с самого младшего разряда данных или самого старшего в отличие от канала ASC0, который передает и принимает данные, начиная всегда с самого младшего разряда данных.
Для обеспечения надежной связи используется механизм детектирования ошибок. Детектирование ошибок позволяет выявлять пакеты данных с пропущенными стоповыми битами. Ошибка четности для ASC0, а также ошибка скорости для SSC автоматически детектируются во время работы, после чего формируется соответствующий запрос на прерывание. Ошибки переполнения для обоих модулей детектируются в случае, если последние принятые данные не были прочитаны из буфера до записи следующих пришедших данных.
Модули CAN-интерфейса
Микроконтроллер фирмы Infineon серии C167CS содержит в своем составе два модуля CAN-интерфейса. Серия C167CR этой фирмы, а также микроконтроллеры фирм Siemens и STMicroelectronics содержат по одному модулю. Интегрированные модули CAN-интерфейса передают и принимают сообщения в соответствии со спецификацией версии 2.0b, т.е. обеспечивается возможность передачи и приема сообщений одновременно со стандартным (11-разрядным) и расширенным (29-разрядным) идентификаторами. Оба режима используют маски для фильтрации принимаемых сообщений. Каждый из 15 объектов сообщений обоих модулей имеет собственный идентификатор и может обрабатывать данные размером до 8 байт включительно, причем независимо от остальных объектов сообщений.
Передаваемые сообщения помечены идентификатором, который в CAN-сети является уникальным. При передаче узлы сети получают сообщение, и каждый из них проверяет идентификатор. Если сообщение имеет отношение к данному узлу (не только простое совпадение, но и поразрядная проверка с использованием маски), то оно обрабатывается, в противном случае — игнорируется. CAN-контроллер может обрабатывать одновременно несколько сообщений с различными идентификаторами — до 15 (по числу объектов сообщений). Таким образом можно легко организовать несколько «виртуальных» каналов обмена информацией с различными устройствами.
CAN-контроллер обеспечивает работу в сети в тяжелых условиях (по стандарту ISO11898) в следующих случаях:
- любой из трех проводов шины оборван;
- любой провод закорочен на питание;
- любой провод закорочен на общий провод.
При обрыве двух проводов часть функций основной системы может быть реализована в каждой из подсистем, созданных обрывом.
Принятая в CAN-сети схема передачи сообщений обеспечивает широкие возможности при создании и модернизации систем, а также при подключении новых устройств. Новые устройства могут добавляться к сети без изменения уже существующих программных средств, если их подключение не приводит к превышению нагрузочной способности и максимальной длины шины. При этом новые сетевые устройства способны обмениваться информацией между собой, не нарушая работоспособность старой системы, если в протоколе обмена были использованы новые идентификаторы.
В CAN-сети существует возможность одновременной передачи сообщений сразу нескольким устройствам. Эта особенность позволяет передавать по ней широковещательные сообщения и сообщения для синхронизации.
CAN использует 6-ступенчатый механизм исправления ошибок:
- постоянный контроль передаваемой и принимаемой информации;
- использование согласующего бита;
- контроль служебной информации;
- контроль подтверждения приема;
- циклический контроль по избыточности CRC;
- автоматический повторный запрос.
Модули CAN имеют программируемую скорость обмена данными до 1 Мбод. Для этого используются два или четыре цифровых канала ввода / вывода порта P4 или P8 (см. главу «Встроенный CAN-контроллер»).
Блоки таймеров общего назначения
Блоки таймеров общего назначения GPT1 (T2, T3, T4) и GPT2 (T5, T6, CAPREL) — это многофункциональные структуры таймеров-счетчиков, которые могут использоваться для формирования временных интервалов, измерения длительности внешних импульсов, вывода импульсов и т.п.
В блоке GPT1 содержится три таймера с возможностью каскадирования и захвата / перезагрузки. Блок GPT2 состоит из двух таймеров и специального регистра для захвата / перезагрузки. Каждый таймер может работать независимо от остальных в различных режимах. Максимальное разрешение таймеров блока GPT1 составляет 400 нс, а таймеров блока GPT2 — 200 нс.
Предусмотрена возможность изменения направления счета (на увеличение и на уменьшение) каждого таймера как программно, так и аппаратно сигналом на соответствующем входе таймера TxEUD.
Таймеры обоих блоков могут быть сконфигурированы индивидуально в один из трех основных режимов работы — таймера, таймера, управляемого внешним сигналом или счетчика. В режиме обычного таймера и управляемого таймера входные импульсы формируются из тактовых импульсов ЦПУ при помощи предварительного делителя частоты.
В режиме счетчика входными импульсами таймера являются внешние импульсы на соответствующем входе TxIN. Измерение длительности внешнего импульса обеспечивается режимом управляемого таймера, в котором счет таймера разрешается этим внешним импульсом.
Таймеры T3 и T6 имеют по выходному триггеру (T3OTL и T6OTL ), который изменяет свое состояние при каждом переполнении таймера. Изменение состояния этих триггеров может выводиться через соответствующий канал порта P3 или использоваться для каскадирования с другими таймерами, чтобы получить 32-разрядный таймер или 33-разрядный счетчик.
Функции захвата и перезагрузки значений таймеров T3 и T6 управляются внешними сигналами или состоянием соответствующего триггера. Для обоих вариантов возможен выбор между фронтом, спадом или любым переходом.
Примечание: Для исключения разночтения (если не будет оговорено отдельно) фронтом сигнала будет называться переход сигнала с уровня лог.0 на уровень лог.1. Спадом сигнала будет называться переход с уровня лог.1 на уровень лог.0.
Часы реального времени
Только микроконтроллер C167CS содержит часы реального времени RTC. Блок RTC является независимым 48-разрядным таймером и используется:
- для отсчета текущей даты и времени;
- для периодического формирования запроса на прерывание;
- для измерения длительных интервалов времени.
Тактовый сигнал для часов RTC формируется непосредственно из входного тактового сигнала, поэтому счет продолжается даже в режиме максимального энергосбережения Power Down, в котором отключаются центральное процессорное устройство и вся внутренняя периферия.
Сторожевой таймер
Сторожевой таймер представляет собой специальный защитный механизм, который предотвращает неправильное функционирование микроконтроллера в течение длительного периода времени.
Сторожевой таймер всегда запущен после сброса и может быть запрещен только до выполнения инструкции конца инициализации EINIT. Программа должна быть составлена таким образом, чтобы обрабатывать сторожевой таймер до переполнения. В отсутствие обработки (при программном или аппаратном сбое) сторожевой таймер не будет перезагружаться специальной инструкцией SRVWDT и по истечении заданного времени переполнится, в результате чего произойдет аппаратный сброс микроконтроллера. При этом выходной сигнал сброса RSTOUT# будет также переведен на уровень лог.0, что приведет к сбросу подключенных к микроконтроллеру внешних устройств.
Сторожевой таймер представляет собой два каскадированных 8-разрядных таймера. Входным сигналом для сторожевого таймера является тактовый сигнал ЦПУ, частота которого поделена на 2, 4, 128 или 256. При каждой перезагрузке сторожевого таймера с помощью специальной инструкции SRVWDT происходит заполнение старшего 8-разрядного таймера заданным значением и обнуление младшего. Таким образом можно устанавливать временные интервалы срабатывания сторожевого таймера от 25,6 мкс до 838,9 мс.
Блоки захвата / сравнения
Два блока захвата / сравнения CAPCOM1 и CAPCOM2 обеспечивают управление временными последовательностями с помощью 32-х каналов с разрешением по времени сигналов 400 нс. Блоки захвата / сравнения CAPCOMx обычно используются для высокоскоростного формирования сигналов сложной формы, широтно-импульсной модуляции и регистрации моментов времени при возникновении определенных условий.
Каждый блок CAPCOMx состоит из двух 16-разрядных таймеров (T0 и T1 — CAPCOM1, T7 и T8 — CAPCOM2), причем каждый таймер имеет свой регистр перезагрузки TxREL. Таймеры блоков ведут счет только на увеличение.
Входным сигналом для таймеров может быть тактовый сигнал ЦПУ, частота которого уменьшена в задаваемое число раз, или сигнал переполнения таймера T6 блока GPT2. Это обеспечивает широкий диапазон возможных разрешений по времени и длительностей временных интервалов, формируемых каналами. Кроме того, таймеры захвата / сравнения T0 и T7 могут работать в режиме счетчиков внешних тактовых импульсов.
Каждый из блоков CAPCOM1 и CAPCOM2 включает в себя шестнадцать регистров захвата / сравнения (CC0…CC15 и CC16…CC31), которые могут быть запрограммированы для работы с одним из двух таймеров этого же блока. Каждый регистр захвата / сравнения ассоциирован с каналом порта, который используется как вход в режиме захвата или как выход в режиме сравнения.
Каналом захвата / сравнения является объединение при совместной работе регистра захвата / сравнения и ассоциированного с ним канала ввода / вывода. Канал захвата / сравнения, настроенный в режим захвата, будет сохранять текущее содержимое ассоциированного с ним таймера в свой регистр захвата / сравнения по приходу внешнего импульса (по фронту, по спаду или по любому переходу). Кроме того, будет сформирован запрос на прерывание. Если канал захвата / сравнения настроен на режим сравнения, то при совпадении значения регистра канала со значением ассоциированного с ним таймера будет выдаваться сигнал через соответствующий канал порта и / или выставляться запрос на прерывание. Каждый канал захвата / сравнения имеет отдельный вектор в таблице прерываний.
Блок широтно-импульсной модуляции
Четырехканальный блок широтно-импульсной модуляции PWM позволяет независимо формировать ШИМ-сигналы с разрешением 50 нс с выравниванием по фронту или по центру.
В режиме импульсных пачек (Burst Mode) выходные сигналы двух каналов ШИМ объединяются операцией логического И, а результат выдается на выход одного из каналов. В режиме одновибратора (Single Short Mode) выдаются одиночные импульсы. Каждый канал ШИМ управляется с помощью отдельного таймера и отдельных регистров сравнения и перезагрузки. Выходные сигналы блока ШИМ могут программно инвертироваться.
Блок аналого-цифрового преобразователя
Измерение аналоговых сигналов в микроконтроллере с архитектурой C167 осуществляется в блоке 10-разрядного аналого-цифрового преобразователя (АЦП) с 16-ю мультиплексируемыми входами (для C167CS — 24 входа) и цепью выборки и преобразования.
Блок АЦП использует метод последовательного приближения для преобразования напряжения в цифровой код. Время выборки (для зарядки входных внутренних конденсаторов) и время преобразования могут программироваться, давая возможность подстраиваться под характеристики подключенных внешних устройств. Минимальное время преобразования составляет 4,85 мкс.
Для защиты результата преобразования от перезаписи и детектирования перезаписи предусмотрены следующие механизмы:
- если результат последнего преобразования не был прочитан до завершения следующего преобразования, то будет сформирован запрос на прерывание;
- следующее преобразование может быть приостановлено до тех пор, пока результат текущего преобразования не будет прочитан.
Блок АЦП дает возможность преобразования в четырех различных режимах:
- режим однократного преобразования для одного выбранного канала;
- режим повторяющегося преобразования для одного выбранного канала;
- режим однократного преобразования для выбранной группы каналов;
- режим повторяющегося преобразования для выбранной группы каналов.
В режимах преобразования сигналов для группы каналов возможна вставка преобразования одного любого канала вне очереди.
Дополнительные возможности при работе с внутренней периферией
Контроллер PEC может быть использован для автоматической пересылки данных: результатов аналого-цифрового преобразования, принятых данных по последовательным интерфейсам, результатов измерения временных интервалов и пр. Пересылка по одному из восьми каналов PEC осуществляется без дополнительных затрат на прерывание в переделах нулевого сегмента и требует всего один машинных цикл.