====== 32-разрядные микроконтроллеры Microchip ====== (весна, 2008 год) //В ноябре 2007 года компания Microchip анонсировала выпуск первых в своей истории 32-разрядных микроконтроллеров PIC32. Выход лидера в производстве 8- и 16-битных микроконтроллеров на 32-разрядный рынок вполне объясним: все тренды показывают значительное увеличение объема продаж 32-битных контроллеров за последние несколько лет, что в свою очередь связано с возросшими требованиями к встраиваемым системам.// Несмотря на то, что все предыдущие семейства контроллеров были разработаны специалистами Microchip, было решено лицензировать 32-разрядное ядро у компании [[http://www.mips.com/|MIPS Technologies Inc.]], одного из лидеров в разработке программных ядер. Архитектуры MIPS используют такие компании как AMD, Broadcom, Infeneon, Realtek, Sharp, Sony, NXP, Toshiba. Тем не менее, PIC32 это первый однокристальный процессор с архитектурой MIPS имеющий интегрированную флэш-память и полный набор микроконтроллерной периферии. Архитектура MIPS32 выбрана не случайно. При выборе новой платформы рассматривались различные варианты, а критерии выбора были следующими: * размер кристалла и, соответственно, стоимость конечного изделия * потребление энергии на МГц тактовой частоты * производительность на МГц тактовой частоты * возможность расширения архитектуры * простота интеграции периферии * время реакции на прерывание По большинству параметров тендер выиграла компания MIPS с архитектурой [[http://www.mips.com/products/processors/32-64-bit-cores/mips32-m4k/|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 | ~~UP~~ ===== Архитектура ===== Семейство PIC32MX основано на синтезируемом ядре MIPS32 M4K™, которое позиционируется разработчиком ядра для использования в микроконтроллерах с низким потреблением энергии. Основные особенности ядра MIPS32 M4K™ синтезированного для применения в PIC32MX: * Пятиступенчатый конвейер, производительность до 1.5 DMIPS/МГц * Тактовая частота до 80 МГц * Программируемый кэш, позволяющий увеличить частоту доступа к флэш-памяти до максимальной частоты ядра * Набор 32-битных инструкций MIPS32® release 2 * Дополнительный набор 16-битных инструкций MIPS16e™, позволяющий снизить объем исполняемого кода * Аппаратный умножитель и делитель, оптимизированные по скорости выполнения операции * Векторный приоритетный контроллер прерываний * EJTAG порт, предназначенный для граничного сканирования, программирования флэш-памяти и отладки приложения с модулем внутрисхемной трассировки \\ Архитектура 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, индийский англ.)** \\ ~~UP~~ ==== АЛУ и набор инструкций ==== Семейство 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 битам). ~~UP~~ ==== Память ==== Семейство 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 и т. п.) При конфликте доступа шинная матрица генерирует исключение. ~~UP~~ ==== Модуль предвыборки ==== Семейство PIC32MX имеет флэш-память с шиной 128 бит, которая позволяет за одно обращение выбирать четыре 32-битных инструкции. Однако даже при наличии 128-битного буфера выполнение инструкций с тактовой частотой ядра не представляется возможным, так как реальное приложение содержит больше количество ветвлений, повторяющихся инструкций и выборки данных из флэш-памяти. Поэтому в архитектуру PIC32MX был введен конфигурируемый кэш предвыборки, состоящий из 16 128-битных строк. 4 строки могут использоваться в качестве кэша данных, что полезно при обработке больших константных массивов. Использование кэша предвыборки позволяет выполнять линейный код с максимальной частотой тактирования. Этому способствуют две линии кэша с адресной маской, которые могут содержать повторяющиеся инструкции, а так же механизм предикативной выборки инструкций. **Обзор модуля предвыборки PIC32 (индийский англ.)** \\ ~~UP~~ ==== Контроллер прерываний ==== В ядре 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-битный регистр) и приоритет прерывания таймера. Все источники с приоритетом ниже или равным приоритету таймера не установят запрос на прерывание, а запустят таймер, в который перед этим будет загружено значение из регистра периода. Таймер будет декрементироваться каждый такт. Как только значение таймера будет равно нулю, установится флаг источника прерывания, запустившего таймер. ~~UP~~ ==== Контроллер прямого доступа к памяти (DMA) ==== Контроллер DMA предназначен для передачи данных между блоками памяти и периферийными модулями без участия ядра контроллера. Семейство PIC32MX имеет до 4 идентичных каналов DMA, которые могут использоваться как для передачи данных между периферией и памятью, так и для переноса данных между блоками памяти. Контроллер DMA позволяет обеспечивать транзакции на уровне слов, и байтов. В последнем случае выравнивания по слову данных не требуется. Арбитраж доступа осуществляется на основании фиксированных приоритетов каналов. Два каналы могут быть объединены в цепочку – после окончания передачи ведущего канала автоматически запускается ведомый канал. Каналы могут работать в двух адресных режимах: нормальном и расширенном. В нормальном режиме объем передаваемых данных ограничен 256 байтами, но допустима транзакция по невыровненному адресу и передача типа «память-периферия». В расширенном режиме адресации объем передаваемых данных не должен превышать 64 кБ. Контроллер DMA имеет в своем составе модуль вычисления циклического избыточного кода (CRC), который может быть подключен к любому каналу. Модуль позволяет вычислять CRC любой разрядности с произвольным полиномом. **Обзор DMA PIC32 (индийский англ.)** \\ ~~UP~~ ===== Системные модули ===== Как и 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 предназначен для получения максимальной таковой частоты при использовании источников тактирования с частотой меньшей 72 МГц. Модуль PLL так же имеет выходной делитель, что позволяет получить широкую сетку частот от одного внешнего источника. Как и в большинстве микроконтроллеров Microchip, существует возможность переключать источники тактирования в ходе выполнения программы и подстраивать внутренний высокочастотный генератор в диапазоне ±12%. В систему тактирования PIC32MX входит монитор наличия тактовой частоты, который генерирует прерывание и переключает источник тактирования на дополнительный (внутренний RC генератор) при отказе основного. Этот же модуль обеспечивает вывод микроконтроллера из режима SLEEP с дополнительным источником с последующим переключением на основной. Это позволяет быстро начать выполнение приложения, не дожидаясь стабилизации частоты кварцевого генератора. Дополнительный кварцевый генератор 32768 Гц может быть включен и отключен программно. Он может использоваться для тактирования ядра, одного из таймеров и модуля часов реального времени. Для снижения потребления энергии можно уменьшить тактовую частоту периферийных модулей с помощью делителя частоты ядра с коэффициентами деления 2, 4 и 8. Микроконтроллеры семейства PIC32MX имеют два основных режима энергосбережения IDLE и SLEEP. В режиме IDLE ядро останавливает выполнение программы, однако основной тактовый генератор и периферийные модули продолжают работу. При входе в режим SLEEP, основной тактовый генератор отключается. Вывод микроконтроллера из энергосберегающих режимов возможен при сбросе, прерывании или переполнении сторожевого таймера. Для входа в энергосберегающий режим используется инструкция WAIT. Использование энергосберегающих режимов совместно с гибким управлением тактированием, позволит значительно уменьшить потребление энергии устройством. ~~UP~~ ===== Периферийные модули ===== 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'' предназначено для инвертирования битов в регистре. Например, сброс младшего бита в регистре ''TRISA'' будет выглядеть следующим образом:TRISACLR = (1 << 0);
В этом случае нет необходимости считывать значение TRISA в регистр, обнулять бит и сохранять итоговое значение:
TRISA &= ~(1 << 0);
Такой механизм позволяет значительно сократить количество инструкций на обслуживание периферии, увеличить скорость работы и обеспечить атомарность операций. Кроме того, большинство периферийных регистров используют только младшую часть слова, что позволяет компилятору использовать эффективные арифметические и логические инструкции с константными операндами.
Как уже отмечено, большинство периферийных модулей в PIC32MX перенесено из 16-битного семейства PIC24F, поэтому для более подробного ознакомления с периферией PIC32 можно обратиться к статье [[articles:mchp:16_bit_mcu|16-битные микроконтроллеры Microchip]].
~~UP~~
===== Средства разработки =====
Компания Microchip традиционно предоставляет полный набор отладочных средств для освоения и профессиональной работы с семейством PIC32MX.
==== Программные средства разработки ====
Одновременно с анонсом 32-разрядных контроллеров PIC32MX компания Microchip выпустила новую версию среды разработки [[http://www.microchip.com/mplab|MPLAB 8.0]] (актуальная версия - **8.14**), которая на сегодняшний день поддерживает все семейства, начиная от PIC10 и заканчивая PIC32.
Выпущен компилятор с языка Си [[http://www.microchip.com/c32|MPLAB C32]] – порт известного компилятора GCC. Компилятор включает библиотеки стандартных функций, написанные разработчиком ядра MIPS. Доступна бесплатная студенческая версия компилятора с ограничением по объему исполняемого кода (64 кБ). Актуальная версия - **1.02**.
Доступны средства разработки сторонних компаний:
* [[http://www.ashling.com/|Ashling asIDE]] – среда разработки, включающая в себя менеджер проектов, текстовый редактор, отладчик кода PathFinder и аппаратный EJTAG эмулятор. В качестве компилятора может использоваться либо MPLAB C32, либо компилятор C/C++ от компании MIPS (MIPS SDE).
* [[http://www.ghs.com/|Green Hills MULTI IDE]] – среда разработки, включающая в себя менеджер проектов, текстовый редактор, пофайлер DoubleCheck™, и Green Hills Probe – EJTAG эмулятор. В качестве компилятора используется компилятор Green Hills MIPS.
* [[http://microchip.htsoft.com/products/compilers/pic32.php|Hi-Tech C PRO]] - компилятор и среда от давнего партнера Microchip, компании Hi-Tech Software, известной компиляторами для семейств PIC16 и PIC18.
~~UP~~
==== Аппаратные средства разработки ====
PIC32MX – первое семейство в линейке Microchip, которое имеет не только проприетарный интерфейс внутрисхемной отладки. Ядро MIPS32 M4K™ включает в свой состав модуль внутрисхемной отладки EJTAG и модуль трассировки исполняемого кода и данных. Таким образом, сторонние разработчики отладочных средств могут интегрировать в свои продукты поддержку программирования и отладки PIC32MX с помощью JTAG.
Тем не менее, PIC32MX включает в себя модуль теневой отладки, который на сегодняшний день поддерживают внутрисхемный отладчик ICD2 и внутрисхемный эмулятор REAL ICE, причем последний позволяет выполнять трассировку кода и данных. Семейство PIC32MX имеет 4 аппаратных точки останова по коду и 2 точки останова по данным.
Для начала освоения PIC32MX компания Microchip предлагает использовать [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2615&dDocName=en532453|PIC32 Starter Kit]] – отладочную плату с установленным микроконтроллером **PIC32MX360F512L**. Плата включает в себя внутрисхемный отладчик с интерфейсом USB, реализованный на микроконтроллере PIC18F4550. На плате установлены 3 светодиода и 3 кнопки. Плата питается от интерфейса USB.
**Краткий видеообзор отладочной платы PIC32 Starter Kit можно посмотреть по [[http://video.edn.com/services/link/bcpid1358313811/bclid1358639275/bctid1579853499|ссылке]] (англ.)**
Освоение контроллеров семейства PIC32MX460 (с интерфейсом UAB OTG) можно начать, используя плату [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2615&dDocName=en535536|PIC32 USB Starter Board]]. Кит аналогичен предыдущему, но имеет установленные разъемы USB A (host) и USB micro-AB (OTG).
Доступна [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2615&dDocName=en535444|плата расширения]] к PIC32 Starter Kit (PIC32 USB Starter Board) , которая подключается к 122-выводному разъему, установленному на плате.
Так же доступны процессорные модули, предназначенные для использования совместно с популярной отладочной платой для 16-битных семейств [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en024858|Explorer 16]]. На процессорном модуле установлен разъем трассировки, который можно использовать для подключения к внутрисхемному эмулятору REAL ICE. Доступны модули как для семейства PIC32MX360, так и для PIC32MX460.
Для программирования и отладки можно использовать знакомые средства - внутрисхемный отладчик [[http://www.microchip.com/icd2|MPLAB ICD2]] и внутрисхемный эмулятор [[http://www.microchip.com/realice|REAL ICE]]. Семейство PIC32MX так же поддерживается бюджетным программатором начального уровня [[http://www.microchip.com/pickit2|PICKit2]] (пока только программирование из оболочки PICKit2).
**Обзор аппаратных средств разработки для PIC32 (англ.)**
\\
~~UP~~
==== Программные библиотеки ====
Компания Microchip традиционно обеспечивает разработчиков квалифицированной технической поддержкой в виде руководств по применению и программных библиотек.
Не является исключением и семейство PIC32MX, для которого на данный момент доступны следующие библиотеки:
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en534263|USB Device and Embedded Host Stack]] - стек обслуживания модуля USB OTG микроконтроллеров семейства PIC32MX460. Реализованы функции **device** и **host**. Поддержка двухролевого стека (OTG) будет добавлена позднее.
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1489|Microchip TCP/IP]] - стек протоколов TCP/IP
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en532885|Microchip TCP/IP with BSD Sockets]] - TCP/IP стек с BSD (Berkley Socket Distribution) API. Механизм сокетов позволяет использовать стороннее программное обеспечение, например, HTTP и FTP серверы и клиенты, различные сетевые протоколы и т. п. В состав стека входит реализация файловой системы FAT16, примеры реализации HTTP и FTP сервера, реализация SNMP агента.
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en520606|MiWi™ Protocol Stack]] - стек обслуживания беспроводной сети MiWi™
* [[http://www.microchip.com/qvga|Microchip Graphics Library]] - библиотека графического интерфейса пользователя (GUI) для TFT-панелей.
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en534592|CAN Library for PIC32]] - библиотека поддержки CAN (используется CAN-контроллер MCP2515)
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en534485|Audio Library for PIC32MX]] - библиотека сжатия и воспроизведения речи. Поддерживаются кодеки SPEEX и ADPCM.
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en532040|32-bit File System]] - файловая система FAT16/FAT32. В состав библиотеки включен драйвер SD/MMC карт памяти.
* [[http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en534194|Data EEPROM Emulation Library]] - библиотека эмуляции EEPROM во Flash-памяти микроконтроллеров.
\\
Доступно большое количество библиотек и от сторонних разработчиков:
**RTOS**
* [[http://www.cmx.com/rtx.htm|CMX-RTX™]] – коммерческая вытесняющая операционная система реального времени, с малым объемом кода и быстрым переключением контекста.
* [[http://www.rtos.com/page/product.php?id=2|ThreadX®]] – коммерческая вытесняющая RTOS
* [[http://www.freertos.org/port_PIC32_MIPS_MK4.html|freeRTOS]] – бесплатная вытесняющая операционная система реального времени, поставляемая с открытыми исходными кодами, поставляемая под лицензией GPL-like, разрешающей применение freeRTOS в коммерческих проектах без публикации исходного кода проекта.
* [[http://www.micrium.com/microchip/index.html|Micrium uC/OS-II]] – широко известная коммерческая вытесняющая RTOS.
* [[http://www.segger.com/embos_general.html|Segger embOS]] – коммерческая вытесняющая RTOS
* [[http://www.pumpkininc.com/|Salvo™]] - коммерческая кооперативная RTOS.
**GUI**
* [[http://www.easygui.com|easyGUI]] – коммерческая библиотека для реализации графического интерфейса пользователя с использованием монохромных и цветных панелей. Поддерживает большое количество контроллеров ЖКИ
* [[http://www.ramtex.dk/|RAMTEX GUI]] – коммерческая библиотека GUI
* [[http://www.segger.com/emwin.html|Segger emWin]] – коммерческая библиотека GUI
**TCP/IP**
* [[http://www.cmx.com/micronet.htm|CMX-MicroNet™]] - коммерческий стек протоколов TCP/IP c реализацией HTTP сервера, FTP сервера и клиента.
**FAT**
* [[http://www.cmx.com/ffs.htm|CMX-FFS-FAT™]] - коммерческая файловая система FAT12/16/32 с поддержкой длинных имен, нескольких дисков и нескольких разделов на диске.
* [[http://www.segger.com/emfile.html|Segger emFile]] – коммерческая файловая система FAT12/16/32
\\
~~UP~~