Введение
Линия микропроцессоров с одним чипом от Microchip Technology.
PIC (обычно произносится как /pɪk/) – это семейство микроконтроллеров, производимых компанией Microchip Technology, и происходящих от PIC1640, первоначально разработанного подразделением General Instrument по микроэлектронике. Изначально название PIC относилось к контроллеру периферийных интерфейсов (Peripheral Interface Controller), а в настоящее время расшифровывается как программируемый интеллектуальный компьютер (Programmable Intelligent Computer). Первые устройства семейства стали доступны в 1976 году; к 2013 году компания поставила более двенадцати миллиардов отдельных компонентов, используемых в широком спектре встраиваемых систем. В 1998 году Microchip представила PIC 16F84 – версию с флеш-памятью, которую можно программировать и стирать, усовершенствовав свой успешный серийно программируемый PIC16C84. В 2001 году Microchip представила больше устройств с флеш-памятью, а полномасштабное производство началось в 2002 году. Сегодня доступно огромное разнообразие PIC с различными встроенными периферийными устройствами (модули последовательной связи, UART, ядра управления двигателями и т. д.) и объемом программной памяти от 256 слов до 64 000 слов и более ( "слово" – это одна инструкция языка ассемблера, длина которой варьируется от 8 до 16 бит в зависимости от конкретного микросемейства PIC). PIC и PICmicro в настоящее время являются зарегистрированными товарными знаками Microchip Technology. Обычно считается, что PIC расшифровывается как Peripheral Interface Controller, хотя первоначальная аббревиатура General Instruments для устройств PIC1640 и PIC1650 была "Programmable Interface Controller". Микропроцессор Microchip с встроенной памятью EEPROM. К 2013 году Microchip поставляла более миллиарда микроконтроллеров PIC ежегодно.
Семейства устройств
Микрочипы PIC разработаны с использованием Гарвардской архитектуры и предлагаются в различных семействах устройств. Базовые и среднеразрядные семейства используют 8-битную память для данных, а высокопроизводительные семейства – 16-битную память для данных. Последнее поколение, PIC32MZ, представляет собой 32-битный микроконтроллер на базе MIPS. Длина машинных команд составляет 12 бит (PIC10 и PIC12), 14 бит (PIC16) и 24 бит (PIC24 и dsPIC). Бинарное представление машинных инструкций различается в зависимости от семейства и приводится в перечнях инструкций PIC. Внутри этих семейств устройства могут обозначаться как PICnnCxxx (CMOS) или PICnnFxxx (Flash). Устройства с индексом "C" обычно классифицируются как "Не рекомендуется для новых разработок" (Microchip их активно не продвигает). Программная память устройств с индексом "C" может быть OTP, ROM или EEPROM. По состоянию на октябрь 2016 года единственным продуктом OTP, который находится в производстве, является pic16HV540. Устройства с индексом "C" с кварцевыми окнами (для стирания ультрафиолетом) в целом больше не выпускаются.
PIC10 и PIC12
Эти устройства имеют 12-битовую кодовую память, 32-байтовый регистровый файл и крошечный стек вызовов глубиной два уровня. Они представлены серией PIC10, а также некоторыми устройствами PIC12 и PIC16. Базовые устройства доступны в корпусах от 6 до 40 выводов. Обычно первые 7-9 байтов регистрового файла являются специальными регистрами, а остальные байты – оперативной памятью общего назначения. Указатели реализуются с использованием пары регистров: после записи адреса в FSR (регистр выбора файла), регистр INDF (косвенный f) становится псевдонимом для адресованного регистра. Если реализована банковская оперативная память, номер банка выбирается старшими 3 битами FSR. Это влияет на регистры 16–31; регистры 0–15 являются глобальными и не подвержены влиянию битов выбора банка. Из-за очень ограниченного регистрового пространства (5 бит) 4 редко используемых регистра не получили адреса, а записывались с помощью специальных инструкций (OPTION и TRIS). Адресное пространство ROM составляет 512 байт и может указывать только на адреса в первой половине каждой страницы размером 512 слов. То есть, инструкция CALL указывает младшие 9 бит адреса, но только младшие 8 бит этого адреса являются параметром инструкции, в то время как 9-й бит (бит 8) неявно устанавливается в 0 самой инструкцией CALL. Таблицы поиска реализуются с помощью вычисляемого перехода (присвоение регистру PCL) в таблицу инструкций RETLW. RETLW возвращает 8-битовую непосредственную константу, закодированную в инструкцию, в регистр W. Этот "базовый ядро" не поддерживает прерывания; весь ввод-вывод должен выполняться путем опроса. Существуют некоторые варианты "улучшенной базовой конфигурации" с поддержкой прерываний и стеком вызовов глубиной четыре уровня. Устройства PIC10F32x имеют 14-битовую кодовую память объемом 256 или 512 слов, 64-байтовый регистровый файл SRAM и аппаратный стек глубиной 8 уровней. Эти устройства доступны в корпусах SMD с 6 выводами и DIP с 8 выводами (с двумя неиспользуемыми выводами). Доступен один вход и три пина ввода-вывода. Предусмотрен сложный набор прерываний. Тактирование осуществляется внутренним калиброванным высокочастотным генератором 16 МГц с возможностью выбора скоростей с помощью программного обеспечения и источником питания низкой мощности 31 кГц.
ПИК16
Эти устройства оснащены 14-разрядной кодовой памятью и улучшенным 8-уровневым стеком вызовов. Набор инструкций незначительно отличается от базовых устройств, но два дополнительных бита кода операции позволяют напрямую адресовать 128 регистров и 2048 слов кода. Присутствуют несколько дополнительных служебных инструкций, а также две дополнительные 8-битные инструкции для работы с литералами: сложение и вычитание. Ядро среднего класса доступно в большинстве устройств с маркировкой PIC12 и PIC16. Первые 32 байта адресного пространства регистров выделены под специальные регистры; оставшиеся 96 байт используются для оперативной памяти общего назначения. При использовании банковской оперативной памяти, старшие 16 регистров (0x70–0x7F) являются глобальными, как и несколько наиболее важных специальных регистров, включая регистр STATUS, который содержит биты выбора банка оперативной памяти. (Другие глобальные регистры – FSR и INDF, младшие 8 бит счетчика программ PCL, регистр предварительной загрузки старших разрядов счетчика программ PCLATH и главный регистр управления прерываниями INTCON.) Регистр PCLATH предоставляет старшие биты адреса инструкции, когда 8 битов, передаваемых при записи в регистр PCL, или 11 битов, передаваемых инструкциями GOTO или CALL, недостаточно для адресации доступного пространства ROM.
PIC32MK
В 2017 году Microchip представила семейство микроконтроллеров PIC32MK, разработанное для управления двигателями, промышленного управления, промышленного Интернета вещей (IIoT) и многоканальных приложений CAN.
Пространство данных (RAM)
PIC имеют набор регистров, функционирующих как оперативная память общего назначения. Специальные регистры управления аппаратными ресурсами на чипе также отображаются в пространство данных. Адресуемость памяти варьируется в зависимости от серии устройств, и все типы устройств PIC имеют некоторый механизм банков переключения для расширения адресного пространства (но в некоторых моделях устройств реализован только один банк). В более поздних сериях устройств предусмотрены инструкции перемещения, охватывающие все адресуемое пространство, независимо от выбранного банка. В более ранних устройствах любое перемещение регистра должно выполняться через аккумулятор. Для реализации косвенной адресации используются "регистр выбора файла" (FSR) и "регистр косвенной адресации" (INDF). В FSR записывается номер регистра, после чего чтение из или запись в INDF фактически осуществляются из или в регистр, на который указывает FSR. В более поздних устройствах эта концепция была расширена за счет инкремента и декремента после и до адреса, что повышает эффективность доступа к последовательно расположенным данным. Это также позволяет использовать FSR как указатель стека (SP). Внешняя память данных не адресуется напрямую, за исключением некоторых устройств PIC18 с большим количеством выводов. Однако, общие порты ввода-вывода могут быть использованы для реализации параллельной шины или последовательного интерфейса для доступа к внешней памяти и другим периферийным устройствам (с использованием подпрограмм), при этом следует учитывать, что такой программный доступ к памяти (естественно) значительно медленнее, чем доступ к встроенной памяти микроконтроллера PIC.
Кодовое пространство
Кодовое пространство обычно реализуется в виде встроенной ПЗУ, ПЗУП или флэш-ПЗУ. Как правило, не предусмотрена возможность хранения кода во внешней памяти из-за отсутствия интерфейса внешней памяти. Исключениями являются микроконтроллеры PIC17 и некоторые PIC18 с большим количеством выводов.
Размер слова
Все PIC обрабатывают (и адресуют) данные 8-битными блоками. Однако единица адресуемости пространства кода обычно не совпадает с единицей адресуемости пространства данных. Например, в базовых (PIC12) и среднеразрядных (PIC16) семействах PIC программа памяти адресуется размером слова, равным ширине инструкции, то есть 12 или 14 битами соответственно. В отличие от этого, в серии PIC18 программа памяти адресуется с шагом в 8 бит (байты), что отличается от ширины инструкции в 16 бит. Для большей ясности, ёмкость памяти программ обычно указывается в количестве (одиночных) инструкций, а не в байтах.
Стопки
У микроконтроллеров PIC есть аппаратный стек вызовов, который используется для сохранения адресов возврата. Аппаратный стек был недоступен для программного доступа на более ранних устройствах, но это изменилось с появлением устройств серии PIC18. В ранних сериях отсутствовала аппаратная поддержка стека параметров общего назначения, однако в серии PIC18 она была значительно улучшена, что сделало архитектуру PIC18 более удобной для компиляторов языков высокого уровня.
Выступление
Архитектурные решения направлены на максимизацию соотношения производительности к стоимости. Архитектура PIC была одной из первых реализаций скалярных процессоров и до сих пор остаётся одной из самых простых и дешёвых. Гарвардская архитектура, в которой инструкции и данные поступают из разных источников, значительно упрощает организацию временных характеристик и проектирование микросхем, что положительно сказывается на тактовой частоте, цене и энергопотреблении. Набор инструкций PIC хорошо подходит для реализации быстрых таблиц поиска в программной памяти. Такие поиски выполняются за одну инструкцию и два цикла. Многие функции можно реализовать таким образом. Оптимизация облегчается относительно большим объёмом программной памяти PIC (например, 4096 × 14-битных слов на 16F690) и конструкцией набора инструкций, позволяющей встраивать константы. Например, адрес перехода в инструкции ветвления может быть проиндексирован регистром W, и выполнена инструкция "RETLW", которая, как следует из названия, возвращает управление с литеральным значением в регистре W.
Задержка прерывания постоянна и составляет три цикла инструкции. Внешние прерывания необходимо синхронизировать с четырехцикловой инструкцией, иначе возможна погрешность в один цикл. Внутренние прерывания уже синхронизированы. Постоянная задержка прерывания позволяет PIC обеспечивать точные временные последовательности, управляемые прерываниями. Примером является генератор синхроимпульсов для видео. Однако это больше не верно для новейших моделей PIC, поскольку они имеют синхронную задержку прерывания, равную трём или четырём циклам.
Разработка компилятора
Несмотря на то, что существует несколько коммерческих компиляторов, в 2008 году Microchip выпустила собственные C-компиляторы, C18 и C30, для семейств процессоров 18F, 24F и 30/33F. По состоянию на 2013 год Microchip предлагает компиляторы серии XC для использования с MPLAB X. Microchip планирует постепенно отказаться от старых компиляторов, таких как C18, и рекомендует использовать компиляторы серии XC для новых разработок. Набор RISC-инструкций в коде на языке ассемблера PIC может затруднить понимание общей логики программы. Обдуманное использование простых макросов может повысить читаемость кода на языке ассемблера PIC. Например, оригинальный ассемблер Parallax PIC ("SPASM") содержит макросы, которые скрывают регистр W и создают впечатление, что PIC является машиной с двумя адресными регистрами. Он включает макроинструкции, такие как mov b, a (переместить данные из адреса a в адрес b) и add b, a (прибавить данные из адреса a к данным в адресе b). Он также скрывает инструкции перехода, предоставляя макроинструкции ветвления с тремя операндами, такие как cjne a, b, dest (сравнить a с b и перейти к метке dest, если они не равны).
Тенденции
Первое поколение PIC с EPROM-памятью почти полностью заменено чипами с флэш-памятью. Аналогично, оригинальный 12-битный набор команд PIC1650 и его непосредственные потомки уступили место 14-битным и 16-битным наборам команд. Microchip продолжает продавать OTP (однократно программируемые) и оконные (стираемые ультрафиолетом) версии некоторых своих PIC на основе EPROM для поддержки устаревших систем или крупных заказов. На веб-сайте Microchip как OTP указаны PIC, которые нельзя стирать электрически. Оконные версии, стираемые ультрафиолетом, этих чипов можно заказать.
Номер части
Буква F в номере детали PICMicro обычно указывает на то, что PICmicro использует флэш-память и может быть стерта электрическим способом. Напротив, буква C обычно означает, что стирание возможно только под воздействием ультрафиолетового света (что возможно только при использовании корпуса с прозрачным окном). Исключением из этого правила является PIC16C84, который использует EEPROM и, следовательно, допускает электрическое стирание. Буква L в названии указывает на то, что компонент будет работать при более низком напряжении, часто с ограничениями по частоте. Компоненты, разработанные специально для работы при низком напряжении, в строгом диапазоне от 3 до 3,6 вольт, обозначаются буквой J в номере детали. Эти компоненты также обладают уникальной устойчивостью к входным напряжениям, принимая до 5 В на входах. Несколько сторонних разработчиков создают C-компиляторы для PIC, многие из которых интегрируются с MPLAB и/или имеют собственную интегрированную среду разработки (IDE). Полнофункциональный компилятор для языка PICBASIC для программирования микроконтроллеров PIC доступен от meLabs, Inc. Mikroelektronika предлагает PIC-компиляторы на языках программирования C, BASIC и Pascal. Существует графический язык программирования Flowcode, способный программировать 8- и 16-битные устройства PIC и генерировать C-код, совместимый с PIC. Он представлен в различных версиях, от бесплатной демонстрационной до более полной профессиональной версии. Программный пакет Proteus Design Suite способен моделировать многие популярные 8- и 16-битные устройства PIC, а также другую схематически подключенную к PIC аппаратуру. Программа для моделирования может быть разработана непосредственно в Proteus, MPLAB или любом другом инструменте разработки.
Программисты устройств
Устройства, называемые "программаторами", традиционно используются для загрузки программного кода в микроконтроллер PIC. Большинство микроконтроллеров PIC, которые Microchip продает в настоящее время, поддерживают ICSP (внутрисхемное последовательное программирование) и/или LVP (программирование пониженным напряжением), что позволяет программировать микроконтроллер PIC, не извлекая его из целевой схемы. Microchip предлагает программаторы/отладчики серий MPLAB и PICKit. MPLAB ICD4 и MPLAB REAL ICE – это современные программаторы и отладчики для профессиональной разработки, а PICKit 3 – бюджетная линейка программаторов/отладчиков для хобби и обучения.
Загрузка
Многие высокопроизводительные микроконтроллеры на флэш-памяти также могут самопрограммироваться (записывать данные в собственную память программ), процесс, известный как загрузка. Демонстрационные платы поставляются с небольшим заводским загрузчиком, который позволяет загружать пользовательские программы через интерфейс, например RS-232 или USB, что избавляет от необходимости использования программатора. В качестве альтернативы доступно программное обеспечение загрузчика, которое пользователь может загрузить в микроконтроллер с помощью ICSP. После программирования загрузчика в микроконтроллер, пользователь может перепрограммировать устройство через RS-232 или USB, используя специализированное компьютерное программное обеспечение. Преимущества загрузчика перед ICSP включают более высокую скорость программирования, немедленный запуск программы после программирования и возможность отладки и программирования с использованием одного кабеля.
Третья сторона
Существует множество программаторов для микроконтроллеров PIC, от крайне простых устройств, использующих ICSP для прямой загрузки кода с компьютера, до интеллектуальных программаторов, способных проверять устройство при различных напряжениях питания. Многие из этих сложных программаторов сами используют предварительно запрограммированный PIC для отправки команд программирования на программируемый PIC. Интеллектуальные программаторы необходимы для программирования более ранних моделей PIC (преимущественно типа EPROM), которые не поддерживают внутрисхемное программирование. Программаторы сторонних производителей представлены планами для самостоятельной сборки, наборами для сборки и полностью протестированными готовыми к использованию устройствами. Некоторые из них имеют простую конструкцию и требуют от ПК формирования сигналов низкого уровня для программирования (обычно они подключаются к последовательному или параллельному порту и состоят из небольшого количества простых компонентов), в то время как другие имеют встроенную логику программирования (обычно они используют последовательное или USB-соединение, как правило, быстрее и часто построены на базе самих PIC для управления).
Очистка в цепи
Все новые устройства PIC оснащены интерфейсом ICD (внутрисхемной отладки), встроенным в ядро процессора, который позволяет интерактивно отлаживать программу совместно с MPLAB IDE. Отладчики MPLAB ICD и MPLAB REAL ICE могут взаимодействовать с этим интерфейсом через интерфейс ICSP. Однако эта система отладки имеет свою цену: ограниченное количество точек останова (1 на более старых устройствах, 3 на новых), потеря некоторых портов ввода/вывода (за исключением некоторых PIC с поверхностным монтажом в 44-выводном корпусе, которые имеют выделенные линии для отладки) и потеря некоторых функций, реализованных на чипе. Некоторые устройства не поддерживают внутрисхемную отладку из-за стоимости или нехватки выводов. В некоторых крупных чипах также отсутствует модуль отладки. Для отладки этих устройств требуется специальная версия ICD чипа, установленная на дочерней плате, которая предоставляет выделенные порты. Некоторые из этих отладочных чипов могут функционировать как несколько различных типов чипов благодаря перемычкам, выбираемым на дочерней плате. Это позволяет заменить в целом идентичные архитектуры, не имеющие полного набора периферийных устройств на чипе, одним чипом ICD. Например, 16F690 ICD может функционировать как один из шести различных вариантов, каждый из которых имеет ни одного, некоторые или все пять периферийных устройств на чипе.
Эмуляторы в схеме
Microchip предлагает три полноценных внутрисхемных эмулятора: MPLAB ICE2000 (параллельный интерфейс, доступен USB-конвертер); более новый MPLAB ICE4000 (подключение USB 2.0) и, самый последний, REAL ICE (подключение USB 2.0). Все эти инструменты обычно используются совместно с MPLAB IDE для интерактивной отладки кода на уровне исходного кода, выполняющегося на целевом устройстве.
Операционные системы
В проектах PIC могут использоваться операционные системы реального времени, такие как FreeRTOS, AVIX RTOS, uRTOS, Salvo RTOS или другие аналогичные библиотеки для планирования и определения приоритетов задач. Проект с открытым исходным кодом, разработанный Сергеем Вакуленко, адаптирует 2.11BSD к архитектуре PIC32 под названием RetroBSD. Это позволяет использовать знакомую Unix-подобную операционную систему, включая встроенную среду разработки, на микроконтроллере, с учетом ограничений его аппаратных ресурсов.
Параллакс
Parallax выпустила серию микроконтроллеров, подобных PICmicro, известных как Parallax SX. В настоящее время производство прекращено. Разработанные с архитектурой, аналогичной микроконтроллерам PIC, использовавшимся в оригинальных версиях BASIC Stamp, микроконтроллеры SX заменили PIC в нескольких последующих версиях этого продукта. Микроконтроллеры SX от Parallax – это 8-битные RISC-микроконтроллеры, использующие 12-битные команды, работающие на высокой частоте 75 МГц (75 МИПС). Они включают до 4096 12-битных слов флэш-памяти и до 262 байт оперативной памяти, 8-битный счетчик и другую вспомогательную логику. Существуют программные библиотечные модули для эмуляции интерфейсов I²C и SPI, UART, генераторов частоты, измерительных счетчиков, а также ШИМ и сигма-дельта А/Ц преобразователей. Другие интерфейсы относительно легко реализовать, а существующие модули можно модифицировать для добавления новых функций.
ПКК Миландр
Российский производитель ПКК Миландр производит микроконтроллеры на базе архитектуры PIC17 в серии 1886. Память программ состоит из флэш-памяти объемом до 64 кБ в моделях 1886VE2U (1886ВЕ2У) или EEPROM объемом 8 кБ в моделях 1886VE5U (1886ВЕ5У). Модели 1886VE5U (1886ВЕ5У) – 1886VE7U (1886ВЕ7У) предназначены для работы в военном температурном диапазоне от -60 °C до +125 °C. Аппаратные интерфейсы в различных модификациях включают USB, CAN, I2C, SPI, а также АЦП и ЦАП. Модель 1886VE3U (1886ВЕ3У) содержит аппаратный ускоритель для криптографических функций, соответствующих ГОСТ 28147-89. Также доступны радиационно-стойкие микросхемы с обозначениями 1886VE8U (1886ВЕ8У) и 1886VE10U (1886ВЕ10У).
ELAN Микроэлектроника
ELAN Microelectronics Corp. на Тайване производит линейку микроконтроллеров, основанных на архитектуре PIC16, с 13-битными инструкциями и меньшим (6-битным) адресным пространством оперативной памяти.
Holtek Semiconductor
Holtek Semiconductor производит большое количество очень дешевых микроконтроллеров (по цене от 8,5 центов при закупке оптом) с 14-битным набором команд, удивительно похожим на PIC16.
Другие производители в Азии
Многие ультра-бюджетные микроконтроллеры OTP азиатских производителей, применяемые в недорогой потребительской электронике, основаны на архитектуре PIC или её модифицированной версии. Большинство клонов ориентированы только на базовые модели (PIC16C5x/PIC12C50x). Microchip предпринимал попытки подать в суд на некоторых производителей, когда копирование было особенно явным, но безуспешно.
without success.