Новая архитектура среднего семейства
контроллеров Microchip
Многие годы компания Microchip с успехом выпускает 8-разрядные PIC-контроллеры и продолжает вкладывать средства в их развитие для поддержания широкой номенклатуры продукции, которая удовлетворит потребности нынешних и будущих клиентов. Новая усовершенствованная архитектура среднего семейства контроллеров PIC12 и PIC16 взяла все Илья АФАНАСЬЕВ самое лучшее от существующей архитектуры и получила дополнительные
[email protected] возможности.
Таблица 1. Новые команды
Новые команды Мнемоника Описание
Новые арифметические команды и команды сдвигов ADDWFC Сложить значение рабочего регистра W с регистром Р с учетом флага переноса
SUBWFB Вычесть из регистра Р значение рабочего регистра W с учетом флага заема
LSLF Логический сдвиг влево
LSRF Логический сдвиг вправо
ASRF Арифметический сдвиг вправо
Одноцикловое переключение страниц и банков памяти MOVLP Загрузить константу в регистр Р^АТН
MOVLB Загрузить константу в регистр BSR
Относительный переход BRA Относительный переход (знаковый)
BRW Переход PC+W (беззнаковый)
Вызов подпрограммы с адресом в W CALLW Вызов РаАТН^
Программный сброс RESET Сброс программы и периферии
Дополнительные команды косвенной адресации ADDFSR Добавить константу к FSR (знаковая команда)
MOVIW Копировать косвенно в W
MOVWI Копировать W по указателю
Архитектура 8-битных Р1С-микрокон-троллеров среднего семейства PIC12 и PIC16 имеет:
• увеличенный объем памяти программ и данных (до 32 кбайт инструкций и более 4 кбайт памяти данных);
• улучшенный аппаратный стек (увеличен до 16 уровней, программный доступ);
• модернизированный метод переключения между страницами памяти и банками данных;
• дополнительные источники сброса;
• 14 дополнительных программных инструкций, включая команды для более эффективной работы С-компилятора;
• расширенную периферию;
• уменьшенное время входа в прерывание;
• увеличенную тактовую частоту ядра микроконтроллера.
Ядро контроллеров среднего семейства новой улучшенной архитектуры
Новые команды
Микроконтроллеры нового семейства в дополнение к 35 командам существующего среднего семейства получили 14 новых инструкций. Новые команды (табл. 1) позволяют получить более быстрый и более компактный код программы и предоставляют эффективный доступ к данным.
К прежним арифметическим командам сложения и вычитания добавились команды сложения и вычитания с учетом флага переноса/ заема. Данные команды улучшают эффектив-
ность кода для многобайтной арифметики. К командам циклического сдвига добавились команды логического и арифметического сдвигов. Конечно же, логический сдвиг можно сделать через циклический сдвиг, но для этого понадобятся дополнительные команды.
В новых контроллерах с улучшенной архитектурой среднего семейства увеличено адресуемое пространство памяти программ и ОЗУ. Теперь не нужно устанавливать биты RP0 и RP1 в регистре STATUS для того, чтобы переключить банк памяти, достаточно загрузить адрес в регистр переключения банков BSR. Аналогично и с переключением страниц памяти: добавлена команда загрузки регистра PCLATH.
Новые команды позволяют использовать меньше команд для переключения банков ОЗУ и страниц памяти программ. Для обеспечения совместимости кода между контроллерами нового поколения и старой архитектуры лучше использовать специальные макросы ассемблера PAGESEL и BANKSEL (табл. 2), которые в зависимости от выбранного контроллера будут соответствующим образом интерпретированы компилятором.
Основное достоинство применения команд относительных переходов — это уменьшение размера кода, связанное с отсутствием необходимости отслеживания переходов через границы страниц памяти программ. Иногда, на старом ядре, простой цикл может
Таблица 2. Примеры кода переключения банков ОЗУ и страниц памяти программ
Ядро Mid-Range Ядро Enhanced Mid-Range Пример совместимого кода
Вызов функции по любому адресу памяти программ
movlw high My_Function movwf PCLATH call My_Function movlp high My_Function call My_Function PAGESEL My_Function call My_Function
Доступ к произвольной переменной (с переключением банков)
bsf STATUS, RP0 bcf STATUS, RP1 addwf Var! movlb HIGH Var1 BANKSEL Varl
addwf Var! addwf Var!
Внимательный читатель может задать вопрос: «А почему нет команды арифметического сдвига влево?» Ответ: арифметический сдвиг влево эквивалентен логическому сдвигу влево. Для арифметического сдвига влево вы можете использовать псевдокоманду ассемблера ASLF.
перестать работать, если сдвинуть программу так, что цикл попадет на границу страницы памяти программ. Таких сюрпризов можно избежать при использовании команды относительных переходов.
Многие знакомы и с организацией вычисляемых переходов на стандартном ядре MidRange, где нужно либо усложнять код, либо следить, чтобы таблицы данных не попали на границы блоков в 256 байт. Команда BRW осуществляет переход относительно текущего значения счетчика команд на беззнаковое значение, находящееся в рабочем регистре W. С этой командой операции табличного чтения становятся намного проще:
constants
brw
retlw DATA1 retlw DATA2 retlw DATA3 retlw DATA4 my_function
код программы... movlw DATA_INDEX call constants
константа DATAх в W регистре
Команда BRA аналогична команде BRW, только осуществляет переход относительно текущего значения счетчика команд на 9-битную константу с учетом знака (переход в пределах от -256 до +255 команд).
С командой CALLW становится доступен вызов процедуры по адресу, указанному в регистре W, что может пригодиться для быстрого поиска по таблицам, организации машины состояний и вызова функций по указателю.
Следующие три команды расширяют возможности косвенной адресации.
Команда ADDFSR производит знаковое сложение константы с указателем FSR, значение смещения должно лежать в диапазоне от -32 до +31. Команды MOVIW и MOVWI более сложные. Обе эти команды могут выполняться с пре- и постинкрементом и декрементом указателя, а также со смещением указателя.
Рассмотрим более подробно синтаксис команд MOVWI (команда MOVIW имеет тот же синтаксис, только работает в обратном порядке: пересылает данные из косвенно адресуемого регистра в рабочий регистр W):
• MOVWI 0[INDF0] — перенос значения из W в косвенно адресуемый регистр. Эта операция может быть выполнена также старыми командами MOVWF INDF0 или MOVF INDF0,W. Нет никаких преимуществ у того или иного способа. Команда MOVWI 0[INDF0] не меняет значение указателя.
• MOVWI + + INDF0 — перенос значения из W в косвенно адресуемый регистр с преинкрементом. Если перед INDF0 или INDF1 написать ++, то данная команда произведет инкремент указателя FSR до того, как значение из регистра W будет помещено в косвенно адресуемый регистр. Подобные команды позволяют обновить указатель до записи или чтения.
• MOVWI INDF0++ — перенос значения из W в косвенно адресуемый регистр с постинкрементом. Аналогичны и команды с преи постинкрементом: MOVWI-- INDF0 и MOVWI INDF0--. Комбинация преи постдекремента — это быстрый способ программного построения стека или циклических буферов данных.
• MOVWI k [INDF0] — перенос значения из W в косвенно адресуемый регистр со смещением относительно указателя. Можно обратиться к регистру со смещением относительно указателя. Данная команда не изменяет значение самого указателя, она востребована для загрузки элемента структуры в рабочий регистр W или получения доступа к регистрам специального назначения в различных банках. Значение смещения может лежать в диапазоне от -32 до +31 относительно адреса, загруженного в указатель FSR.
Память данных контроллеров
В новых контроллерах с улучшенной архитектурой среднего семейства значительно расширена память данных. Теперь они имеют 32 банка памяти общим размером до 4 кбайт. Как и прежде, память данных разделена на регистры специального назначения (Special Function Registers, SFR), которые служат для настройки прерываний, периферии
Таблица 3. Первые 12 регистров специальных функций каждого банка
Адрес Регистр функция
0x00 INDF0 Регистр косвенной адресации 0
New! 0x01 INDF1 Регистр косвенной адресации 1
0x02 PCL Счетчик команд (младший байт)
0x03 STATUS Регистр статуса
New! 0x04 FSR0 Low Указатель косвенной адресации 0 (младший байт)
New! 0x05 FSR0 High Указатель косвенной адресации 0 (старший байт)
New! 0x06 FSR1 Low Указатель косвенной адресации 1 (младший байт)
New! 0x07 FSR1 High Указатель косвенной адресации 1 (старший байт)
New! 0x08 BSR Регистр выбора банка
New! 0x09 WREG Рабочий регистр
0x0A PCLATH Защелка счетчика команд (старший байт)
0x0B INTCON Регистр контроля прерываний
и пр., и регистры общего назначения (General Purpose Registers, GPR), которые служат для хранения пользовательских данных.
Регистры GPR банков памяти с 0 по 30 могут использоваться по усмотрению программиста, банк 31 служит для специальных функций. Назначение этого банка рассмотрим позднее.
В каждом банке памяти отображаются 12 общих регистров специального назначения (табл. 3), таким образом, можно получить доступ к этим регистрам из любого банка данных. Еще одна особенность новых контроллеров в том, что выделенные в таблице 3 регистры автоматически сохраняются при возникновении любого прерывания. Сохраненные при входе в прерывание регистры доступны программисту в 31-м банке.
Память контроллеров.
Новые свойства указателя FSR
В новых контроллерах с улучшенной архитектурой среднего семейства теперь два регистра FSR (File Select Register), которые к тому же стали 16-битными. Теперь через регистры указателей FSR программист получает доступ ко всей памяти микроконтроллера — памяти данных и памяти программ. Доступ к константам в памяти программ абсолютно такой же, как и к регистрам в ОЗУ: как только вы загрузили указатель, следующей инструкцией вы можете считать значение из памяти программ.
Интересная новая возможность контроллеров — это линейная адресация всех регистров общего назначения. Как видно на рис. 1, регистры общего назначения GPR имеют адреса 20h-6Fh, A0h-EFh, 120h-16Fh и т. д. Такое «дырчатое» распределение регистров общего назначения неудобно для организации больших массивов данных и их адресации. В новых контроллерах добавлен режим линейной адресации памяти (рис. 2), позволяющий при установке указателя FSR на адреса 2000h-29AFh адресовать всю область регистров общего назначения без «дыр». Новый режим адресации позволяет упростить создание больших массивов в памяти данных.
ADDR0 БанкО Банк 1 Банк 2 Банк 3 Банк 4 Банк 311
12 общих регистров SFR
ADDR11 (доступны из любого банка)
ADDR 12 SFRs SFRs SFRs SFRs SFRs ъ а. 1-
ADDR31 20 20 20 20 20
ADDR~32~ G X <и
GPR GPR GPR GPR GPR ) а ф л т
80 байт 80 байт 80 байт 80 байт 80 байт V \D 1
^
ADDR 111 О
ADDR М2 16 регистров общего назначения
ADDR 127
Рис. 1. Память данных нового ядра PIC16
0x0000 FSR адреса OxOFFF SFRs & GPRs 0x0000 BSR + адресные регистры OxOFFF
0x1000 0x1FFF Зарезерви ровано 4-° «А.
0x2000 0x29FF Линейная область обращения к GPR
ОхЗАОО 0x7FFF Зарезерви ровано
0x8000 FSR адреса OxFFFF Память программ 0x0000 Область памяти программ 0x7FFF
7 FSRnH 0 7 FSRnL 0
|о|о|1| I I I I I I I I I I I I I I
V і
Выбор Y Г 0x2000
расположения 0x020 БанкО 0x06F
ОхОАО
Банк 1
OxOEF
0x020
Банк 2 0x16F
9
•
•
0xF20
Банк 30
lox29AF 0xF6F
7 FSRnH 0 7 FSRnL 0
1 II II II II II II II II
J
Выбор расположения
С 0x8000 0x0000
Память
программ
(младшие
8 бит)
^ OxFFFF 0x7FFF
Рис. 2. Организация памяти новых контроллеров. Области адресации памяти данных, программ и доступ при косвенной адресации
Рис. 3. Линейное отображение регистров общего назначения
Рис. 4. Адресация памяти программ через регистры косвенной адресации
Если старший бит регистра FSR установлен в «1», то это означает, что регистр FSR будет указывать на область памяти программ (рис. 3, 4).
Стек контроллеров улучшенной архитектуры
Контроллеры среднего семейства PIC16 (табл. 4) имеют кольцевой 8-уровневый стек.
Если происходит переполнение стека, то происходит и «затирание» самого первого адреса вхождения. В новых контроллерах стек стал больше: он способен хранить 16 адресов. Кроме этого, контроллеры получили возможность сброса при переполнении или опустошении стека. Более того, стек в новой архитектуре доступен программисту через регистры, находящиеся в 31-м банке, — SPTR (указатель стека); текущее значение стека, он состоит из двух байтов — TOSH и TOSL. Программный доступ к стеку может пригодиться при создании операционных систем реального времени или безопасной отладке программ.
Для внутрисхемной отладки кода в старых контроллерах резервируется один уровень стека, в то время как новое ядро имеет отдельный стек для отладки. Это позволяет использовать весь стек в режиме отладки кода, при этом, когда включен режим отладки, сброс по переполнению стека становится точкой останова кода, что позволяет определить причину переполнения стека.
Результаты улучшений
Новая архитектура контроллеров позволяет снизить размер кода на 40% и увеличить производительность микроконтроллера на 50% за счет расширенного набора команд, новых возможностей и увеличенной тактовой частоты.
На рис. 5, 6 приведены сравнительные данные по уменьшению числа циклов и снижению размера кода, которые необходимы для реализации различных алгоритмов.
Тестирование результатов улучшения производилось на следующих задачах:
• RAM to RAM copy: копирование строки между двумя областями GPR-регистров. Данная задача эквивалентна команде strcopy() в Си. С использованием двух регистров косвенной адресации FSR, новых команд и улучшения в работе косвенной адресации данная задача по копированию данных выполняется быстрее и занимает меньший размер памяти программ.
Таблица 4. Сравнение контроллеров среднего семейства (Mid-Range) и улучшенного среднего семейства (Enhanced Mid-Range)
Ядро Mid-Range Enhanced Mid-Range
Длина инструкций, бит 14 14
Адресуемая память программ З кбит инструкций 32 кбит инструкций
Максимальный объем ОЗУ и регистров, байт 446 >4096
Число инструкций 35 49
Аппаратный стек 8-уровневый 16-уровневый с дополнительными возможностями
Сохранение контекста Программно Аппаратно
I □ РІС 16 ■ Новое ядро I
100 -гг 90—
в | 80 —
0 Р
1 Ї 70 —
0 *
§ Ї 60— х ’S
1 I 50 — ° і
! І- 40 —
0 о
ё I 30 — 8 £
1 5 20 —
О
Б ю —
11
25 char RAM 25 char Flash to RAM copy to RAM copy
32 bit Addition
Serial Com ms ISR
XTEA
Encryption
HMAC-SHA-
256
100 90 4—
>x _n
5. °-
j >4
80 — 70 —
j- ^ X CL
о “
60
Ц 50 it 5- r
S\
'З і
О !
40
ЗО
20
10
I □ PIC16 □ Новое ядро I
25 char RAM 25 char Flash to RAM copy to RAM copy
32 bit Addition
Serial Com ms ISR
XTEA
Encryption
HMAC-S HA-256
Рис. 5. Сравнение быстродействия контроллеров среднего семейства прежней и улучшенной архитектуры
Рис. 6. Сравнение размера кода для контроллеров среднего семейства прежней и улучшенной архитектуры
• Flash to RAM copy. Этот тест аналогичен предыдущему — осуществляет копирование строки между Flash памятью программ и регистрами общего назначения GPR. Подобная задача часто используется для чтения констант, сообщений и других данных из памяти программ микроконтроллера. Примечательно то, что в новых контроллерах функция копирования данных из Flash памяти программ и ОЗУ будет иметь одинаковый программный код за счет возможности адресации данных и памяти программ с помощью регистров косвенной адресации, что позволит еще больше уменьшить размер программы.
• 32 bit addition: сложение 32-разрядных чисел. Улучшенное ядро с новыми командами позволяет существенно сократить размер кода и ускорить арифметические операции с многобайтными данными.
• Serial ISR: подпрограмма обработки данных, получаемых с последовательного порта в прерываниях. Подпрограмма копирует данные из регистра UART в кольцевой буфер. Новые команды работы с регистрами косвенной адресации, а также автоматическое сохранение контекста при входе в прерывание позволяют ускорить работу и сократить размер подобных подпрограмм.
• Алгоритм шифрования XTEA. Это простой и быстрый алгоритм, позволяющий осуществлять шифрацию и дешифрацию данных с помощью секретного пароля.
Таблица 5. Номенклатура новых микроконтроллеров
Наимено- вание Память Внутренний генератор АЦП, каналов MSSP T R A U ш ЖКИ, сегментов ипит, В Число портов Число выводов
Flash, кбайт RAM, байт EEPROM, байт Cl (Л о
PIC12F1822* 3,5 ї2З 256 4 ї ї ї - 8
PIC16F1823* 3,5 ї2З 256 8 ї ї ї - ї2 ї4
PIC16F1826* 3,5 256 256 12 ї ї ї - ї6 ї8
PIC16F1827* 7 384 256 12 ї - ї6 ї8
PIC16F1933* 7 256 256 11 ї ї ї 60 25 28
PIC16F1934 7 256 256 32 МГц, 14 ї ї ї 96 ї ,8-5,5 36 44
PIC16F1936 ї4 5ї2 256 32 кГц 11 ї ї ї 60 25 28
PIC16F1937 ї4 5ї2 256 14 ї ї ї 96 36 44
PIC16F1938* ї4 ї024 256 11 ї ї ї 60 25 28
PIC16F1939* 28 ї024 256 14 ї ї ї 96 36 44
PIC16F1946* ї4 5ї2 256 17 2 2 2 ї84 53 64
PIC16F1948* 28 ї024 256 17 2 2 2 ї84 53 64
Примечание. * Контроллеры находятся на стадии подготовки к массовому производству.
• Алгоритм HMAC-SHA-256. Это алгоритм хеширования, который не осуществляет кодирование или декодирование данных, но проводит аутентификацию (подтверждение подлинности) и подтверждение целост-ности (подтверждение того, что сообщение не было изменено). Оба алгоритма используют ключи, константы, 32- и 64-битную арифметику, а новое ядро с улучшенной системой команд позволяет увеличить быстродействие и снизить требуемый размер кода.
Периферия
Новые контроллеры содержат множество
разнообразных периферийных модулей:
• Контроллер ЖК-индикаторов (в контроллерах PIC16F19xx).
• Модуль емкостных датчиков (CSM, Capacitive Sensing Module) поможет в построении сенсорных клавиатур.
• 10-разрядный АЦП.
• Источник опорного напряжения с программируемыми значениями напряжения 1,024, 2,048 и 4,096 В может работать совместно с модулем АЦП, компараторами и 5-разрядным ЦАП.
• Таймеры: четыре 8- и один 16-разрядный, с возможностью подключения кварца 32 кГц и построения микропотребляющих часов реального времени.
• Модули захвата, сравнения и ШИМ (до трех стандартных и до двух расширенных, со специальными режимами управления электродвигателями).
• Модуль синхронного последовательного порта (MSSP): поддерживаются интерфейсы SPI, I2C, совместим с интерфейсами SMBUS и PMBUS.
• Модуль универсального синхронного/ асинхронного приемника-передатчика (USART): поддерживаются интерфейсы RS-232, RS-485 и LIN.
• RS-триггер.
• Два аналоговых компаратора.
Номенклатура контроллеров среднего семейства новой улучшенной архитектуры
Компания Microchip начала производство нескольких микроконтроллеров среднего семейства с улучшенной архитектурой. Контроллеры доступны для заказа образцов и серийных партий (табл. 5). Все контроллеры имеют максимальную тактовую частоту 32 МГц, при этом такую частоту можно получить от встроенного программируемого RC-генератора.
Контроллеры Р1С№1ххх выполнены по микропотребляющей технологии XLP и имеют ядро с максимальным напряжением питания 3,6 В, поэтому микроконтроллеры LF-версий имеют диапазон питания 1,8—3,6 В, а контроллеры F-версий содержат встроенный стабилизатор питания ядра и могут работать в расширенном диапазоне питаний от 1,8 до 5,5 В.
Средства разработки для новых контроллеров
Для новых микроконтроллеров созданы как бесплатная среда разработки MPLAB IDE, так и внутрисхемные программаторы-отладчики PICkit3, ICD-3 и REAL ICE.
Поддержку новых контроллеров осуществляют несколько производителей программного обеспечения: компании Hi-Tech, CCS и Byte Craft имеют Си-компиляторы для новых PIC16F1xxx, а компания microEngineering Labs использует новое ядро в компиляторе PICBASIC PRO. ■
Литература
1. www.microchip.com
2. PIC16F193X/LF193X Data Sheet.
3. PIC1xF1xxx Software Migration.