PIC (обычно произносится как /pɪk/) — семейство микроконтроллеров , производимых Microchip Technology , произошедшее от PIC1640 [1] [2], первоначально разработанного подразделением микроэлектроники General Instrument . Название PIC изначально относилось к контроллеру периферийного интерфейса [3] , а в настоящее время расширено до программируемого интеллектуального компьютера [4] . Первые части семейства были доступны в 1976 году; к 2013 году компания поставила более двенадцати миллиардов отдельных деталей, используемых в самых разных встраиваемых системах [5] .
Первоначально PIC был разработан как периферийное устройство для General Instrument CP1600 , первого коммерчески доступного однокристального 16-битного микропроцессора . Чтобы ограничить количество требуемых выводов, CP1600 имел сложную высокомультиплексную шину , с которой было трудно взаимодействовать, поэтому в дополнение к различным специализированным периферийным устройствам General Instrument создала программируемый PIC1640 как универсальное периферийное устройство. С его собственным небольшим ОЗУ , ПЗУ и простым ЦП для управления передачами он мог подключать шину CP1600 практически к любому существующему 8-битному периферийному устройству. Хотя это обеспечивало значительную мощность, маркетинг GI был ограничен, и CP1600 не имел успеха. Однако GI также создала PIC1650, автономный PIC1640 с дополнительным вводом-выводом общего назначения вместо интерфейса CP1600. Когда в 1985 году компания выделила свое подразделение по производству микросхем в Microchip, продажи CP1600 практически прекратились, но PIC1650 и его преемники сформировали свой собственный крупный рынок и стали одним из основных продуктов новой компании. [6]
Ранние модели имели только масочное ПЗУ для хранения кода, но с его ответвлением он вскоре был модернизирован для использования EPROM , а затем EEPROM , что позволило конечным пользователям программировать устройства на своих собственных объектах. Все текущие модели используют флэш-память для хранения программ, а более новые модели позволяют PIC перепрограммировать себя. С тех пор линейка претерпела значительные изменения; теперь доступна память шириной 8 бит, 16 бит и, в последних моделях, 32 бита. Программные инструкции различаются по количеству бит в зависимости от семейства PIC и могут быть длиной 12, 14, 16 или 24 бита. Набор инструкций также различается в зависимости от модели, более мощные чипы добавляют инструкции для функций цифровой обработки сигнала . Аппаратные реализации устройств PIC варьируются от 6-контактных SMD , 8-контактных DIP- чипов до 144-контактных SMD-чипов с дискретными контактами ввода-вывода, модулями АЦП и ЦАП и портами связи, такими как UART , I2C , CAN и даже USB . Для многих типов существуют маломощные и высокоскоростные варианты.
Производитель поставляет программное обеспечение для разработки, известное как MPLAB X , ассемблеры и компиляторы C/C++, а также программирующее/отладочное оборудование серий MPLAB и PICKit . Также доступны сторонние и некоторые инструменты с открытым исходным кодом. Некоторые детали имеют возможность внутрисхемного программирования; доступны недорогие программаторы для разработки, а также программаторы для массового производства.
Устройства PIC пользуются популярностью как среди промышленных разработчиков, так и среди любителей благодаря своей низкой стоимости, широкой доступности, большой базе пользователей, обширному набору рекомендаций по применению, наличию недорогих или бесплатных инструментов разработки, последовательному программированию и возможности перепрограммируемой флэш-памяти.
Оригинальный PIC предназначался для использования с новым 16-битным центральным процессором (ЦП) CP1600 компании General Instrument . Чтобы вместить 16-битные шины данных и адреса в стандартный на тот момент 40-контактный двухрядный корпус (DIP), обе шины использовали один и тот же набор из 16 соединительных контактов. Для связи с ЦП устройства должны были следить за другими контактами на ЦП, чтобы определить, является ли информация на шине адресом или данными. Поскольку одновременно был представлен только один из них, устройства должны были следить за шиной, чтобы перейти в режим адреса, проверять, является ли этот адрес частью ее диапазона ввода/вывода, отображенного в памяти , «защелкивать» этот адрес, а затем ждать включения режима данных и затем считывать значение. Кроме того, 1600 использовал несколько внешних контактов для выбора устройства, с которым он пытался связаться, что еще больше усложняло интерфейс.
Поскольку интерфейсные устройства для 1600 могли быть сложными, GI также выпустила серию 164x вспомогательных микросхем со всеми необходимыми встроенными схемами. Они включали драйверы клавиатуры, интерфейсы кассетных дек для хранения и множество подобных систем. Для более сложных систем GI представила 1640 «Программируемый контроллер интерфейса» в 1975 году. Идея заключалась в том, что устройство будет использовать PIC для обработки всего интерфейса с CP1600 хост-компьютера, но также использовать свой собственный внутренний процессор для обработки фактического устройства, к которому оно было подключено. Например, дисковод для гибких дисков мог быть реализован с PIC, взаимодействующим с ЦП с одной стороны, и контроллером гибких дисков с другой. В соответствии с этой идеей, то, что сегодня известно как микроконтроллер , PIC включало небольшой объем постоянной памяти (ПЗУ), которая могла быть записана с кодом контроллера устройства пользователя, и отдельную оперативную память (ОЗУ) для буферизации и работы с данными. Они были подключены по отдельности, что сделало PIC системой с гарвардской архитектурой , в которой код и данные управлялись по отдельным внутренним путям.
Теоретически, сочетание 1600 CPU и 1640 контроллеров устройств PIC обеспечивало очень высокопроизводительную систему управления устройствами, которая была похожа по мощности и производительности на контроллеры каналов, которые можно увидеть на мэйнфреймах . Например, в примере с контроллером гибких дисков один PIC мог управлять приводом, обеспечивать разумный объем буферизации для повышения производительности, а затем передавать данные на хост-компьютер и с него с помощью прямого доступа к памяти (DMA) или с помощью относительно простого кода в CPU. Недостатком этого подхода была стоимость; в то время как PIC не был необходим для низкоскоростных устройств, таких как клавиатура, для многих задач потребовался бы один или несколько PIC для построения полной системы.
Хотя концепция дизайна имела ряд привлекательных особенностей, General Instrument никогда не продвигала 1600 активно, предпочитая иметь дело только с крупными клиентами и игнорируя рынок нижнего ценового диапазона. Это привело к очень небольшому внедрению системы, при этом Intellivision была единственным действительно широко распространенным использованием с примерно тремя миллионами единиц. Однако GI представила автономную модель 1650 PIC [7] в 1976 году, разработанную для использования без CP1600. Хотя она не была такой мощной, как Intel MCS-48, представленная в том же году, она была дешевле и нашла рынок. [6] Последующие версии включали PIC1670 с инструкциями, расширенными с 12 до 13 бит, чтобы обеспечить вдвое большее адресное пространство (64 байта ОЗУ и 1024 слова ПЗУ). [8] Когда GI отделила свое подразделение чипов, чтобы сформировать Microchip Technology в 1985 году, производство CP1600 прекратилось. Однако к этому времени PIC 1650 уже завоевал широкую аудиторию клиентов, использующих его для самых разных целей, и PIC стал одним из основных продуктов новой компании. [6]
В 1985 году General Instrument продала свое подразделение микроэлектроники , и новые владельцы отменили почти все, что к тому времени в основном устарело. Однако PIC был модернизирован с помощью внутреннего EPROM для создания программируемого контроллера каналов . В то же время Plessey в Великобритании выпустила процессоры NMOS под номерами PIC1650 и PIC1655 на основе дизайна GI, используя те же наборы инструкций, либо программируемые пользователем маски, либо версии, предварительно запрограммированные для автодозвонщиков и интерфейсов клавиатуры. [9]
В 1998 году Microchip представила PIC 16F84, флэш-программируемую и стираемую версию своего успешного последовательного программируемого PIC16C84. В 2001 году Microchip представила больше флэш-программируемых устройств, а их полное производство началось в 2002 году. [10]
Сегодня доступно огромное количество микроконтроллеров PIC с различными встроенными периферийными устройствами ( модули последовательной связи , UART , ядра управления двигателем и т. д.) и программной памятью объемом от 256 слов до 64 К слов и более («слово» — это одна инструкция на языке ассемблера, длина которой варьируется от 8 до 16 бит в зависимости от конкретного семейства микроконтроллеров PIC).
PIC и PICmicro теперь являются зарегистрированными торговыми марками Microchip Technology. Обычно считается, что PIC означает Peripheral Interface Controller (контроллер периферийного интерфейса) , хотя изначальное сокращение General Instruments для первых устройств PIC1640 и PIC1650 было « Programmable Interface Controller» (программируемый контроллер интерфейса ). [3] Аббревиатуру быстро заменили на « Programmable Intelligent Computer» (программируемый интеллектуальный компьютер ). [4]
Microchip 16C84 ( PIC16x84 ), представленный в 1993 году, был первым [11] процессором Microchip с встроенной памятью EEPROM.
К 2013 году Microchip ежегодно поставляла более миллиарда микроконтроллеров PIC. [5] [ сомнительно – обсудить ]
Микросхемы 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» с кварцевыми окнами (для стирания УФ-излучением) в целом больше не доступны.
Эти устройства имеют 12-битную кодовую память, 32-байтовый файл регистра и крошечный двухуровневый стек вызовов. Они представлены серией PIC10, а также некоторыми устройствами PIC12 и PIC16. Базовые устройства доступны в корпусах с 6-контактными и 40-контактными выводами.
Обычно первые 7–9 байтов регистрового файла являются регистрами специального назначения, а остальные байты — ОЗУ общего назначения. Указатели реализуются с использованием пары регистров: после записи адреса в FSR (регистр выбора файла) регистр INDF (косвенный f) становится псевдонимом для адресуемого регистра. Если реализовано банковое ОЗУ, номер банка выбирается старшими 3 битами FSR. Это влияет на номера регистров 16–31; регистры 0–15 являются глобальными и не зависят от битов выбора банка.
Из-за очень ограниченного пространства регистров (5 бит) 4 редко считываемым регистрам не были назначены адреса, а были записаны специальными инструкциями ( OPTION
и TRIS
).
Адресное пространство ПЗУ равно 512 и может указывать адреса только в первой половине каждой страницы из 512 слов. То есть инструкция CALL указывает нижние 9 бит адреса, но только нижние 8 бит этого адреса являются параметром инструкции, в то время как 9-й бит (бит 8) неявно указывается как 0 самой инструкцией CALL.
Таблицы поиска реализованы с использованием вычислений GOTO
(назначение регистру PCL) в таблицу RETLW
инструкций. RETLW выполняет возврат подпрограммы и одновременно загружает регистр W 8-битной непосредственной константой, которая является частью инструкции.
Это "базовое ядро" не поддерживает прерывания ; все вводы/выводы должны быть опрошены . Существуют некоторые варианты "расширенной базовой линии" с поддержкой прерываний и четырехуровневым стеком вызовов.
Устройства PIC10F32x имеют среднюю 14-битную кодовую память объемом 256 или 512 слов, 64-байтовый файл регистра SRAM и 8-уровневый глубокий аппаратный стек. Эти устройства доступны в 6-контактных корпусах SMD и 8-контактных корпусах DIP (с двумя неиспользуемыми выводами). Доступны только один вход и три вывода ввода-вывода. Доступен сложный набор прерываний. Часы представляют собой внутренний калиброванный высокочастотный генератор 16 МГц с возможностью выбора скоростей с помощью программного обеспечения и маломощный источник 31 кГц.
Эти устройства имеют 14-битную кодовую память и улучшенный 8-уровневый глубокий стек вызовов. Набор инструкций мало чем отличается от базовых устройств, но два дополнительных бита кода операции позволяют напрямую обращаться к 128 регистрам и 2048 словам кода. Есть несколько дополнительных смешанных инструкций и две дополнительные 8-битные литеральные инструкции, сложение и вычитание. Ядро среднего уровня доступно в большинстве устройств с маркировкой PIC12 и PIC16.
Первые 32 байта пространства регистра выделяются для регистров специального назначения; оставшиеся 96 байт используются для ОЗУ общего назначения. Если используется банковое ОЗУ, верхние 16 регистров (0x70–0x7F) являются глобальными, как и несколько наиболее важных регистров специального назначения, включая регистр STATUS, который содержит биты выбора банка ОЗУ. (Другие глобальные регистры — это FSR и INDF, нижние 8 бит счетчика программ PCL, верхний регистр предварительной загрузки PC PCLATH и главный регистр управления прерываниями INTCON.)
Регистр PCLATH предоставляет старшие биты адреса инструкции, когда 8 бит, предоставленных при записи в регистр PCL, или 11 бит, предоставленных инструкцией GOTO
или CALL
, недостаточно для адресации доступного пространства ПЗУ.
Серия PIC17 так и не стала популярной и была заменена архитектурой PIC18 (однако см. клоны ниже). Серия PIC17 не рекомендуется для новых разработок, и ее доступность может быть ограничена пользователями.
Улучшения по сравнению с более ранними ядрами — 16-битные коды операций (позволяющие использовать много новых инструкций) и 16-уровневый глубокий стек вызовов. Устройства PIC17 выпускались в корпусах с количеством выводов от 40 до 68.
Серия PIC17 представила ряд важных новых функций: [12]
Существенным ограничением было то, что объем оперативной памяти был ограничен 256 байтами (26 байт регистров специальных функций и 232 байта оперативной памяти общего назначения), а в моделях, которые поддерживали больший объем, переключение банков было неудобным.
В 2000 году Microchip представила архитектуру PIC18. В отличие от серии PIC17, она оказалась очень популярной, с большим количеством вариантов устройств, которые в настоящее время производятся. В отличие от более ранних устройств, которые чаще всего программировались на языке ассемблера , C стал преобладающим языком разработки. [13]
Серия PIC18 унаследовала большинство функций и инструкций серии PIC17, а также добавила ряд важных новых функций:
Пространство RAM составляет 12 бит, адресуется с использованием 4-битного регистра выбора банка (BSR) и 8-битного смещения в каждой инструкции. Дополнительный бит «доступа» в каждой инструкции выбирает между банком 0 ( a = 0) и банком, выбранным BSR ( a = 1).
Для регистров STATUS, WREG и BSR также доступен одноуровневый стек. Они сохраняются при каждом прерывании и могут быть восстановлены при возврате. Если прерывания отключены, их также можно использовать при вызове/возврате подпрограммы, установив бит s (добавив ", FAST" к инструкции).
Функция автоматического увеличения/уменьшения была улучшена путем удаления контрольных битов и добавления четырех новых косвенных регистров на FSR. В зависимости от того, к какому косвенному файловому регистру осуществляется доступ, можно выполнить постдекремент, постинкремент или преинкремент FSR; или сформировать эффективный адрес путем добавления W к FSR.
В более продвинутых устройствах PIC18 доступен «расширенный режим», который делает адресацию еще более благоприятной для скомпилированного кода:
Устройства PIC18 все еще находятся в стадии разработки (2021) и оснащены CIP (Core Independent Peripherals)
В 2001 году Microchip представила серию микросхем dsPIC, [14] которая поступила в массовое производство в конце 2004 года. Это первые изначально 16-битные микроконтроллеры Microchip. Устройства PIC24 разработаны как микроконтроллеры общего назначения. Устройства dsPIC дополнительно включают возможности цифровой обработки сигналов .
Хотя архитектура PIC по-прежнему схожа с более ранними, имеются существенные усовершенствования: [15]
Некоторые особенности:
dsPIC можно программировать на языке C с помощью компилятора XC16 компании Microchip (ранее называвшегося C30), который является вариантом GCC .
Инструкционное ПЗУ имеет ширину 24 бита. Программное обеспечение может получать доступ к ПЗУ 16-битными словами, где четные слова содержат наименее значимые 16 бит каждой инструкции, а нечетные слова содержат наиболее значимые 8 бит. Верхняя половина нечетных слов читается как ноль. Счетчик программ имеет ширину 23 бита, но наименее значимый бит всегда равен 0, поэтому имеется 22 изменяемых бита.
Инструкции бывают двух основных видов, причем наиболее важные операции (сложение, исключающее ИЛИ, сдвиги и т. д.) допускают обе формы:
Изделия PIC32M компании Microchip используют торговую марку PIC, но имеют совершенно другую архитектуру и описаны здесь лишь кратко.
В ноябре 2007 года Microchip представила семейство 32-разрядных микроконтроллеров PIC32MX на базе ядра MIPS32 M4K . [16] Устройство можно программировать с помощью компилятора Microchip MPLAB C для микроконтроллеров PIC32, варианта компилятора GCC. Первые 18 моделей, которые в настоящее время производятся (PIC32MX3xx и PIC32MX4xx), совместимы по выводам и используют тот же набор периферийных устройств, что и семейство (16-разрядных) устройств PIC24FxxGA0xx, что позволяет использовать общие библиотеки, программное обеспечение и аппаратные средства. Сегодня, начиная с 28 выводов в небольших корпусах QFN и заканчивая высокопроизводительными устройствами с Ethernet, CAN и USB OTG, доступен полный спектр семейства 32-разрядных микроконтроллеров среднего класса.
Архитектура PIC32 привнесла ряд новых функций в портфолио Microchip, в том числе:
В ноябре 2013 года Microchip представила серию микроконтроллеров PIC32MZ, основанную на ядре MIPS M14K. Серия PIC32MZ включает: [18] [19]
В 2015 году компания Microchip выпустила семейство PIC32MZ EF, использующее обновлённый процессор MIPS M5150 Warrior M-класса. [20] [21]
В 2017 году компания Microchip представила семейство микросхем PIC32MZ DA, включающее интегрированный графический контроллер, графический процессор и 32 МБ памяти DDR2 DRAM. [22] [23]
В июне 2016 года Microchip представила семейство PIC32MM, специализированное для маломощных и недорогих приложений. [24] PIC32MM отличается независимыми от ядра периферийными устройствами, спящими режимами до 500 нА и корпусами 4 x 4 мм. [25] Микроконтроллеры PIC32MM используют MIPS Technologies M4K, 32-разрядный процессор MIPS32 . Они рассчитаны на очень низкое энергопотребление и ограничены 25 МГц. Их ключевым преимуществом является поддержка 16-разрядных инструкций MIPS, что делает размер программы намного более компактным (около 40%).
В 2017 году компания Microchip представила семейство микросхем PIC32MK, предназначенное для управления двигателями, промышленного управления, промышленного Интернета вещей (IIoT) и многоканальных CAN-приложений. [26]
Продукты PIC32C от Microchip также используют торговую марку PIC, но также имеют совершенно другую архитектуру. Продукты PIC32C используют архитектуру процессора Arm, включая различные линейки с ядрами Cortex-M0+, M4, M7, M23 и M33. Они предлагаются в дополнение к серии микроконтроллеров SAM на базе Arm, которые Microchip унаследовала от приобретения Atmel. [27]
Продукция PIC64 компании Microchip использует торговую марку PIC, но имеет совершенно другую архитектуру и описана здесь лишь кратко.
В июле 2024 года Microchip представила серию высокопроизводительных многоядерных микропроцессоров PIC64 . Первоначально серия будет использовать набор инструкций RISC-V , однако Microchip также планирует версии с ядрами ARM Cortex-A . [28] Серия PIC64 будет включать линейку PIC64GX, которая фокусируется на интеллектуальных периферийных приложениях, и линейку PIC64-HPSC, которая устойчива к радиации и фокусируется на приложениях для космических полетов. [29] [30]
Архитектура PIC (исключая не связанные PIC32 и PIC64) представляет собой однооперандную машину-аккумулятор, как PDP-8 или бортовой компьютер Apollo . Ее характеристики:
Различий между пространством памяти и пространством регистров не существует, поскольку ОЗУ выполняет функции и памяти, и регистров, а ОЗУ обычно называют просто «файлом регистров» или просто «регистрами».
PIC имеют набор регистров, которые функционируют как ОЗУ общего назначения. Регистры управления специального назначения для аппаратных ресурсов на кристалле также отображаются в пространстве данных. Адресуемость памяти различается в зависимости от серии устройства, и все типы устройств PIC имеют некоторый банковский механизм для расширения адресации на дополнительную память (но некоторые модели устройств имеют только один реализованный банк). Более поздние серии устройств имеют инструкции перемещения, которые могут охватывать все адресуемое пространство, независимо от выбранного банка. В более ранних устройствах любое перемещение регистра должно было осуществляться через аккумулятор.
Для реализации косвенной адресации используются «регистр выбора файла» (FSR) и «косвенный регистр» (INDF). Номер регистра записывается в FSR, после чего чтение или запись в INDF фактически будут осуществляться из или в регистр, на который указывает FSR. Более поздние устройства расширили эту концепцию с помощью пост- и пре-инкремента/декремента для большей эффективности доступа к последовательно хранимым данным. Это также позволяет рассматривать FSR почти как указатель стека (SP).
Внешняя память данных не адресуется напрямую, за исключением некоторых устройств PIC18 с большим количеством выводов. Однако общие порты ввода-вывода могут использоваться для реализации параллельной шины или последовательного интерфейса для доступа к внешней памяти и другим периферийным устройствам (с использованием подпрограмм), с оговоркой, что такой запрограммированный доступ к памяти (конечно) намного медленнее, чем доступ к собственной памяти микроконтроллера PIC.
Кодовое пространство обычно реализуется как встроенное ПЗУ , СППЗУ или флэш-ПЗУ . В общем, нет возможности хранить код во внешней памяти из-за отсутствия интерфейса внешней памяти. Исключением являются PIC17 и некоторые устройства PIC18 с большим количеством выводов. [31]
Все PIC обрабатывают (и адресуют) данные 8-битными блоками. Однако единица адресации кодового пространства обычно не совпадает с пространством данных. Например, PIC в базовом (PIC12) и среднем (PIC16) семействах имеют программную память, адресуемую в том же размере слова, что и ширина инструкции, т. е. 12 или 14 бит соответственно. Напротив, в серии PIC18 программная память адресуется 8-битными приращениями (байтами), что отличается от ширины инструкции в 16 бит.
Для ясности объем памяти программ обычно указывается в количестве инструкций (состоящих из одного слова), а не в байтах.
У PIC есть аппаратный стек вызовов , который используется для сохранения обратных адресов. Аппаратный стек недоступен программно на более ранних устройствах, но это изменилось с устройствами серии PIC18.
Аппаратная поддержка стека параметров общего назначения отсутствовала в ранних сериях, но в серии PIC18 эта проблема была значительно решена, что сделало архитектуру серии PIC18 более дружественной к компиляторам языков высокого уровня.
Наборы инструкций PIC варьируются от примерно 35 инструкций для младших PIC до более 80 инструкций для старших PIC. Набор инструкций включает инструкции для выполнения различных операций непосредственно над регистрами, над аккумулятором и константой-литерал, или над аккумулятором и регистром , а также для условного выполнения и ветвления программы.
Несколько операций, таких как установка и тестирование битов, могут быть выполнены на любом пронумерованном регистре, но арифметические операции с 2 входами всегда включают W (аккумулятор), записывая результат обратно либо в W, либо в другой регистр операнда. Чтобы загрузить константу, необходимо загрузить ее в W, прежде чем ее можно будет переместить в другой регистр. В старых ядрах все перемещения регистров должны были проходить через W, но это изменилось в ядрах «высокого класса».
Ядра PIC имеют инструкции пропуска, которые используются для условного выполнения и ветвления. Инструкции пропуска — «пропустить, если бит установлен» и «пропустить, если бит не установлен». Поскольку ядра до PIC18 имели только инструкции безусловного перехода, условные переходы реализуются с помощью условного пропуска (с противоположным условием), за которым следует безусловный переход. Пропуски также полезны для условного выполнения любой непосредственно следующей одиночной инструкции. Инструкции пропуска можно пропускать. Например, последовательность инструкций «пропустить, если A; пропустить, если B; C» выполнит C, если A истинно или если B ложно.
В серии PIC18 реализованы теневые регистры: это регистры, которые сохраняют несколько важных регистров во время прерывания, обеспечивая аппаратную поддержку для автоматического сохранения состояния процессора при обслуживании прерываний.
В целом инструкции PIC делятся на пять классов:
movlw
(переместить литерал в WREG), andlw
(И литерал с WREG). Одной из инструкций, свойственных PIC retlw
, является немедленная загрузка в WREG и возврат, которая используется с вычисляемыми ветвями для создания таблиц поиска .addwf reg,w
addwf reg,f
goto
и call
.sleep
переход в режим пониженного энергопотребления.Архитектурные решения направлены на максимизацию соотношения скорости и стоимости. Архитектура PIC была среди первых конструкций скалярных ЦП [ требуется ссылка ] и до сих пор является одной из самых простых и дешевых. Гарвардская архитектура, в которой инструкции и данные поступают из отдельных источников, значительно упрощает синхронизацию и проектирование микросхем, и это приносит пользу тактовой частоте, цене и энергопотреблению.
Набор инструкций PIC подходит для реализации быстрых таблиц поиска в программном пространстве. Такие поиски занимают одну инструкцию и два цикла инструкций. Многие функции могут быть смоделированы таким образом. Оптимизация облегчается относительно большим программным пространством PIC (например, 4096 × 14-битных слов на 16F690) и конструкцией набора инструкций, которая допускает встроенные константы. Например, цель инструкции перехода может быть индексирована W и выполнять "RETLW", которая делает то, что названа – возвращает с литералом в W.
Задержка прерывания постоянна и составляет три цикла инструкций. Внешние прерывания должны быть синхронизированы с циклом инструкций из четырех тактов, в противном случае может возникнуть джиттер в один цикл инструкций. Внутренние прерывания уже синхронизированы. Постоянная задержка прерывания позволяет PIC достигать управляемых прерываниями последовательностей синхронизации с низким джиттером. Примером этого является генератор импульсов видеосинхронизации. Это больше не относится к новейшим моделям PIC, поскольку у них задержка синхронного прерывания составляет три или четыре цикла.
Следующие ограничения стека были устранены в серии PIC18 , но по-прежнему применимы к более ранним ядрам:
При страничной памяти программ есть два размера страниц, о которых нужно беспокоиться: один для CALL и GOTO и другой для вычисляемого GOTO (обычно используется для поиска в таблице). Например, на PIC16 CALL и GOTO имеют 11 бит адресации, поэтому размер страницы составляет 2048 слов инструкций. Для вычисляемых GOTO, где вы добавляете к PCL, размер страницы составляет 256 слов инструкций. В обоих случаях верхние биты адреса предоставляются регистром PCLATH. Этот регистр должен изменяться каждый раз, когда управление передается между страницами. PCLATH также должен сохраняться любым обработчиком прерываний. [33]
Хотя доступно несколько коммерческих компиляторов, в 2008 году компания Microchip выпустила собственные компиляторы C, C18 и C30, для линейки процессоров 18F, 24F и 30/33F.
Начиная с 2013 года Microchip предлагает свою серию компиляторов XC для использования с MPLAB X. Microchip в конечном итоге откажется от своих старых компиляторов, таких как C18, и рекомендует использовать свои компиляторы серии XC для новых проектов. [34]
Набор инструкций 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 обычно имеют следующие особенности:
В рамках одной серии по-прежнему существует множество вариантов устройств в зависимости от того, какие аппаратные ресурсы поддерживает чип:
Первое поколение PIC с памятью EPROM было почти полностью заменено чипами с флэш-памятью . Аналогично, исходный 12-битный набор инструкций PIC1650 и его прямых потомков был заменен 14-битными и 16-битными наборами инструкций. Microchip по-прежнему продает OTP (однократно программируемые) и оконные (стираемые УФ-излучением) версии некоторых своих PIC на основе EPROM для устаревшей поддержки или заказов по объему. На веб-сайте Microchip перечислены PIC, которые не являются электрически стираемыми, как OTP. Можно заказать оконные версии этих чипов с возможностью стирания УФ-излучением.
Буква F в номере детали PICMicro обычно указывает на то, что PICmicro использует флэш-память и может быть стерта электронным способом. Наоборот, буква C обычно означает, что ее можно стереть только путем воздействия на кристалл ультрафиолетового света (что возможно только при использовании оконного корпуса). Исключением из этого правила является PIC16C84, который использует EEPROM и, следовательно, является электрически стираемым.
Буква L в названии указывает на то, что деталь будет работать при более низком напряжении, часто с наложенными ограничениями частоты. [35] Детали, разработанные специально для работы при низком напряжении, в строгом диапазоне 3–3,6 вольт, отмечены буквой J в номере детали. Эти детали также являются уникально толерантными к вводу/выводу, поскольку они принимают до 5 В в качестве входов. [35]
Microchip предоставляет бесплатный пакет IDE под названием MPLAB X , который включает ассемблер, компоновщик, программный симулятор и отладчик. Они также продают компиляторы C для PIC10, PIC12, PIC16, PIC18, PIC24, PIC32 и dsPIC, которые полностью интегрируются с MPLAB X. Бесплатные версии компиляторов C также доступны со всеми функциями. Но для бесплатных версий оптимизации будут отключены через 60 дней. [36]
Несколько сторонних компаний разрабатывают компиляторы языка C для PIC, многие из которых интегрируются с MPLAB и/или имеют собственную IDE. Полнофункциональный компилятор для языка PICBASIC для программирования микроконтроллеров PIC доступен в meLabs, Inc. Mikroelektronika предлагает компиляторы PIC на языках программирования C, BASIC и Pascal.
Существует графический язык программирования Flowcode , способный программировать 8- и 16-битные устройства PIC и генерировать совместимый с PIC код C. Он существует в многочисленных версиях от бесплатной демонстрационной до более полной профессиональной версии.
Proteus Design Suite способен моделировать многие популярные 8- и 16-битные PIC-устройства вместе с другими схемами, которые подключены к PIC на схеме. Программа для моделирования может быть разработана в самом Proteus, MPLAB или любом другом инструменте разработки. [37]
Устройства, называемые « программаторами », традиционно используются для ввода программного кода в целевую PIC. Большинство PIC, которые Microchip в настоящее время продает, имеют возможности ICSP (внутрисхемное последовательное программирование) и/или LVP (низковольтное программирование), что позволяет программировать PIC, пока он находится в целевой схеме .
Microchip предлагает программаторы/отладчики серий MPLAB и PICKit . MPLAB ICD4 и MPLAB REAL ICE — это современные программаторы и отладчики для профессиональной инженерии, а PICKit 3 — это недорогая линейка программаторов/отладчиков для любителей и студентов.
Многие из более совершенных PIC на основе флэш-памяти также могут самопрограммироваться (записывать в свою собственную память программ), процесс, известный как загрузка. Демонстрационные платы доступны с небольшим запрограммированным на заводе загрузчиком, который может использоваться для загрузки пользовательских программ через интерфейс, такой как RS-232 или USB , тем самым устраняя необходимость в программирующем устройстве.
В качестве альтернативы доступна прошивка загрузчика, которую пользователь может загрузить в PIC с помощью ICSP. После программирования загрузчика в PIC пользователь может перепрограммировать устройство с помощью RS232 или USB в сочетании со специализированным компьютерным программным обеспечением.
Преимущества загрузчика по сравнению с ICSP заключаются в более высокой скорости программирования, немедленном выполнении программы после программирования и возможности отладки и программирования с использованием одного и того же кабеля.
Существует множество программаторов для микроконтроллеров PIC, начиная от чрезвычайно простых конструкций, которые полагаются на ICSP для прямой загрузки кода с хост-компьютера, до интеллектуальных программаторов, которые могут проверять устройство при нескольких напряжениях питания. Многие из этих сложных программаторов используют предварительно запрограммированный PIC для отправки команд программирования на PIC, который должен быть запрограммирован. Интеллектуальный тип программатора необходим для программирования более ранних моделей PIC (в основном типа EPROM), которые не поддерживают внутрисхемное программирование.
Сторонние программаторы варьируются от планов по созданию собственных, до наборов для самостоятельной сборки и полностью протестированных готовых к использованию устройств. Некоторые из них представляют собой простые конструкции, требующие ПК для осуществления низкоуровневой сигнализации программирования (они обычно подключаются к последовательному или параллельному порту и состоят из нескольких простых компонентов), в то время как другие имеют встроенную в них логику программирования (они обычно используют последовательное или USB-подключение, обычно быстрее и часто построены с использованием самих PIC для управления).
Все новые устройства PIC оснащены интерфейсом ICD (внутрисхемная отладка), встроенным в ядро ЦП, что позволяет производить интерактивную отладку программы совместно с MPLAB IDE. Отладчики MPLAB ICD и MPLAB REAL ICE могут взаимодействовать с этим интерфейсом с помощью интерфейса ICSP .
Однако эта система отладки имеет свою цену, а именно ограниченное количество точек останова (1 на старых устройствах, 3 на новых), потеря некоторых входов/выходов (за исключением некоторых 44-контактных PIC поверхностного монтажа, которые имеют выделенные линии для отладки) и потеря некоторых внутрикристальных функций.
Некоторые устройства не имеют встроенной поддержки отладки из-за стоимости или отсутствия контактов. Некоторые более крупные чипы также не имеют отладочного модуля. Для отладки этих устройств требуется специальная версия -ICD чипа, установленная на дочерней плате, которая обеспечивает выделенные порты. Некоторые из этих отладочных чипов могут работать как более одного типа чипа с помощью выбираемых перемычек на дочерней плате. Это позволяет заменить в целом идентичные архитектуры, которые не содержат все встроенные периферийные устройства, одним чипом -ICD. Например: 16F690-ICD будет функционировать как одна из шести различных частей, каждая из которых не содержит ни одного, некоторые или все из пяти встроенных периферийных устройств. [38]
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-подобную операционную систему, включая встроенную среду разработки, на микроконтроллер в рамках ограничений встроенного оборудования. [39]
Parallax выпустила серию микроконтроллеров типа PICmicro, известных как Parallax SX . В настоящее время они сняты с производства. Разработанные так, чтобы быть архитектурно похожими на микроконтроллеры PIC, используемые в исходных версиях BASIC Stamp , микроконтроллеры SX заменили PIC в нескольких последующих версиях этого продукта.
SX от Parallax — это 8-битные RISC-микроконтроллеры, использующие 12-битное командное слово, которые работают на частоте 75 МГц (75 MIPS). Они включают в себя до 4096 12-битных слов флэш-памяти и до 262 байт оперативной памяти , 8-битный счетчик и другую вспомогательную логику. Существуют программные библиотечные модули для эмуляции интерфейсов I²C и SPI , UART, генераторы частоты, счетчики измерений и ШИМ и сигма-дельта АЦП. Другие интерфейсы относительно легко писать, и существующие модули можно модифицировать для получения новых функций.
Российский ПКК Миландр производит микроконтроллеры, использующие архитектуру PIC17, как серия 1886. [40] [41] [42] [43] Память программ состоит из флэш-памяти объемом до 64 КБ в 1886VE2U ( русский : 1886ВЕ2У ) или 8 КБ EEPROM в 1886VE5U ( 1886ВЕ5У ). Модели 1886VE5U ( 1886ВЕ5У ) по 1886VE7U ( 1886ВЕ7У ) рассчитаны на военный температурный диапазон от -60 °C до +125 °C. Аппаратные интерфейсы в различных частях включают USB, CAN, I2C, SPI, а также аналого-цифровые и цифро-аналоговые преобразователи. В состав 1886ВЕ3У входит аппаратный ускоритель криптографических функций по ГОСТ 28147-89 . Существуют даже радиационно-стойкие микросхемы с обозначениями 1886ВЕ8У ( 1886ВЕ8У ) и 1886ВЕ10У ( 1886ВЕ10У ). [44]
ELAN Microelectronics Corp. в Тайване производит линейку микроконтроллеров на основе архитектуры PIC16 с 13-битными инструкциями и меньшим (6-битным) адресным пространством ОЗУ. [45]
Компания Holtek Semiconductor производит большое количество очень дешевых микроконтроллеров [46] (всего 8,5 центов в партии [47] ) с 14-битным набором инструкций, поразительно похожим на PIC16.
Многие сверхдешевые микроконтроллеры OTP от азиатских производителей, которые можно найти в недорогой потребительской электронике, основаны на архитектуре PIC или модифицированной форме. Большинство клонов нацелены только на базовые части (PIC16C5x/PIC12C50x). Microchip пыталась подать в суд на некоторых производителей, когда копирование было особенно вопиющим, [48] [49] безуспешно. [50] [51] [ нужен лучший источник ]
Microchip поставила этот 12-миллиардный микроконтроллер примерно через 10 месяцев после поставки своего 11-миллиардного.
.