(весна, 2008 год)
В ноябре 2007 года компания Microchip анонсировала выпуск первых в своей истории 32-разрядных микроконтроллеров PIC32. Выход лидера в производстве 8- и 16-битных микроконтроллеров на 32-разрядный рынок вполне объясним: все тренды показывают значительное увеличение объема продаж 32-битных контроллеров за последние несколько лет, что в свою очередь связано с возросшими требованиями к встраиваемым системам.
Несмотря на то, что все предыдущие семейства контроллеров были разработаны специалистами Microchip, было решено лицензировать 32-разрядное ядро у компании MIPS Technologies Inc., одного из лидеров в разработке программных ядер. Архитектуры MIPS используют такие компании как AMD, Broadcom, Infeneon, Realtek, Sharp, Sony, NXP, Toshiba. Тем не менее, PIC32 это первый однокристальный процессор с архитектурой MIPS имеющий интегрированную флэш-память и полный набор микроконтроллерной периферии.
Архитектура MIPS32 выбрана не случайно. При выборе новой платформы рассматривались различные варианты, а критерии выбора были следующими:
По большинству параметров тендер выиграла компания MIPS с архитектурой MIPS32 M4K™.
На сегодняшний день линейка PIC32 представлена двумя семействами: PIC32MX360 (табл. 1) и PIC32MX460 (табл. 2). Контроллеры семейства PIC32MX460 имеют встроенный модуль USB OTG.
Таблица 1. Микроконтроллеры семейства PIC32MX360
Наименование | Частота, МГц | Flash, КБ | ОЗУ, КБ | DMA, каналов | Трассировка | Число выводов |
---|---|---|---|---|---|---|
PIC32MX320F032H | 40 | 32 | 8 | 0 | нет | 64 |
PIC32MX320F064H | 80 | 64 | 16 | 0 | нет | 64 |
PIC32MX320F128H | 80 | 128 | 16 | 0 | нет | 64 |
PIC32MX320F128L | 80 | 128 | 16 | 0 | нет | 100 |
PIC32MX340F128H | 80 | 128 | 32 | 4 | да | 64 |
PIC32MX340F128L | 80 | 128 | 32 | 4 | да | 100 |
PIC32MX340F256H | 80 | 256 | 32 | 4 | нет | 64 |
PIC32MX340F512H | 80 | 512 | 32 | 4 | да | 64 |
PIC32MX360F256L | 80 | 256 | 32 | 4 | да | 100 |
PIC32MX360F512L | 80 | 512 | 32 | 4 | да | 100 |
Таблица 2. Микроконтроллеры семейства PIC32MX460
Наименование | Частота, МГц | Flash, КБ | ОЗУ, КБ | DMA, каналов | Трассировка | Число выводов |
---|---|---|---|---|---|---|
PIC32MX420F032H | 40 | 32 | 8 | 0 | нет | 64 |
PIC32MX440F128H | 80 | 128 | 32 | 4 | нет | 64 |
PIC32MX440F128L | 80 | 128 | 32 | 4 | нет | 100 |
PIC32MX440F256H | 80 | 256 | 32 | 4 | нет | 64 |
PIC32MX440F512H | 80 | 512 | 32 | 4 | да | 64 |
PIC32MX460F256L | 80 | 256 | 32 | 4 | да | 100 |
PIC32MX460F512L | 80 | 512 | 32 | 4 | да | 100 |
Семейство PIC32MX основано на синтезируемом ядре MIPS32 M4K™, которое позиционируется разработчиком ядра для использования в микроконтроллерах с низким потреблением энергии.
Основные особенности ядра MIPS32 M4K™ синтезированного для применения в PIC32MX:
Архитектура MIPS32® это архитектура типа «чтение-модификация-запись», то есть АЛУ ядра может обрабатывать только данные, находящиеся в регистрах общего назначения, а для загрузки и выгрузки данных предназначены специальные инструкции.
В качестве регистров используется регистровый банк из 32 регистров, некоторые из которых выполняют специальные функции: (ra)
- адрес возврата из подпрограммы, (sp)
- указатель стека, (fp)
- указатель фрейма стека, (gp)
- указатель на область данных. Один из регистров (zero)
всегда равен нулю.
Большое количество регистров позволяет эффективно выполнять вычисления, сохраняя промежуточные результаты не в стеке, а регистровом файле. Кроме того, семейство PIC32MX имеет дополнительный набор регистров, который может использоваться в обработчике прерывания для минимизации времени входа.
MIPS32® имеет пятиступенчатый конвейер со следующими стадиями: (I) - выборка инструкции, (E) – выполнение операции, (M) – выборка данных, (A) – выравнивание и (W) – сохранение результата. В ядро, синтезируемое для PIC32MX, была включена опция Register Bypassing – механизм, который позволяет значительно сократить время простоя конвейера при использовании в качестве аргумента следующей инструкции результата предыдущей.
Несмотря на то, что память данных и память программ расположены в едином адресном пространстве, семейство PIC32MX имеет две раздельные шины: (I-side) – для выборки инструкций и (D-side) – для выборки данных с помощью инструкций загрузки/сохранения. Шины подключены к ядру через управляемую шинную матрицу, осуществляющую контроль доступа и генерацию исключений при ошибке доступа.
Управление ядром осуществляется с помощью механизма сопроцессора – доступ к управляющим регистрам может быть получен только с помощью специальных инструкций. В набор управляющих регистров входит таймер ядра, инкрементируемый при каждом такте.
Видеопрезентация архитектуры PIC32 (часть 1, индийский англ.)
Видеопрезентация архитектуры PIC32 (часть 2, индийский англ.)
Семейство PIC32MX имеет два набора инструкций: 32-битные инструкции MIPS32® release 2 и 16-битный набор MIPS16e™, позволяющий снизить объем кода, и, соответственно, использовать микроконтроллеры с меньшим объемом флэш-памяти.
Благодаря пятиступенчатому конвейеру все инструкции выполняются за 1 командный такт, в том числе и инструкции 16-битного набора – они декодируются на стадии конвейера (I) – выборка инструкции. Исключение составляют инструкции переходов (требуют одного такта ожидания для выборки инструкции по адресу перехода), умножения (максимум два такта) и деления (максимум 35 тактов).
Если приложение выполняется из флэш-памяти без использования кэша, то командный такт будет равен времени доступа (максимальная частота доступа к флэш-памяти у PIC32MX составляет 30 МГц). Если используется кэш, то командный такт будет в большинстве случаев равен такту генератора, т.е. максимальная частота выполнения инструкций будет составлять 80 МГц.
Пятиступенчатый конвейер накладывает некоторые ограничения на последовательность инструкций, однако механизм пропуска результата по конвейеру (Register Bypassing) в большинстве случаев позволяет избежать циклов ожидания, в том числе и при использовании данных сразу после загрузки регистра.
Большинство операций АЛУ и, соответственно, инструкции основного набора - трехоперандные. Источниками данных являются значения регистров, приемником результата так же является регистр ядра. Инструкции дополнительного набора MIPS16e™ - как трехоперандные, так и двухоперандные.
Косвенная адресация доступна только для инструкций загрузки/сохранения данных, что является особенностью всех «load-modify-store» архитектур. Непосредственная адресация (операции с константой в коде инструкции) доступны практически для всех вычислительных инструкций, при этом размер константы составляет 16 бит для набора инструкций MIPS32® release 2.
Особенностью АЛУ ядер MIPS32® является отсутствие статусного регистра, в котором находятся флаги результатов операций (отрицательный результат, нулевой результат и т.п.) Флаги условных инструкций (сравнения и т.п.) сохраняются в указанном регистре, а инструкции условного перехода могут использовать любой регистр в качестве условия.
Набор инструкций MIPS32® release 2 включает в себя следующие операции:
HI/LO
AND
, OR
, NOR
, XOR
Набор инструкций MIPS16e™ включает в себя следующие операции:
AND
, OR
, NOT
, XOR
При синтезе ядра M4K™ для PIC32MX умножитель и делитель, входящие в состав ядра, были синтезированы с опцией «оптимизация по скорости выполнения», несмотря на то, что это привело к увеличению площади кристалла. Умножитель 32 × 16 позволяет получить результат умножения 32 × 16 за один такт, а результат умножения 32 × 32 за два такта. Результат умножения может сохраняться как в регистре (младшее слово 64-битного результата), так и в специальной регистровой паре HI/LO
(два слова 64-битного результата). Наличие инструкций умножения со сложением позволяет использовать эту регистровую пару как аккумулятор операций ЦОС.
Делитель PIC32MX имеет механизм предварительного определения разрядности делителя, что сокращает время выполнения операции до 7 тактов при выполнении операции деления 32 ÷ 8. Максимальное время выполнения операции деления составляет 35 тактов (в случае если разрядность делителя равна 32 битам).
Семейство PIC32MX имеет 32-битную шину адреса, что позволяет адресовать область памяти объемом до 4 ГБ. Флэш-память, SRAM, регистры управления периферией, конфигурационные регистры расположены в одном адресном пространстве, области имеют уникальные базовые адреса.
Микроконтроллеры семейства PIC32MX имеют до 512 кБ флэш-памяти и до 32 кБ SRAM. Флэш-память может программироваться в ходе выполнения программы, а часть флэш-памяти (12 кБ) выделена в особый блок, называемый Internal Boot Flash, в котором может размещаться загрузчик приложения. Этот блок может отдельно от остальной памяти защищаться от записи конфигурационным словом.
Приложение может выполняться как из внутренней флэш-памяти, так и из внутреннего ОЗУ, которое можно динамически разделить на области программ и данных. Поддерживается только little-endian расположение байт в слове (младший байт имеет меньший адрес).
В PIC32MX используются два метода адресации – физический и виртуальный. Физический метод адресации используют DMA и контроллер флэш-памяти. Виртуальную адресацию использует ядро для выборки инструкций и данных. Виртуальную адресацию обеспечивает конфигурируемый механизм фиксированного перевода адресов (FMT), который преобразует виртуальные адреса в физические, необходимые для выборки из флэш-памяти и SRAM.
Виртуальная область памяти делится на две равных области по 2 ГБ. Область с младшими адресами называется областью пользователя (User Segment, KUSEG) а область со старшими адресами – областью ядра (Kernel Segments). Микроконтроллер может работать в двух режимах – пользовательском и режиме ядра (привилегированном режиме). В пользовательском режиме доступна только область пользователя, в привилегированном – как область пользователя, так и область ядра. Так как все регистры управления периферийными модулями отображены на область ядра, доступ к периферии возможен только в привилегированном режиме работы.
Область памяти ядра в свою очередь делится на четыре области, называемые KSEG0, KSEG1, KSEG2 и KSEG3. В микроконтроллерах семейства PIC32MX физически реализованные ресурсы отображаются только на первые две области. Причем базовый адрес областей KSEG0 и KSEG1 отображается на физический адрес 0x00000000
. Такая реализация позволяет быстро переключаться между режимами работы кэша флэш-памяти.
Как флэш-память, так и ОЗУ может быть разделено между сегментами KUSEG, KSEG0 и KSEG1, дискрет составляет 2 кБ. Кроме того, возможно выделения части ОЗУ для всех сегментов в качестве программной памяти. Для обеспечения целостности данных и ограничения доступа предназначен модуль шинной матрицы. Он может быть сконфигурирован в различные режимы арбитража, которые отличаются приоритетами потребителей данных (ядро, DMA и т. п.) При конфликте доступа шинная матрица генерирует исключение.
Семейство PIC32MX имеет флэш-память с шиной 128 бит, которая позволяет за одно обращение выбирать четыре 32-битных инструкции. Однако даже при наличии 128-битного буфера выполнение инструкций с тактовой частотой ядра не представляется возможным, так как реальное приложение содержит больше количество ветвлений, повторяющихся инструкций и выборки данных из флэш-памяти.
Поэтому в архитектуру PIC32MX был введен конфигурируемый кэш предвыборки, состоящий из 16 128-битных строк. 4 строки могут использоваться в качестве кэша данных, что полезно при обработке больших константных массивов.
Использование кэша предвыборки позволяет выполнять линейный код с максимальной частотой тактирования. Этому способствуют две линии кэша с адресной маской, которые могут содержать повторяющиеся инструкции, а так же механизм предикативной выборки инструкций.
Обзор модуля предвыборки PIC32 (индийский англ.)
В ядре MIPS32 MK4™ предусмотрено три режима работы прерываний – совместимый с MIPS32 release 1, векторный режим и режим обслуживания внешнего контроллера прерываний.
В семействе PIC32MX реализован внешний векторный контроллер прерываний, однако при сборке ядра оставлен и оригинальный одновекторный режим.
Внешний контроллер прерываний PIC32MX обладает следующими особенностями:
Контроллер прерываний PIC32MX аналогичен контроллеру прерываний 16-битных семейств PIC24/dsPIC за исключением того, что векторов прерываний меньше чем источников. Поэтому часть источников прерываний используют один вектор. Как правило, это прерывания одного периферийного модуля, например, прерывание по приему UART и прерывание по передаче UART. Приоритеты назначаются пользователем не источнику прерывания, а вектору.
Контроллер прерываний PIC32MX отслеживает все источники на каждом такте генератора. Если один из источников прерываний активен и его приоритет больше чем текущий приоритет ядра, устанавливается флаг прерывания (который можно установить и программно) и запрос на прерывание. Между ступенями (E) и (M) конвейера проверяется запрос на прерывание и, если он установлен, ядро прекращает выполнение программы и переходит на соответствующий вектор прерывания.
Вектора с приоритетами 7 могут использовать дополнительный набор регистров ядра, что позволяет снизить время входа в функцию обработки прерывания, так как в этом случае контекст сохранять не требуется. Положение векторов в адресном пространстве может быть изменено программно, так же как и дистанция между векторами.
Интересной особенностью является таймер отложенных прерываний. Для использования этого таймера необходимо установить его период (32-битный регистр) и приоритет прерывания таймера. Все источники с приоритетом ниже или равным приоритету таймера не установят запрос на прерывание, а запустят таймер, в который перед этим будет загружено значение из регистра периода. Таймер будет декрементироваться каждый такт. Как только значение таймера будет равно нулю, установится флаг источника прерывания, запустившего таймер.
Контроллер DMA предназначен для передачи данных между блоками памяти и периферийными модулями без участия ядра контроллера.
Семейство PIC32MX имеет до 4 идентичных каналов DMA, которые могут использоваться как для передачи данных между периферией и памятью, так и для переноса данных между блоками памяти.
Контроллер DMA позволяет обеспечивать транзакции на уровне слов, и байтов. В последнем случае выравнивания по слову данных не требуется. Арбитраж доступа осуществляется на основании фиксированных приоритетов каналов.
Два каналы могут быть объединены в цепочку – после окончания передачи ведущего канала автоматически запускается ведомый канал.
Каналы могут работать в двух адресных режимах: нормальном и расширенном. В нормальном режиме объем передаваемых данных ограничен 256 байтами, но допустима транзакция по невыровненному адресу и передача типа «память-периферия». В расширенном режиме адресации объем передаваемых данных не должен превышать 64 кБ.
Контроллер DMA имеет в своем составе модуль вычисления циклического избыточного кода (CRC), который может быть подключен к любому каналу. Модуль позволяет вычислять CRC любой разрядности с произвольным полиномом.
Обзор DMA PIC32 (индийский англ.)
Как и 16-битные контроллеры Microchip, семейство PIC32MX обладает набором системных модулей, необходимых для построения надежной и самодостаточной однокристальной системы.
Модуль сброса PIC32MX полностью аналогичен модулю сброса 16-битных микроконтроллеров PIC24/dsPIC. Единственное отличие – отсутствие сброса при выборке инструкции с неизвестным кодом (это обрабатывается логикой исключений ядра), и сброса при конфликте исключений.
Микроконтроллеры PIC32MX имеют следующие источники сброса:
Сторожевой таймер в микроконтроллерах семейства PIC32MX тактируется от внутреннего низкочастотного RC генератора. Физически сторожевой таймер представляет собой 25-битный счетчик и регистр сравнения. Переполнение сторожевого таймера вызывает сброс контроллера или вывод ядра и периферии из режимов энергосбережения. Период сторожевого таймера может находиться в диапазоне от 1 мс до 1048 сек.
Сторожевой таймер может включаться и отключаться программно. Программное отключение таймера может быть запрещено в слове конфигурации.
Сброс сторожевого таймера в отличие от предыдущих семейств контроллеров Microchip осуществляется путем установки бита в регистре конфигурации таймера.
Микроконтроллеры семейства PIC32MX имеют развитую систему тактирования. Ядро и периферийные модули могут тактироваться от четырех различных источников:
Внутренний PLL предназначен для получения максимальной таковой частоты при использовании источников тактирования с частотой меньшей 72 МГц. Модуль PLL так же имеет выходной делитель, что позволяет получить широкую сетку частот от одного внешнего источника.
Как и в большинстве микроконтроллеров Microchip, существует возможность переключать источники тактирования в ходе выполнения программы и подстраивать внутренний высокочастотный генератор в диапазоне ±12%.
В систему тактирования PIC32MX входит монитор наличия тактовой частоты, который генерирует прерывание и переключает источник тактирования на дополнительный (внутренний RC генератор) при отказе основного. Этот же модуль обеспечивает вывод микроконтроллера из режима SLEEP с дополнительным источником с последующим переключением на основной. Это позволяет быстро начать выполнение приложения, не дожидаясь стабилизации частоты кварцевого генератора.
Дополнительный кварцевый генератор 32768 Гц может быть включен и отключен программно. Он может использоваться для тактирования ядра, одного из таймеров и модуля часов реального времени.
Для снижения потребления энергии можно уменьшить тактовую частоту периферийных модулей с помощью делителя частоты ядра с коэффициентами деления 2, 4 и 8.
Микроконтроллеры семейства PIC32MX имеют два основных режима энергосбережения IDLE и SLEEP. В режиме IDLE ядро останавливает выполнение программы, однако основной тактовый генератор и периферийные модули продолжают работу. При входе в режим SLEEP, основной тактовый генератор отключается.
Вывод микроконтроллера из энергосберегающих режимов возможен при сбросе, прерывании или переполнении сторожевого таймера. Для входа в энергосберегающий режим используется инструкция WAIT.
Использование энергосберегающих режимов совместно с гибким управлением тактированием, позволит значительно уменьшить потребление энергии устройством.
32-битное семейство PIC32MX имеет обширный набор периферийных модулей:
Большинство периферийных модулей аналогично по функциональности соответствующим модулям семейства PIC24FJ, что должно упростить переход на 32-битные PIC32MX. Компания Microchip предоставляет библиотеку обслуживания периферии Peripheral Library PIC32MX, API которой совместим с аналогичным пакетом для PIC24FJ.
Следует отметить основную особенность управления периферийными модулями. Все периферийные регистры PIC32MX имеют по три дополнительных слова для атомарной манипуляции с битами: xSET
, xCLR
и xINV
. Установка битов в слове xSET
устанавливает соответствующие биты в периферийном регистре. Установка битов в слове xCLR
сбрасывает соответствующие биты в периферийном регистре. Слово xTGL
предназначено для инвертирования битов в регистре.
Например, сброс младшего бита в регистре TRISA
будет выглядеть следующим образом:
TRISACLR = (1 << 0);
В этом случае нет необходимости считывать значение TRISA в регистр, обнулять бит и сохранять итоговое значение:
TRISA &= ~(1 << 0);
Такой механизм позволяет значительно сократить количество инструкций на обслуживание периферии, увеличить скорость работы и обеспечить атомарность операций. Кроме того, большинство периферийных регистров используют только младшую часть слова, что позволяет компилятору использовать эффективные арифметические и логические инструкции с константными операндами.
Как уже отмечено, большинство периферийных модулей в PIC32MX перенесено из 16-битного семейства PIC24F, поэтому для более подробного ознакомления с периферией PIC32 можно обратиться к статье 16-битные микроконтроллеры Microchip.
Компания Microchip традиционно предоставляет полный набор отладочных средств для освоения и профессиональной работы с семейством PIC32MX.
Одновременно с анонсом 32-разрядных контроллеров PIC32MX компания Microchip выпустила новую версию среды разработки MPLAB 8.0 (актуальная версия - 8.14), которая на сегодняшний день поддерживает все семейства, начиная от PIC10 и заканчивая PIC32.
Выпущен компилятор с языка Си MPLAB C32 – порт известного компилятора GCC. Компилятор включает библиотеки стандартных функций, написанные разработчиком ядра MIPS. Доступна бесплатная студенческая версия компилятора с ограничением по объему исполняемого кода (64 кБ). Актуальная версия - 1.02.
Доступны средства разработки сторонних компаний:
PIC32MX – первое семейство в линейке Microchip, которое имеет не только проприетарный интерфейс внутрисхемной отладки. Ядро MIPS32 M4K™ включает в свой состав модуль внутрисхемной отладки EJTAG и модуль трассировки исполняемого кода и данных. Таким образом, сторонние разработчики отладочных средств могут интегрировать в свои продукты поддержку программирования и отладки PIC32MX с помощью JTAG.
Тем не менее, PIC32MX включает в себя модуль теневой отладки, который на сегодняшний день поддерживают внутрисхемный отладчик ICD2 и внутрисхемный эмулятор REAL ICE, причем последний позволяет выполнять трассировку кода и данных. Семейство PIC32MX имеет 4 аппаратных точки останова по коду и 2 точки останова по данным.
Для начала освоения PIC32MX компания Microchip предлагает использовать PIC32 Starter Kit – отладочную плату с установленным микроконтроллером PIC32MX360F512L. Плата включает в себя внутрисхемный отладчик с интерфейсом USB, реализованный на микроконтроллере PIC18F4550. На плате установлены 3 светодиода и 3 кнопки. Плата питается от интерфейса USB.
Краткий видеообзор отладочной платы PIC32 Starter Kit можно посмотреть по ссылке (англ.)
Освоение контроллеров семейства PIC32MX460 (с интерфейсом UAB OTG) можно начать, используя плату PIC32 USB Starter Board. Кит аналогичен предыдущему, но имеет установленные разъемы USB A (host) и USB micro-AB (OTG).
Доступна плата расширения к PIC32 Starter Kit (PIC32 USB Starter Board) , которая подключается к 122-выводному разъему, установленному на плате.
Так же доступны процессорные модули, предназначенные для использования совместно с популярной отладочной платой для 16-битных семейств Explorer 16. На процессорном модуле установлен разъем трассировки, который можно использовать для подключения к внутрисхемному эмулятору REAL ICE. Доступны модули как для семейства PIC32MX360, так и для PIC32MX460.
Для программирования и отладки можно использовать знакомые средства - внутрисхемный отладчик MPLAB ICD2 и внутрисхемный эмулятор REAL ICE. Семейство PIC32MX так же поддерживается бюджетным программатором начального уровня PICKit2 (пока только программирование из оболочки PICKit2).
Обзор аппаратных средств разработки для PIC32 (англ.)
Компания Microchip традиционно обеспечивает разработчиков квалифицированной технической поддержкой в виде руководств по применению и программных библиотек.
Не является исключением и семейство PIC32MX, для которого на данный момент доступны следующие библиотеки:
Доступно большое количество библиотек и от сторонних разработчиков:
RTOS
GUI
TCP/IP
FAT