Разрядные микроконтроллеры Microchip
Рис. 4.14. 32-разрядный микроконтроллер Microchip |
В ноябре 2007 года компания Microchip выпустила первый 32-разрядный микроконтроллер PIC32 (рис. 4.14), который лицензировался компанией MIPS Technologies Inc. Архитектуры MIPS используют такие компании как AMD, Broadcom, Infeneon, Realtek, Sharp, Sony, NXP, Toshiba. PIC32 это первый однокристальный процессор с архитектурой MIPS имеющий интегрированную флэш-память и полный набор микроконтроллерной периферии. Критерии выбора архитектуры MIPS32 были следующими:
- размер кристалла и стоимость конечного изделия;
- потребление энергии на МГц тактовой частоты;
- производительность на МГц тактовой частоты;
- возможность расширения архитектуры;
- простота интеграции периферии;
- время реакции на прерывание.
Семейство PIC32 представлено 7 контроллерами с объемом флэш-памяти от 32 до 512 кБ, объемом SRAM от 8 до 32 кБ в 64- и 100-выводных корпусах (табл. 4.2)
Архитектура. Семейство PIC32MX основано на синтезируемом ядре MIPS32 M4K™, которое позиционируется разработчиком ядра для использования в микроконтроллерах с низким потреблением энергии.
Таблица 4.2
Наименование | Частота, МГц | Flash, КБ | ОЗУ, КБ | Модуль пред. выборки | DMA, каналов | Трассировка | Число выводов |
PIC32MX300F032H | - | - | - | ||||
PIC32MX320F064H | Да | - | - | ||||
PIC32MX320F128H | Да | - | - | ||||
PIC32MX340F256H | Да | - | |||||
PIC32MX320F128L | Да | - | - | ||||
PIC32MX360F256L | Да | Да | |||||
PIC32MX360F512L | Да | да |
Основные особенности ядра MIPS32 M4K™ синтезированного для применения в PIC32MX:
- пятиступенчатый конвейер, производительность до 1.5 DMIPS/МГц;
- тактовая частота до 72 МГц;
- программируемый кэш, позволяющий увеличить частоту доступа к флэш-памяти до максимальной частоты ядра;
- набор 32-битных инструкций MIPS32® release 2;
- дополнительный набор 16-битных инструкций MIPS16e™, позволяющий снизить объем исполняемого кода;
- аппаратный умножитель и делитель, оптимизированные по скорости выполнения операции;
- векторный приоритетный контроллер прерываний;
- EJTAG порт, предназначенный для граничного сканирования, программирования флэш-памяти и отладки приложения с модулем внутрисхемной трассировки.
Архитектура MIPS32® это архитектура типа «чтение-модификация-запись», то есть АЛУ ядра может обрабатывать только данные, находящиеся в регистрах общего назначения, а для загрузки и выгрузки данных предназначены специальные инструкции.
В качестве регистров используется регистровый банк из 32 регистров, которые выполняют специальные функции. Большое количество регистров позволяет эффективно выполнять вычисления, сохраняя промежуточные результаты не в стеке, а регистровом файле. Семейство PIC32MX имеет набор регистров, который может использоваться в обработчике прерывания для минимизации времени входа.
Память данных и память программ расположены в едином адресном пространстве, семейство PIC32MX имеет две раздельные шины: (I-side) – для выборки инструкций и (D-side) – для выборки данных с помощью инструкций загрузки/сохранения. Шины подключены к ядру через управляемую шинную матрицу, осуществляющую контроль доступа и генерацию исключений при ошибке доступа. Управление ядром осуществляется с помощью механизма сопроцессора – доступ к управляющим регистрам получают с помощью специальных инструкций. В набор управляющих регистров входит таймер ядра, инкрементируемый при каждом такте.
АЛУ и набор инструкций. Семейство PIC32MX имеет два набора инструкций: 32-битные инструкции MIPS32® release 2 и 16-битный набор MIPS16e™, позволяющий снизить объем кода, и, соответственно, использовать микроконтроллеры с меньшим объемом флэш-памяти.
Благодаря пятиступенчатому конвейеру все инструкции выполняются за 1 командный такт, в том числе и инструкции 16-битного набора – они декодируются на стадии конвейера (I) – выборка инструкции. Исключение составляют инструкции переходов (требуют одного такта ожидания для выборки инструкции по адресу перехода), умножения (максимум два такта) и деления (максимум 35 тактов). Если приложение выполняется из флэш-памяти без использования кэша, то командный такт будет равен времени доступа (максимальная частота доступа к флэш-памяти у PIC32MX составляет ~33 МГц). Если используется кэш программ, то командный такт будет в большинстве случаев равен такту генератора, т.е. максимальная частота выполнения инструкций будет составлять 72 МГц.
Пятиступенчатый конвейер накладывает некоторые ограничения на последовательность инструкций, однако механизм пропуска результата по конвейеру (Register Bypassing) в большинстве случаев позволяет избежать циклов ожидания, в том числе и при использовании данных сразу после загрузки регистра.
Большинство операций АЛУ – трехоперандные. Источниками данных являются значения регистров, приемником результата также является регистр ядра. Инструкции дополнительного набора MIPS16e™– как трехоперандные, так и двухоперандные. Косвенная адресация доступна только для инструкций загрузки/сохранения данных, что является особенностью всех «load-modify-store» архитектур. Непосредственная адресация доступна практически для всех вычислительных инструкций, при этом размер константы составляет 16 бит для набора инструкций MIPS32® release 2. Особенностью АЛУ ядер MIPS32® является отсутствие статусного регистра, в котором находятся флаги результатов операций. Флаги условных инструкций сохраняются в указанном регистре, а инструкции условного перехода используют любой регистр в качестве условия.
Память. Семейство PIC32MX имеет 32-битную шину адреса, что позволяет адресовать область памяти объемом до 4 ГБ. Флэш-память, SRAM, регистры управления периферией, конфигурационные регистры расположены в одном адресном пространстве, области имеют уникальные базовые адреса. Первые микроконтроллеры семейства PIC32MX имеют до 512 кБ флэш-памяти и до 32 кБ SRAM. Флэш-память может программироваться при выполнении программы, а часть флэш-памяти (12 кБ) выделена в особый блок, называемый Internal Boot Flash, в котором размещают загрузчик приложения. Этот блок может отдельно от остальной памяти защищаться от записи конфигурационным словом.
Приложение может выполняться как из внутренней флэш-памяти, так и из внутреннего ОЗУ, которое можно динамически разделить на области программ и данных. Поддерживается только little-endian расположение байт в слове (младший байт имеет меньший адрес).
В PIC32MX используются два метода адресации – физический и виртуальный. Физический метод адресации используют DMA и контроллер флэш-памяти. Виртуальную адресацию использует ядро для выборки инструкций и данных. Виртуальную адресацию обеспечивает конфигурируемый механизм фиксированного перевода адресов (FMT), который преобразует виртуальные адреса в физические, необходимые для выборки из флэш-памяти и SRAM.
Виртуальная область памяти делится на две равных области по 2 ГБ. Область с младшими адресами называется областью пользователя (User Segment, KUSEG), а область со старшими адресами – областью ядра (Kernel Segments). Микроконтроллер может работать в двух режимах – пользовательском и режиме ядра (привилегированном режиме). В пользовательском режиме доступна только область пользователя, в привилегированном – как область пользователя, так и область ядра. Так как все регистры управления периферийными модулями отображены на область ядра, доступ к периферии возможен только в привилегированном режиме работы.
Для обеспечения целостности данных и ограничения доступа предназначен модуль шинной матрицы. Он может быть сконфигурирован в различные режимы арбитража, которые отличаются приоритетами потребителей данных (ядро, DMA и т. п.). При конфликте доступа шинная матрица генерирует исключение.
Модуль предвыборки. Семейство PIC32MX имеет флэш-память с шиной 128 бит, которая позволяет за одно обращение выбирать четыре 32-битных инструкции. Однако даже при наличии 128-битного буфера выполнение инструкций с тактовой частотой ядра не представляется возможным, так как реальное приложение содержит большое количество ветвлений, повторяющихся инструкций и выборки данных из флэш-памяти. Поэтому в архитектуру PIC32MX введен конфигурируемый кэш предвыборки, состоящий из 16 128-битных строк. 4 строки могут использоваться в качестве кэша данных для обработки больших константных массивов. Использование кэша предвыборки позволяет выполнять линейный код с максимальной частотой тактирования. Этому способствуют две линии кэша с адресной маской, которые могут содержать повторяющиеся инструкции, а также механизм предикативной выборки инструкций.
Контроллер прерываний. В ядре MIPS32 MK4™ предусмотрено три режима работы прерываний – совместимый с MIPS32 release 1, векторный режим и режим обслуживания внешнего контроллера прерываний. В семействе PIC32MX реализован внешний векторный контроллер прерываний, однако при сборке ядра оставлен и оригинальный одновекторный режим. Внешний контроллер прерываний PIC32MX обладает следующими особенностями:
- время реакции на прерывание – не более 5 тактов генератора;
- до 96 источников прерываний;
- до 64 векторов прерываний;
- каждый вектор прерывания может иметь приоритет от 1 до 7;
- каждый вектор прерывания может иметь дополнительный приоритет от 0 до 3;
- дополнительный регистровый файл для обслуживания прерывания с максимальным приоритетом;
- конфигурируемое положение векторов прерываний;
- конфигурируемая дистанция между векторами прерываний;
- возможность программной генерации любого прерывания;
- таймер отложенных прерываний.
Контроллер прерываний PIC32MX аналогичен контроллеру прерываний 16-битных семейств PIC24/dsPIC за исключением того, что векторов прерываний меньше, чем источников. Поэтому часть источников прерываний используют один вектор. Как правило, это прерывания одного периферийного модуля, например, прерывание по приему UART и прерывание по передаче UART. Приоритеты назначаются пользователем не источнику прерывания, а вектору.
Контроллер прерываний PIC32MX отслеживает все источники на каждом такте генератора. Если один из источников прерываний активен и его приоритет больше, чем текущий приоритет ядра, устанавливается флаг прерывания и запрос на прерывание. Между ступенями (E) и (M) конвейера проверяется запрос на прерывание и, если он установлен, ядро прекращает выполнение программы и переходит на соответствующий вектор прерывания.
Вектора с приоритетами 7 используют дополнительный набор регистров ядра, что позволяет снизить время входа в функцию обработки прерывания, так как в этом случае контекст сохранять не требуется.
Положение векторов в адресном пространстве может быть изменено программно, так же как и дистанция между векторами.
Особенностью является таймер отложенных прерываний. Для использования этого таймера необходимо установить его период (32-битный регистр) и приоритет прерывания таймера. Все источники с приоритетом ниже или равным приоритету таймера не установят запрос на прерывание, а запустят таймер, в который перед этим загружено значение из регистра периода. Таймер декрементирует каждый такт. Как только значение таймера будет равно нулю, установится флаг источника прерывания, запустившего таймер.
Системные модули. Как и 16-битные контроллеры Microchip, семейство PIC32MX обладает набором системных модулей для построения надежной и самодостаточной однокристальной системы.
Модуль сброса PIC32MX полностью аналогичен модулю сброса 16-битных микроконтроллеров PIC24/dsPIC. Единственное отличие – отсутствие сброса при выборке инструкции с неизвестным кодом (это обрабатывается логикой исключений ядра) и сброса при конфликте исключений. Микроконтроллеры PIC32MX имеют следующие источники сброса:
- сброс по включению питания (POR);
- внешний сброс (MCLR);
- сброс по снижению напряжения питания;
- сброс при ошибке четности конфигурационных слов;
- программный сброс;
- сброс по переполнению сторожевого таймера.
Сторожевой таймер в микроконтроллерах семейства PIC32MX тактируется от внутреннего низкочастотного RC генератора. Переполнение сторожевого таймера вызывает сброс контроллера или вывод ядра и периферии из режимов энергосбережения. Сторожевой таймер может включаться и отключаться программно. Сброс сторожевого таймера, в отличие от предыдущих семейств контроллеров Microchip, осуществляется путем установки бита в регистре конфигурации таймера.
Система тактирования и энергосберегающие режимы.Микроконтроллеры семейства PIC32MX имеют развитую систему тактирования. Ядро и периферийные модули могут тактироваться от четырех различных источников:
· основного кварцевого генератора с возможностью подключения PLL;
· внутреннего высокочастотный RC генератора 8 МГц с выходным делителем и возможностью подключения PLL;
· внутреннего низкочастотного RC генератора 32 кГц;
· дополнительного кварцевого генератора с параметрами, оптимизированными для подключения часового резонатора (32768 Гц).
Внутренний PLL предназначен для получения максимальной таковой частоты при использовании источников тактирования с частотой меньшей 72 МГц. Модуль PLL также имеет выходной делитель, что позволяет получить широкую сетку частот от одного внешнего источника. Как и в большинстве микроконтроллеров Microchip, существует возможность переключать источники тактирования в ходе выполнения программы и подстраивать внутренний высокочастотный генератор в диапазоне ±12%.
В систему тактирования PIC32MX входит монитор наличия тактовой частоты, который генерирует прерывание и переключает источник тактирования на дополнительный (внутренний RC генератор) при отказе основного. Этот же модуль обеспечивает вывод микроконтроллера из режима SLEEP с дополнительным источником и последующим переключением на основной. Это позволяет начать выполнение приложения, не дожидаясь стабилизации частоты кварцевого генератора.
Микроконтроллеры семейства PIC32MX имеют два основных режима энергосбережения IDLE и SLEEP. В режиме IDLE ядро останавливает выполнение программы, однако основной тактовый генератор и периферийные модули продолжают работу. При входе в режим SLEEP основной тактовый генератор отключается. Вывод микроконтроллера из энергосберегающих режимов возможен при сбросе, прерывании или переполнении сторожевого таймера. Для входа в энергосберегающий режим используется инструкция WAIT. Использование энергосберегающих режимов совместно с гибким управлением тактированием уменьшает потребление энергии устройством.
Периферийные модули. 32-битное семейство PIC32MX имеет обширный набор периферийных модулей:
- универсальные порты ввода/вывода, толерантные к +5 В;
- 24 входа внешних прерываний по изменению уровня с одним вектором;
- 5 входов внешних прерываний по фронту с индивидуальным векторами;
- 5 16-разрядных таймеров общего назначения;
- 5 модулей захвата;
- 5 модулей сравнения;
- 2 модуля SPI;
- 2 модуля I2C;
- 2 модуля UART с аппаратной поддержкой IrDA, LIN и RS-485;
- параллельный 16-битный порт с 16-битной адресной шиной;
- часы реального времени с календарем;
- 10-битный 16-канальный аналого-цифровой преобразователь;
- два компаратора с регулируемым модулем опорного напряжения;
- JTAG интерфейс для граничного сканирования, программирования и отладки;
- модуль прямого доступа к памяти (DMA) с интегрированной функцией вычисления CRC.
Большинство периферийных модулей аналогично по функциональности соответствующим модулям семейства PIC24FJ, что должно упростить переход на 32-битные PIC32MX. Компания Microchip предоставляет библиотеку обслуживания периферии Peripheral Library PIC32MX, API которой совместим с аналогичным пакетом для PIC24FJ.
Все периферийные регистры PIC32MX имеют по три дополнительных слова для атомарной манипуляции с битами: xSET, xCLR и xINV. Установка битов в слове xSET устанавливает соответствующие биты в периферийном регистре. Установка битов в слове xCLR сбрасывает соответствующие биты в периферийном регистре. Слово xTGL предназначено для инвертирования битов в регистре. Это позволяет значительно сократить количество инструкций на обслуживание периферии, увеличить скорость работы и обеспечить атомарность операций. Большинство периферийных регистров используют только младшую часть слова, что позволяет компилятору использовать эффективные арифметические и логические инструкции с константными операндами. Большинство периферийных модулей в PIC32MX перенесено из 16-битного семейства PIC24F, поэтому рассмотрим уникальный для PIC32MX контроллер прямого доступа к памяти (DMA),предназначенный для передачи данных между блоками памяти и периферийными модулями без участия ядра контроллера.
Семейство PIC32MX имеет до 4 идентичных каналов DMA, которые используются как для передачи данных между периферией и памятью, так и для переноса данных между блоками памяти. Контроллер DMA позволяет обеспечивать транзакции на уровне слов и байтов, при этом выравнивания по слову данных не требуется. Арбитраж доступа осуществляется на основании фиксированных приоритетов каналов. Два канала могут быть объединены в цепочку – после окончания передачи ведущего канала автоматически запускается ведомый канал.
Каналы могут работать в двух адресных режимах: нормальном и расширенном. В нормальном режиме объем передаваемых данных ограничен 256 байтами, но допустима транзакция по невыровненному адресу и передача типа «память-периферия». В расширенном режиме адресации объем передаваемых данных не должен превышать 64 кБ.
Контроллер DMA имеет в своем составе модуль вычисления циклического избыточного кода (CRC), который может быть подключен к любому каналу. Модуль позволяет вычислять CRC любой разрядности с произвольным полиномом.
Средства разработки. Компания Microchip традиционно предоставляет полный набор отладочных средств для освоения и профессиональной работы с семейством PIC32MX.
Программные средства разработки. Одновременно с анонсом 32-разрядных контроллеров PIC32MX компания Microchip выпустила новую версию среды разработки MPLAB 8.0, которая на сегодняшний день поддерживает все семейства, начиная от PIC10 и заканчивая PIC32. Выпущен компилятор с языка Си MPLAB C32 – порт известного компилятора GCC. Компилятор включает библиотеки стандартных функций, написанные разработчиком ядра MIPS.
Дата добавления: 2016-04-06; просмотров: 1264;