Внешняя шина и прерывания
Адресное пространство
Контроллеры
семейства C166 основаны на “Von
Neumann” архитектуре с
несколькими внутренними
шинами для устранения узких
мест и имеют единое адресное
пространство для памяти
программ, памяти данных,
регистров и портов
ввода-вывода. Адресация кода и
данных происходит путем
сегментации и разбиения на
страницы адресного
пространства 16 Мбайт у С165 и С167
(256 Кбайт - 80C166 и до 4 Мбайт - С164):
64 Кбайт - сегменты кода и 16
Кбайт - страницы данных.
Дополнительно доступен
несегментированный режим с
адресным пространством 64
Кбайт. Во всем адресном
пространстве возможен доступ к
словам и байтам данных.
Для доступа к одной из страниц
памяти размером по 16 Кбайт используются
четыре 10 разрядных регистра Data
Page Pointers (указатели на
страницу данных). В регистрах DPP0-DPP3
после сброса выставляются
номера страниц от 0 до 3
соответственно. С помощью
указателя на страницу данных
16-разрядному адресу ставится в
соответствии 24-разрядный
физический адрес. Полный
физический адрес формируется
следующим образом: 14 младших
разрядов адреса повторяются в
14 младших разрядах физического
адреса, а 2 старших разряда
выбирают один из четырех
регистров DPP0-DPP3, содержащий
соответствующий номер
страницы, который и образует
старшие 10 разрядов физического
адреса.
Для идентификации номера
текущего кодового сегмента
служит Code Segment Pointer (CSP),
которому после сброса по
умолчанию присваивается
нулевое значение. Полный
физический адрес получается
путем склейки содержимого
данного регистра с регистром Instruction
Pointer (IP).
В качестве
иллюстрации к сказанному
рассмотрим организацию памяти
самого мощного из членов
семейства C167CS-32FM с
256 Кбайт
перепрограммируемой Flash-памяти
на кристалле, из них 64 Кбайт
расположено в сегменте 0, а
остальные - в сегменте с
номером 1. Величина 256 Кбайт
является пределом, до которого
на сегодняшний день внутренняя
шина памяти позволяет
осуществлять адресацию (128
Кбайт Flash-памяти - у C167CR-16FM и
C163-16FM, 64 Кбайт OTP-памяти - у
С164СI-8EM). Данная Flash-память
служит в основном для записи
программ: размер блока при
записи - 64 байт со временем
программирования блока 1 мс,
размер сектора при стирании - 32
Кбайт при более чем 1000 циклах
записи/стирания. Следует
отметить увеличение
производительности на 70% у C167CS
с Flash-памятью по сравнению с
C167CR. При этом выигрыш
складывается за счет следующих
факторов:
- увеличение
тактовой частоты до 25 МГц -
25%
- выборка
команд из встроенной Flash-памяти
без состояний ожидания - 25%
- выборка
32-разрядного
операционного кода (30%
команд) за 1цикл - 20%
Встроенное двухпортовое
ОЗУ IRAM имеет объем 3
Кбайт (1 или 2 Кбайт - у
остальных членов семейства)
для размещения банков
регистров GPR, системного стека
и хранения переменных и еще 1
Кбайт - для регистров
специальных функций SFR. Данное
значение также является
предельным, т.к. ввиду
архитектурных ограничений
ширина адресной шины IRAM не
может превышать 12 разрядов.
Кристалл C167CS располагает
существенно большим по
сравнению с C167CR объемом
расширенного ОЗУ данных XRAM
- 8 Кбайт, подключенного к
Х-шине. Это позволяет
минимизировать число
обращений к внешнему ОЗУ или
вовсе обойтись без него. Как
уже отмечалось, 16-разрядная
X-шина является внутренним
продолжением внешней
системной шины и служит для
подключения дополнительной
памяти, работающей без
состояний ожидания.
И, наконец, уникальный ресурс -
4 Кбайт XFlash-памяти, также
подключенной к Х-шине и
предназначенной в основном для
хранения коэффициентов с
функциями записи и чтения
байта/слова (время записи - 1мс
при возможности записи
страницы из 64 слов). Время
стирания слова составляет 2 мс,
а время стирания XFlash-памяти
целиком - 10 мс при более чем 105
циклах записи/стирания.
Конфигурирование внешней шины
Одним из
наиболее полезных свойств C166
является поддержка нескольких
режимов конфигурации, когда,
например, выборка кода и данных
из внешней памяти
осуществляется по 16-разрядной
демультиплексной шине с
нулевым ожиданием, а доступ к
медленной периферии (часы RTC) из
соображений экономии может
происходить по 8-разрядной шине
с 3 состояниями ожидания. В
первом случае шина управляется
регистром конфигурации BUSCON0, а
во втором случае - регистрами
конфигурации BUSCON1 и ADDRESEL1,
которые определяют режим шины
и адресный диапазон
соответственно.
В ряде
микроконтроллеров (C165 и C167)
присутствует до четырех
независимых дополнительных
регистров конфигурации
BUSCON1-BUSCON4, каждому из которых
соответствует свой внешний
вывод CS для соединения с входом
разрешения выборки кристалла.
Размер и начальный адрес
диапазона для каждого сигнала
CS1-CS4 задается в регистрах
ADDRSEL1-ADDRSEL4. При задании областей
действия сигналов CS необходимо
помнить, что начальный адрес
должен быть кратен размеру
блока. Например, для блока
размером 64 Кбайт, начальный
адрес должен быть равен 0x00000
или 0x10000 или 0x20000 и т.д.
Характеристики
системной шины для областей
памяти, не перекрываемых
данными четырьмя адресными
диапазонами, задаются в
регистре BUSCON0 и
устанавливаются аппаратно при
считывании линий порта 0 во
время сброса, т.е. сигнал CS0
используется для адресации
всех областей не определенных
сигналами CS1-CS4.Кроме того,
для экономии внешней логики
присутствуют программируемые
сигналы управления шиной. Это
означает, что при более чем
20-кратном выигрыше в
производительности проект с
С166 получается проще, чем для
8031. С166 содержит также
программируемые функции
арбитража шины HOLD/HOLDA/BREQ для
операций межпроцессорного
обмена.
Непосредственное
управление внешней шиной в
соответствии с содержимым
регистров конфигурации
осуществляет контроллер
внешней шины. В каждом
диапазоне временные параметры
циклов чтения-записи и режим
работы системной шины задаются
специальными битами в
регистрах конфигурации. Ширина
адресной шины может составлять
в зависимости от кристалла 16
(для несегментированного
режима), 18 (80C166), 22 (C164) и 24 (C165 и
С167) разряда. Ширина шины данных
может быть 8 или 16 разрядов, и
работа может вестись в
мультиплексном и
демультиплексном (MUX и NMUX)
режимах (у C161 и C164
предусмотрена только
мультиплексная внешняя шина).
Демультиплексный шинный
интерфейс оптимален при
высоких требованиях к времени
обращения к внешним ОЗУ и ПЗУ.
Как уже отмечалось, режимы
работы шины могут динамически
меняться в процессе выполнения
программы. Сравнение скорости
работы для различных
конфигураций шины при частоте
ЦПУ 20 МГц приведено в таблице
Тип шины |
Нет внешн. памяти |
16-разр. NMUX |
16-разр. MUX |
8-разр. NMUX |
8-разр. MUX |
Используемые порты |
нет |
Р0, Р1, Р4 |
Р1, Р4 |
Р0, Р1, Р4 |
Р1, Р4 |
Защелка адреса |
нет |
нет |
16-разр. |
нет |
8-разр |
Цикл шины 0/1/2 Wait States |
100/.../... |
100/150/200 |
150/200/250 |
100/150/200 |
150/200/250 |
Команда 1 Word @ 0/1/2 WS |
100/.../... |
100/150/200 |
150/200/250 |
200/300/400 |
300/400/500 |
Команда 2 Word @ 0/1/2 WS |
100/.../... |
200/300/400 |
300/400/500 |
400/600/800 |
600/800/1000 |
Выборка из EPROM @ 0/1/2 WS |
- |
70/120/170 |
70/120/170 |
70/120/170 |
70/120/170 |
Относительная скорость |
1 |
1,2 / 1,5 / 2 |
1,5 / 2 / 2,5 |
2 / 2,5 / 3 |
3 / 4,5 / 6 |
Следует
несколько слов сказать о
конфигурировании
микроконтроллеров семейства
С166 на момент сброса путем
считывании состояний линий
16-разрядного Порта 0. Данный
метод состоит в задании
содержимого регистров SYSCON
и BUSCON0 для считывания
первых команд из памяти. SYSCON -
это 16 разрядный побитно
адресуемый регистр
конфигурации, содержащий
следующие управляющие биты:
разрешение доступа к
внутренней Х-шине, разрешение и
мэпинг встроенного ПЗУ,
разрешение линии выходного
такта, разрешение сегментации
памяти и размер системного
стека. После сброса системы
загрузка программы в ОЗУ или Flash-память
может осуществляться по
последовательному порту с
помощью встроенного
аппаратного загрузчика (Bootstrap
Loader). Эта функция весьма
полезна для загрузки монитора
и отладки программ
пользователя.
Система прерываний
Разветвленная схема
прерываний C166 с 64 уровнями (16
уровней и на каждом уровне
группа из 4 прерываний)
обеспечивает гибкое и быстрое
задание приоритетов и
обслуживание запросов
прерываний. В контроллере
прерываний предусмотрены
аппаратные ловушки (Hardware-Traps) и
программные ловушки (Software-Traps),
позволяющие обрабатывать
ошибки, возникающие при
неверном исполнении команд,
нарушении границ стека, а также
отслеживать немаскируемое
прерывание NMI, программный и
аппаратный сброс. Приоритеты
прерываний от аппаратных и
программных ловушек самые
высокие.
Контроллер
прерываний обеспечивает малое
время отклика на запрос
прерывания: минимальное время
составляет 250 нс @20 МГц, а
максимальное - 600 нс. Чтобы
уменьшить время отклика при
выполнении сложных команд
умножения и деления,
занимающих 5 и 10 циклов
соответственно, также
предусмотрено прерывание.
Обработка прерываний
осуществляется в течение малых
временных интервалов. Это
очень важно для
высокоуровневых приложений,
таких как управление
приводами, когда решаются
задачи цифровой обработки
сигналов и весьма нежелательны
флуктуации входных и выходных
переменных. Таким образом,
достигается высокая
производительность в реальном
масштабе времени.
Механизм
обработки прерываний
работает следующим образом.
Для каждого прерывания имеется
собственный регистр
управления Interrupt Control Register (xxIC).
При установке одного или
нескольких флагов запроса
прерывания Interrupt Request (IR) в
регистрах управления xxIC
производится сравнение их
приоритетов с текущим
приоритетом выполняемой
программы, который содержится
в регистре состояния
процессора. После проверки
номера в группе в регистре
прерывания с наибольшим
номером уровня и группы
очищается флаг IR, и контроллер
приступает к обработке этого
прерывания. При этом в стеке
автоматически сохраняется
содержимое регистра состояния
процессора PSW, указателя команд
IP и в сегментированном режиме
указателя сегмента CSP и
загружаются новые значения
этих регистров согласно
процедуре обработки
прерывания.
Регистрация
внешних прерываний может
осуществляться в альтернативном
режиме по внешним входам,
например, по входам Capture. Кроме
того, имеется немаскируемое
прерывание NMI. Часть внешних
прерываний регистрируются
каждые 0,5 цикла, т.е. каждые 50 нс @ 20
МГц.
Прерывания |
C161 |
C163 |
C164 |
C165 |
C166 |
C167 |
От периферии |
21 |
12 |
32 |
28 |
32 |
55 |
Внешние |
11 |
12 |
13 |
12 |
19 |
36 |
Регистр. 0,5 цикла |
8 |
8 |
4 |
8 |
- |
8 |
Изменение
уровня приоритета прерывания
во время исполнения программы
является достаточно типичной
задачей для ряда приложений.
Например, уровень приоритета
может зависеть от значения
сигнала на внешнем входе. В
этом случае после проверки
состояния входа процедура
обслуживания прерывания
переключает уровень
прерывания на более низкий,
изменяя содержимое регистра
ILVL. После понижения уровня
выполняемого прерывания могут
поступить запросы на
прерывание с более высоким
приоритетом. Такая ситуация
может привести к определенным
проблемам.
Пусть, например, выполняется
прерывание A на уровне 10 и
поступает запрос от прерывания
B с уровнем 12, которое и
поступает на выполнение. Если
теперь уровень прерывания B
будет снижен до значения
меньшего, чем 10, прерывание A не
сможет стать активным пока не
закончится выполнение B.
Возможен еще более плохой
вариант, если прерывание B
снизит свой уровень до
значения 5, и теперь даже
прерывание C с уровнем 7 сможет
его прервать. Такие ситуации
удлиняют время исполнения
прерывания A, что не
соответствует его новому
приоритету.
Поэтому для понижения уровня
приоритета текущего
прерывания всегда следует
закончить текущую задачу, и
начать новую с более низким
приоритетом. Это можно
осуществить при установке бита
IR в каком-либо
незадействованном регистре
управления xxIC.
Контроллер
периферийных событий - Peripheral
Events Controller (PEC)
освобождает ЦПУ от простых, но
частых обслуживаний
прерываний, осуществляя
перенос данных в любую позицию
нулевого сегмента без
переключения задачи. Процесс
переноса данных практически не
затрагивает работу
контроллера и не зависит от
выполняемой программы -
контроллер только
приостанавливает выполнение
текущей программы на один цикл
(100 нс), даже не сохраняя свое
состояние в стеке. Время
отклика контроллера для
обслуживания PEC составляет от
150 до 450 нс при цикле ЦПУ 100 нс.
Для контроллера PEC отведены два
верхних уровня приоритета, что
позволяет обслуживать
одновременно 8 каналов PEC.
Каждый канал управляется
собственным регистром PEC,
который позволяет
программировать передачу
байта или слова данных с
инкрементом адреса или без
него с однократным,
многократным или бесконечным
числом пересылок. Обработка
прерываний контроллером PEC
выполняется в соответствии с
приведенной диаграммой.
Генерация системного такта
Временной
дискретой для ядра C166 является
период такта, равный 50 нс при
тактовой частоте 20 МГц. Большая
часть команд C166 исполняются за
два такта, т.е. за 100 нс. Для
достижения номинального
быстродействия внутренний
такт должен иметь скважность
50%, что не всегда может быть
получено при тактировании от
кварцевого резонатора. При
несовпадении длительностей
высокого и низкого уровня
тактового сигнала временная
дискрета определяется по
длительности самого короткого
уровня, который должен быть не
меньше 50 нс. Это означает, что
при асимметрии такта
понижается максимально
возможная тактовая частота.
Например, при длительности
высокого уровня 50 нс, а низкого
- 60 нс рабочая частота равна 18
МГц. Кроме требования
симметричности времена
переключения уровней
тактового сигнала должны быть
не более 5 нс.
Поэтому для
генерации полностью
симметричного системного
такта в состав некоторых
микроконтроллеров семейства
C166 входит встроенный делитель
входной частоты на 2. В этом
случае требуется кварцевый
генератор, работающий на
частоте 40 МГц. Члены семейства,
имеющие в маркировке индекс 'W'
не содержат делителя и
тактируются непосредственно.
Без делителя сегодня
выпускаются только кристаллы
8xC166W, с которыми рекомендуется
работать на тактовой частоте 18
МГц.
В новых
кристаллах C163, C164CI, C167
присутствует встроенное
устройство PLL, которое
преобразует входную частоту во
внутренний системный такт с
коэффициентом умножения 0.5, 1,
1.5, 2, 2.5, 3, 4 и 5. Например, при
использовании кварцевого
генератора 5 МГц для достижения
обычных 20 МГц на встроенном
устройстве PLL осуществляется
умножение входной частоты на 4.
Задание режима PLL
осуществляется на фазе сброса
при подключении резистора
между входом P0L и нулем. При
потере внешнего такта
генерируется прерывание, и PLL
продолжает работать на частоте
5...10 МГц. Внутренний такт
отслеживается PLL также в
режимах прямого тактирования и
деления входной частоты на 2.
P0H.7 |
P0H.6 |
P0H.5 |
Коэффиц.умножения |
Фактор PLL |
Делитель |
Комментарий |
1 |
1 |
1 |
4 |
4 |
OFF |
по умолчанию |
1 |
0 |
1 |
2 |
2 |
OFF |
|
1 |
1 |
0 |
3 |
3 |
OFF |
|
1 |
0 |
0 |
5 |
5 |
OFF |
|
0 |
1 |
1 |
W |
OFF |
OFF |
прямой такт |
0 |
0 |
1 |
0.5 |
OFF |
ON |
через делитель |
0 |
1 |
0 |
1.5 |
3 |
ON |
|
0 |
0 |
0 |
2.5 |
5 |
ON |
|
Управление энергопотреблением
В новых
кристаллах C161RI, C164CI, C167CS
оптимизирована система
тактирования и введен режим
работы с пониженным
потреблением при напряжении 3
В. Генерация тактового сигнала
внутренним осциллятором
начинается при напряжении
питания 3 В в диапазоне
изменения частоты от 3,5 до 16
МГц. Диапазон изменения
частоты внешнего осциллятора
составляет 1 - 40 МГц. Существует
три основных режима управления
потреблением:
- активный
(Active);
- покоя (Idle)
- ЦПУ останавливается, но
все периферийные модули
продолжают работу, выход
из режима Idle
осуществляется по сигналу
сброс или по прерыванию;
- отключения
питания (Power Down) -
останавливается и ЦПУ и
периферийные модули, выход
из этого режима
осуществляется только по
сбросу.
Для
отключения незадействованных
периферийных устройств в
последних кристаллах
семейства C166 выделены три
основных группы периферии с
раздельным тактированием:
- Интерфейсы:
ASC0, SSC, быстрые внешние
прерывания (активны
всегда)
- PER: вся
остальная периферия,
контроллер прерываний,
сторожевой таймер
- Часы
реального времени RTC с
циклическим прерыванием
Wake Up
|
Active Mode |
Idle Mode |
PD Mode |
CPU |
on |
off |
off |
Clock "PER" |
on/off |
on/off |
off |
Slow Down |
on/off |
on/off |
on/off |
Отключение
такта от группы PER позволяет
снизить потребление от
периферии в активном режиме и
режиме покоя, что хорошо видно
из приводимой диаграммы.
В новых
кристаллах также введен режим
замедления Slow Down, в котором
достигается существенное
сокращение потребления за счет
понижения частоты на
кристалле. Снижение тактовой
частоты происходит на делителе
Slow Down Devider (SDD) с программируемым
коэффициентом деления 1...32
вплоть до значения 0.5 МГц =16 МГц
/ 32. В этом случае для
сохранения синхронизации при
обмене по последовательному
каналу должна быть подобрана
соответствующая частота. Кроме
того, в режиме Slow Down не работает
PLL, и осциллятор сторожевого
таймера не доступен.
Часы
реального времени Real Time Clock
(RTC) осуществляют подсчет числа
тактов, определяемых внешней
частотой и программируемым
делителем, а также измерение
времени в режиме Power Down. Регистр
RTC и программируемый делитель
при соединении образуют
48-разрядный таймер с периодом
114 лет при тактовой частоте 20
МГц.
С помощью RTC
генерируется цикличный во
времени сигнал прерывания Wake Up,
временной цикл которого
настраивается с помощью регистра
перезагрузки (Trim Register). Тем самым
достигается чередование режимов
Active & Idle - цикличное пробуждение
из состояния покоя к активному
режиму через программируемое
прерывание RTC от узла XPER3.
Пробуждение происходит также от
источников прерываний ASC, SSC, CAN,
EXIN. В режиме покоя вся
незадействованная периферия
отключена.
|
Частота осциллятора, МГц |
Время между прерываниями |
Временная база, с |
Мин., мс |
Макс., с |
Внешний или внутренний генератор |
4 |
0.064 |
4,1 |
1 |
5 |
0.052 |
3,35 |
1 |
8 |
0.032 |
2,0 |
1 |
10 |
0.026 |
1,6 |
1 |
12 |
0.022 |
1,3 |
1 |
Внешний генератор |
16 |
0.016 |
1,0 |
1 |
20 |
0.013 |
0,8 |
0.1 |
24 |
0.011 |
0,6 |
0.1 |
25 |
0.011 |
0,6 |
0.1 |
|