Новые 32-х разрядные микроконтроллеры Microchip. Особенности архитектуры. Средства разработки
В ноябре 2007 года компания Microchip анонсировала выпуск первых в своей истории 32-разрядных микроконтроллеров PIC32. Выход лидера в производстве 8- и 16-битных микроконтроллеров на 32-разрядный рынок вполне объясним: рынок 32-битных контроллеров имеет постоянный и значительный рост, что в свою очередь связано с возрастающими требованиями к встраиваемым системам.
Несмотря на то, что все предыдущие семейства контроллеров были разработаны специалистами Microchip, было решено лицензировать 32-разрядное ядро у компании MIPS Technologies Inc., одного из лидеров в разработке программных ядер. Архитектуры MIPS используют такие компании как AMD, Broadcom, Infeneon, Realtek, Sharp, Sony, NXP, Toshiba. Тем не менее, PIC32 это первый однокристальный процессор с архитектурой MIPS имеющий интегрированную Flash память и полный набор микроконтроллерной периферии.
Архитектура MIPS32 выбрана не случайно.
Рис. 1
При выборе новой платформы рассматривались различные варианты, а критерии выбора были следующими:
- размер кристалла и, соответственно, стоимость конечного изделия
- потребление энергии на МГц тактовой частоты
- производительность на МГц тактовой частоты
- возможность расширения архитектуры
- простота интеграции периферии
- время реакции на прерывание
По большинству параметров тендер выиграла компания MIPS с архитектурой MIPS32 M4K™.
На сегодняшний день семейство PIC32 представлено 17 контроллерами с объемом Flash памяти от 32 до 512 кБ, объемом SRAM от 8 до 32 кБ в 64- и 100-выводных корпусах (табл. 1)
Таблица 1. Семейство микроконтроллеров PIC32
Наименование |
Частота, МГц |
Flash, КБ |
ОЗУ, КБ |
Модуль пред. выборки |
DMA, каналов |
10-разрядный АЦП, кан. |
Таймер/ захват/ сравнение |
UART/ SPI/ I2C |
USB 2.0 OTG |
Трас- сировка |
Число выводов |
PIC32MX320F032H |
40 |
32 |
8 |
- |
- |
16 |
5/5/5 |
2/2/2 |
- |
- |
64 |
PIC32MX320F064H |
80 |
64 |
16 |
Да |
- |
16 |
5/5/5 |
2/2/2 |
- |
- |
64 |
PIC32MX320F128H |
80 |
128 |
16 |
Да |
- |
16 |
5/5/5 |
2/2/2 |
- |
- |
64 |
PIC32MX320F128L |
80 |
128 |
16 |
Да |
- |
16 |
5/5/5 |
2/2/2 |
- |
- |
100 |
PIC32MX340F128H |
80 |
128 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
- |
- |
64 |
PIC32MX340F128L |
80 |
128 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
- |
- |
100 |
PIC32MX340F256H |
80 |
256 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
- |
- |
64 |
PIC32MX340F512H |
80 |
512 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
- |
- |
64 |
PIC32MX360F256L |
80 |
256 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
- |
Да |
100 |
PIC32MX360F512L |
80 |
512 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
- |
Да |
100 |
PIC32MX420F032H |
40 |
32 |
8 |
- |
- |
16 |
5/5/5 |
2/1/2 |
+ |
- |
64 |
PIC32MX440F128H |
80 |
128 |
32 |
Да |
4 |
16 |
5/5/5 |
2/1/2 |
+ |
- |
64 |
PIC32MX440F128L |
80 |
128 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
+ |
- |
100 |
PIC32MX440F256H |
80 |
256 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
+ |
- |
64 |
PIC32MX460F256L |
80 |
256 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
+ |
Да |
100 |
PIC32MX460F512H |
80 |
512 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
+ |
Да |
64 |
PIC32MX460F512L |
80 |
512 |
32 |
Да |
4 |
16 |
5/5/5 |
2/2/2 |
+ |
Да |
100 |
Архитектура
Семейство PIC32MX основано на синтезируемом ядре MIPS32 M4K™, которое позиционируется разработчиком ядра для использования в микроконтроллерах с низким потреблением энергии.
Рис. 2
Основные особенности ядра MIPS32 M4K™ синтезированного для применения в PIC32MX:
- Пятиступенчатый конвейер, измеренная производительность до 1.5 DMIPS/МГц при использовании 32-х разрядных команд и до 1.2 DMIPS/МГц при 16-и разрядных командах.
- Тактовая частота до 80 МГц
- Программируемый кэш, позволяющий увеличить частоту доступа к Flash памяти до максимальной частоты ядра
- Набор 32-битных инструкций MIPS32® release 2
- Дополнительный набор 16-битных инструкций MIPS16e™, позволяющий снизить объем исполняемого кода
- Аппаратный умножитель и делитель, оптимизированные по скорости выполнения операции
- Векторный приоритетный контроллер прерываний
- EJTAG порт, предназначенный для граничного сканирования, программирования Flash памяти и отладки приложения с модулем внутрисхемной трассировки
Архитектура MIPS32® это архитектура типа "чтение-модификация-запись", то есть АЛУ ядра может обрабатывать только данные, находящиеся в регистрах общего назначения, а для загрузки и выгрузки данных предназначены специальные инструкции.
В качестве регистров используется регистровый банк из 32 регистров, некоторые из которых выполняют специальные функции: (ra) - адрес возврата из подпрограммы, (sp) - указатель стека, (fp) - указатель фрейма стека, (gp) - указатель на область данных. Один из регистров (zero) всегда равен нулю.
Большое количество регистров позволяет эффективно выполнять вычисления, сохраняя промежуточные результаты не в стеке, а регистровом файле. Кроме того, семейство PIC32MX имеет дополнительный набор регистров, который может использоваться в обработчике прерывания для минимизации времени входа.
MIPS32® имеет пятиступенчатый конвейер со следующими стадиями: (I) - выборка инструкции, (E) - выполнение операции, (M) - выборка данных, (A) - выравнивание и (W) - сохранение результата. В ядро, синтезируемое для PIC32MX, была включена опция Register Bypassing - механизм, который позволяет значительно сократить время простоя конвейера при использовании в качестве аргумента следующей инструкции результата предыдущей.
Несмотря на то, что память данных и память программ расположены в едином адресном пространстве, семейство PIC32MX имеет две раздельные шины: (I-side) - для выборки инструкций и (D-side) - для выборки данных с помощью инструкций загрузки/сохранения. Шины подключены к ядру через управляемую шинную матрицу, осуществляющую контроль доступа и генерацию исключений при ошибке доступа.
Управление ядром осуществляется с помощью механизма сопроцессора - доступ к управляющим регистрам может быть получен только с помощью специальных инструкций. В набор управляющих регистров входит таймер ядра, инкрементируемый при каждом такте.
АЛУ и набор инструкций
Семейство PIC32MX имеет два набора инструкций: 32-битные инструкции MIPS32® release 2 и 16-битный набор MIPS16e™, позволяющий снизить объем кода, и, соответственно, использовать микроконтроллеры с меньшим объемом Flash памяти.
Благодаря пятиступенчатому конвейеру все инструкции выполняются за 1 командный такт, в том числе и инструкции 16-битного набора - они декодируются на стадии конвейера (I) - выборка инструкции. Исключение составляют инструкции переходов (требуют одного такта ожидания для выборки инструкции по адресу перехода), умножения (максимум два такта) и деления (максимум 35 тактов). Если приложение выполняется из Flash памяти без использования кэша, то командный такт будет равен времени доступа (максимальная частота доступа к Flash памяти у PIC32MX составляет 40 МГц). Если используется кэш программ, то командный такт будет в большинстве случаев равен такту генератора, т.е. максимальная частота выполнения инструкций будет составлять 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 x 16 позволяет получить результат умножения 32 x 16 за один такт, а результат умножения 32 x 32 за два такта. Результат умножения может сохраняться как в регистре (младшее слово 64-битного результата), так и в специальной регистровой паре HI/LO (два слова 64-битного результата). Наличие инструкций умножения со сложением позволяет использовать эту регистровую пару как аккумулятор операций ЦОС.
Делитель PIC32MX имеет механизм предварительного определения разрядности делителя, что сокращает время выполнения операции до 7 тактов при выполнении операции деления 32 / 8. Максимальное время выполнения операции деления составляет 35 тактов (в случае если разрядность делителя равна 32 битам).
Память
Семейство PIC32MX имеет 32-битную шину адреса, что позволяет адресовать область памяти объемом до 4 ГБ. Флэш-память, SRAM, регистры управления периферией, конфигурационные регистры расположены в одном адресном пространстве, области имеют уникальные базовые адреса.
Первые микроконтроллеры семейства PIC32MX имеют до 512 кБ Flash памяти и до 32 кБ SRAM. Флэш-память может программироваться в ходе выполнения программы, а часть Flash памяти (12 кБ) выделена в особый блок, называемый Internal Boot Flash, в котором может размещаться загрузчик приложения. Этот блок может отдельно от остальной памяти защищаться от записи конфигурационным словом.
Приложение может выполняться как из внутренней Flash памяти, так и из внутреннего ОЗУ, которое можно динамически разделить на области программ и данных. Поддерживается только little-endian расположение байт в слове (младший байт имеет меньший адрес).
В PIC32MX используются два метода адресации - физический и виртуальный. Физический метод адресации используют DMA и контроллер Flash памяти. Виртуальную адресацию использует ядро для выборки инструкций и данных. Виртуальную адресацию обеспечивает конфигурируемый механизм фиксированного перевода адресов (FMT), который преобразует виртуальные адреса в физические, необходимые для выборки из Flash памяти и SRAM.
Виртуальная область памяти делится на две равных области по 2 ГБ. Область с младшими адресами называется областью пользователя (User Segment, KUSEG) а область со старшими адресами - областью ядра (Kernel Segments). Микроконтроллер может работать в двух режимах - пользовательском и режиме ядра (привилегированном режиме). В пользовательском режиме доступна только область пользователя, в привилегированном - как область пользователя, так и область ядра. Так как все регистры управления периферийными модулями отображены на область ядра, доступ к периферии возможен только в привилегированном режиме работы.
Область памяти ядра в свою очередь делится на четыре области, называемые KSEG0, KSEG1, KSEG2 и KSEG3. В микроконтроллерах семейства PIC32MX физически реализованные ресурсы отображаются только на первые две области. Причем базовый адрес областей KSEG0 и KSEG1 отображается на физический адрес 0x00000000. Такая реализация позволяет быстро переключаться между режимами работы кэша Flash памяти.
Как Flash память, так и ОЗУ может быть разделено между сегментами KUSEG, KSEG0 и KSEG1, дискрет составляет 2 кБ. Кроме того, возможно выделения части ОЗУ для всех сегментов в качестве программной памяти.
Для обеспечения целостности данных и ограничения доступа предназначен модуль шинной матрицы. Он может быть сконфигурирован в различные режимы арбитража, которые отличаются приоритетами потребителей данных (ядро, DMA и т. п.) При конфликте доступа шинная матрица генерирует исключение.
Модуль предвыборки
Семейство PIC32MX имеет Flash память с шиной 128 бит, которая позволяет за одно обращение выбирать четыре 32-битных инструкции. Однако даже при наличии 128-битного буфера выполнение инструкций с тактовой частотой ядра не представляется возможным, так как реальное приложение содержит больше количество ветвлений, повторяющихся инструкций и выборки данных из Flash памяти.
Поэтому в архитектуру 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 генератора. Физически сторожевой таймер представляет собой 25-битный счетчик и регистр сравнения. Переполнение сторожевого таймера вызывает сброс контроллера или вывод ядра и периферии из режимов энергосбережения. Период сторожевого таймера может находиться в диапазоне от 1 мс до 1048 сек.
Сторожевой таймер может включаться и отключаться программно. Программное отключение таймера может быть запрещено в слове конфигурации.
Сброс сторожевого таймера в отличие от предыдущих семейств контроллеров Microchip осуществляется путем установки бита в регистре конфигурации таймера.
Система тактирования и энергосберегающие режимы
Микроконтроллеры семейства PIC32MX имеют развитую систему тактирования. Ядро и периферийные модули могут тактироваться от четырех различных источников:
- основного кварцевого генератора с возможностью подключения PLL
- внутреннего высокочастотный RC генератора 8 МГц с выходным делителем и возможностью подключения PLL
- внутреннего низкочастотного RC генератора 32 кГц
- дополнительного кварцевого генератора с параметрами, оптимизированными для подключения часового резонатора (32768 Гц)
Внутренний PLL предназначен для получения максимальной таковой частоты при использовании источников тактирования с частотой меньшей 80 МГц. Модуль PLL так же имеет выходной делитель, что позволяет получить широкую сетку частот от одного внешнего источника.
Как и в большинстве микроконтроллеров Microchip, существует возможность переключать источники тактирования в ходе выполнения программы и подстраивать внутренний высокочастотный генератор в диапазоне ±12%.
В систему тактирования PIC32MX входит монитор наличия тактовой частоты, который генерирует прерывание и переключает источник тактирования на дополнительный (внутренний RC генератор) при отказе основного. Этот же модуль обеспечивает вывод микроконтроллера из режима SLEEP с дополнительным источником с последующим переключением на основной. Это позволяет быстро начать выполнение приложения, не дожидаясь стабилизации частоты кварцевого генератора.
Дополнительный кварцевый генератор 32768 Гц может быть включен и отключен программно. Он может использоваться для тактирования ядра, одного из таймеров и модуля часов реального времени.
Для снижения потребления энергии можно уменьшить тактовую частоту периферийных модулей с помощью делителя частоты ядра с коэффициентами деления 2, 4 и 8.
Микроконтроллеры семейства 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
- Универсальная последовательная шина USB OTG 2.0
- параллельный 16-битный порт с 16-битной адресной шиной
- часы реального времени с календарем
- 10-битный 16 канальный аналого-цифровой преобразователь
- два компаратора с регулируемым модулем опорного напряжения
- JTAG интерфейс для граничного сканирования, программирования и отладки
- модуль прямого доступа к памяти (DMA) с интегрированной функцией вычисления CRC
Большинство периферийных модулей аналогично по функциональности соответствующим модулям семейства 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, поэтому далее будут рассмотрен уникальный для PIC32MX контроллер DMA.
Контроллер прямого доступа к памяти (DMA)
Контроллер DMA предназначен для передачи данных между блоками памяти и периферийными модулями без участия ядра контроллера.
Семейство PIC32MX имеет до 4 идентичных каналов DMA, которые могут использоваться как для передачи данных между периферией и памятью, так и для переноса данных между блоками памяти.
Контроллер DMA позволяет обеспечивать транзакции на уровне слов, и байтов. В последнем случае выравнивания по слову данных не требуется. Арбитраж доступа осуществляется на основании фиксированных приоритетов каналов.
Два каналы могут быть объединены в цепочку - после окончания передачи ведущего канала автоматически запускается ведомый канал.
Каналы могут работать в двух адресных режимах: нормальном и расширенном. В нормальном режиме объем передаваемых данных ограничен 256 байтами, но допустима транзакция по невыровненному адресу и передача типа "память-периферия". В расширенном режиме адресации объем передаваемых данных не должен превышать 64 кБ.
Контроллер DMA имеет в своем составе модуль вычисления циклического избыточного кода (CRC), который может быть подключен к любому каналу. Модуль позволяет вычислять CRC любой разрядности с произвольным полиномом.
Отладочные средства для контроллеров PIC32
Компания Microchip Technology Inc. предлагает полный набор отладочных средств для 16-и разрядных контроллеров PIC32, включая среду разработки MPLAB IDE, Си-компилятор, средства внутрисхемной отладки и отладочные платы.
Среда разработки Microchip MPLAB IDE является универсальной для всех микроконтроллеров Microchip от простейших 6-и выводных 8-и разрядных PIC10F до 32-х разрядных контроллеров PIC32. Единая среда разработки для всей продукции Microchip позволяет разработчикам легко перейти на использование новых микроконтроллеров.
Так же Microchip предлагает высокоэффективный компилятор Си для своих 32-х разрядных контроллеров. Компилятор периодически обновляется для обеспечения поддержки новых контроллеров, увеличения эффективности и добавления новых функций. Текущая версия компилятора MPLAB C32 версии 1.03 получила обновленные оптимизированные математические библиотеки с увеличенной скоростью более чем в пять раз.
Для начального ознакомления и для учебных целей Microchip предлагает бесплатную студенческую версию компилятора C32. Данная версия работает без ограничений в течение 60 дней, после чего отключаются уровни оптимизации кода по быстродействию -O2 и -О3 и оптимизация по объему кода -Os. Так же по истечению ознакомительного срока перестает работать генератор кода MIPS16 (поддержка набора 16-битных инструкций).
Совместно с компилятором С32 поставляется библиотека со стандартными ANSI-89 функциями, включая математические функции.
Аппаратные средства отладки
Для внутрисхемной отладки кода контроллеров PIC32 подходят те же самые отладчики ICD-2 и REAL ICE, что и для остальных семейств микроконтроллеров Microchip. Сравнительные характеристики и особенности отладчиков приведены в Табл.2.
PIC32MX - первое семейство в линейке Microchip, которое имеет не только проприетарный интерфейс внутрисхемной отладки. Ядро MIPS32 M4K™ включает в свой состав модуль внутрисхемной отладки EJTAG и модуль трассировки исполняемого кода и данных. Таким образом, сторонние разработчики отладочных средств могут интегрировать в свои продукты поддержку программирования и отладки PIC32MX с помощью JTAG.
Тем не менее, PIC32MX включает в себя модуль теневой отладки, который на сегодняшний день поддерживают внутрисхемный отладчик ICD2 и внутрисхемный эмулятор REAL ICE, причем последний позволяет выполнять трассировку кода и данных. Семейство PIC32MX имеет 4 аппаратных точки останова по коду и 2 точки останова по данным.
Таблица 2. Отладочные средства для программирования и отладки PIC32
Отладочное средство |
Программирование |
Отладка кода |
Трассировка кода |
Особенности |
PICKit 2 (PG164120) |
|
Да |
Нет (на данный момент поддерживается отладка только младших семейств) |
Нет |
Программатор для всех микроконтроллеров Microchip |
PIC32 Starter Kit (DM320001) |
|
Да |
Да |
Нет |
Демонстрационные платы со встроенным внутрисхемным USB JTAG программатором и отладчиком |
PIC32 USB Board (DM320002) |
ICD-2 (DV164005) |
|
Да |
Да |
Нет |
Внутрисхемный программатор-отладчик для большинства микроконтроллеров Microchip |
REAL ICE (DV244005) |
|
Да |
Да |
Да (требуется дополнительный кабель) |
Внутрисхемный эмулятор с высоко скоростным USB 2.0. |
Для начала освоения контроллеров PIC32 Microchip предлагает две простые и дешевые демонстрационные платы PIC32 Starter Kit и PIC32 USB Board. Обе платы содержат контроллер PIC32MX (PIC32MX 360F512 или PIC32MX460F512) и интегрированный USB-JTAG внутрисхемный отладчик с возможностью установки точек останова. Таким образом разработчик, решивший попробовать PIC32 и не имеющий внутрисхемного отладчика, может начать освоение контроллера без дополнительных средств разработки. Демонстрационная плата PIC32 USB Board отличается тем, что содержит контроллер семейства PIC32MX с поддержкой USB OTG. Данная плата имеет разъемы USB-A (плата может являться хостом и позволяет подключать, например, внешние USB накопители) и USB-microAB для подключения USB устройств Host, Device и OTG.
Для тех, кому стартового комплекта становится мало, Microchip предлагает плату расширения портов ввода-вывода - PIC32 I/O Expansion Board. Плата PIC32 Starter Kit или PIC32 USB Board является по сути процессорной платой для платы расширения PIC32 I/O Expansion Board, к которой, в свою очередь, можно подключать целый ряд специализированных интерфейсных плат. Интерфейсные платы расширения универсальны и так же подходят для совместной работы с отладочной платой Explorer 16.
Для того чтобы работать с отладочной платой Explorer 16 и контроллерами PIC32MX, нужно в Explorer 16 установить процессорный модуль с соответствующим контроллером PIC32 или использовать плату переходник (AC320002) для подключения PIC32 Starter Board к плате Explorer 16.
Рис. 3. Конфигурирование платы Explorer 16 под различные контроллеры и прикладные задачи
Таблица 3. Возможные варианты подключения отладочных плат
Процессорный модуль |
Основная отладочная плата |
Платы расширения |
Приложение |
PIM USB (MA320002) |
Explorer 16 |
USB PICtail. Plus Daughter Board (AC164131) |
Работа с USB: Host, Device, OTG |
PIM (MA320001) |
Audio PICtail Plus Daughter Board (AC164129) |
Работа со звуком |
ECAN/LIN PICtail Plus Daughter Board (AC164130) |
CAN и LIN интерфейсы связи |
PIC32 Starter Board + AC320002 |
PICtail board for SD and MMC (AC164122) |
Работа с Flash картами памяти, FAT |
PIC32 USB Board + AC320002 |
PICtail Plus board for Ethernet (AC164123) |
Разработка Ethernet-устройств |
IrDA PICtail Plus Daughter Board (AC164124) |
Разработка IrDA устройств |
PIC32 Starter Kit |
PIC32 I/O Expansion Board |
Speech Playback PICtail Plus Daughter Board (AC164125) |
Работа со звуком |
PICDEM Z MRF24J40 2.4 GHz Daughter Card (AC163027-4) |
Разработка 2.4ГГц беспроводных сетей ZigBee, MiWi и других |
PIC32 USB |
Motor Control Interface PICtail Plus D-Card (AC164128) |
Управление электродвигателями |
Graphics PICtailTM Plus Daughter Board (AC164127) |
Работа с цветными графическими TFT индикаторами |
PIC32 USB |
|
Работа с USB: Host, Device, OTG |
Компания Microchip поддерживает платформу PIC32MX не только отладочными платами, но и готовыми библиотеками. Под каждую интерфейсную плату есть соответствующие библиотеки и примеры программ.
Библиотеки и примеры программ
В настоящий момент контроллеры PIC32 поддерживаются следующими специализированными библиотеками (см. Табл.4).
Таблица 4. Библиотеки Microchip для контроллеров PIC32
Область применения |
Наименование |
Описание |
USB |
USB Device and Embedded Host Stack |
Поддержка стеков USB |
USB Dual-Role Stack (планируется) |
USB OTG Stack (планируется) |
Коммуникации |
Microchip TCP/IP with support for SSL |
Поддержка стеков TCP/IP |
Microchip TCP/IP with BSD Sockets |
IrDA™ Protocol Stack (планируется) |
Стек беспроводного протокола IrDA™ |
ZigBee™ Protocol Stack (планируется) |
Стек беспроводного протокола ZigBee™ (2.4ГГц) |
MiWi™ Protocol Stack |
Стек беспроводного протокола MiWi (2.4ГГц) |
CAN Library for PIC32 |
Библиотека для работы с CAN протоколом, включена поддержка MCP2515 |
Serial Port Bootloader for PIC32MX |
Реализация бутлоадера через последовательный порт |
Общего назначения |
16-bit File System |
Файловая система FAT16 |
32-bit File System |
Файловая система FAT32 |
Data EEPROM Emulation Library for PIC32 |
Эмуляция EEPROM памяти в Flash памяти программ |
Math Library |
Математические библиотеки |
Peripheral Library |
Библиотеки работы с периферией |
Графика |
Microchip Graphics Library |
Баблиотека работы с графическими объектами, графический интерфейс пользователя |
Звук |
Audio Library for PIC32MX - поддержка Speex, ADPCM и WAV |
Компрессия и декомпрессия звука |
Средства отладки и разработки сторонних компаний
Помимо библиотек, предоставляемых компанией Microchip Technology Inc., доступно большое количество библиотек и операционных систем реального времени от сторонних фирм:
- CMX-RTX™ - коммерческая вытесняющая операционная система реального времени, с малым объемом кода и быстрым переключением контекста.
- CMX-MicroNet™ - коммерческий стек протоколов TCP/IP c реализацией HTTP сервера, FTP сервера и клиента.
- CMX-FFS-FAT™ - коммерческая файловая система FAT12/16/32 с поддержкой длинных имен, нескольких дисков и нескольких разделов на диске.
- easyGUI - коммерческая библиотека для реализации графического интерфейса пользователя (GUI) с использованием монохромных и цветных панелей. Поддерживает большое количество контроллеров ЖКИ
- ThreadX® - коммерческая вытесняющая RTOS
- freeRTOS - бесплатная вытесняющая операционная система реального времени, поставляемая с открытыми исходными кодами, поставляемая под лицензией GPL-like, разрешающей применение freeRTOS в коммерческих проектах без публикации исходного кода проекта.
- Salvo™ - коммерческая кооперативная RTOS.
- RAMTEX GUI - коммерческая библиотека GUI
- Segger embOS - коммерческая вытесняющая RTOS
- Segger emWin - коммерческая библиотека GUI
- Segger emFile - коммерческая файловая система FAT12/16/32
- Micrium uC/OS-II - широко известная коммерческая вытесняющая RTOS, соответствует требованиям стандарта RTCA DO-178B для авиационного оборудования
- Micrium uC/TCP-IP - компактный стек протоколов TCP-IP
- Micrium uC/Probe - средство мониторинга, позволяет пользователю в реальном времени просматривать динамику системы без остановки программы. uC/Probe это Windows приложение, которое связывается по JTAG, RS-232, TCP-IP или USB интерфейсам
- Micrium uC/FS - файловая система для встраиваемых приложений
- Micrium uC/GUI - графическая библиотека для реализации пользовательского интерфейса на графических ЖК индикаторах.
Сторонние фирмы предлагают также и средства разработки и отладки, поддерживающие 32-х битные контроллеры Microchip.
Компания Ashling Microsystems предлагает отладчик кода PathFinder, среду разработки AsIDE и аппаратный эмулятор EJTAG с поддержкой микроконтроллеров PIC32. В качестве компилятора может использоваться либо MPLAB C32, либо компилятор C/C++ от компании MIPS (MIPS SDE). Полный набор отладки компании Ashling включает:
- Внутрисхемный отладчик Opella-XD EJTAG
- Отладчик кода PathFinder
- Среда разработки AsIDE-MIPS
- GDB-Server-MIPS. Сервер позволяет аппаратным эмуляторам Ashling использоваться с GNU GDB/Insight/Eclipse CDT и отладчиками. Поддерживается Windows и Linux.
Компания Green Hills Software, лидер в области разработки программных отладочных средств, предлагает интегрированную среду разработки MULTI IDE, включающую в себя менеджер проектов, текстовый редактор, пофайлер DoubleCheck™. Так же компания Green Hills Software предлагает EJTAG эмулятор Green Hills Probe и компилятор Си Green Hills MIPS Compiler.
Компания HI-TECH Software, хорошо известная по Си компиляторам для 8-и и 16-битных PIC-микроконтроллеров Microchip, так же объявила о выпуске Си компилятора для PIC32 - "HI-TECH C PRO for the PIC32".
Это первый OCG (Omniscient Code Generation) Си компилятор HI-TECH для 32-битных микроконтроллеров.
OCG позволяет компилятору определять какие конкретно регистры надо сохранить до того как входить в прерывание. Таким образом, вместо того, чтобы сохранять фиксированное количество регистров каждый раз, будут сохраняться только те, которые необходимо, тем самым исключаются лишние циклы, уплотняется код и увеличивается быстродействие, снижается потребляемый ток, и т.д.
Особенности HI-TECH Си компилятора для PIC32:
- интеграция в среду разработки HI-TIDE 3;
- интеграция в среду разработки MPLAB IDE;
- поддержка отладочных средств MPLAB ICD-2, MPLAB REAL ICE;
- включает исходный код библиотек и примеры проектов;
- включает макроассемблер, линкер, препроцессор;
- поддерживает различные ОС: Windows (в том числе Vista 64-bit), Linux и Mac OS X;
- поддерживается с командной строки, что обеспечивает интеграцию в сторонние среды разработки и редакторы кода.
Как уже отмечалось, новое семейство высокопроизводительных 32-х разрядных микроконтроллеров PIC32 имеет совместимые с 16-и разрядными контроллерами PIC24 и dsPIC33 периферийные модули и программные библиотеки с одинаковым API, PIC32MX имеют те же самые корпуса и расположение выводов, что и контроллеры PIC24 и dsPIC33. Все микроконтроллеры Microchip поддерживаются единой средой разработки MPLAB IDE, и для отладки PIC32 используются те же самые отладочные средства, что и для других микроконтроллеров Microchip. Поэтому, если разработчику устройства с 16-и разрядным микроконтроллером Microchip необходимо добавить большей производительности или больше памяти в свой проект, то все что требуется, это заменить микроконтроллер, все остальное окружение и средства разработки остаются теми же самыми. Только Microchip Technology Inc. предоставляет более чем 500 типов микроконтроллеров от простых 8-и разрядных, высокопроизводительных 16-и разрядных микроконтроллеров и контроллеров цифровой обработки сигналов и 32-х разрядных PIC32, поддерживаемых единой бесплатной средой разработки и универсальными внутрисхемными отладчиками.
Илья Афанасьев, Компания Гамма Санкт-Петербург
Статья была напечатана в журнале КиТ №9 за 2008 год
|