<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://www.pic24.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://www.pic24.ru/feed.php">
        <title>PIC24 articles:mchp</title>
        <description></description>
        <link>http://www.pic24.ru/</link>
        <image rdf:resource="http://www.pic24.ru/lib/images/favicon.ico" />
       <dc:date>2010-09-07T06:13:41+04:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/articles/mchp/16_bit_mcu?rev=1240909493"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/articles/mchp/32_bit_first_step_ppt?rev=1225839259"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/articles/mchp/32_bit_mcu?rev=1216551481"/>
                <rdf:li rdf:resource="http://www.pic24.ru/doku.php/articles/mchp/c30_atomic_access?rev=1276171040"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://www.pic24.ru/lib/images/favicon.ico">
        <title>PIC24</title>
        <link>http://www.pic24.ru/</link>
        <url>http://www.pic24.ru/lib/images/favicon.ico</url>
    </image>
    <item rdf:about="http://www.pic24.ru/doku.php/articles/mchp/16_bit_mcu?rev=1240909493">
        <dc:format>text/html</dc:format>
        <dc:date>2009-04-28T13:04:53+04:00</dc:date>
        <title>16-битные микроконтроллеры Microchip</title>
        <link>http://www.pic24.ru/doku.php/articles/mchp/16_bit_mcu?rev=1240909493</link>
        <description>
&lt;p&gt;
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;



&lt;h1&gt;&lt;a name=&quot;битные_микроконтроллеры_microchip&quot; id=&quot;битные_микроконтроллеры_microchip&quot;&gt;16-битные микроконтроллеры Microchip&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;16-битные микроконтроллеры Microchip&quot; [29-104] --&gt;
&lt;h2&gt;&lt;a name=&quot;архитектура&quot; id=&quot;архитектура&quot;&gt;Архитектура&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Ядро dsPIC/PIC24 построено по модифицированной Гарвардской архитектуре с расширенной системой команд. Архитектура dsPIC/PIC24 не является какой-либо модификацией привычных для разработчиков 8-битных ядер Microchip (Baseline, Midrange, PIC18) – это абсолютно новая разработка.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры dsPIC30/33 поддерживают выполнение специфических для алгоритмов цифровой обработки сигналов инструкций (умножение с накоплением), специальные методы адресации (модульная, бит-реверсивная). Все 16-битные контроллеры имеют векторную приоритетную систему прерываний, возможность отображения части программной памяти в нереализованную на кристалле область ОЗУ, знаковые вычисления с целыми числами и числами с фиксированной точкой. Более подробно особенности архитектуры 16-битных микроконтроллеров Microchip будут рассмотрены в этой части статьи.
&lt;/p&gt;

&lt;p&gt;
В качестве примера рассмотрим структуру программной памяти, памяти данных, системы прерываний, АЛУ и набора инструкций микроконтроллеров dsPIC30, указав существенные отличия для других 16-битных семейств.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Архитектура&quot; [105-2001] --&gt;
&lt;h3&gt;&lt;a name=&quot;организация_памяти_программ_и_памяти_данных&quot; id=&quot;организация_памяти_программ_и_памяти_данных&quot;&gt;Организация памяти программ и памяти данных&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;память_программ&quot; id=&quot;память_программ&quot;&gt;Память программ&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Карта памяти программ всех контроллеров dsPIC/PIC24 линейная и несегментированная. Все инструкции имеют фиксированную длину 24-бита; счетчик инструкций – 23-битный, младший бит всегда равен 0 для обеспечения выравнивания данных при выборке инструкции. Таким образом, эффективное количество адресуемых инструкций равно 2&lt;sup&gt;22&lt;/sup&gt; ~ 4 млн.
&lt;/p&gt;

&lt;p&gt;
Карта программной памяти микроконтроллера dsPIC30F6014 изображена на рис. 1. Адрес &lt;code&gt;0x00&lt;/code&gt; является вектором сброса. Далее расположена основная и альтернативная таблица векторов прерываний – эти области программной памяти будут более подробно рассмотрены в соответствующем разделе статьи. Следующая область – область пользовательской программы, объем этого сектора зависит от объема интегрированной Flash-памяти.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/articles/mchp/16-bit_pic_1.png?id=articles%3Amchp%3A16_bit_mcu&quot; class=&quot;media&quot; title=&quot;articles:mchp:16-bit_pic_1.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/16-bit_pic_1.png&quot; class=&quot;mediacenter&quot; title=&quot;Карта памяти программ микроконтроллера dsPIC30F6014 (не в реальном масштабе)&quot; alt=&quot;Карта памяти программ микроконтроллера dsPIC30F6014 (не в реальном масштабе)&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Рис. 1.&lt;/strong&gt; Карта памяти программ микроконтроллера dsPIC30F6014 (не в реальном масштабе)
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры семейства dsPIC30 имеют интегрированную память EEPROM, которая отображена в соответствующий сектор программной памяти. Семейства dsPIC33, PIC24F/H не имеют EEPROM, что связано с изменением технологии изготовления кристаллов. Поэтому при необходимости наличия в системе энергонезависимой памяти малого объема с большим количеством циклов перепрограммирования рекомендуется использовать внешние микросхемы памяти EEPROM с последовательным интерфейсом.
&lt;/p&gt;

&lt;p&gt;
Половину карты программной памяти занимает так называемое «конфигурационное пространство». Во всех 16-битных микроконтроллерах физически реализована только небольшая часть этого сектора – это слова конфигурации, определяющие режим работы контроллера после сброса и идентификационный код кристалла, предназначенный для определения контроллера аппаратными средствами разработки.
&lt;/p&gt;

&lt;p&gt;
Физически программная память во всех контроллерах 16-битного семейства реализована в виде перепрограммируемой Flash-памяти. Все контроллеры поддерживают внутрисхемное программирование и программирование в ходе выполнения программы.
&lt;/p&gt;

&lt;p&gt;
В ходе выполнения программы существует три способа доступа к программной памяти:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Выборка инструкции в соответствии со значением командного счетчика – собственно само выполнение программы.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Использование инструкций табличного чтения-записи, позволяющее получить доступ как к слову (16-бит), так и к байту программной памяти. Табличная запись осуществляется через буфер, не отображаемый в ОЗУ. Для контроллеров dsPIC30 минимальный объем записываемых данных равен 12 байтам (4 программных слова, 1/8 сектора Flash памяти), для контроллеров dsPIC33 и PIC24F/H – 192 байта (64 программных слова – один сектор Flash памяти).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Чтение программной памяти с помощью механизма &lt;strong&gt;PSV&lt;/strong&gt; (&lt;strong&gt;P&lt;/strong&gt;rogram &lt;strong&gt;S&lt;/strong&gt;pace &lt;strong&gt;V&lt;/strong&gt;isibility) - отображения сектора памяти программ в область ОЗУ. Механизм PSV позволяет отобразить любую часть программной памяти объемом 32 кБайта в верхнюю, не реализованную физически область ОЗУ (рис. 2). PSV предоставляет уникальную возможность обращаться к младшим 16-битам программного слова как к динамическим данным - любые инструкции осуществляющие чтение из ОЗУ могут использовать программную память в качестве источника. Механизм PSV применяется, если алгоритм содержит большие массивы констант: текстовые строки, коэффициенты цифровых фильтров и т. п.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Существенное отличие DSC dsPIC30 и остальных 16-битных семейств (dsPIC33, PIC24F/H) заключается в технологии изготовления интегрированной Flash-памяти. Как следствие – различное количество циклов перепрограммирования. Для dsPIC30 оно составляет 100 тыс., для dsPIC33 и PIC24F/H – всего 1 тыс. Может показаться, что это серьезный недостаток новых контроллеров, однако как показывает практика 1 тысячи циклов перезаписи достаточно для большинства задач, в том числе и для реализации калибруемых устройств.
&lt;/p&gt;

&lt;p&gt;
Различная технология изготовления кристалла определяет и различие в спецификации программирования – микроконтроллеры dsPIC33 и PIC24F/H не требуют подачи высокого напряжения (13 В) на кристалл во время программирования. Кроме того, значительно увеличилась скорость операций с памятью – для контроллеров с объемом Flash 64 кБ полный цикл стирание-запись занимает менее 1 секунды.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;память_данных&quot; id=&quot;память_данных&quot;&gt;Память данных&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Шина адреса данных микроконтроллеров dsPIC30/33 и PIC24F/H позволяет адресовать до 64 кБ памяти ОЗУ, которая физически выполнена в качестве статической памяти с возможностью байтового доступа. Почти все инструкции, работающие с ОЗУ, имеют спецификатор, указывающий, будет ли осуществляться доступ к слову (16-бит) или к байту. Карта памяти данных микроконтроллера dsPIC30F6014 приведена на рис. 2.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/articles/mchp/16-bit_pic_2.png?id=articles%3Amchp%3A16_bit_mcu&quot; class=&quot;media&quot; title=&quot;articles:mchp:16-bit_pic_2.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/16-bit_pic_2.png&quot; class=&quot;mediacenter&quot; title=&quot;Карта памяти данных микроконтроллера dsPIC30F6014 (не в реальном масштабе)&quot; alt=&quot;Карта памяти данных микроконтроллера dsPIC30F6014 (не в реальном масштабе)&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Рис. 2.&lt;/strong&gt; Карта памяти данных микроконтроллера dsPIC30F6014 (не в реальном масштабе)
&lt;/p&gt;

&lt;p&gt;
В начале ОЗУ расположена область регистров специального назначения (SFR) объемом 2 кБайта. Внутри семейства все регистры SFR расположены статически по одним адресам.
&lt;/p&gt;

&lt;p&gt;
С адреса &lt;code&gt;0x800&lt;/code&gt; начинается сектор ОЗУ общего назначения, максимальный объем которого составляет 30 кБайт; в разных контроллерах только часть этого сектора может быть реализована физически. Верхнюю половину ОЗУ занимает область, в которую отображается часть программной памяти при использовании механизма PSV.
&lt;/p&gt;

&lt;p&gt;
В семействах с DSP-ядром (dsPIC30/33) реализовано два адресных генератора, что позволяет инструкциям DSP-ядра делать две выборки из ОЗУ за один командный такт. Это объясняет разделение области ОЗУ общего назначения на два сектора X и Y (см. рис. 2). Однако это разделение не является сегментированием или ограничением – для всех инструкций CPU-ядра сектор ОЗУ общего назначения линеен.
&lt;/p&gt;

&lt;p&gt;
Первые 8 кБайт ОЗУ (включая область SFR) называются пространством ближней памяти (Near Data Space). Прямая адресация возможна только к этому сегменту. Остальная часть ОЗУ может быть адресована косвенно.
&lt;/p&gt;

&lt;p&gt;
16-битная архитектура Microchip предусматривает использование программного стека, указателем на который является один из рабочих (work) регистров. Стек растет с увеличением указателя, при этом возможен аппаратный контроль переполнения и опустошения стека. В случае переполнения или опустошения стека, ядром процессора генерируется аппаратное исключение – специальный вид прерывания который будет рассмотрен в пункте &lt;strong&gt;«Система прерываний»&lt;/strong&gt; данной статьи. Размер стека определяется программно.
&lt;/p&gt;

&lt;p&gt;
При вызове подпрограммы в стек заносится адрес возврата и часть регистра статуса. Указатель на стек может быть изменен программно, что позволяет реализовывать гибкие системы реального времени.
&lt;/p&gt;

&lt;p&gt;
В 16-битном ядре так же присутствует LINK-регистр, который позволяет выделять в стеке фрейм для локальных переменных функции. Процедуры выделения и сброса фрейма выполняются программно за один командный такт.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Организация памяти программ и памяти данных&quot; [2002-14162] --&gt;
&lt;h3&gt;&lt;a name=&quot;алу_умножитель_поддержка_деления&quot; id=&quot;алу_умножитель_поддержка_деления&quot;&gt;АЛУ, умножитель, поддержка деления&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

16-битное арифметико-логическое устройство (АЛУ) позволяет выполнять за один командный такт следующие операции: сложение, вычитание, битовый сдвиг и поразрядные логические операции, включая инверсию. Результаты операций влияют на статусные флаги. АЛУ выполняет операции с 16-битными словами или байтами в зависимости от синтаксиса инструкции.
&lt;/p&gt;

&lt;p&gt;
В состав ядра входит умножитель 17 x 17 бит, который позволяет выполнять операции умножения 16 x 16, 16 x 8 и 8 x 8 бит, знаковые, беззнаковые и смешанные за один командный такт. При знаковом и смешанном умножении используется расширение знака. Операции умножения не влияют на статусные флаги. В качестве операндов используются рабочие регистры, результат умножения возвращается в указанную регистровую пару.
&lt;/p&gt;

&lt;p&gt;
Аппаратная поддержка деления (итерационный метод) позволяет значительно сократить время выполнения математических алгоритмов. Операции деления 32/16 и 16/16 бит (знаковые и беззнаковые) выполняются за 18 командных тактов. В качестве операндов используются рабочие регистры, после выполнения деления доступен результат и остаток.
&lt;/p&gt;

&lt;p&gt;
Ядро содержит модуль сдвига (barrel shifter), который позволяет выполнять за один командный такт операции сдвига и вращения на произвольное (до 15) количество бит. Сдвиг вправо может быть логическим (без расширения знака) или арифметическим (с расширением знака).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;АЛУ, умножитель, поддержка деления&quot; [14163-16668] --&gt;
&lt;h3&gt;&lt;a name=&quot;ядро_цос&quot; id=&quot;ядро_цос&quot;&gt;Ядро ЦОС&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Ядро цифровой обработки сигналов (ЦОС) является независимым от CPU-ядра вычислительным модулем, который присутствует только в контроллерах семейства dsPIC30 и dsPIC33.
&lt;/p&gt;

&lt;p&gt;
Умножитель dsPIC30/33 позволяет выполнять знаковые и беззнаковые операции с данными формата Q.31 (фиксированная точка). Тип операндов определяется битом в служебном регистре &lt;code&gt;CORCON&lt;/code&gt;. При умножении чисел с фиксированной точкой производится сдвиг результата влево на один бит, что позволяет сохранить формат числа, при этом младший бит результата всегда обнуляется. Делитель микроконтроллеров с DSP ядром так же позволяет выполнять знаковое деление чисел в формате Q.31.
&lt;/p&gt;

&lt;p&gt;
Следует заметить, что умножитель и делитель могут использоваться как стандартными инструкциями умножения и деления, так и инструкциями DSP ядра, операционный код которых отличается от стандартных. Так, например, инструкция &lt;code&gt;MUL&lt;/code&gt; является стандартной инструкцией умножения CPU-ядра (для нее доступны функции умножителя, указанные в предыдущем разделе), а инструкция &lt;code&gt;MPY&lt;/code&gt; – инструкцией умножения DSP ядра, с помощью которой можно производить операции с Q.31 числами.
&lt;/p&gt;

&lt;p&gt;
Результат инструкций DSP-ядра всегда сохраняется в один из 40-битных аккумуляторов: &lt;code&gt;ACCA&lt;/code&gt; или &lt;code&gt;ACCB&lt;/code&gt;. Аккумуляторы отображены в ОЗУ и могут быть доступны для любых инструкций. При представлении чисел в виде Q.31 диапазон значений аккумулятора составляет [-256.0 , +256.0 - 2&lt;sup&gt;-31&lt;/sup&gt;]. Аккумуляторы имеют статусные флаги, сигнализирующие о переполнении, частичном переполнении (результат по модулю больше 1.0), опционально установка этих флагов может генерировать прерывание. Содержимое 40-битного аккумулятора может сохраняться в 16-битном слове ОЗУ, при этом используются различные режимы округления и усечение.
&lt;/p&gt;

&lt;p&gt;
Инструкции, поддерживаемые ядром DSP приведены в таблице 2.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Таблица 2.&lt;/strong&gt; Инструкции, поддерживаемые DSP ядром

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  DSP инструкция  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Алгебраический эквивалент  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Выполняемая операция  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  mac  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;a = a + b*c&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Умножение двух операндов, добавление результата к аккумулятору &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  msc  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;a = a – b*c&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Умножение двух операндов, вычитание результата из аккумулятора &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  mpy  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;a = b*c&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Умножение двух операндов, сохранение результата в аккумулятор &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  mpy.n  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;a = -b*c&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Умножение двух операндов, инверсия, сохранение результата в аккумулятор &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  ed  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;a = (b – c)&lt;sup&gt;2&lt;/sup&gt;&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Вычисление евклидовой метрики, сохранение результата в аккумулятор &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  edac  &lt;/th&gt;&lt;td class=&quot;col1 leftalign&quot;&gt; &lt;code&gt;a = a + (b – c)&lt;sup&gt;2&lt;/sup&gt;&lt;/code&gt;  &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Вычисление евклидовой метрики, добавление результата к аккумулятору &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

В качестве примера рассмотрим одну из основных инструкций для ЦОС алгоритмов – инструкцию &lt;code&gt;MAC&lt;/code&gt; – умножение с накоплением. Типовое использование MAC инструкции (ассемблер ASM30):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;mac    w4*w5, A, [w8]+=2, w4, [w10]-=2, w5, [w13]+=2&lt;/pre&gt;
&lt;p&gt;
Данная запись означает следующее:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; значение &lt;code&gt;w4&lt;/code&gt; умножается на значение &lt;code&gt;w5&lt;/code&gt;, результат умножения добавляется к аккумулятору &lt;code&gt;ACCA&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; регистр &lt;code&gt;w4&lt;/code&gt; загружается значением по указателю W8 (указатель должен указывать на адрес в сегменте X ОЗУ);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; указатель &lt;code&gt;w8&lt;/code&gt; увеличивается на 2;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; регистр &lt;code&gt;w5&lt;/code&gt; загружается значением по указателю &lt;code&gt;w10&lt;/code&gt; (указатель должен указывать на адрес в сегменте Y ОЗУ);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; указатель &lt;code&gt;w10&lt;/code&gt; уменьшается на 2;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; значение аккумулятора &lt;code&gt;ACCB&lt;/code&gt; сохраняется по указателю &lt;code&gt;w13&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; указатель &lt;code&gt;w13&lt;/code&gt; увеличивается на 2.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Все перечисленные операции с данными выполняются за один командный такт. Одновременная выборка операндов в ходе выполнения умножения вместе с аппаратными циклами &lt;code&gt;do&lt;/code&gt; и &lt;code&gt;repeat&lt;/code&gt; позволяет чрезвычайно эффективно реализовывать ЦОС алгоритмы.
&lt;/p&gt;

&lt;p&gt;
К ядру ЦОС можно отнести два аппаратных цикла, &lt;code&gt;do&lt;/code&gt; и &lt;code&gt;repeat&lt;/code&gt;, хотя цикл &lt;code&gt;repeat&lt;/code&gt; присутствует и в 16-битных контроллерах без DSP-ядра.
&lt;/p&gt;

&lt;p&gt;
Цикл &lt;strong&gt;&lt;code&gt;repeat&lt;/code&gt;&lt;/strong&gt; позволяет аппаратно повторять (до 2&lt;sup&gt;14&lt;/sup&gt; раз) выполнение одной инструкции. Аппаратная вложенность не поддерживается, однако программно может быть реализовано любое количество уровней – при этом необходимо сохранять счетчик цикла в стеке. Цикл &lt;code&gt;repeat&lt;/code&gt; может использоваться, например, совместно с инструкцией &lt;code&gt;mac&lt;/code&gt;, что позволяет всего двумя командами реализовать вычисление КИХ фильтра.
&lt;/p&gt;

&lt;p&gt;
Цикл &lt;strong&gt;&lt;code&gt;do&lt;/code&gt;&lt;/strong&gt; предназначен для повторения блока кода объемом до 2&lt;sup&gt;16&lt;/sup&gt; инструкций. Произвольный блок может быть выполнен циклически до 2&lt;sup&gt;14&lt;/sup&gt; раз. Цикл &lt;code&gt;do&lt;/code&gt; аппаратно поддерживает 7 уровней вложенности, программно может быть реализовано произвольное количество уровней. Выполнение цикла может быть досрочно прервано в любой момент. Цикл &lt;code&gt;do&lt;/code&gt; можно использовать для выполнения операций двумерной фильтрации, работы с векторами и матрицами, и т. д.
&lt;/p&gt;

&lt;p&gt;
Кроме ЦОС инструкций, DSP-ядро аппаратно поддерживает специфические для ЦОС алгоритмов методы адресации. К таким относятся адресация по модулю и бит-реверсивная адресация.
&lt;/p&gt;

&lt;p&gt;
Механизм адресации по модулю выполняется отдельно для областей ОЗУ X и Y и позволяет эффективно реализовывать циклические буферы. Суть адресации по модулю состоит в том, что контроль выхода указателя за пределы буфера и его возврат на начало осуществляются аппаратно. При этом максимально возможный размер буфера составляет 2&lt;sup&gt;15&lt;/sup&gt; слов ОЗУ, а размер буфера не обязательно должен быть кратен степени 2. Возможен опрос буфера как с увеличением, так и с уменьшением указателя.
&lt;/p&gt;

&lt;p&gt;
Бит-реверсивная адресация является одной из основных операций алгоритма БПФ (быстрое преобразование Фурье) с прореживанием по времени или частоте. В DSP-ядре микроконтроллеров dsPIC30/33 реализована бит-реверсивная адресация, позволяющая выполнять БПФ с буфером, размер которого кратен степени 2 (radix-2 FFT). Суть метода заключается в зеркальном отражении части разрядов адреса для выборки следующего элемента из буфера, максимальный объем которого равен 2&lt;sup&gt;15&lt;/sup&gt; (32768) 16-битных слов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Ядро ЦОС&quot; [16669-26665] --&gt;
&lt;h3&gt;&lt;a name=&quot;dma&quot; id=&quot;dma&quot;&gt;DMA&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Контроллер &lt;strong&gt;DMA&lt;/strong&gt; (Direct Memory Access – прямой доступ к памяти) является частью ядра семейств PIC24H и dsPIC33. В PIC24F и dsPIC30 контроллер DMA отсутствует. Назначение DMA – аппаратная поддержка обмена данными между периферией и областью ОЗУ общего назначения.
&lt;/p&gt;

&lt;p&gt;
Контроллер DMA имеет 8 однонаправленных каналов, каждый из которых может обслуживать любой, поддерживающий аппаратный обмен периферийный модуль. К таким модулям относятся: модули захвата, модули сравнения, таймеры, SPI, UART, CAN, АЦП, DCI. Контроллер имеет 2 кБайт двухпортовой памяти ОЗУ, которая может использоваться в качестве буфера DMA.
&lt;/p&gt;

&lt;p&gt;
Контроллер DMA и ядро микроконтроллера могут получать одновременный доступ как к двупортовому буферу, так и к регистрам периферийного модуля. Единственное ограничение – DMA и CPU ядро не должны одновременно сохранять данные по одному адресу. В этом случае приоритет имеет CPU ядро, а контроллер DMA генерирует аппаратное исключение – специальный вид прерывания который будет рассмотрен в пункте &lt;strong&gt;«Система прерываний»&lt;/strong&gt; данной статьи.
&lt;/p&gt;

&lt;p&gt;
Контроллер DMA поддерживает следующие режимы работы:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;однократный обмен (one-shot)&lt;/strong&gt;. В этом режиме контроллер DMA завершает работу после одной передачи данных, генерируя при этом прерывание. Для продолжения работы канал DMA нужно переинициализировать. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;обмен с автоматическим повтором (auto-repeat)&lt;/strong&gt; подразумевает автоматическую переинициализацию канала DMA после завершения сессии обмена – указатель на буфер DMA сбрасывается, генерируется прерывание.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;прерывание при половинной передаче (half buffer transfer interrupt)&lt;/strong&gt;. В этом случае DMA контроллер генерирует прерывание при половинном заполнении буфера. Это позволяет начать обработку данных еще до завершения сессии обмена. При заполнении буфера канал DMA переинициализируется автоматически, прерывание при этом не генерируется.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;режим «ping-pong»&lt;/strong&gt;. Канал DMA использует два буфера. При заполнении первого буфера указатель перемещается на начало второго, генерируется прерывание. После заполнения второго буфера указатель перемещается на начало первого, генерируется прерывание. Это позволяет CPU-ядру работать с данными в одном буфере, в то время как DMA контроллер заполняет другой.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;режим косвенной адресации периферии&lt;/strong&gt;. В этом режиме указатель на буфер генерирует не DMA контроллер, а непосредственно, поддерживающий этот режим, периферийный модуль (к таким относятся модули CAN и АЦП). Например, модуль АЦП может быть настроен так, чтобы отсчеты разных каналов АЦП сохранялись в определенных областях DMA буфера, вне зависимости от последовательности преобразования.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;DMA&quot; [26666-31274] --&gt;
&lt;h3&gt;&lt;a name=&quot;набор_инструкций_и_методы_адресации&quot; id=&quot;набор_инструкций_и_методы_адресации&quot;&gt;Набор инструкций и методы адресации&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

16-битная архитектура Microchip имеет в своем составе блок из 16 рабочих регистров &lt;code&gt;w0&lt;/code&gt;…&lt;code&gt;w15&lt;/code&gt;. Все регистры ортогональны с точки зрения системы команд, то есть могут быть использованы в качестве операнда инструкции. Часть регистров имеют служебные функции: &lt;code&gt;w15&lt;/code&gt; – это указатель стека, &lt;code&gt;w14&lt;/code&gt; – указатель стекового фрейма. Некоторые инструкции могут использовать в качестве операндов или регистров сохранения результата только определенный w-регистр или регистровую пару.
&lt;/p&gt;

&lt;p&gt;
16-битные микроконтроллеры Microchip имеют расширенный набор инструкций, большинство из которых поддерживает операции типа «чтение-модификация-запись», что позволяет работать с данными напрямую в ОЗУ, не используя рабочие регистры. Большинство инструкций являются трехоперандными (A = B + C) и могут работать как с байтами, так и с 16-битными словами.
&lt;/p&gt;

&lt;p&gt;
Семейства с DSP-ядром (dsPIC30/33) имеют 83 инструкции (включая инструкции DSP-ядра), семейства без DSP-ядра (PIC24F/H) – 76. Все инструкции выполняются за один командный такт за исключением:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; инструкций изменения программного потока – 2 или 3 такта,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; инструкций табличного чтения/записи – 2 такта,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; инструкции &lt;code&gt;mov.d&lt;/code&gt; – 2 такта,&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; инструкции &lt;code&gt;do&lt;/code&gt; – 2 такта.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Все инструкции можно условно разделить на несколько групп:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;MOVE&lt;/code&gt; – инструкции перемещения данных;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;MATH&lt;/code&gt; – инструкции выполнения математических операций;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;LOGIC&lt;/code&gt; – инструкции выполнения поразрядных логических операций;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;SHIFT/ROTATE&lt;/code&gt; – инструкции сдвига с переносом и без переноса;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;BIT&lt;/code&gt; – инструкции работы с битами;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;STACK&lt;/code&gt; – инструкции работы со стеком;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;PROGRAMM FLOW&lt;/code&gt; – инструкции изменения программного потока (переходы, вызовы, условные переходы);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;CONTROL&lt;/code&gt; – инструкции управления ядром (инициализация аппаратных циклов, программный сброс, перевод контроллера в энергосберегающий режим);&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;DSP&lt;/code&gt; – инструкции DSP-ядра, присутствуют только в системе команд контроллеров dsPIC30/33.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Архитектура поддерживает большое количество методов адресации:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; прямая адресация, адрес операнда указывается непосредственно в операционном слове инструкции. Операнд должен быть расположен в области Near Space (первые 8 кБайт ОЗУ, рис. 2):&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;add   0x900, w0

;Сложение значения по адресу 0x900 с w0. Результат сохраняется в w0&lt;/pre&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; расширенный режим инструкции &lt;code&gt;mov&lt;/code&gt; – прямая адресация, но может адресоваться вся память ОЗУ&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;mov   0x2500, w7

;Сохранение значения по адресу 0x2500 в регистр w7&lt;/pre&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; прямая адресация регистров. В качестве операндов используются значения рабочих регистров:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;ior   w0, w2, w5

;Поразрядное логическое ИЛИ регистров w0 и w2, сохранение результата в w5&lt;/pre&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; косвенная адресация – может использоваться в большинстве инструкций:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;add   w4, [w5], [w6]

;Сложение W4 со словом по указателю W5, сохранение результата по указателю W6&lt;/pre&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; косвенная адресация с пре/пост инкрементом и декрементом, при этом учитываются правила адресной арифметики в зависимости от типа операнда (байт или слово):&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;mov   [++w0], [w1--]

;Увеличение указателя w0 на 2, перемещение значения по указателю
 w0 в ячейку, на которую указывает w1, уменьшение указателя w1 на 2.&lt;/pre&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; косвенная адресация со смещением:&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;mov   [w4+w5], [w6++]

;Получение указателя на ячейку операнда, путем сложения w4 и w5, перемещение
 значения по полученному указателю по адресу w6, увеличение значения w6 на 2&lt;/pre&gt;
&lt;p&gt;
Поддержка различных методов адресации позволяет получать очень компактный код при использовании компиляторов с языков высокого уровня. Следует так же отметить возможность вызова и перехода по значению в регистре (аналог вызова функции по указателю в Си) и инструкцию запрещения прерываний на определенное количество командных тактов (позволяет выполнять набор инструкций как одну атомарную).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Набор инструкций и методы адресации&quot; [31275-37897] --&gt;
&lt;h3&gt;&lt;a name=&quot;система_прерываний&quot; id=&quot;система_прерываний&quot;&gt;Система прерываний&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Микроконтроллеры dsPIC30/33 и PIC24F/H имеют векторную приоритетную систему прерываний. Каждый источник прерывания имеет собственный вектор в таблице, расположенной в программной памяти. Внутри таблицы прерывания имеют естественный приоритет: при одновременном возникновении двух прерываний приоритет имеет то, чей вектор имеет меньший адрес. Вектора представляют собой 24-битное слово программы, в котором должна быть расположена команда перехода на сервис обработчика прерывания.
&lt;/p&gt;

&lt;p&gt;
Пользователь может изменить естественный приоритет, назначив источнику прерывания искусственный приоритет. Для того чтобы прерывание было сгенерировано, необходимо, чтобы назначенный приоритет был выше текущего приоритета ядра (который так же можно изменять программно). При возникновении прерывания в программный счетчик записывается адрес вектора прерывания, а приоритет CPU-ядра становится равным приоритету возникшего прерывания. Это позволяет организовывать гибкую систему вложенных прерываний.
&lt;/p&gt;

&lt;p&gt;
Возможно назначение приоритета каждому прерыванию, количество возможных уровней приоритета равно 8. CPU ядро может иметь приоритет от 0 до 15, уровни 8 – 15 зарезервированы для аппаратных исключений.
&lt;/p&gt;

&lt;p&gt;
Аппаратные исключения – это определенный вид немаскируемых прерываний, которые генерирует CPU-ядро. Условно исключения можно разделить на программные и аппаратные.
&lt;/p&gt;

&lt;p&gt;
К программным относятся исключения, которые позволяют продолжить выполнение работы после программного сброса флага исключения. Программные исключения имеют приоритет от 8 до 12. К программным исключениям относятся: исключение АЛУ (которое генерируется ядром, например, при делении на 0) и ошибка стека.
&lt;/p&gt;

&lt;p&gt;
При возникновении аппаратного исключения программа не может продолжить работу до тех пор, пока ошибка, которая вызвала исключение, не будет устранена – флаг аппаратного исключения не может быть сброшен программно. Аппаратные исключения имеют приоритет от 13 до 15. К аппаратным исключения относятся: ошибка адреса (не выровненный доступ к памяти программ или памяти данных) и ошибка тактового генератора (нестабильная работа PLL, отсутствие внешней тактовой частоты).
&lt;/p&gt;

&lt;p&gt;
Система прерываний имеет фиксированное время реакции – 5 командных тактов. Возврат из прерывания осуществляется за 3 командных такта. Следует заметить, что при входе в прерывание часть статус-регистра SR автоматически сохраняется в стеке, это позволяет уменьшить объем кода и время выполнения обработчика прерывания. Все флаги прерываний устанавливаются вне зависимости от того, разрешено прерывание или нет.
&lt;/p&gt;

&lt;p&gt;
В программной памяти расположены две идентичные таблицы прерываний (рис. 1) – основная и альтернативная. Используемая в текущий момент таблица прерываний может быть выбрана программно. Это удобно, например, для реализации внутрисхемного программного загрузчика (bootloader).
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры семейства dsPIC30 имеют 54 вектора прерывания и 8 векторов исключений в каждой таблице. Семейства dsPIC33 и PIC24F/H имеют расширенные таблицы прерываний – 118 векторов прерываний и 8 векторов исключений.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Система прерываний&quot; [37898-43468] --&gt;
&lt;h2&gt;&lt;a name=&quot;служебные_модули&quot; id=&quot;служебные_модули&quot;&gt;Служебные модули&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Служебные модули&quot; [43469-43513] --&gt;
&lt;h3&gt;&lt;a name=&quot;система_тактирования&quot; id=&quot;система_тактирования&quot;&gt;Система тактирования&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Как и в 8-битных контроллерах Microchip, в семействе dsPIC30 команда выполняется за 4 такта генератора, то есть, для достижения максимальной производительности 30 MIPS тактовая частота должна быть равна 120 МГц.
&lt;/p&gt;

&lt;p&gt;
Семейства PIC24F/H и dsPIC33 имеют переработанную схему конвейера – это первые контроллеры Microchip, в которых команда выполняется за 2 (!) такта генератора. Максимальная производительность PIC24F составляет 16 MIPS (тактовая частота 32 МГц), PIC24H/dsPIC33 – 40 MIPS (тактовая частота 80 &lt;acronym title=&quot;Megahertz&quot;&gt;MHz&lt;/acronym&gt;). Значительное увеличение производительности по сравнению с dsPIC30 связано с использованием более «тонкого» техпроцесса изготовления кристаллов – 0,25 мкм.
&lt;/p&gt;

&lt;p&gt;
16-битные семейства имеют три различных типа схемы тактирования:
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;dspic30&quot; id=&quot;dspic30&quot;&gt;dsPIC30&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Схема тактирования имеет четыре источника – первичный кварцевый генератор (4-10 МГц), вторичный кварцевый генератор (32 кГц), внутренний RC генератор 8 МГц и внутренний низкочастотный RC генератор 512 кГц. Первичный генератор может тактировать схему умножения частоты с ФАПЧ (PLL), коэффициент умножения (4, 8, 16) выбирается в конфигурационном слове и не может быть изменен в ходе выполнения программы. PLL-умножитель не может быть подключен к внутренним RC генераторам или ко вторичному кварцевому генератору. Микроконтроллер может тактироваться от внешнего источника частоты (0-40 МГц). Система тактирования содержит детекторы стабильности тактовой частоты - возможно автоматическое переключение на вторичный источник при сбое первичного. Схема тактирования dsPIC30 содержит делитель тактовой частоты, подаваемой на ядро и периферию. Делитель имеет коэффициенты 1, 4, 16 и 64, коэффициент может быть изменен программно.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;pic24f&quot; id=&quot;pic24f&quot;&gt;PIC24F&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Схема тактирования почти полностью повторяет dsPIC30. Так как максимальная частота тактирования этого семейства составляет 32 МГц, внутренний PLL-умножитель имеет только один коэффициент умножения на 4. Внутренний прецизионный RC генератор 8 МГц может использовать PLL для умножения частоты (в отличие от dsPIC30), следовательно, можно получить максимальную производительность 16 MIPS, используя для тактирования внутренний генератор. Умножитель можно отключить программно. Важной особенностью является разделение линий тактирования ядра и периферии. Сигнал тактирования на ядро подается через программно управляемый делитель. Это предоставляет уникальную возможность уменьшения частоты тактирования ядра (что уменьшает потребление энергии) при сохранении частоты тактирования периферии (важно, например, для быстрых коммуникационных интерфейсов – SPI, UART и т. п.)
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;pic24hdspic33&quot; id=&quot;pic24hdspic33&quot;&gt;PIC24H/dsPIC33&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Схема тактирования аналогична PIC24F, однако в ней полностью переработан PLL-умножитель. Опуская детали, можно сказать, что коэффициент умножения является дробным и настраивается программно. Таким образом, если контроллер тактируется от кварцевого резонатора 4 МГц, с помощью PLL можно получить сетку частот тактирования от 12,5 МГц до 80 МГц с шагом 0,25 МГц. Внутренний высокочастотный RC генератор в отличие от dsPIC30/PIC24F имеет частоту 7.37 МГц. Следует отметить, что во всех семействах частота внутреннего генератора может программно корректироваться в пределах +/- 12% c шагом в десятые доли процента.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Система тактирования&quot; [43514-49169] --&gt;
&lt;h3&gt;&lt;a name=&quot;система_сброса&quot; id=&quot;система_сброса&quot;&gt;Система сброса&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Система сброса всех 16-битных микроконтроллеров Microchip идентична, за исключением того, что в 3-х вольтовых семействах dsPIC33 и PIC24F/H отсутствует сброс по снижению напряжения питания (BOR - Brown Out Reset). Это связано с тем, что максимальная частота тактирования базового семейства dsPIC30 зависит от напряжения питания - детектор снижения необходим, чтобы предотвратить некорректную работу системы. Контроллеры dsPIC33 и PIC24F/H обеспечивают максимальную производительность во всем диапазоне питающих напряжений, поэтому необходимость детектора BOR отсутствует. Источник сброса BOR заменен на сброс по снижению напряжения на выходе встроенного стабилизатора питания ядра.
&lt;/p&gt;

&lt;p&gt;
Все семейства имеют следующие источники сброса:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программный сброс – инструкция &lt;code&gt;reset&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; внешний сброс по входу MCLR;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс по переполнению сторожевого таймера;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс по включению напряжения питания;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс при конфликте исключений;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс при неверном операционном коде инструкции (например, если программный счетчик указывает на область констант)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс при использовании неинициализированных рабочих w-регистров&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс при неверном формате конфигурационного слова (только для PIC24F/H, dsPIC33).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
При любом виде сброса все служебные регистры устанавливаются в определенное состояние, одинаковое для всех видов сброса. Исключения – регистр &lt;code&gt;RCON&lt;/code&gt; (в котором находятся флаги системы сброса) и регистр управления схемой тактирования &lt;code&gt;OSCCON&lt;/code&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Система сброса&quot; [49170-51773] --&gt;
&lt;h3&gt;&lt;a name=&quot;сторожевой_таймер&quot; id=&quot;сторожевой_таймер&quot;&gt;Сторожевой таймер&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Сторожевой таймер (WDT), как правило, используется для сброса контроллера в случае нарушения нормальной работы системы – сброс происходит при переполнении WDT. Сторожевой таймер тактируется от встроенного RC генератора, поэтому при правильном использовании WDT сброс произойдет даже в случае остановки всех источников тактирования.
&lt;/p&gt;

&lt;p&gt;
В контроллерах dsPIC30 сторожевой таймер имеет два предделителя, позволяющих установить период таймера от 2 мс до 16 секунд. Работа таймера может быть разрешена программно.
&lt;/p&gt;

&lt;p&gt;
В контроллерах PIC24F/H и dsPIC33 сторожевой таймер имеет предделитель и постделитель, позволяющие установить период таймера от 1 мс до 131 секунды, работа таймера может быть разрешена программно. Возможна работа WDT в оконном режиме - обнуление таймера необходимо производить в течение последней четверти его периода, в противном случае генерируется сброс контроллера.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Сторожевой таймер&quot; [51774-53398] --&gt;
&lt;h3&gt;&lt;a name=&quot;энергосберегающие_режимы_работы&quot; id=&quot;энергосберегающие_режимы_работы&quot;&gt;Энергосберегающие режимы работы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Все 16-битные микроконтроллеры Microchip имеют два основных энергосберегающих режима:
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;SLEEP.&lt;/strong&gt; В этом режиме останавливается источник тактирования (низкочастотный генератор, которым тактируется сторожевой таймер, продолжает работу), отключается ядро контроллера, отключаются все периферийные модули (кроме портов ввода-вывода, модулей внешнего прерывания и периферийных модулей, использующих внешнюю тактовую частоту) – это режим работы с самым низким потреблением. Вход в режим SLEEP осуществляется программно. Выход из режима осуществляется по внешнему прерыванию, событию сброса или по переполнению WDT.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;IDLE.&lt;/strong&gt; В этом режиме прекращается выполнение программы (изменение командного счетчика), но тактовый генератор и периферийные модули продолжают нормальное функционирование. Все периферийные модули имеют бит разрешения работы в режиме IDLE - возможно дополнительное снижение потребления путем отключения неиспользуемой периферии. Вход в режим осуществляется программно, выход – при возникновении любого немаскированного прерывания, сбросе контроллера или переполнении WDT.
&lt;/p&gt;

&lt;p&gt;
Контроллеры семейств dsPIC33 и PIC24F/H имеют дополнительные функции, позволяющие значительно снизить потребление. Это режим DOZE и возможность полного отключения периферийных модулей.
&lt;/p&gt;

&lt;p&gt;
Суть режима DOZE состоит в возможности уменьшения тактовой частоты, подаваемой на ядро контроллера, при неизменяемой частоте тактирования периферии. Делитель блока DOZE имеет коэффициенты деления от 1 до 1/128. Режим DOZE позволяет использовать полную пропускную способность коммуникационных интерфейсов или модулей генерации ШИМ при относительно низком общем потреблении кристалла.
&lt;/p&gt;

&lt;p&gt;
Часть периферийных модулей имеет возможность полного отключения – все источники тактирования аппаратно отключаются, а служебные регистры модуля становятся недоступны. При этом периферийный модуль потребляет минимально возможный ток.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Энергосберегающие режимы работы&quot; [53399-56909] --&gt;
&lt;h3&gt;&lt;a name=&quot;система_защиты_кода_codeguard&quot; id=&quot;система_защиты_кода_codeguard&quot;&gt;Система защиты кода CodeGuard™&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Как и большинство присутствующих на рынке микроконтроллеров, 16-битные семейства Microchip имеют в своем составе схемы защиты кода от несанкционированного доступа (чтения или изменения). В 2006 году компания Micropchip анонсировала новую систему защиты кода CodeGuard™, которая используется во всех микроконтроллерах dsPIC33 и PIC24H.
&lt;/p&gt;

&lt;p&gt;
В семействах PIC24F и в большинстве dsPIC30 используется стандартная схема – уровень защиты определяется двумя битами в слове конфигурации. Один из них запрещает чтение программной памяти через внешний интерфейс программирования, другой – запрещает запись в программную память. Последнее необходимо для защиты контроллера от записи заплатки, которая может, используя инструкции табличного чтения, передать код по последовательному интерфейсу.
&lt;/p&gt;

&lt;p&gt;
Стандартная схема защиты ограничивает применение внутрисхемных загрузчиков, модулей дистанционного обновления прошивки, и т. д. Тем не менее, стандартная схема является одним из слоев защиты по спецификации CodeGuard™.
&lt;/p&gt;

&lt;p&gt;
Система CodeGuard™ основана на следующих основных положениях:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; три уровня реализации: основной (Basic), аналогичный схеме защиты кода в PIC24F; промежуточный (Intermediate); продвинутый (Advanced).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Flash память условно разбита на три сегмента:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; загрузочная область (Boot) – в которой может храниться код бутлоадера с поддержкой шифрования, ключи шифрования, данные идентификации прошивки, функции дешифровки и т. п.;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; защищенный сегмент (Secure) – в котором могут храниться функции, определяющие интеллектуальную стоимость устройства, таблицы, защищенные обработчики прерываний, и т. п.;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; основной сегмент (General) – в котором могут храниться драйверы периферии, большие таблицы данных, исполняемый код пользователя OEM продукции и т. п.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; каждый уровень реализации CodeGuard™ подразумевает разбивку Flash памяти на сегменты и их защиту. Для основного уровня CodeGuard™ существует только основной сегмент программной памяти, который может быть защищен. Для промежуточного уровня CodeGuard™ существуют основной и загрузочный сегменты. Для продвинутого уровня CodeGuard™ существуют все три сегмента: Boot, General и Secure.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; размеры сегментов Flash конфигурируются.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; в контроллерах dsPIC30, в которых реализована схема CodeGuard™ (dsPIC30F5011/13, dsPIC30F601xA, dsPIC30F6015, dsPIC30F1010, dsPIC30F202x), интегрированная память EEPROM так же может быть разбита на три сегмента аналогично Flash-памяти. При этом каждый сегмент Flash может использовать только соответствующий сегмент EEPROM.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; для каждого сегмента Flash доступно два уровня защиты:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; высокий (High) – программный доступ (инструкции вызова и перехода) возможен только в первые 32 слова сегмента, эта область называется Segment Access Area;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; стандартный (Standard) – программный доступ возможен ко всему диапазону адресов сегмента.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; защищенный сегмент и основной сегмент имеют ограниченный доступ к загрузочному сегменту.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; основной сегмент имеет ограниченный доступ к защищенному сегменту.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; память данных разбита на три сегмента с конфигурируемым объемом. Спецификацией определены права доступа к каждому сегменту ОЗУ из соответствующего сегмента программной памяти.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Гибкая система защиты интеллектуальной собственности CodeGuard™ позволяет не только разрабатывать устройства, защищенные от кражи ПО, но и разрешать сторонним производителям использование прошитых программных модулей, обеспечив соответствующие права доступа.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Система защиты кода CodeGuard™&quot; [56910-62954] --&gt;
&lt;h2&gt;&lt;a name=&quot;периферийные_модули&quot; id=&quot;периферийные_модули&quot;&gt;Периферийные модули&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Все периферийные модули 16-битных семейств Microchip значительно переработаны по сравнению с аналогичными в 8-битных семействах. Единственный модуль, который полностью перенесен из предыдущей архитектуры – это модуль CAN в микроконтроллерах dsPIC30 (полный аналог модуля CAN семейства PIC18F458).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Периферийные модули&quot; [62955-63524] --&gt;
&lt;h3&gt;&lt;a name=&quot;порты_ввода-вывода&quot; id=&quot;порты_ввода-вывода&quot;&gt;Порты ввода-вывода&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Все порты ввода-вывода общего назначения семейства dsPIC30 имеют три управляющих регистра: &lt;code&gt;TRISx&lt;/code&gt; – направление порта (комплементарный драйвер – выход, третье состояние - вход), &lt;code&gt;PORTx&lt;/code&gt; – чтение регистра возвращает логический уровень непосредственно на выходе, запись осуществляется в регистр-защелку порта, &lt;code&gt;LATx&lt;/code&gt; – чтение возвращает значение регистра-защелки порта, запись так же осуществляется в регистр защелку.
&lt;/p&gt;

&lt;p&gt;
Часть выводов контроллера (в dsPIC30 до 24 выводов в 80-выводном корпусе) имеют функцию генерирования прерывания по изменению состояния. Вектор прерывания для этого события один.
&lt;/p&gt;

&lt;p&gt;
Все порты ввода-вывода имеют на входе триггер Шмитта, и защитные диоды на линии питания и земли.
&lt;/p&gt;

&lt;p&gt;
Структура портов ввода-вывода семейств dsPIC33 и PIC24F/H аналогична dsPIC30. Все цифровые выводы толерантны к +5 В. Каждый вывод может быть индивидуально сконфигурирован как выход с открытым стоком.
&lt;/p&gt;

&lt;p&gt;
Контроллеры семейств dsPIC33 и PIC24F/H полностью совместимы по выводам и частично совместимы с семейством dsPIC30 (за исключением одного вывода). Контроллеры PIC24F/dsPIC30 допускают величину втекающего/вытекающего тока портов до 25 мА, семейства PIC24H/dsPIC33 – до 4 мА.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Порты ввода-вывода&quot; [63525-65622] --&gt;
&lt;h3&gt;&lt;a name=&quot;таймеры&quot; id=&quot;таймеры&quot;&gt;Таймеры&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Микроконтроллеры dsPIC30/PIC24F имеют в своем составе пять 16-битных таймеров, четыре из которых могут объединяться в два 32-битных. Основные особенности таймеров:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; все таймеры имеют регистр периода при совпадении с которым таймер сбрасывается, устанавливается флаг и, если разрешено, генерируется прерывание.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; все таймеры имеют предделитель с коэффициентами 1/1, 1/8, 1/64 и 1/256.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; один из таймеров может тактироваться от встроенного низкочастотного (32 кГц) кварцевого генератора и работать в асинхронном счетном режиме. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; четыре таймера могут работать в счетном режиме и режиме разрешения счета (таймер инкрементируется только тогда, когда на выводе таймера присутствует разрешающий логический уровень).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; два таймера могут генерировать строб запуска АЦП.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Семейства dsPIC33/PIC24H имеют полностью аналогичные таймеры, их количество увеличено до 9 (восемь из них могут объединяться в четыре 32-битных таймера).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Таймеры&quot; [65623-67302] --&gt;
&lt;h3&gt;&lt;a name=&quot;модули_захвата&quot; id=&quot;модули_захвата&quot;&gt;Модули захвата&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

В отличие от 8-битных семейств, в которых модули захвата/сравнения/ШИМ физически представляют собой один модуль CCP, режим работы которого выбирается программно, модули захвата, сравнения и генерации ШИМ в 16-битных семействах физически независимы. Модули захвата всех 16-битных семейств идентичны.
&lt;/p&gt;

&lt;p&gt;
Модуль захвата, как правило, применяется для вычисления длительности внешних процессов, например периода входного сигнала, длительности одиночного импульса и т. п. При возникновении ожидаемого внешнего события (передний фронт, задний фронт) в 16-битный регистр модуля захвата заносится значение связанного с ним таймера, если разрешено – генерируется прерывание.
&lt;/p&gt;

&lt;p&gt;
Модули захвата контроллеров dsPIC30/33 и PIC24F/H имеют следующие особенности:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; захват значения таймера при каждом событии, при каждом 4 событии, при каждом 16 событии, захват значения таймера при каждом фронте.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 4-х уровневый FIFO буфер. Прерывание может генерироваться модулем захвата при заполнении буфера на выбираемую пользователем величину уровней. Доступен флаг, сигнализирующий о переполнении FIFO.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Контроллеры dsPIC30 имеют от 1 до 8 модулей захвата, PIC24F - 5 модулей захвата, PIC24H/dsPIC33 - 8 модулей захвата.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модули захвата&quot; [67303-69468] --&gt;
&lt;h3&gt;&lt;a name=&quot;модули_сравнения&quot; id=&quot;модули_сравнения&quot;&gt;Модули сравнения&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Модуль сравнения используется для генерации на выводе контроллера определенной последовательности логических уровней. При совпадении значения связанного таймера с 16-битным регистром модуля на выводе формируется заданный логический уровень или инвертируется предыдущий. Если разрешено, генерируется прерывание.
&lt;/p&gt;

&lt;p&gt;
Модули сравнения семейств PIC24F/H и dsPIC30/33 имеют следующие особенности:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; два регистра сравнения позволяют генерировать два фронта на выходе при одном инкременте таймера. Возможна генерация центральносмещенного ШИМ сигнала.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; функция аппаратного отключения позволяет прекращать генерацию сигнала на выходе при аппаратной неисправности (например, перегрузке мощных ключей).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность генерации набора ШИМ сигналов для управления двигателями и источниками питания. Поддерживается управление полумостовой и мостовой схемой с учетом паузы для исключения сквозных токов через мощные ключи.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Если модули сравнения используются для генерации ШИМ сигнала, разрядность ШИМ зависит от частоты. Так, при максимальной производительности 40 MIPS и частоте генерации 39 кГц разрядность ШИМ будет равна 10. Минимальная частота генерации 2,38 Гц (при производительности 40 MIPS).
&lt;/p&gt;

&lt;p&gt;
Контроллеры dsPIC30 имеют от 1 до 8 модулей сравнения, PIC24F - 5 модулей сравнения, PIC24H/dsPIC33 - 8 модулей сравнения.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модули сравнения&quot; [69469-71878] --&gt;
&lt;h3&gt;&lt;a name=&quot;модули_генерации_шим_сигнала_для_специальных_приложений&quot; id=&quot;модули_генерации_шим_сигнала_для_специальных_приложений&quot;&gt;Модули генерации ШИМ сигнала для специальных приложений&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

ШИМ сигнал используется во многих специальных приложениях: управление двигателями постоянного и переменного тока, управление осветительными приборами, источники питания, и др. Большинство этих задач требуют реализации дополнительных функций, таких как обеспечение аппаратного отключения генератора ШИМ, реализации паузы между переключением силовых ключей, генерации симметричного сигнала на раздельных выводах.
&lt;/p&gt;

&lt;p&gt;
Некоторые 16-битные микроконтроллеры Microchip имеют в своем составе модули генерации ШИМ сигнала, функциональность которых значительно расширена по сравнению со стандартным модулем сравнения.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;модуль_управления_двигателями_и_источниками_питания&quot; id=&quot;модуль_управления_двигателями_и_источниками_питания&quot;&gt;Модуль управления двигателями и источниками питания&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Модуль управления двигателями присутствует только в контроллерах с DSP-ядром – dsPIC30/33. Для реализации управления двигателями и источниками питания в PIC24F/H могут использоваться модули сравнения.
&lt;/p&gt;

&lt;p&gt;
Основные особенности модуля управления двигателями и источниками питания:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; от 6 до 8 каналов, комплементарный или независимый режим работы пары каналов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; аппаратная генерация задержки переключения мощных ключевых элементов (в контроллерах с 6 каналами – один генератор задержки, в контроллерах с 8 каналами – два генератора задержки).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программная конфигурация активного уровня на каждом выходе модуля.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генерация центральносмещенного ШИМ сигнала.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность установки на каждом выводе фиксированного логического уровня.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; один или два входа аппаратного аварийного отключения модуля.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; настраиваемая генерация строба запуска АЦП.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Модуль может использоваться для управления асинхронными двигателями, двигателями постоянного тока, безколлекторными двигателями постоянного тока, для построения эффективных источников питания.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;модуль_генерации_шим_для_источников_питания&quot; id=&quot;модуль_генерации_шим_для_источников_питания&quot;&gt;Модуль генерации ШИМ для источников питания&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

В июле 2006 года компания Microchip анонсировала три новых микроконтроллера семейства dsPIC30: dsPIC30F1010, dsPIC30F2020 и dsPIC30F2023. Эти микроконтроллеры содержат два уникальных модуля – модуль генерации ШИМ для управления источниками питания (&lt;strong&gt;PSPWM&lt;/strong&gt; - Power Supply PWM) и модуль универсального компаратора (&lt;strong&gt;SMPSC&lt;/strong&gt; - Switch Mode Power Supply Comparator).
&lt;/p&gt;

&lt;p&gt;
Эти контроллеры позиционируются для разработки корректоров коэффициента мощности, импульсных (в том числе регулируемых) источников питания, построенных по всем возможным схемам.
&lt;/p&gt;

&lt;p&gt;
Структура модуля PSPWM похожа на структуру модуля управления двигателями. Отличие состоит в большей гибкости настроек и измененном методе тактирования. В системах электропитания модуль PSPWM может работать совместно с модулем SMPSC, который в данном случае предназначен для организации обратной связи.
&lt;/p&gt;

&lt;p&gt;
Основные характеристики «связки» PSPWM + SMPSC:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; четыре генератора ШИМ. Каждый имеет два выхода (всего восемь), которые могут работать в противофазе. Каждый генератор имеет независимую временнУю базу, что позволяет реализовать следующие режимы работы:&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; стандартный ШИМ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; комплементарный ШИМ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; противофазный ШИМ&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; многофазная система ШИМ сигналов&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; ШИМ с регулируемой фазой&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; все четыре ШИМ генератора позволяют изменять в реальном времени частоту сигнала, коэффициент заполнения, сдвиг фазы.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка паузы переключения для защиты мощных ключей от сквозного тока.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генераторы обладают уникальной разрешающей способностью по времени: (при 30 MIPS) разрешающая способность коэффициента заполнения – 1.1 нсек, разрешающяя способность схемы задержки на переключение – 4.2 нсек, разрешающая способность сдвига фазы – 4.2 нсек, разрешающая способность установки периода ШИМ – 8.4 нсек. Такие параметры позволяют на выходе модуля получить ШИМ сигнал с частотой 937 кГц и диапазоном регулировки скважности 10 бит.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; независимые входы аварий – общий и перегрузки по току.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; каждый ШИМ генератор имеет схему сравнения для запуска АЦП.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; универсальный компаратор имеет 16 входов, 10-битный ЦАП для установки опорного напряжения.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; в качестве опорного ЦАП может использовать внешнее напряжение, 50% напряжения питания, внутренний стабильный (1%) источник опорного напряжения 1.2 В.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; компаратор может запускать любой из 4 ШИМ генераторов, вызывать прерывание. Схема строба прерываний подключена к компаратору через настраиваемый НЧ фильтр.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
На сегодняшний день модули PSPWM и SMPSC доступны только в трех указанных контроллерах семейства dsPIC30.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модули генерации ШИМ сигнала для специальных приложений&quot; [71879-79664] --&gt;
&lt;h3&gt;&lt;a name=&quot;модуль_интерфейса_квадратурного_энкодера&quot; id=&quot;модуль_интерфейса_квадратурного_энкодера&quot;&gt;Модуль интерфейса квадратурного энкодера&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Системы управления двигателями, как правило, подразумевают наличие обратной связи по положению, которая может быть реализована с помощью датчиков Холла, оптических датчиков, квадратурного энкодера. В последнем случае совместно с модулем управления двигателями может использоваться аппаратный модуль интерфейса квадратурного энкодера. Модуль присутствует только в контроллерах dsPIC30/33.
&lt;/p&gt;

&lt;p&gt;
Основные особенности модуля:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 16-битный счетчик импульсов (с возможностью инкремента и декремента) и флаг направления вращения.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; предделитель счетчика импульсов, регистр периода (при равенстве регистру периода счетчик сбрасывается, и, если разрешено, генерируется прерывание).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность использование модуля в качестве таймера-счетчика общего назначения.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; три входа – два для квадратурно смещенных импульсов и один индексный, который может использоваться для сброса счетчика.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программируемый цифровой фильтр на каждом входе – позволяет использовать даже дешевые механические энкодеры с большим временем дребезга контактов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модуль интерфейса квадратурного энкодера&quot; [79665-81649] --&gt;
&lt;h3&gt;&lt;a name=&quot;компараторы&quot; id=&quot;компараторы&quot;&gt;Компараторы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Два аналоговых компаратора присутствуют только в микроконтроллерах PIC24F. Основные особенности компараторов:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; все выводы компараторов могут быть скоммутированы на порты микроконтроллера. Доступны программные флаги логических уровней на выходах компараторов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; гибкая настройка подключения выводов компараторов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; аппаратная инверсия выходного сигнала компаратора.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; наличие конфигурируемого источника опорного напряжения.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; физические параметры компараторов соответствуют параметрам аналогичных модулей в 8-битных микроконтроллерах Microchip.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Компараторы&quot; [81650-82701] --&gt;
&lt;h3&gt;&lt;a name=&quot;модули_ацп&quot; id=&quot;модули_ацп&quot;&gt;Модули АЦП&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Модули АЦП 16-битных семейств Microchip можно разделить на четыре вида, каждый из которых обладает специфическими функциями.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;битный_ацп_dspic30&quot; id=&quot;битный_ацп_dspic30&quot;&gt;10-битный АЦП dsPIC30&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

АЦП последовательного приближения - осуществляет оцифровку сигнала со скоростью до 500 тыс. выборок в секунду. АЦП имеет 4 схемы выборки-хранения с дифференциальным входом (что позволяет проводить одновременную выборку по 4 дифференциальным каналам), от 6 до 16 каналов, гибкий мультиплексор каналов.
&lt;/p&gt;

&lt;p&gt;
Интересной особенностью этого модуля является наличие программируемого сэмплера, позволяющего производить выборку, а затем квантование по заданному алгоритму переключения каналов.
&lt;/p&gt;

&lt;p&gt;
АЦП имеет 16-уровневый буфер и схему форматирования результата – результат может быть представлен в виде знакового, беззнакового, целого, числа с фиксированной точкой. Схема форматирования осуществляет заданное выравнивание результата внутри 16-битного слова буфера. Использование сэмплера позволяет размещать результаты преобразования в буфере по заданной схеме и генерировать прерывание после произвольного числа преобразований от 1 до 16-и.
&lt;/p&gt;

&lt;p&gt;
В качестве опорного напряжения для квантования используются либо шины питания, либо внешние опорные напряжения Vref- и Vref+. Типовые значения интегральной и дифференциальной нелинейности АЦП составляют +/- 0,5 МРЗ.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;битный_ацп_dspic301&quot; id=&quot;битный_ацп_dspic301&quot;&gt;12-битный АЦП dsPIC30&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
 
АЦП последовательного приближения - осуществляет оцифровку сигнала со скоростью 100 тыс. выборок в секунду. АЦП имеет одну схему выборки хранения с дифференциальным входом и от 8 до 16 каналов.
&lt;/p&gt;

&lt;p&gt;
Так же как и в 10-битном АЦП присутствует сэмплер преобразования, 16-уровневый буфер, схема формирования результата. Преобразование может запускаться программно, от строба модуля управления двигателями, при переполнении таймера, от внешнего прерывания.
&lt;/p&gt;

&lt;p&gt;
Типовые значения интегральной и дифференциальной погрешности не превышают +/- 1 МРЗ.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;битный_ацп_pic24f&quot; id=&quot;битный_ацп_pic24f&quot;&gt;10-битный АЦП PIC24F&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Является аналогом 10-битного АЦП dsPIC30, но содержит одну дифференциальную схему выборки-хранения. Схема мультиплексирования позволяет подать на прямой и инверсный входы схемы ВР сигнал любого аналогового канала. Точностные характеристики соответствуют 10-битному АЦП dsPIC30. Все микроконтроллеры семейства PIC24F имеют один модуль АЦП (16 каналов).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;ацп_pic24hdspic33_c_конфигурируемой_разрядностью&quot; id=&quot;ацп_pic24hdspic33_c_конфигурируемой_разрядностью&quot;&gt;АЦП PIC24H/dsPIC33 c конфигурируемой разрядностью&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Основной особенностью этого модуля АЦП является возможность программной конфигурации количества уровней квантования. Один бит в управляющем регистре позволяет настроить модуль как 10-битный АЦП с 4 дифференциальными схемами ВХ, либо как 12-битный АЦП с 1 дифференциальной схемой ВХ.
&lt;/p&gt;

&lt;p&gt;
Значительно увеличена скорость преобразования – для 10-биного режима она составляет 1,1 млн. выборок в секунду, для 12-битного – 500 тыс. выборок в секунду. Контроллеры PIC24H/dsPIC33 могут иметь в своем составе до двух модулей АЦП (до 32-х каналов) что предоставляет уникальную возможность - удвоить скорость преобразования, используя оба модуля параллельно.
&lt;/p&gt;

&lt;p&gt;
В остальном функциональность модуля аналогична 10- или 12-битному АЦП dsPIC30 в зависимости от выбранного режима работы (разрядности).
&lt;/p&gt;

&lt;p&gt;
Модуль АЦП PIC24H/dsPIC33 имеет возможность генерирования адреса для контроллера DMA, что позволяет размещать результаты преобразований по разным каналам в разных секторах буфера DMA.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модули АЦП&quot; [82702-88568] --&gt;
&lt;h3&gt;&lt;a name=&quot;коммуникационные_интерфейсы&quot; id=&quot;коммуникационные_интерфейсы&quot;&gt;Коммуникационные интерфейсы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;uart&quot; id=&quot;uart&quot;&gt;UART&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Модули UART 16-битных семейств PIC24F/H и dsPIC30/33 существенно переработаны по сравнению с аналогичными интерфейсами в 8-битных семействах. Основные особенности модулей UART:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; полнодуплексный 8- и 9-битный обмен, альтернативные выводы.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность передачи и приема бита четности при 8-битном обмене.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; один или два стоповых бита.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; собственный генератор с 16-битным предделителем (для dsPIC30 при 30 MIPS – от 29 бод до 1,875 Мбод, для PIC24F при 16 MIPS – от 15 бод до 1 Мбод, для PIC24H/dsPIC33 при 40 MIPS – от 38 бод до 2,5 МБод).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 4-уровеневый буфер FIFO приемника и 4-уровневый буфер FIFO передатчика.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; детектирование ошибок четности, переполнения буфера и ошибки формата кадра.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка 9-битного обмена с функцией детектирования адреса.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; диагностический режим «эхо» (loopback).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; аппаратная поддержка автоподстройки скорости обмена (для dsPIC30 возможно перенаправление входа RX на вход модуля захвата, для PIC24F/H и dsPIC33 автоподстройка осуществляется логикой самого модуля).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка LIN 2.0 спецификации: генерирование поля Synk, поля Break (для dsPIC30 – только программно, для PIC24F/H, dsPIC33 – полная аппаратная поддержка), вывод контроллера из энергосберегающего режима по фронту на входе RX.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; раздельные векторы прерываний для всех ошибок модуля UART (только для PIC24F/H, dsPIC33).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность аппаратного управления потоком – сигналы CTS и RTS (только для PIC24F/H, dsPIC33).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка физического уровня спецификации IrDA® (только для PIC24F/H, dsPIC33).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Контроллеры dsPIC30 имеют от 1 до 2-х модулей UART, все контроллеры семейств PIC24F/H и dsPIC33 имеют два модуля UART. Следует заметить, что в отличие от аналогичного модуля 8-битных семейств, модуль UART 16-разрядных контроллеров не поддерживает режим синхронного обмена. Для реализации этой функции рекомендуется использовать модуль SPI.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;spi&quot; id=&quot;spi&quot;&gt;SPI™&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

В 8-битных семействах Microchip модуль SPI был объединен с интерфейсом I2C в модуль MSSP, который мог работать только в одном, выбранном программно режиме. Это накладывало некоторые ограничения на функциональность системы. В 16-битных семействах модули SPI и I2C являются физически независимыми и могут функционировать параллельно. Все 16-битные семейства имеют модули SPI со следующими характеристиками:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 8- и 16-битный режимы обмена.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; режимы работы «ведомый» и «ведущий».&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; выбор активного уровня на линии тактирования. Выбор уровня на линии тактирования в режиме ожидания.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 8-уровневый буфер FIFO (только для PIC24F).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генератор линии тактирования с двумя предделителями (максимальная частота 10 МГц)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; фреймовый режим обмена – позволяет подключать к модулю современные АЦП и голосовые кодеки.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Микроконтроллеры dsPIC30 имеют от 1 до 2-х модулей SPI, семейства PIC24F/H, dsPIC33 – два модуля SPI.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;i2c&quot; id=&quot;i2c&quot;&gt;I2C™&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Все 16-битные семейства имеют модули I2C со следующими характеристиками:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; полная поддержка следующих режимов: «ведомый», «ведущий с одним мастером на шине», «ведущий с несколькими мастерами на шине, с возможностью детектирования коллизий и арбитражем»&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка 8- и 10-битной адресации.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка сообщения общего вызова спецификации I2C. Поддержка зарезервированных протоколом адресов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; работа в режиме повторителя – прием всех сообщений вне зависимости от значения поля адреса.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; опция удержания тактового сигнала, управление длительностью фронта.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; уровни спецификаций I2C и SMBus.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; прерывание при совпадении принятого адреса с заданной 10-битный маской (может использоваться для вывода контроллера из режима пониженного потребления IDLE).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генератор тактирования (шина SCL).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка спецификаций 100 кГц, 400 кГц и 1 МГц.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Модуль I2C 16-битных семейств имеет расширенный набор флагов, позволяющий сократить размер и время выполнения кода обработчика прерывания по сравнению с 8-битными семействами.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры dsPIC30 имеют 1 модуль I2C, PIC24F – 2 модуля I2C, dsPIC33/PIC24H – от 1 до 2-х модулей I2C.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;dci&quot; id=&quot;dci&quot;&gt;DCI&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;
 
Высокая производительность и наличие DSP-ядра позволяют использовать микроконтроллеры dsPIC30/33 в задачах цифровой обработки звуковых сигналов, в частности, для реализации голосовых вокодеров и систем распознавания речи.
&lt;/p&gt;

&lt;p&gt;
Модуль DCI предназначен для обмена данными с микросхемами голосовых кодеков, поддерживаются следующие режимы работы:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; последовательный интерфейс с фреймовой синхронизацией – используется большинством современных кодеков. Позволяет в одном фрейме передавать как звуковые данные по нескольким каналам, так и управляющую информацию.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; I2S (Inter-IC Sound) интерфейс – устаревший интрефейс, однако до сих пор используемый в высококачественных звуковых кодеках (Wolfson, AKM, и т. д.).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Режим совместимый со спецификацией AC’97.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Модуль DCI имеет собственный генератор частоты обмена, два 4-уровневых буфера приемника и передатчика, поддерживает до 16 временнЫх слотов, 8-16 битную разрядность звуковых данных.
&lt;/p&gt;

&lt;p&gt;
Модуль DCI присутствует только в контроллерах с DSP-ядром (dsPIC30/33).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;can&quot; id=&quot;can&quot;&gt;CAN&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Модуль CAN контроллера dsPIC30 полностью идентичен аналогичному модулю 8-битного семейства PIC18F458 (спецификация CAN 2.0A/B). Модуль E(nchanced)CAN PIC24H/dsPIC33 значительно расширен по сравнению с CAN dsPIC30. Основные особенности CAN/ECAN модулей семейств dsPIC30/33 и PIC24H:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка спецификаций CAN 1.2, CAN 2.0A и CAN2.0B.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; прием и передача фреймов данных стандартного и расширенного формата.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; длина фрейма данных – 0-8 байт.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программируемая скорость обмена до 1 Мбод.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; два буфера приемника с выбираемым приоритетм (CAN), до 32 8-байтных буферов приемника с выбираемым приоритетом (ECAN).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 6 фильтров сообщений (CAN), 16 фильтров сообщений (ECAN).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2 маски фильтров сообщений (CAN), 3 маски фильтров сообщений (ECAN).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка адресации DeviceNet™ (ECAN).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; три буфера передатчика с выбираемым приоритетом (CAN), 8 8-байтных буферов передатчика с выбираемым приоритетом (ECAN).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программируемая функция вывода из энергосберегающего режима.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; перенаправление событий приемника на вход модуля захвата (только ECAN – ведение логов, сетевая синхронизация).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Контроллеры dsPIC30 имеют от 1 до 2-х CAN модулей, PIC24H/dsPIC33 - от 1 до 2-х ECAN модулей.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;параллельный_порт&quot; id=&quot;параллельный_порт&quot;&gt;Параллельный порт&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Параллельный адресуемый мастер-порт (PMP) присутствует только в контроллерах семейства PIC24F. Он позволяет организовать обмен данными с различными устройствами – ЖКИ индикаторами, внешними микросхемами FLASH и SRAM памяти, картами памяти CompactFlash®, жесткими дисками и т. п.
&lt;/p&gt;

&lt;p&gt;
Параллельный мастер-порт имеет следующие характеристики:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; две линии выбора кристалла (CS), управляющие линии (ByteEn, RD, WR, индивидуальные или совмещенные стробы записи/чтения). Активный логический уровень всех управляющих сигналов может быть настроен программно.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 16-битная конфигурируемая шина адреса (любая линия может быть включена или отключена). Возможность автоматического инкремента или декремента адреса.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 8-битная или 16-битная (только для контроллеров в 100-выводных корпусах) шина данных.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность работы в мультиплексном режиме шины данных и шины адреса.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программируемые временнЫе параметры.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 4-х уровневый буфер данных.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; выбор пороговых уровней (TTL, триггер Шмитта).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка режима «ведомый» - функциональность, аналогичная модулю PSP в 8-битных семействах.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Параллельный порт доступен только в семействе PIC24F. В микроконтроллерах с количеством выводов 64 и 80 PMP имеет 8-битную шину данных, в микроконтроллерах с количеством выводов 100 - 16-битную шину данных.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Коммуникационные интерфейсы&quot; [88569-101519] --&gt;
&lt;h3&gt;&lt;a name=&quot;модуль_crc&quot; id=&quot;модуль_crc&quot;&gt;Модуль CRC&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Модуль CRC (cyclic redundancy check) предназначен для аппаратного вычисления циклической избыточной суммы, которая используется в коммуникационных протоколах для проверки целостности пакета. 
&lt;/p&gt;

&lt;p&gt;
Модуль может использоваться для вычисления циклического кода с произвольным полиномом длиной от 1 до 16 бит. Модуль имеет буфер данных объемом 8 слов при длине полинома от 7 до 16 бит и объемом 16 слов при длине полинома менее 7 бит. По завершению вычисления может генерироваться прерывание.
&lt;/p&gt;

&lt;p&gt;
Модуль вычисления CRC доступен только в семействе PIC24F.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модуль CRC&quot; [101520-102508] --&gt;
&lt;h3&gt;&lt;a name=&quot;модуль_часов_реального_времени_и_календаря_rtcc&quot; id=&quot;модуль_часов_реального_времени_и_календаря_rtcc&quot;&gt;Модуль часов реального времени и календаря (RTCC)&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Модуль доступен только в контроллерах PIC24F. Модуль тактируется от внутреннего низкочастотного (32 кГц) кварцевого генератора (необходимо использование внешнего резонатора) и осуществляет аппаратный подсчет времени, смену календарных дней. RTTC имеет следующие характеристики:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; подсчет секунд, минут и часов, 24-часовой формат.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; календарь: день недели, дата, месяц, год. Диапазон: 2000 – 2009 год, учет високосных годов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; BCD формат представления данных.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программная и аппаратная калибровка: +/- 2,64 секунды в месяц.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; гибкая система тревог, выход импульса тревоги. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Модуль RTCC не поддерживает автоматическую смену летнее/зимнее время – эту функцию необходимо реализовывать программно.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модуль часов реального времени и календаря (RTCC)&quot; [102509-103860] --&gt;
&lt;h3&gt;&lt;a name=&quot;jtag_интерфейс&quot; id=&quot;jtag_интерфейс&quot;&gt;JTAG интерфейс&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

JTAG интерфейс предназначен для граничного сканирования (проверки целостности системы) и внутрисхемного программирования и отладки микроконтроллеров. Впервые JTAG интерфейс стал доступен в новых 16-битных семействах PIC24F/H и dsPIC33. На сайте компании опубликованы ВSDL-файлы для всех микроконтроллеров с JTAG интерфейсом &lt;strong&gt;[3]&lt;/strong&gt;, а спецификация программирования Flash памяти будет доступна в ближайшее время.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;JTAG интерфейс&quot; [103861-104621] --&gt;
&lt;h2&gt;&lt;a name=&quot;программные_и_аппаратные_средства_разработки&quot; id=&quot;программные_и_аппаратные_средства_разработки&quot;&gt;Программные и аппаратные средства разработки&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Программные и аппаратные средства разработки&quot; [104622-104723] --&gt;
&lt;h3&gt;&lt;a name=&quot;среды_разработки&quot; id=&quot;среды_разработки&quot;&gt;Среды разработки&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Основной средой разработки для всех семейств (и 8- и 16-битных) является &lt;a href=&quot;http://www.microchip.com/mplab/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/mplab/&quot;  rel=&quot;nofollow&quot;&gt;MPLAB IDE&lt;/a&gt;, которую предоставляет компания Microchip. Среда разработки бесплатная, актуальная версия на сентябрь 2006 года – 7.42&lt;sup&gt;&lt;a href=&quot;#fn__1&quot; name=&quot;fnt__1&quot; id=&quot;fnt__1&quot; class=&quot;fn_top&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt;.
&lt;/p&gt;

&lt;p&gt;
Среда разработки MPLAB имеет следующие встроенные средства и возможности:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; менеджер проекта и рабочей области&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; текстовый редактор с подсветкой кода для ассемблеров всех семейств и языка Си. Возможен парсинг кода и вывод списка элементов программы (функций, переменных, констант, структур, и т. п.). Текстовый редактор поддерживает запись и выполнение макросов.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ассемблер для всех семейств Microchip. Для 16-битных контроллеров - ассемблер ASM30. В состав среды входят заголовочные файлы и скрипты линкера для всех контроллеров.  &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программный симулятор для всех семейств Microchip, который обеспечивает симуляцию большинства периферийных модулей, трассировку выполняемого кода, произвольное число точек останова, пошаговое выполнение. Симулятор имеет счетчик времени выполнения, логический анализатор (графическое представление изменений логических уровней на выводах контроллера).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Симулятор позволяет имитировать работу внешних устройств: аналоговый сигнал на входе АЦП, RS-232 терминал, и т. п. Возможно изменение любого служебного регистра или ячейки ОЗУ в соответствии с заданной в текстовом файле последовательностью.
&lt;/p&gt;

&lt;p&gt;
Начиная с версии 7.40 в состав симулятора входит модуль &lt;a href=&quot;http://www.microchip.com.ru/1010/Support/DMCI.html?i=55&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com.ru/1010/Support/DMCI.html?i=55&quot;  rel=&quot;nofollow&quot;&gt;DMCI&lt;/a&gt; (Data Monitor and Control Interface). Модуль устанавливается в виде отдельного плагина и позволяет отображать в реальном времени данные массива в виде графика и изменять значение по любому адресу в ОЗУ.
&lt;/p&gt;

&lt;p&gt;
Наличие окон Watch (значения переменных) и Local (то же самое, но для локальных и автоматических переменных функции) характерно как для симулятора, так и для интерфейса внутрисхемных отладчиков и эмуляторов.
&lt;/p&gt;

&lt;p&gt;
Среда разработки поддерживает использование плагинов как от Microchip, так и от сторонних разработчиков. Например, плагин Visual Initializer от Microchip позволяет с помощью визуальных средств настроить все периферийные модули контроллера и получить на выходе код инициализации на языке Си или ассемблере. 
&lt;/p&gt;

&lt;p&gt;
Кроме собственных компиляторов MCC18 и MCC30, MPLAB IDE поддерживает множество компиляторов с языков высокого уровня сторонних производителей (&lt;a href=&quot;http://www.htsoft.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.htsoft.com/&quot;  rel=&quot;nofollow&quot;&gt;Hi-Tech&lt;/a&gt;, &lt;a href=&quot;http://www.iar.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.iar.com/&quot;  rel=&quot;nofollow&quot;&gt;IAR&lt;/a&gt;, &lt;a href=&quot;http://www.ccsinfo.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.ccsinfo.com/&quot;  rel=&quot;nofollow&quot;&gt;CCS&lt;/a&gt;).
&lt;/p&gt;

&lt;p&gt;
Среда разработки MPLAB IDE позволяет использовать все программаторы Microchip: &lt;a href=&quot;http://www.microchip.com/picstart/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/picstart/&quot;  rel=&quot;nofollow&quot;&gt;PICSTART+&lt;/a&gt;, &lt;a href=&quot;http://www.microchip.com/pm2/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/pm2/&quot;  rel=&quot;nofollow&quot;&gt;Promate II&lt;/a&gt;, &lt;a href=&quot;http://www.microchip.com/pm3/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/pm3/&quot;  rel=&quot;nofollow&quot;&gt;Promate III&lt;/a&gt;, программатор начального уровня &lt;a href=&quot;http://www.microchip.com/pickit2/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/pickit2/&quot;  rel=&quot;nofollow&quot;&gt;PICkit 2&lt;/a&gt;. Основным инструментом отладки является  внутрисхемный отладчик-программатор &lt;a href=&quot;http://www.microchip.com/icd2/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/icd2/&quot;  rel=&quot;nofollow&quot;&gt;MPLAB ICD2&lt;/a&gt;, совместимый с любым контроллером 16-битного семейства.
&lt;/p&gt;

&lt;p&gt;
Более дорогими инструментами отладки являются внутрисхемные эмуляторы &lt;a href=&quot;http://www.microchip.com/ice2000/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/ice2000/&quot;  rel=&quot;nofollow&quot;&gt;ICE 2000&lt;/a&gt; и &lt;a href=&quot;http://www.microchip.com/ice4000/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/ice4000/&quot;  rel=&quot;nofollow&quot;&gt;ICE 4000&lt;/a&gt;. Последний предназначен для эмуляции 16-битных семейств.
&lt;/p&gt;

&lt;p&gt;
Летом 2006 года компания Microchip анонсировала выпуск нового внутрисхемного отладчика-эмулятора &lt;a href=&quot;http://www.microchip.com/realice/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/realice/&quot;  rel=&quot;nofollow&quot;&gt;REAL ICE&lt;/a&gt;. На сентябрь 2006 года этот эмулятор находится на стадии производственного тестирования. Начало серийного производства запланировано на октябрь-ноябрь 2006 года.
&lt;/p&gt;

&lt;p&gt;
Полезным для разработчика будет интегрированная система документации на среду разработки, симулятор, ассемблеры и поддержка систем контроля версий: &lt;acronym title=&quot;Concurrent Versions System&quot;&gt;CVS&lt;/acronym&gt;, Subversion, Merant PCVS, &lt;acronym title=&quot;Microsoft&quot;&gt;MS&lt;/acronym&gt; SourceSafe.
&lt;/p&gt;

&lt;p&gt;
В составе среды разработки MPLAB IDE поставляется ASM30 - ассемблер для 16-битных семейств. Так как все контроллеры dsPIC30/33 и PIC24F/H совместимы по системе команд (за исключением инструкций ядра ЦОС), возможно использование разработанного ранее кода при переходе на другое 16-битное семейство.
&lt;/p&gt;

&lt;p&gt;
Кроме MPLAB IDE можно упомянуть среду разработки от известного производителя компиляторов для встраиваемых систем &lt;a href=&quot;http://www.iar.com/website1/1.0.1.0/339/1/index.php&quot; class=&quot;urlextern&quot; title=&quot;http://www.iar.com/website1/1.0.1.0/339/1/index.php&quot;  rel=&quot;nofollow&quot;&gt;IAR IDE for dsPIC&lt;/a&gt;. На сентябрь 2006 года актуальной является версия 1.20B, которая поставляется в комплекте с компилятором языка Си. Продукты IAR Systems являются достаточно популярными в России для контроллеров семейств x51, ARM, AVR, однако для профессиональной разработки приложений для dsPIC30/dsPIC33/PIC24F/PIC24H среда IAR малопригодна – отсутствует поддержка программаторов и отладчиков, не поддерживается симуляция периферии, симуляция ядра выполнена со значительными ошибками.
&lt;/p&gt;

&lt;p&gt;
В сентябре 2006 года компания &lt;a href=&quot;http://www.htsoft.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.htsoft.com/&quot;  rel=&quot;nofollow&quot;&gt;HI-TECH Software&lt;/a&gt;, известная российским разработчикам одним из лучших компиляторов с языка Си для 8-битных микроконтроллеров Microchip, анонсировала выход новой версии среды разработки HI-TIDE 3.11, в которую добавлена поддержка 16-битных семейств на уровне создания проекта. К сожалению, HI-TIDE не поддерживает симуляцию для 16-битных контроллеров и аппаратные средства разработки Microchip, поэтому пока она не пригодна для профессионального использования.
&lt;/p&gt;

&lt;p&gt;
Для пользователей операционной системы Linux можно рекомендовать среду разработки с открытым исходным кодом &lt;a href=&quot;http://piklab.sourceforge.net/&quot; class=&quot;urlextern&quot; title=&quot;http://piklab.sourceforge.net/&quot;  rel=&quot;nofollow&quot;&gt;Piklab&lt;/a&gt;. Из 16-битных семейств она пока поддерживает только dsPIC30, но проект активно развивается – можно ожидать добавления PIC24F/H и dsPIC33 в будущем.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Среды разработки&quot; [104724-113898] --&gt;
&lt;h3&gt;&lt;a name=&quot;компиляторы_с_языка_си&quot; id=&quot;компиляторы_с_языка_си&quot;&gt;Компиляторы с языка Си&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Для 16-битных семейств компания Microchip предлагает компилятор &lt;a href=&quot;http://www.microchip.com/c30/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/c30/&quot;  rel=&quot;nofollow&quot;&gt;MPLAB C30&lt;/a&gt; (актуальная версия на сентябрь 2006 года – 2.03), в состав которого входят: собственно компилятор исходных файлов в объектные; линкер; генератор библиотечных файлов. Компилятор C30 основан на известном компиляторе с открытым исходным кодом GCC, однако выполняемые файлы доступны только для ОС Windows. На сайте компании Microchip размещены &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023073&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023073&quot;  rel=&quot;nofollow&quot;&gt;исходные коды компилятора&lt;/a&gt; для последней выпущенной версии, что позволяет произвести сборку самостоятельно под любую операционную систему.
&lt;/p&gt;

&lt;p&gt;
Основные особенности компилятора C30:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; ANSI C совместимый, в комплекте поставляются стандартные библиотеки.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка типов 32-bit double и 64-bit double, 64-битного целого (long long).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка всех 16-битных семейств Microchip.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка смешанного кода Си + asm.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка расширенных настроек оптимизации кода.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; наличие встроенных (intrinsincs) функций для работы с DSP-ядром.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Microchip предоставляет два варианта компилятора – платная версия и полнофункциональная «студенческая» версия. Студенческая версия работает без ограничений 60 дней, далее возможна только компиляция без использования оптимизации.
&lt;/p&gt;

&lt;p&gt;
Кроме MPLAB C30 можно отметить следующие компиляторы с языка Си (актуальность - сентябрь 2006 года):
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://microchip.htsoft.com/products/compilers/dspicccompiler.php&quot; class=&quot;urlextern&quot; title=&quot;http://microchip.htsoft.com/products/compilers/dspicccompiler.php&quot;  rel=&quot;nofollow&quot;&gt;HI-TECH dsPICC v. 9.60&lt;/a&gt; – компилятор от известного австралийского производителя HI-TECH Software, который известен российским разработчикам одним из лучших компиляторов для 8-битных контроллеров Microchip. Компилятор интегрируется в среду разработки MPLAB IDE, но может работать и в составе среды HI-TIDE 3.11 от HI-TECH (см. пункт «Среды разработки»). Доступны версии компилятора как для &lt;acronym title=&quot;Operating System&quot;&gt;OS&lt;/acronym&gt; Windows, так и для Linux.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.iar.com/website1/1.0.1.0/339/1/index.php&quot; class=&quot;urlextern&quot; title=&quot;http://www.iar.com/website1/1.0.1.0/339/1/index.php&quot;  rel=&quot;nofollow&quot;&gt;IAR IDE for dsPIC 1.20B&lt;/a&gt; – поставляется в составе интегрированной среды известного производителя средств разработки для встраиваемых систем IAR Systems [9]. Малопригоден для профессионального применения. Последняя версия компилятора доступна уже больше года, обновлений пока не предвидится. Компилятор поддерживает только небольшое число контроллеров семейства dsPIC30.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.mikroe.com/en/compilers/mikroc/dspic/&quot; class=&quot;urlextern&quot; title=&quot;http://www.mikroe.com/en/compilers/mikroc/dspic/&quot;  rel=&quot;nofollow&quot;&gt;microC for dsPIC 2.0.0.0&lt;/a&gt; – компилятор и среда разработки от компании mikroElektronika [10]. Малопригоден для профессионального применения, так как не имеет возможности запуска из командный строки и лишь частично удовлетворяет спецификации ANSI C. Компания microElectornica так же предлагает компиляторы языков Pascal и Basic для 16-битных семейств Microchip, однако они имеют те же ограничения для профессионального применения.
&lt;/p&gt;

&lt;p&gt;
В качестве примера приведем результаты сравнительного теста компиляторов C30, dsPICC и IAR. Компилировался один из вариантов теста Whetstone (вычисления с плавающей точкой). Симуляция проводилась в среде разработки MPLAB IDE для компиляторов dsPICC и C30 и в среде IAR для компилятора IAR 1.20B. Результаты симуляции проверены на макете с контроллером dsPIC30F6012 (~29.25 MIPS, тактовая частота – 117.9648 МГц):

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Производитель  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Компилятор  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  размер double, бит  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  модель памяти  &lt;/th&gt;&lt;th class=&quot;col4 centeralign&quot;&gt;  уровень оптимизации  &lt;/th&gt;&lt;th class=&quot;col5 centeralign&quot;&gt;  кол-во командных тактов (симуляция), млн  &lt;/th&gt;&lt;th class=&quot;col6 centeralign&quot;&gt;  кол-во командных тактов (макет), млн  &lt;/th&gt;&lt;th class=&quot;col7 centeralign&quot;&gt;  время выполнения, сек  &lt;/th&gt;&lt;th class=&quot;col8 centeralign&quot;&gt;  Объем кода, кБайт  &lt;/th&gt;&lt;th class=&quot;col9 centeralign&quot;&gt;  Субъективная оценка (максимум 5 баллов)  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; IAR Systems &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; IAR 1.20B &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 32 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; small &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; по размеру &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 26.2 &lt;/td&gt;&lt;td class=&quot;col6&quot;&gt; 27.4 &lt;/td&gt;&lt;td class=&quot;col7&quot;&gt; 0.91 &lt;/td&gt;&lt;td class=&quot;col8&quot;&gt; 6.0 &lt;/td&gt;&lt;td class=&quot;col9&quot;&gt; 3 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Microchip &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; C30 2.03 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 32 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; small &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; по размеру &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 28.8 &lt;/td&gt;&lt;td class=&quot;col6&quot;&gt; 28.8 &lt;/td&gt;&lt;td class=&quot;col7&quot;&gt; 0.96 &lt;/td&gt;&lt;td class=&quot;col8&quot;&gt; 4.5 &lt;/td&gt;&lt;td class=&quot;col9&quot;&gt; 5 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Hi-Tech Software &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; HT dsPICC 9.50 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 32 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; small &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; максимальная &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 61.7 &lt;/td&gt;&lt;td class=&quot;col6&quot;&gt; 61.6 &lt;/td&gt;&lt;td class=&quot;col7&quot;&gt; 2.05 &lt;/td&gt;&lt;td class=&quot;col8&quot;&gt; 7.1 &lt;/td&gt;&lt;td class=&quot;col9&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; IAR Systems &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; IAR 1.20B &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 64 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; small &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; по размеру &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 43.5 &lt;/td&gt;&lt;td class=&quot;col6&quot;&gt; 47.3 &lt;/td&gt;&lt;td class=&quot;col7&quot;&gt; 1.58 &lt;/td&gt;&lt;td class=&quot;col8&quot;&gt; 9.7 &lt;/td&gt;&lt;td class=&quot;col9&quot;&gt; 3 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Microchip &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; C30 2.03 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; 64 &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; small &lt;/td&gt;&lt;td class=&quot;col4&quot;&gt; по размеру &lt;/td&gt;&lt;td class=&quot;col5&quot;&gt; 48.1 &lt;/td&gt;&lt;td class=&quot;col6&quot;&gt; 48.0 &lt;/td&gt;&lt;td class=&quot;col7&quot;&gt; 1.60 &lt;/td&gt;&lt;td class=&quot;col8&quot;&gt; 7.5 &lt;/td&gt;&lt;td class=&quot;col9&quot;&gt; 2 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

Из таблицы видно, что компилятор HI-TECH значительно уступает IAR и C30 как по плотности кода, так и по времени выполнения. Для тестирования использовалась одна из первых версий, однако проверка последней версии от 19 сентября 2006 года показала, что хотя время выполнения теста уменьшилось примерно на 10 процентов, плотность кода осталась прежней. 
&lt;/p&gt;

&lt;p&gt;
Компилятор IAR немного опережает C30 по скорости выполнения, однако заметно проигрывает по плотности кода. Из таблицы видно, что в симуляторе среды IAR допущены значительные нарушения – количество командных тактов указанных симулятором отличается от реального.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Компиляторы с языка Си&quot; [113899-121254] --&gt;
&lt;h3&gt;&lt;a name=&quot;библиотеки&quot; id=&quot;библиотеки&quot;&gt;Библиотеки&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Компания Microchip предоставляет разработчикам большое количество библиотек для компилятора MPLAB C30, что является еще одним аргументов для использования его в качестве основного средства разработки. Часть библиотек распространяется бесплатно, некоторые библиотеки – платные, однако с ними можно ознакомиться, скачав демонстрационную версию с сайта компании после регистрации. Платные библиотеки доступны для скачивания в виде скомпилированных библиотечных файлов, что ограничивает область их применения. Возможны различные формы оплаты при приобретении библиотек – либо единовременная оплата, либо лицензионные отчисления. В таблице приведен список библиотек, предоставляемых компанией Microchip для 16-битных семейств:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Библиотека  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Бесплатная &lt;sup&gt;&lt;a href=&quot;#fn__2&quot; name=&quot;fnt__2&quot; id=&quot;fnt__2&quot; class=&quot;fn_top&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt;  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Реализация  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  Поддерживаемые семейства  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Математические функции &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; + &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; asm &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; PIC24F/H, dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Управление периферийными модулями &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; + &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30, PIC24F/H, dsPIC33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Функции ЦОС &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; + &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; asm &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Софт-модем &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;sup&gt;&lt;a href=&quot;#fn__3&quot; name=&quot;fnt__3&quot; id=&quot;fnt__3&quot; class=&quot;fn_top&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Распознавание речи &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си + asm &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Шумоподавление &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Подавление акустического эха &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си + asm &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Подавление эха в каналах связи &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Симметричные алгоритмы шифрования &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;sup&gt;&lt;a href=&quot;#fn__4&quot; name=&quot;fnt__4&quot; id=&quot;fnt__4&quot; class=&quot;fn_top&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; PIC24F/H, dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Несимметричные алгоритмы шифрования &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; PIC24F/H, dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row11&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Сжатие речи &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; - &lt;sup&gt;&lt;a href=&quot;#fn__5&quot; name=&quot;fnt__5&quot; id=&quot;fnt__5&quot; class=&quot;fn_top&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt; &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; dsPIC30/33, PIC24F/H &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row12&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Стек протоколов TCP/IP &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; + &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; PIC24F/H, dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row13&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; FAT16 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; + &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; Си &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; PIC24F/H, dsPIC30/33 &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_математических_функций&quot; id=&quot;библиотека_математических_функций&quot;&gt;Библиотека математических функций&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en022432&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en022432&quot;  rel=&quot;nofollow&quot;&gt;Исходные коды&lt;/a&gt; доступны на сайте Microchip и в составе компилятора MPLAB C30. Для увеличения скорости выполнения библиотеки реализованы на ассемблере, но все функции могут быть вызваны из Си-кода.
Тип аргументов и возвращаемых результатов – IEEE-754 (плавающая точка), реализованы арифметические, тригонометрические, логарифмические функции, функция взятия корня, функции округления и т. д., т.е. все стандартные математические функции языка Си.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_работы_с_периферийными_модулями&quot; id=&quot;библиотека_работы_с_периферийными_модулями&quot;&gt;Библиотека работы с периферийными модулями&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023586&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023586&quot;  rel=&quot;nofollow&quot;&gt;Исходные коды&lt;/a&gt; доступны на сайте Microchip и в составе компилятора MPLAB C30.
Реализованы функции для работы со следующими периферийными модулями: порты ввода-вывода и внешние прерывания, таймеры, модули захвата и сравнения, модуль ШИМ для управления двигателями, модуль квадратурного энкодера, RTCC, CRC, UART, SPI, I2C, DCI, CAN, 10- и 12-битный АЦП.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_функций_цос&quot; id=&quot;библиотека_функций_цос&quot;&gt;Библиотека функций ЦОС&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023598&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023598&quot;  rel=&quot;nofollow&quot;&gt;Исходные коды&lt;/a&gt; доступны на сайте Microchip и в составе компилятора MPLAB C30. Библиотека реализована на ассемблере, функции могут быть вызваны из кода на языке Си. Библиотека содержит 49 функций, которые можно разделить на следующие группы:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; векторные операции: сложение и вычитание векторов, свертка, вычисление корреляционной функции, максимум, минимум, умножение и масштабирование&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; операции с матрицами: сложение, вычитание, умножение, масштабирование, транспонирование&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; оконные функции: функции окон Блекмана, Хамминга, Ханнинга, Кайзера и Батлета&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; функции фильтрации: КИХ фильтрация, БИХ фильтрация&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; функции преобразований: дискретное косинусное преобразование, БПФ, обратное БПФ&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Все функции библиотеки оптимизированы по скорости – преобразование Фурье (256 отсчетов) выполняется за 476 мкс (40 MIPS).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_софт-модема&quot; id=&quot;библиотека_софт-модема&quot;&gt;Библиотека софт-модема&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Предназначена для реализации программных модемов по спецификациям ITU-T V.21, V.22, V22bis, V.23, V.32 и V.32bis.
&lt;/p&gt;

&lt;p&gt;
Пакет, включающий реализацию V.22bis/V.22 , V.23, V.21 поставляется &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023590&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023590&quot;  rel=&quot;nofollow&quot;&gt;бесплатно&lt;/a&gt;. Поддержка остальных спецификаций осуществляется на платной основе. Для реализации V.32bis (скорость обмена от 4,8 кбод до 14,4 кбод, QAM/TCM модуляция) необходима производительность не менее 15 MIPS.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_распознавания_речи&quot; id=&quot;библиотека_распознавания_речи&quot;&gt;Библиотека распознавания речи&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023596&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023596&quot;  rel=&quot;nofollow&quot;&gt;Предназначена&lt;/a&gt; для реализации систем дистанционного управления речью. Так как в библиотеке реализовано распознавание английской речи, библиотека вряд ли будет интересна Российским разработчикам.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_шумоподавления&quot; id=&quot;библиотека_шумоподавления&quot;&gt;Библиотека шумоподавления&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Библиотека предназначена для увеличения соотношения сигнал/шум речевого сигнала в следующих приложениях: системы «hands-free», системы оповещения, телекоммуникации, телефонные гарнитуры и т. д. Библиотека поставляется на &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023592&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023592&quot;  rel=&quot;nofollow&quot;&gt;платной основе&lt;/a&gt;. Применение библиотеки позволяет улучшить SNR на 10-20 дБ для типовых приложений, для использования необходима производительность 1 MIPS.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_подавления_акустического_эха&quot; id=&quot;библиотека_подавления_акустического_эха&quot;&gt;Библиотека подавления акустического эха&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023591&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023591&quot;  rel=&quot;nofollow&quot;&gt;Предназначена&lt;/a&gt; для подавления эха и акустического самовозбуждения в системах громкой связи, системах оповещения, беспроводных телефонных аппаратах (обратная акустическая связь по корпусу трубки), и т. п.
В библиотеке применяется адаптивный цифровой фильтр с детектором активности речи, полностью реализованный на ассемблере с целью увеличения скорости выполнения и уменьшения объема используемой программной памяти. Алгоритм обеспечивает подавление эха как минимум на 40 дБ (типовое значение 50 дБ). Библиотека может использоваться совместно с библиотекой шумоподавления.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_подавления_эха_в_каналах_связи&quot; id=&quot;библиотека_подавления_эха_в_каналах_связи&quot;&gt;Библиотека подавления эха в каналах связи&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en025239&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en025239&quot;  rel=&quot;nofollow&quot;&gt;Предназначена&lt;/a&gt; для использования в коммуникационных системах, для подавления отражения аналоговых сигналов в линиях связи. Полностью соответствует стандарту ITU-T G.168. Типовое значения коэффициента подавления 70 дБ (минимальное 40 дБ).
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_симметричных_алгоритмов_шифрования&quot; id=&quot;библиотека_симметричных_алгоритмов_шифрования&quot;&gt;Библиотека симметричных алгоритмов шифрования&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en020159&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en020159&quot;  rel=&quot;nofollow&quot;&gt;Предоставляются&lt;/a&gt; следующие функции:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; хэш-алгоритмы SHA-1 (поток до 423 кБайт/с), MD5 (поток до 656 кБайт/с).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; алгоритмы шифрования: AES-128, T-DES. При последовательности шифрование-дешифрование обеспечивается следующая скорость потока данных: для AES-128 – 232 кБайт/с, для T-DES – 49 кБайт/с&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генератор случайных чисел по спецификации ANSI X9.82.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка различных функций обмена ключами.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Часть библиотеки (только алгоритмы шифрования T-DES, AES-128) предоставляется бесплатно в виде объектных модулей.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_несимметричных_алгоритмов_шифрования&quot; id=&quot;библиотека_несимметричных_алгоритмов_шифрования&quot;&gt;Библиотека несимметричных алгоритмов шифрования&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en020158&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en020158&quot;  rel=&quot;nofollow&quot;&gt;Предоставляет&lt;/a&gt; следующие функции:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; функции шифрования-дешифрования открытого ключа RSA (1024/2048 бит).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; протокол подтверждения открытого ключа Diffie-Hellman (1024/2048 бит).&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; цифровая подпись и проверка цифровой подписи DSA (1024 бит) и RSA (1024/2048 бит)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; хэш-алгоритмы SHA-1 и MD5&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генератор случайных чисел по спецификации ANSI X9.82.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотеки_сжатия_речи&quot; id=&quot;библиотеки_сжатия_речи&quot;&gt;Библиотеки сжатия речи&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Microchip предлагает три библиотеки сжатия речи, предназначенные для использования в автоответчиках, аварийных извещателях, диктофонах и т. п.:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023610&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023610&quot;  rel=&quot;nofollow&quot;&gt;CELP&lt;/a&gt; – платная библиотека, основанная на кодеке Speex с открытыми исходными кодами. Обеспечивает сжатие и декодирование речевого сигнала с коэффициентом 1:16 и оценкой качества PESQ = 3.7 – 4.2 (из 5.0). Может использоваться с контроллерами dsPIC30/33.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en532182&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en532182&quot;  rel=&quot;nofollow&quot;&gt;G.711&lt;/a&gt; – бесплатная библиотека, основанная на стандарте ITU-T G.711. Библиотека содержит компандер и экспандер A-law и u-law, обеспечивая сжатие с коэффициентом 1:2 и оценкой качества PESQ = 4.3 – 4.5. Может использоваться с любым контроллером 16-битного семейства.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en532183&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en532183&quot;  rel=&quot;nofollow&quot;&gt;G.726А&lt;/a&gt; – платная библиотека, основанная на стандарте ITU-T G.726A (ADPCM). Обеспечивает сжатие и декодирование речевого сигнала с коэффициентами от 1:3.2 до 1:8 с оценкой качества PESQ = 4.3 – 4.5. Может использоваться с контроллерами dsPIC30/33.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;стек_протоколов_tcpip&quot; id=&quot;стек_протоколов_tcpip&quot;&gt;Стек протоколов TCP/IP&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/tcpip/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/tcpip/&quot;  rel=&quot;nofollow&quot;&gt;Библиотека TCP/IP&lt;/a&gt; может использоваться с любым контроллером 16-битного семейства. Модульная система позволяет использовать только необходимые уровни стека и интегрировать библиотеку в уже разработанные устройства.
&lt;/p&gt;

&lt;p&gt;
Поддерживаются следующие протоколы: ARP, IP, ICMP, UDP, TCP, &lt;acronym title=&quot;Dynamic Host Configuration Protocol&quot;&gt;DHCP&lt;/acronym&gt;, SNMP, &lt;acronym title=&quot;Hyper Text Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt;, &lt;acronym title=&quot;File Transfer Protocol&quot;&gt;FTP&lt;/acronym&gt;, TFTP. Возможна реализация &lt;acronym title=&quot;File Transfer Protocol&quot;&gt;FTP&lt;/acronym&gt; и &lt;acronym title=&quot;Hyper Text Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; сервера на базе памяти программ или внешней памяти. Стек (без протоколов &lt;acronym title=&quot;File Transfer Protocol&quot;&gt;FTP&lt;/acronym&gt; и TFTP) использует не более 12 кБайт программной памяти.
&lt;/p&gt;

&lt;p&gt;
Стек поддерживает 10-Base T Ethernet-контроллер ENC28J60 от Microchip. Контроллер ENC28J60 выпускается в компактном 28-выводном корпусе, содержит MAC и PHY драйверы, 8 кБайт буферной памяти, SPI интерфейс для обмена данными с хост-контроллером.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;библиотека_fat16&quot; id=&quot;библиотека_fat16&quot;&gt;Библиотека FAT16&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en532040&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en532040&quot;  rel=&quot;nofollow&quot;&gt;Бесплатная библиотека&lt;/a&gt; файловой системы FAT16 может использоваться с любым контроллером с 16-битной архитектурой от Microchip. Библиотека поддерживает Flash-карты памяти SD/MMC и CompacFlash. Так как библиотека поставляется в виде открытых исходных кодов, разработчик может самостоятельно добавить поддержку других устройств хранения данных.
&lt;/p&gt;

&lt;p&gt;
В библиотеке реализованы стандартные функции: fopen, fread, fwrite, fseek и т. д. Для использования библиотеки требуется 16 кБайт программной памяти и 1.5 кБайт ОЗУ.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Библиотеки&quot; [121255-137643] --&gt;
&lt;h3&gt;&lt;a name=&quot;операционные_системы_реального_времени&quot; id=&quot;операционные_системы_реального_времени&quot;&gt;Операционные системы реального времени&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Большой объем программной памяти и ОЗУ, программный стек позволяют полностью использовать все возможности операционных системам реального времени (RTOS), разрабатывая объемное приложение на контроллерах dsPIC30/33 и PIC24F/H.
&lt;/p&gt;

&lt;p&gt;
Использование RTOS позволяет разделить линейный код на конечное число выполняемых параллельно задач, независимых с точки зрения программиста. Задачи могут обмениваться данными между собой используя сервисы RTOS (семафоры, сообщения, и т. п.).
&lt;/p&gt;

&lt;p&gt;
Существует два вида RTOS – &lt;em&gt;кооперативные&lt;/em&gt; (задача должна сама прерывать работу и отдавать управление системной функции переключения задач) и &lt;em&gt;вытесняющие&lt;/em&gt; (системная функция переключения задач может завершить выполнение задачи и передать управление другой, более приоритетной задаче).
&lt;/p&gt;

&lt;p&gt;
По сути RTOS – это набор функций, поставляемых в виде объектного модуля или исходных кодов, включаемых в проект. Библиотека содержит системные функции переключения задач, функции обеспечения взаимодействия между задачами, функции профилирования и т. п.
&lt;/p&gt;

&lt;p&gt;
RTOS, рекомендуемая компанией Microchip для использования с 16-битными контроллерами разработана компанией &lt;a href=&quot;http://www.cmx.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.cmx.com/&quot;  rel=&quot;nofollow&quot;&gt;CMX System&lt;/a&gt;. Предлагается три различных варианта:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.cmx.com/rtx.htm&quot; class=&quot;urlextern&quot; title=&quot;http://www.cmx.com/rtx.htm&quot;  rel=&quot;nofollow&quot;&gt;CMX-RTX™&lt;/a&gt; - вытесняющая RTOS, поддерживающая управление задачами, событиями, системными таймерами, ресурсами задач, распределение памяти. Сервисы: семафоры, сообщения, очереди сообщений. Все функции RTOS требуют наличия 3.6 кБайт памяти программ. Каждая задача требует 28 байт ОЗУ для хранения сервисной информации.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.cmx.com/tiny.htm&quot; class=&quot;urlextern&quot; title=&quot;http://www.cmx.com/tiny.htm&quot;  rel=&quot;nofollow&quot;&gt;CMX-Tiny+™&lt;/a&gt; - упрощенная версия полнофункциональной вытесняющей RTOS CMX-RTX™. Требует наличия 2.3 кБайт памяти программ. Каждая задача требует 13 байт ОЗУ для хранения сервисной информации.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; CMX-Scheduler™ - свободно распространяемое вытесняющее ядро переключения задач, поддерживающее до 5 задач. Ядро совместимо с системами CMX-RTX™ и CMX-Tiny+™ и может использоваться для простых, требовательных к ресурсам систем или для изучения функционирования вытесняющей RTOS. Ядро CMX-Scheduler™ требует наличия 0.9 кБайт памяти программ. Каждая задача требует 11 байт ОЗУ для хранения сервисной информации. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Кроме RTOS компании CMX System можно упомянуть о следующих операционных системах:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://jacos.narod.ru/&quot; class=&quot;urlextern&quot; title=&quot;http://jacos.narod.ru/&quot;  rel=&quot;nofollow&quot;&gt;jacOS&lt;/a&gt; – порт для контроллеров dsPIC30 бесплатной кооперативной RTOS, которая известна многим разработчикам, использующим 8-битные контроллеры Microchip [13]. jacOS поддерживает следующие сервисы: двоичные и счетные семафоры, сообщения, таймауты, маскируемые события. Возможно использование сервисов в прерываниях. Актуальная версия на сентябрь 2006 года – 1.07.0. По запросу доступна версия для всех 16-битных семейств.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.pumpkininc.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.pumpkininc.com/&quot;  rel=&quot;nofollow&quot;&gt;Salvo™&lt;/a&gt; – кооперативная RTOS компании Pumpkin Inc [14]. Поддерживает следующие сервисы: двоичные и счетные семафоры, сообщения, очередь сообщений. Актуальная версия на сентябрь 2006 года – 4.0.0.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.micrium.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.micrium.com/&quot;  rel=&quot;nofollow&quot;&gt;uC/OS-II&lt;/a&gt; – порт известной вытесняющей RTOS компании Micrium [15], поддерживающий до 256 задач, семафоры, сообщения, очереди сообщений, управление системными таймерами и т. п. Актуальная версия на август 2006 года: для dsPIC30 – 2.76, для PIC24F/H и dsPIC33 – 2.83.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Операционные системы реального времени&quot; [137644-143260] --&gt;
&lt;h3&gt;&lt;a name=&quot;digital_filter_design_и_dspicworks&quot; id=&quot;digital_filter_design_и_dspicworks&quot;&gt;Digital Filter Design и dsPICworks™&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Компания Microchip предоставляет разработчикам два пакета ПО для ОС Windows, предназначенных для моделирования систем цифровой обработки сигналов. 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;digital_filter_design&quot; id=&quot;digital_filter_design&quot;&gt;Digital Filter Design&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023602&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023602&quot;  rel=&quot;nofollow&quot;&gt;DFD&lt;/a&gt; - это пакет программ предназначенный для синтеза и анализа характеристик цифровых фильтров (рис. 3). Основные характеристики пакета:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; синтез КИХ фильтров с помощью метода взвешивания (метода оконных функций) и метода вычисления оптимальных (по Чебышеву) коэффициентов. Синтез НЧ, ВЧ, ПФ, РФ фильтров до 513 порядка.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; синтез БИХ фильтров методом билинейного z-преобразования. Синтез НЧ, ВЧ, ПФ, РФ. Для фильтров ВЧ и НЧ максимальный порядок – 10, для ПФ и РФ – 20. Для синтеза фильтра могут использоваться следующие функции аналогового фильтра-прототипа: Баттерворта, Чебышева I рода, Чебышева II рода, Золоторева-Кауэра (эллиптическая), Бесселя.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; графическое отображение основных характеристик фильтра: АЧХ, ФЧХ, групповая задержка, импульсная характеристика, переходная характеристика, карта нулей и полюсов.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; экспорт коэффициентов фильтра в .h-файл, совместимый с DSP-библиотекой для контроллеров dsPIC30/33.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; экспорт коэффициентов фильтра в пакет обработки сигналов dsPICworks™.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; интеграция с системой инженерных вычислений MATLAB™.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/articles/mchp/16-bit_pic_3.png?id=articles%3Amchp%3A16_bit_mcu&quot; class=&quot;media&quot; title=&quot;articles:mchp:16-bit_pic_3.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/16-bit_pic_3.png&quot; class=&quot;mediacenter&quot; title=&quot;Расчет полосового БИХ фильтра в программе Digital Filter Design&quot; alt=&quot;Расчет полосового БИХ фильтра в программе Digital Filter Design&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Рис.3.&lt;/strong&gt; Расчет полосового БИХ фильтра в программе Digital Filter Design
&lt;/p&gt;

&lt;p&gt;
Пакет Digital Filter Design поставляется в двух конфигурациях – полной (стоимость $249) и усеченной – Lite (стоимость $29). В усеченной версии отсутствует интеграция с MATLAB™, а порядок синтезируемых КИХ фильтров ограничен 64, БИХ – 4.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;dspicworks&quot; id=&quot;dspicworks&quot;&gt;dsPICworks™&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023587&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023587&quot;  rel=&quot;nofollow&quot;&gt;dsPICworks™&lt;/a&gt; это бесплатный пакет программ, предназначенный для моделирования систем цифровой обработки сигналов. Процесс работы с пакетом выглядит следующим образом: импортирование или генерация сигнала – цифровая обработка сигнала – анализ полученных результатов. Такая схема работы позволяет отладить ЦОС алгоритм на ПК, а уже затем реализовать его на целевой аппаратной платформе.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/articles/mchp/16-bit_pic_4.png?id=articles%3Amchp%3A16_bit_mcu&quot; class=&quot;media&quot; title=&quot;articles:mchp:16-bit_pic_4.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/16-bit_pic_4.png&quot; class=&quot;mediacenter&quot; title=&quot;Моделирования системы цифровой обработки сигналов в программе dsPICworks™&quot; alt=&quot;Моделирования системы цифровой обработки сигналов в программе dsPICworks™&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Рис.4.&lt;/strong&gt; Моделирования системы цифровой обработки сигналов в программе dsPICworks™
&lt;/p&gt;

&lt;p&gt;
Пакет dsPICworks™ имеет следующие возможности:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; генерация сигналов: синусоидальных, прямоугольных, пилообразных. Генерация единичного импульса, ступеньки, сигнала вида sin(x)/x, экспоненциальной функции, шума с заданным распределением.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; импорт сигналов из среды разработки MPLAB IDE и текстовых файлов.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; арифметические и тригонометрические операции с сигналом: масштабирование, ограничение, умножение на функцию, сдвиг, производная, и т. п.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; функции цифровой обработки: фильтрация (возможно использование коэффициентов фильтра, рассчитанного в программе Digital Filter Design), БПФ, обратное БПФ, свертка, интерполяция и т. п.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; отображение сигналов и спектров: осциллограмма сигнала, 2- и 3-мерный (частота, амплитуда, время) спектр сигнала, возможность курсорных измерений.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; экспорт сигнала в текстовый и двоичный файл.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Возможности программы позволяют загрузить реальный сигнал, полученный из MPLAB IDE (дамп памяти контроллера) и промоделировать алгоритм обработки сигнала.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Digital Filter Design и dsPICworks™&quot; [143261-149123] --&gt;
&lt;h3&gt;&lt;a name=&quot;отладочные_и_демонстрационные_платы&quot; id=&quot;отладочные_и_демонстрационные_платы&quot;&gt;Отладочные и демонстрационные платы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Компания Microchip предлагает разработчикам большой выбор отладочных и демонстрационных плат для микроконтроллеров 16-битных семейств. Использование отладочной платы позволяет начать знакомство с контроллером, акцентировав внимание на архитектуре и периферии, а не на разработке собственного аппаратного обеспечения. Как правило, в комплекте с отладочной платой поставляется CD с последней версией среды разработки MPLAB IDE, набором документации, демонстрационной версией компилятора, библиотеками и примерами кода. 
&lt;/p&gt;

&lt;p&gt;
Для 16-битного семейства доступно 10 отладочных плат, список и краткие характеристики которых приведены в таблице:

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Отладочная плата  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Поддерживаемое семейство  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Назначение  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  Особенности  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; Explorer 16 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; PIC24F/H, dsPIC33 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; общего назначения &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; колодка для эмулятора, модуль с контроллером PIC24FJ128GA010, модуль с контроллером dsPIC33FJ256GP710, символьный ЖКИ 16x2, RS-232, USB (PIC18F4550), кнопки, светодиоды, разъем для плат расширения PICTail™ Plus &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM™ 80-pin Starter &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30/33, PIC24H &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; общего назначения, начального уровня &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; колодка для эмулятора, модуль с контроллером dsPIC30F6014, модуль с контроллером dsPIC33FJ256GP710, RS-232, ЦАП, кнопки, светодиоды &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM™ 28-pin Starter &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; общего назначения, начального уровня &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; контроллер dsPIC30F2010, RS-232 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM™ 1.1 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; общего назначения &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; колодка для эмулятора, модуль с контроллером dsPIC30F6014А, графический ЖКИ 128x32, голосовой кодек, RS-232, драйвер CAN, датчик температуры, кнопки, светодиоды, потенциометры &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM™ 2.0 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; общего назначения &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; поддержка 18, 28 и 40-выводных DIP корпусов, символьный ЖКИ 16x2, RS-232, CAN, датчик температуры, кнопки, светодиоды &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM.net™ 1 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; TCP/IP, сетевые протоколы, проводные модемы &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; колодка для эмулятора, модуль с контроллером dsPIC30F6014А, символьный ЖКИ 16x2, Ethernet MAC+PHY, PSТN интерфейс, внешняя память EEPROM, внешняя SRAM, RS-232, кнопки, светодиоды &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM.net™ 2 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; TCP/IP, сетевые протоколы, проводные модемы &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; колодка для эмулятора, модуль с контроллером dsPIC30F6014А, символьный ЖКИ 16x2, Ethernet MAC+PHY, PSТN интерфейс, внешняя память EEPROM, внешняя SRAM, RS-232, кнопки, светодиоды &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM™ MC1 &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; управление двигателями &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; контроллер dsPIC30F6010, символьный ЖКИ 16x2, RS-232, CAN, драйверы силовых ключей &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; PICDEM™ MC LV &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; управление низковольтными двигателями &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; поддержка 28-выводных DIP корпусов, силовые низковольтные ключи, цепь обратной связи, разъем для подключения двигателя, RS-232 &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt; dsPICDEM™ SMPS Buck &lt;/td&gt;&lt;td class=&quot;col1&quot;&gt; dsPIC30 &lt;/td&gt;&lt;td class=&quot;col2&quot;&gt; источники питания &lt;/td&gt;&lt;td class=&quot;col3&quot;&gt; поддержка контроллеров dsPIC30F1010/2020/2023, RS-232, две идентичных схемы понижающего преобразователя &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

Для ознакомления и начала работы с 16-битными микроконтроллерами рекомендуется использовать отладочную плату &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en024858&amp;amp;part=DM240001&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en024858&amp;amp;part=DM240001&quot;  rel=&quot;nofollow&quot;&gt;Explorer 16&lt;/a&gt;. Она поддерживает новые семейства (PIC24F/H, dsPIC33) и разработана с учетом дальнейшего наращивания функциональности с помощью дочерних модулей &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2519&amp;amp;param=en530893&amp;amp;page=wwwPICtailDaughtDemo&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2519&amp;amp;param=en530893&amp;amp;page=wwwPICtailDaughtDemo&quot;  rel=&quot;nofollow&quot;&gt;PICTail™ Plus&lt;/a&gt;. На сентябрь 2006 года выпускаются следующие модули расширения:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;PICTail™ Plus SD/MMC&lt;/strong&gt; – модуль для подключения Flash-карт SD/MMC.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;PICTail™ Ethernet&lt;/strong&gt; – модуль с 10-Base T Ethernet контроллером Microchip ENC24J60, согласующим трансформатором и разъемом RJ-45.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Планируются к выпуску следующие платы расширения:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;PICTail™ Plus IrDA®&lt;/strong&gt; - модуль с инфракрасным трансивером TFDU100.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;PICTail™ Plus CompactFlash&lt;/strong&gt; – модуль для подключения Flash-карт CompactFlash®.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;PICTail™ Plus Wireless&lt;/strong&gt; – модуль с RF трансивером, соответствующим спецификации IEEE 802.15.4™&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;PICTail™ Plus Voice&lt;/strong&gt; – модуль содержит НЧ-фильтр 4 порядка, усилитель мощности, громкоговоритель 1 Вт, Serial EEPROM объемом 1 Mбит. Предназначен для реализации систем голосового оповещения и т. п.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Отладочные и демонстрационные платы&quot; [149124-155499] --&gt;
&lt;h3&gt;&lt;a name=&quot;отладчики_и_эмуляторы&quot; id=&quot;отладчики_и_эмуляторы&quot;&gt;Отладчики и эмуляторы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;icd_2&quot; id=&quot;icd_2&quot;&gt;ICD 2&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.microchip.com/icd2/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/icd2/&quot;  rel=&quot;nofollow&quot;&gt;ICD 2&lt;/a&gt; – универсальный внутрисхемный программатор-отладчик является наиболее популярным отладочным средством для микроконтроллеров Microchip всех семейств, включая 16-битные. Это связано с возможностью осуществлять программирование и внутрисхемную отладку большинства контроллеров с Flash-памятью. 
&lt;/p&gt;

&lt;p&gt;
Механизм отладки основан на наличии в контроллере модуля &lt;strong&gt;BDM&lt;/strong&gt; (Background Debug Module), который не доступен пользователю, но может использоваться аппаратными средствами отладки.
&lt;/p&gt;

&lt;p&gt;
При инициализации модуля в неиспользуемую область программной памяти прошивается специальный код, которому передается управление в случае остановки выполнения программы. Код отладчика предназначен для обмена данными модуля BDM и ICD 2, передачи состояния регистров, данных в ОЗУ, содержимого EEPROM и т. п. Остановку выполнения программы и передачу управления обратно CPU-ядру осуществляет модуль BDM.
&lt;/p&gt;

&lt;p&gt;
ICD 2 позволяет выполнять следующие операции (совместно со средой разработки MPLAB IDE):

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; запуск программы;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; остановка программы;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; пошаговое выполнение программы;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс контроллера;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программирование, чтение и проверка программного кода;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; чтение и запись ОЗУ, EEPROM.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

В зависимости от типа контроллера модуль BDM поддерживает несколько аппаратных условных и безусловных точек останова. При совпадении счетчика команд с безусловной точкой останова, выполнение программы останавливается, управление передается модулю BDM, который пересылает в среду MPLAB IDE требуемые данные (состояния интересующих пользователя регистров, и т. п).
&lt;/p&gt;

&lt;p&gt;
Условная точка останова позволяет прерывать выполнение программы при возникновении указанного пользователем события:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; использование табличных инструкций;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; чтение/запись по определенному адресу ОЗУ произвольного значения;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; чтение/запись по определенному адресу ОЗУ заданного значения;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Применение условных точек останова позволяет:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; прервать выполнение программы только после заданного количества (от 1 до 255) событий одного типа;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; продолжать выполнение программы заданное число командных тактов после появления события и только затем прервать выполнение;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; прервать выполнение программы только при определенной последовательности появления нескольких событий.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Модуль BDM в новых 16-битных микроконтроллерах обеспечивает некоторые функции аппаратного эмулятора:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; останов по входу в режим SLEEP;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; останов по переполнению сторожевого таймера;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; счетчик командных тактов.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Все микроконтроллеры 16-битых семейств Microchip поддерживают возможность внутрисхемной отладки с помощью ICD-2 и среды разработки MPLAB IDE. Следует обратить внимание, на то, что для использования режима внутрисхемной отладки необходимо зарезервировать часть программной памяти и ОЗУ с помощью опций компилятора.
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;real_ice&quot; id=&quot;real_ice&quot;&gt;REAL ICE&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Летом 2006 года на ежегодном семинаре MASTERS ’06 компания Microchip объявила о завершении разработки и начале тестирования нового внутрисхемного эмулятора для 16-битных семейств, получившего название &lt;a href=&quot;http://www.microchip.com/realice/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/realice/&quot;  rel=&quot;nofollow&quot;&gt;REAL ICE&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
REAL ICE предназначен для работы в составе среды MPLAB IDE и имеет значительно расширенную функциональность по сравнению с внутрисхемным отладчиком ICD-2:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; USB 2.0 High Speed (480 Mbps) интерфейс, питание от USB.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; поддержка всех функций ICD-2 (внутрисхемное программирование, безусловные и условные точки останова, пошаговое выполнение, и т. д.)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; до 6 аппаратных и 1000 программных точек останова (в зависимости от типа контроллера)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; трассировка кода (буфер 512 кбайт)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; обновление значений переменных в Watch-окне среды разработки в реальном времени в ходе выполнения программы&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 8 универсальных входов-выходов с логическими уровнями позволяют генерировать стробы при определенном событии (что может быть полезно, например, при синхронизации с логическим анализатором) или сохранять в лог трассировки состояния универсальных входов.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; аппаратная кнопка запуска и останова эмуляции&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; автоматическое определение типа контроллера, возможность безопасного горячего подключения к отлаживаемой схеме&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; модульная конструкция: дочерние модули LVDS передатчика и приемника позволяют производить отладку удаленных устройств (например, в климатической камере)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/articles/mchp/16-bit_pic_5.jpg?id=articles%3Amchp%3A16_bit_mcu&quot; class=&quot;media&quot; title=&quot;articles:mchp:16-bit_pic_5.jpg&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/16-bit_pic_5.jpg&quot; class=&quot;mediacenter&quot; title=&quot;Внутрисхемный эмулятор REAL ICE&quot; alt=&quot;Внутрисхемный эмулятор REAL ICE&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Рис.5&lt;/strong&gt; Внутрисхемный эмулятор REAL ICE
&lt;/p&gt;

&lt;p&gt;
Эмулятор REAL ICE так же как и ICD-2 использует часть аппаратных ресурсов отлаживаемого кристалла, но в значительно меньшей степени, всего 68 байт ОЗУ. Планируется выпуск специальных модулей с кристаллами, у которых увеличено количество аппаратных точек останова и не используются для отладки пользовательские ресурсы (ОЗУ, выводы).
&lt;/p&gt;

&lt;p&gt;
Начало производства REAL ICE и выпуск версии MPLAB IDE с поддержкой эмулятора запланировано на октябрь-ноябрь 2006 года.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Отладчики и эмуляторы&quot; [155500-163968] --&gt;
&lt;h2&gt;&lt;a name=&quot;заключение&quot; id=&quot;заключение&quot;&gt;Заключение&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

На сегодняшний день компания Microchip Technology Inc. выпускает около 70 наименований 16-битных контроллеров семейств PIC24F, PIC24H, dsPIC30 и dsPIC33, спектр возможных применений которых чрезвычайно широк, благодаря мощным вычислительным возможностям и развитой системе периферийных модулей. Низкое соотношение потребляемой мощности к производительности (около 5 мВт/MIPS) в сочетании с гибкой схемой тактирования и энергосберегающих режимов позволяет применять новые семейства PIC24F/H и dsPIC33 в автономных устройствах, критичных к потреблению. При этом эффективность системы команд 16-битного ядра Microchip настолько высока, что во многих, часто встречающихся в практике задачах, скорость выполнения кода оказывается выше, чем у 32-битных микроконтроллеров, не говоря уже о &lt;a href=&quot;http://benchmarks.caxapa.ru/?test=23&quot; class=&quot;urlextern&quot; title=&quot;http://benchmarks.caxapa.ru/?test=23&quot;  rel=&quot;nofollow&quot;&gt;задачах цифровой обработки сигналов&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Разнообразные средства разработки и гибкая политика компании Microchip по отношению к программным продуктам (бесплатная среда разработки и бесплатная версия компилятора с языка Си) позволяют начать разработку проекта без больших денежных вложений. Следует отметить, что для небольших бюджетных проектов можно пользоваться полностью бесплатными и при этом легальными средствами.
&lt;/p&gt;

&lt;p&gt;
Microchip осуществляет всестороннюю поддержку разработчиков, начиная с публикаций исходных кодов библиотек, примеров применения, и заканчивая проведением онлайновых &lt;a href=&quot;http://techtrain.microchip.com/webseminars/Main.aspx&quot; class=&quot;urlextern&quot; title=&quot;http://techtrain.microchip.com/webseminars/Main.aspx&quot;  rel=&quot;nofollow&quot;&gt;веб-семинаров&lt;/a&gt; и поддержки &lt;a href=&quot;http://forum.microchip.com/&quot; class=&quot;urlextern&quot; title=&quot;http://forum.microchip.com/&quot;  rel=&quot;nofollow&quot;&gt;веб-форума&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
К концу 2006 - началу 2007 года планируется выпуск микроконтроллеров семейств PIC24F/H и dsPIC33 в 18- и 28 выводных корпусах с мультиплексором выходов периферийных модулей на порты общего назначения. Это будут одни из самых миниатюрных микроконтроллеров в индустрии с производительностью 40 MIPS и самые миниатюрные контроллеры с ядром цифровой обработки сигналов.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Заключение&quot; [163969-] --&gt;&lt;div class=&quot;footnotes&quot;&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__1&quot; id=&quot;fn__1&quot; name=&quot;fn__1&quot; class=&quot;fn_bot&quot;&gt;1)&lt;/a&gt;&lt;/sup&gt; 
На момент публикации статьи на сайте pic24.ru актуальная версия MPLAB - 8.14&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__2&quot; id=&quot;fn__2&quot; name=&quot;fn__2&quot; class=&quot;fn_bot&quot;&gt;2)&lt;/a&gt;&lt;/sup&gt; 
Для всех бесплатных библиотек доступны исходные коды&lt;/div&gt;
&lt;div class=&quot;fn&quot;&gt;&lt;sup&gt;&lt;a href=&quot;#fnt__3&quot; id=&quot;fn__3&quot; name=&quot;fn__3&quot; class=&quot;fn_bot&quot;&gt;3)&lt;/a&gt;&lt;/sup&gt; 
, &lt;sup&gt;&lt;a href=&quot;#fnt__4&quot; id=&quot;fn__4&quot; name=&quot;fn__4&quot; class=&quot;fn_bot&quot;&gt;4)&lt;/a&gt;&lt;/sup&gt; 
, &lt;sup&gt;&lt;a href=&quot;#fnt__5&quot; id=&quot;fn__5&quot; name=&quot;fn__5&quot; class=&quot;fn_bot&quot;&gt;5)&lt;/a&gt;&lt;/sup&gt; 
Часть функций доступна бесплатно в виде исходных кодов или объектных файлов&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/articles/mchp/32_bit_first_step_ppt?rev=1225839259">
        <dc:format>text/html</dc:format>
        <dc:date>2008-11-05T01:54:19+04:00</dc:date>
        <title>PIC32 - Первое знакомство</title>
        <link>http://www.pic24.ru/doku.php/articles/mchp/32_bit_first_step_ppt?rev=1225839259</link>
        <description>


&lt;h1&gt;&lt;a name=&quot;pic32_-_первое_знакомство&quot; id=&quot;pic32_-_первое_знакомство&quot;&gt;PIC32 - Первое знакомство&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;

&lt;sup&gt;(осень, 2008 год)&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
Презентация с семинара &lt;a href=&quot;http://www.gamma.spb.ru/news.php?id=300&quot; class=&quot;urlextern&quot; title=&quot;http://www.gamma.spb.ru/news.php?id=300&quot;  rel=&quot;nofollow&quot;&gt;Masters Russia 2008&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Архив разбит на три части по ~2 МБ, в архиве PowerPoint презентация, упакованная в .exe (просматривать можно без установленного &lt;acronym title=&quot;Microsoft&quot;&gt;MS&lt;/acronym&gt; Office). Файл нужно запустить два раза - первый раз почему-то выдает ошибку &lt;img src=&quot;http://www.pic24.ru/lib/images/smileys/icon_smile2.gif&quot; class=&quot;middle&quot; alt=&quot;=)&quot; /&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/pic32_fs_rus.part1.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:pic32_fs_rus.part1.rar&quot;&gt;часть 1&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/pic32_fs_rus.part2.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:pic32_fs_rus.part2.rar&quot;&gt;часть 2&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/pic32_fs_rus.part3.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:pic32_fs_rus.part3.rar&quot;&gt;часть 3&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;a href=&quot;http://www.pic24.ru/lib/exe/detail.php/articles/mchp/pic32_fs.png?id=articles%3Amchp%3A32_bit_first_step_ppt&quot; class=&quot;media&quot; title=&quot;articles:mchp:pic32_fs.png&quot;&gt;&lt;img src=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/pic32_fs.png&quot; class=&quot;mediacenter&quot; title=&quot;PIC32 - Первое знакомство&quot; alt=&quot;PIC32 - Первое знакомство&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/articles/mchp/32_bit_mcu?rev=1216551481">
        <dc:format>text/html</dc:format>
        <dc:date>2008-07-20T14:58:01+04:00</dc:date>
        <title>32-разрядные микроконтроллеры Microchip</title>
        <link>http://www.pic24.ru/doku.php/articles/mchp/32_bit_mcu?rev=1216551481</link>
        <description>


&lt;h1&gt;&lt;a name=&quot;разрядные_микроконтроллеры_microchip&quot; id=&quot;разрядные_микроконтроллеры_microchip&quot;&gt;32-разрядные микроконтроллеры Microchip&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;

&lt;sup&gt;(весна, 2008 год)&lt;/sup&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;em&gt;В ноябре 2007 года компания Microchip анонсировала выпуск первых в своей истории 32-разрядных микроконтроллеров PIC32. Выход лидера в производстве 8- и 16-битных микроконтроллеров на 32-разрядный рынок вполне объясним: все тренды показывают значительное увеличение объема продаж 32-битных контроллеров за последние несколько лет, что в свою очередь связано с возросшими требованиями к встраиваемым системам.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
Несмотря на то, что все предыдущие семейства контроллеров были разработаны специалистами Microchip, было решено лицензировать 32-разрядное ядро у компании &lt;a href=&quot;http://www.mips.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.mips.com/&quot;  rel=&quot;nofollow&quot;&gt;MIPS Technologies Inc.&lt;/a&gt;, одного из лидеров в разработке программных ядер. Архитектуры MIPS используют такие компании как AMD, Broadcom, Infeneon, Realtek, Sharp, Sony, NXP, Toshiba. Тем не менее, PIC32 это первый однокристальный процессор с архитектурой MIPS имеющий интегрированную флэш-память и полный набор микроконтроллерной периферии.
&lt;/p&gt;

&lt;p&gt;
Архитектура MIPS32 выбрана не случайно. При выборе новой платформы рассматривались различные варианты, а критерии выбора были следующими:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; размер кристалла и, соответственно, стоимость конечного изделия&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; потребление энергии на МГц тактовой частоты&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; производительность на МГц тактовой частоты&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность расширения архитектуры&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; простота интеграции периферии&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; время реакции на прерывание&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

По большинству параметров тендер выиграла компания MIPS с архитектурой &lt;a href=&quot;http://www.mips.com/products/processors/32-64-bit-cores/mips32-m4k/&quot; class=&quot;urlextern&quot; title=&quot;http://www.mips.com/products/processors/32-64-bit-cores/mips32-m4k/&quot;  rel=&quot;nofollow&quot;&gt;MIPS32 M4K™&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
На сегодняшний день линейка PIC32 представлена двумя семействами: PIC32MX360 (табл. 1) и PIC32MX460 (табл. 2). Контроллеры семейства PIC32MX460 имеют встроенный модуль &lt;strong&gt;USB OTG&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Таблица 1.&lt;/strong&gt; Микроконтроллеры семейства PIC32MX360

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Наименование  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Частота, МГц  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Flash, КБ  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  ОЗУ, КБ  &lt;/th&gt;&lt;th class=&quot;col4 centeralign&quot;&gt;  DMA, каналов  &lt;/th&gt;&lt;th class=&quot;col5 centeralign&quot;&gt;  Трассировка  &lt;/th&gt;&lt;th class=&quot;col6 centeralign&quot;&gt;  Число выводов  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX320F032H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  40  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  8  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX320F064H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  64  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  16  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX320F128H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  128  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  16  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX320F128L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  128  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  16  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  0  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX340F128H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  128  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX340F128L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  128  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX340F256H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  256  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row8&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX340F512H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  512  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row9&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX360F256L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  256  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row10&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX360F512L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  512  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;

&lt;strong&gt;Таблица 2.&lt;/strong&gt; Микроконтроллеры семейства PIC32MX460

&lt;/p&gt;
&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  Наименование  &lt;/th&gt;&lt;th class=&quot;col1 centeralign&quot;&gt;  Частота, МГц  &lt;/th&gt;&lt;th class=&quot;col2 centeralign&quot;&gt;  Flash, КБ  &lt;/th&gt;&lt;th class=&quot;col3 centeralign&quot;&gt;  ОЗУ, КБ  &lt;/th&gt;&lt;th class=&quot;col4 centeralign&quot;&gt;  DMA, каналов  &lt;/th&gt;&lt;th class=&quot;col5 centeralign&quot;&gt;  Трассировка  &lt;/th&gt;&lt;th class=&quot;col6 centeralign&quot;&gt;  Число выводов  &lt;/th&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row1&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX420F032H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  40  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  8  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;   0  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row2&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX440F128H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  128  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row3&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX440F128L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  128  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row4&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX440F256H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  256  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  нет  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row5&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX440F512H  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  512  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  64  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row6&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX460F256L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  256  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr class=&quot;row7&quot;&gt;
		&lt;th class=&quot;col0 centeralign&quot;&gt;  PIC32MX460F512L  &lt;/th&gt;&lt;td class=&quot;col1 centeralign&quot;&gt;  80  &lt;/td&gt;&lt;td class=&quot;col2 centeralign&quot;&gt;  512  &lt;/td&gt;&lt;td class=&quot;col3 centeralign&quot;&gt;  32  &lt;/td&gt;&lt;td class=&quot;col4 centeralign&quot;&gt;  4  &lt;/td&gt;&lt;td class=&quot;col5 centeralign&quot;&gt;  да  &lt;/td&gt;&lt;td class=&quot;col6 centeralign&quot;&gt;  100  &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;32-разрядные микроконтроллеры Microchip&quot; [1-4604] --&gt;
&lt;h2&gt;&lt;a name=&quot;архитектура&quot; id=&quot;архитектура&quot;&gt;Архитектура&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Семейство PIC32MX основано на синтезируемом ядре MIPS32 M4K™, которое позиционируется разработчиком ядра для использования в микроконтроллерах с низким потреблением энергии.
&lt;/p&gt;

&lt;p&gt;
Основные особенности ядра MIPS32 M4K™ синтезированного для применения в PIC32MX:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Пятиступенчатый конвейер, производительность до 1.5 DMIPS/МГц&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Тактовая частота до 80 МГц&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Программируемый кэш, позволяющий увеличить частоту доступа к флэш-памяти до максимальной частоты ядра&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Набор 32-битных инструкций MIPS32® release 2&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Дополнительный набор 16-битных инструкций MIPS16e™, позволяющий снизить объем исполняемого кода&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Аппаратный умножитель и делитель, оптимизированные по скорости выполнения операции&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Векторный приоритетный контроллер прерываний&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; EJTAG порт, предназначенный для граничного сканирования, программирования флэш-памяти и отладки приложения с модулем внутрисхемной трассировки&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Архитектура MIPS32® это архитектура типа «чтение-модификация-запись», то есть АЛУ ядра может обрабатывать только данные, находящиеся в регистрах общего назначения, а для загрузки и выгрузки данных предназначены специальные инструкции.
&lt;/p&gt;

&lt;p&gt;
В качестве регистров используется регистровый банк из 32 регистров, некоторые из которых выполняют специальные функции: &lt;code&gt;(ra)&lt;/code&gt; - адрес возврата из подпрограммы, &lt;code&gt;(sp)&lt;/code&gt; - указатель стека, &lt;code&gt;(fp)&lt;/code&gt; - указатель фрейма стека, &lt;code&gt;(gp)&lt;/code&gt; - указатель на область данных. Один из регистров &lt;code&gt;(zero)&lt;/code&gt; всегда равен нулю.
&lt;/p&gt;

&lt;p&gt;
Большое количество регистров позволяет эффективно выполнять вычисления, сохраняя промежуточные результаты не в стеке, а регистровом файле. Кроме того, семейство PIC32MX имеет дополнительный набор регистров, который может использоваться в обработчике прерывания для минимизации времени входа.
&lt;/p&gt;

&lt;p&gt;
MIPS32® имеет пятиступенчатый конвейер со следующими стадиями: &lt;strong&gt;(I)&lt;/strong&gt; - выборка инструкции, &lt;strong&gt;(E)&lt;/strong&gt; – выполнение операции, &lt;strong&gt;(M)&lt;/strong&gt; – выборка данных, &lt;strong&gt;(A)&lt;/strong&gt; – выравнивание и &lt;strong&gt;(W)&lt;/strong&gt; – сохранение результата. В ядро, синтезируемое для PIC32MX, была включена опция &lt;em&gt;Register Bypassing&lt;/em&gt; – механизм, который позволяет значительно сократить время простоя конвейера при использовании в качестве аргумента следующей инструкции результата предыдущей.
&lt;/p&gt;

&lt;p&gt;
Несмотря на то, что память данных и память программ расположены в едином адресном пространстве, семейство PIC32MX имеет две раздельные шины: (I-side) – для выборки инструкций и (D-side) – для выборки данных с помощью инструкций загрузки/сохранения. Шины подключены к ядру через управляемую шинную матрицу, осуществляющую контроль доступа и генерацию исключений при ошибке доступа.
&lt;/p&gt;

&lt;p&gt;
Управление ядром осуществляется с помощью механизма сопроцессора – доступ к управляющим регистрам может быть получен только с помощью специальных инструкций. В набор управляющих регистров входит таймер ядра, инкрементируемый при каждом такте. 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Видеопрезентация архитектуры PIC32 (часть 1, индийский англ.)&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;div align=center&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/rSd4CKeGGZE&amp;hl=en&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/rSd4CKeGGZE&amp;hl=en&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;strong&gt;
Видеопрезентация архитектуры PIC32 (часть 2, индийский англ.)&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;div align=center&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/MuY40ieXMy4&amp;hl=en&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/MuY40ieXMy4&amp;hl=en&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Архитектура&quot; [4605-10629] --&gt;
&lt;h3&gt;&lt;a name=&quot;алу_и_набор_инструкций&quot; id=&quot;алу_и_набор_инструкций&quot;&gt;АЛУ и набор инструкций&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Семейство PIC32MX имеет два набора инструкций: 32-битные инструкции &lt;strong&gt;MIPS32® release 2&lt;/strong&gt; и 16-битный набор &lt;strong&gt;MIPS16e™&lt;/strong&gt;, позволяющий снизить объем кода, и, соответственно, использовать микроконтроллеры с меньшим объемом флэш-памяти.
&lt;/p&gt;

&lt;p&gt;
Благодаря пятиступенчатому конвейеру все инструкции выполняются за 1 командный такт, в том числе и инструкции 16-битного набора – они декодируются на стадии конвейера (I) – выборка инструкции. Исключение составляют инструкции переходов (требуют одного такта ожидания для выборки инструкции по адресу перехода), умножения (максимум два такта) и деления (максимум 35 тактов). 
&lt;/p&gt;

&lt;p&gt;
Если приложение выполняется из флэш-памяти без использования кэша, то командный такт будет равен времени доступа (максимальная частота доступа к флэш-памяти у PIC32MX составляет 30 МГц). Если используется кэш, то командный такт будет в большинстве случаев равен такту генератора, т.е. максимальная частота выполнения инструкций будет составлять 80 МГц.
&lt;/p&gt;

&lt;p&gt;
Пятиступенчатый конвейер накладывает некоторые ограничения на последовательность инструкций, однако механизм пропуска результата по конвейеру (Register Bypassing) в большинстве случаев позволяет избежать циклов ожидания, в том числе и при использовании данных сразу после загрузки регистра.
&lt;/p&gt;

&lt;p&gt;
Большинство операций АЛУ и, соответственно, инструкции основного набора - трехоперандные. Источниками данных являются значения регистров, приемником результата так же является регистр ядра. Инструкции дополнительного набора MIPS16e™ - как трехоперандные, так и двухоперандные.
&lt;/p&gt;

&lt;p&gt;
Косвенная адресация доступна только для инструкций загрузки/сохранения данных, что является особенностью всех «load-modify-store» архитектур. Непосредственная адресация (операции с константой в коде инструкции) доступны практически для всех вычислительных инструкций, при этом размер константы составляет 16 бит для набора инструкций MIPS32® release 2.
&lt;/p&gt;

&lt;p&gt;
Особенностью АЛУ ядер MIPS32® является отсутствие статусного регистра, в котором находятся флаги результатов операций (отрицательный результат, нулевой результат и т.п.) Флаги условных инструкций (сравнения и т.п.) сохраняются в указанном регистре, а инструкции условного перехода могут использовать любой регистр в качестве условия.
&lt;/p&gt;

&lt;p&gt;
Набор инструкций MIPS32® release 2 включает в себя следующие операции:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; арифметическое сложение и вычитание&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; умножение со сложением и вычитанием из аккумулятора &lt;code&gt;HI/LO&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; умножение с помещением результата в регистр общего назначения&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; деление&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; логические операции &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, &lt;code&gt;NOR&lt;/code&gt;, &lt;code&gt;XOR&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; определение первой единицы и первого нуля в слове&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; условное перемещение&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; множество инструкций безусловных и условных переходов&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; атомарное разрешение и запрещение прерываний&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; манипуляция с битовыми полями&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; логический и арифметический сдвиг, вращение&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; расширение знака у байта, полуслова&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; загрузка и выгрузка слова, полуслова, байта&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; атомарная загрузка и выгрузка&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; системный вызов и программная точка останова&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; переход в энергосберегающий режим&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; доступ к модулю управления ядром&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Набор инструкций MIPS16e™ включает в себя следующие операции:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; арифметическое сложение и вычитание (беззнаковые)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; умножение&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; деление&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; логические операции &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, &lt;code&gt;NOT&lt;/code&gt;, &lt;code&gt;XOR&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; расширение знака у байта, полуслова&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; логический и арифметический сдвиг&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; атомарное сохранение и восстановление стекового фрейма&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; множество инструкций безусловных и условных переходов&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; загрузка и выгрузка слова, полуслова, байта&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программная точка останова&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
При синтезе ядра M4K™ для PIC32MX умножитель и делитель, входящие в состав ядра, были синтезированы с опцией «оптимизация по скорости выполнения», несмотря на то, что это привело к увеличению площади кристалла. Умножитель 32 × 16 позволяет получить результат умножения 32 × 16 за один такт, а результат умножения 32 × 32 за два такта. Результат умножения может сохраняться как в регистре (младшее слово 64-битного результата), так и в специальной регистровой паре &lt;code&gt;HI/LO&lt;/code&gt; (два слова 64-битного результата). Наличие инструкций умножения со сложением позволяет использовать эту регистровую пару как аккумулятор операций ЦОС.
&lt;/p&gt;

&lt;p&gt;
Делитель PIC32MX имеет механизм предварительного определения разрядности делителя, что сокращает время выполнения операции до 7 тактов при выполнении операции деления 32 ÷ 8. Максимальное время выполнения операции деления составляет 35 тактов (в случае если разрядность делителя равна 32 битам).

&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;АЛУ и набор инструкций&quot; [10630-18579] --&gt;
&lt;h3&gt;&lt;a name=&quot;память&quot; id=&quot;память&quot;&gt;Память&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Семейство PIC32MX имеет 32-битную шину адреса, что позволяет адресовать область памяти объемом до 4 ГБ. Флэш-память, SRAM, регистры управления периферией, конфигурационные регистры расположены в одном адресном пространстве, области имеют уникальные базовые адреса.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры семейства PIC32MX имеют до 512 кБ флэш-памяти и до 32 кБ SRAM. Флэш-память может программироваться в ходе выполнения программы, а часть флэш-памяти (12 кБ) выделена в особый блок, называемый &lt;em&gt;Internal Boot Flash&lt;/em&gt;, в котором может размещаться загрузчик приложения. Этот блок может отдельно от остальной памяти защищаться от записи конфигурационным словом.
&lt;/p&gt;

&lt;p&gt;
Приложение может выполняться как из внутренней флэш-памяти, так и из внутреннего ОЗУ, которое можно динамически разделить на области программ и данных. Поддерживается только little-endian расположение байт в слове (младший байт имеет меньший адрес).
&lt;/p&gt;

&lt;p&gt;
В PIC32MX используются два метода адресации – физический и виртуальный. Физический метод адресации используют DMA и контроллер флэш-памяти. Виртуальную адресацию использует ядро для выборки инструкций и данных. Виртуальную адресацию обеспечивает конфигурируемый механизм фиксированного перевода адресов (FMT), который преобразует виртуальные адреса в физические, необходимые для выборки из флэш-памяти и SRAM.
&lt;/p&gt;

&lt;p&gt;
Виртуальная область памяти делится на две равных области по 2 ГБ. Область с младшими адресами называется областью пользователя (&lt;em&gt;User Segment, KUSEG&lt;/em&gt;) а область со старшими адресами – областью ядра (&lt;em&gt;Kernel Segments&lt;/em&gt;). Микроконтроллер может работать в двух режимах – пользовательском и режиме ядра (привилегированном режиме). В пользовательском режиме доступна только область пользователя, в привилегированном – как область пользователя, так и область  ядра. Так как все регистры управления периферийными модулями отображены на область ядра, доступ к периферии возможен только в привилегированном режиме работы.
&lt;/p&gt;

&lt;p&gt;
Область памяти ядра в свою очередь делится на четыре области, называемые &lt;em&gt;KSEG0&lt;/em&gt;, &lt;em&gt;KSEG1&lt;/em&gt;, &lt;em&gt;KSEG2&lt;/em&gt; и &lt;em&gt;KSEG3&lt;/em&gt;. В микроконтроллерах семейства PIC32MX физически реализованные ресурсы отображаются только на первые две области. Причем базовый адрес областей KSEG0 и KSEG1 отображается на физический адрес &lt;code&gt;0x00000000&lt;/code&gt;. Такая реализация позволяет быстро переключаться между режимами работы кэша флэш-памяти.
&lt;/p&gt;

&lt;p&gt;
Как флэш-память, так и ОЗУ может быть разделено между сегментами KUSEG, KSEG0 и KSEG1, дискрет составляет 2 кБ. Кроме того, возможно выделения части ОЗУ для всех сегментов в качестве программной памяти.
Для обеспечения целостности данных и ограничения доступа предназначен модуль шинной матрицы. Он может быть сконфигурирован в различные режимы арбитража, которые отличаются приоритетами потребителей данных (ядро, DMA и т. п.) При конфликте доступа шинная матрица генерирует исключение.

&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Память&quot; [18580-23605] --&gt;
&lt;h3&gt;&lt;a name=&quot;модуль_предвыборки&quot; id=&quot;модуль_предвыборки&quot;&gt;Модуль предвыборки&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Семейство PIC32MX имеет флэш-память с шиной 128 бит, которая позволяет за одно обращение выбирать четыре 32-битных инструкции. Однако даже при наличии 128-битного буфера  выполнение инструкций с тактовой частотой ядра не представляется возможным, так как реальное приложение содержит больше количество ветвлений, повторяющихся инструкций и выборки данных из флэш-памяти.
&lt;/p&gt;

&lt;p&gt;
Поэтому в архитектуру PIC32MX был введен конфигурируемый кэш предвыборки, состоящий из 16 128-битных строк. 4 строки могут использоваться в качестве кэша данных, что полезно при обработке больших константных массивов.
&lt;/p&gt;

&lt;p&gt;
Использование кэша предвыборки позволяет выполнять линейный код с максимальной частотой тактирования. Этому способствуют две линии кэша с адресной маской, которые могут содержать повторяющиеся инструкции, а так же механизм предикативной выборки инструкций.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Обзор модуля предвыборки PIC32 (индийский англ.)&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;div align=center&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/uIKunLk-0cg&amp;hl=en&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/uIKunLk-0cg&amp;hl=en&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модуль предвыборки&quot; [23606-25677] --&gt;
&lt;h3&gt;&lt;a name=&quot;контроллер_прерываний&quot; id=&quot;контроллер_прерываний&quot;&gt;Контроллер прерываний&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

В ядре MIPS32 MK4™ предусмотрено три режима работы прерываний – совместимый с MIPS32 release 1, векторный режим и режим обслуживания внешнего контроллера прерываний.
&lt;/p&gt;

&lt;p&gt;
В семействе PIC32MX реализован внешний векторный контроллер прерываний, однако при сборке ядра оставлен и оригинальный одновекторный режим.
&lt;/p&gt;

&lt;p&gt;
Внешний контроллер прерываний PIC32MX обладает следующими особенностями:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; время реакции на прерывание – не более 5 тактов генератора&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; до 96 источников прерываний&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; до 64 векторов прерываний&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; каждый вектор прерывания может иметь приоритет от 1 до 7&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; каждый вектор прерывания может иметь дополнительный приоритет от 0 до 3&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; дополнительный регистровый файл для обслуживания прерывания с максимальным приоритетом&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; конфигурируемое положение векторов прерываний &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; конфигурируемая дистанция между векторами прерываний&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; возможность программной генерации любого прерывания&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; таймер отложенных прерываний&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Контроллер прерываний PIC32MX аналогичен контроллеру прерываний 16-битных семейств PIC24/dsPIC за исключением того, что векторов прерываний меньше чем источников. Поэтому часть источников прерываний используют один вектор. Как правило, это прерывания одного периферийного модуля, например, прерывание по приему UART и прерывание по передаче UART. Приоритеты назначаются пользователем не источнику прерывания, а вектору.
&lt;/p&gt;

&lt;p&gt;
Контроллер прерываний PIC32MX отслеживает все источники на каждом такте генератора. Если один из источников прерываний активен и его приоритет больше чем текущий приоритет ядра, устанавливается флаг прерывания (который можно установить и программно) и запрос на прерывание. Между ступенями (E) и (M) конвейера проверяется запрос на прерывание и, если он установлен, ядро прекращает выполнение программы и переходит на соответствующий вектор прерывания.
&lt;/p&gt;

&lt;p&gt;
Вектора с приоритетами 7 могут использовать дополнительный набор регистров ядра, что позволяет снизить время входа в функцию обработки прерывания, так как в этом случае контекст сохранять не требуется.
Положение векторов в адресном пространстве может быть изменено программно, так же как и дистанция между векторами.
&lt;/p&gt;

&lt;p&gt;
Интересной особенностью является таймер отложенных прерываний. Для использования этого таймера необходимо установить его период (32-битный регистр) и приоритет прерывания таймера. Все источники с приоритетом ниже или равным приоритету таймера не установят запрос на прерывание, а запустят таймер, в который перед этим будет загружено значение из регистра периода. Таймер будет декрементироваться каждый такт. Как только значение таймера будет равно нулю, установится флаг источника прерывания, запустившего таймер.

&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Контроллер прерываний&quot; [25678-30519] --&gt;
&lt;h3&gt;&lt;a name=&quot;контроллер_прямого_доступа_к_памяти_dma&quot; id=&quot;контроллер_прямого_доступа_к_памяти_dma&quot;&gt;Контроллер прямого доступа к памяти (DMA)&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Контроллер DMA предназначен для передачи данных между блоками памяти и периферийными модулями без участия ядра контроллера.
&lt;/p&gt;

&lt;p&gt;
Семейство PIC32MX имеет до 4 идентичных каналов DMA, которые могут использоваться как для передачи данных между периферией и памятью, так и для переноса данных между блоками памяти.
&lt;/p&gt;

&lt;p&gt;
Контроллер DMA позволяет обеспечивать транзакции на уровне слов, и байтов. В последнем случае выравнивания по слову данных не требуется. Арбитраж доступа осуществляется на основании фиксированных приоритетов каналов.
&lt;/p&gt;

&lt;p&gt;
Два каналы могут быть объединены в цепочку – после окончания передачи ведущего канала автоматически запускается ведомый  канал.
&lt;/p&gt;

&lt;p&gt;
Каналы могут работать в двух адресных режимах: нормальном и расширенном. В нормальном режиме объем передаваемых данных ограничен 256 байтами, но допустима транзакция по невыровненному адресу и передача типа «память-периферия». В расширенном режиме адресации объем передаваемых данных не должен превышать 64 кБ.
&lt;/p&gt;

&lt;p&gt;
Контроллер DMA имеет в своем составе модуль вычисления циклического избыточного кода (CRC), который может быть подключен к любому каналу. Модуль позволяет вычислять CRC любой разрядности с произвольным полиномом.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Обзор DMA PIC32 (индийский англ.)&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;div align=center&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/GckQHSsdQjI&amp;hl=en&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/GckQHSsdQjI&amp;hl=en&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Контроллер прямого доступа к памяти (DMA)&quot; [30520-33205] --&gt;
&lt;h2&gt;&lt;a name=&quot;системные_модули&quot; id=&quot;системные_модули&quot;&gt;Системные модули&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Как и 16-битные контроллеры Microchip, семейство PIC32MX обладает набором системных модулей, необходимых для построения надежной  и самодостаточной однокристальной системы. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Системные модули&quot; [33206-33556] --&gt;
&lt;h3&gt;&lt;a name=&quot;модуль_сброса&quot; id=&quot;модуль_сброса&quot;&gt;Модуль сброса&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Модуль сброса PIC32MX полностью аналогичен модулю сброса 16-битных микроконтроллеров PIC24/dsPIC. Единственное отличие – отсутствие сброса при выборке инструкции с неизвестным кодом (это обрабатывается логикой исключений ядра), и сброса при конфликте исключений.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры PIC32MX имеют следующие источники сброса:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс по включению питания (POR)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; внешний сброс (MCLR)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс по снижению напряжения питания&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс при ошибке четности конфигурационных слов&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; программный сброс&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; сброс по переполнению сторожевого таймера&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Модуль сброса&quot; [33557-34560] --&gt;
&lt;h3&gt;&lt;a name=&quot;сторожевой_таймер&quot; id=&quot;сторожевой_таймер&quot;&gt;Сторожевой таймер&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Сторожевой таймер в микроконтроллерах семейства PIC32MX тактируется от внутреннего низкочастотного RC генератора. Физически сторожевой таймер представляет собой 25-битный счетчик и регистр сравнения. Переполнение сторожевого таймера вызывает сброс контроллера или вывод ядра и периферии из режимов энергосбережения. Период сторожевого таймера может находиться в диапазоне от 1 мс до 1048 сек. 
&lt;/p&gt;

&lt;p&gt;
Сторожевой таймер может включаться и отключаться программно. Программное отключение таймера может быть запрещено в слове конфигурации.
&lt;/p&gt;

&lt;p&gt;
Сброс сторожевого таймера в отличие от предыдущих семейств контроллеров Microchip осуществляется путем установки бита в регистре конфигурации таймера.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Сторожевой таймер&quot; [34561-35852] --&gt;
&lt;h3&gt;&lt;a name=&quot;система_тактирования_и_энергосберегающие_режимы&quot; id=&quot;система_тактирования_и_энергосберегающие_режимы&quot;&gt;Система тактирования и энергосберегающие режимы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Микроконтроллеры семейства PIC32MX имеют развитую систему тактирования. Ядро и периферийные модули могут тактироваться от четырех различных источников:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; основного кварцевого генератора с возможностью подключения PLL&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; внутреннего высокочастотный RC генератора 8 МГц с выходным делителем и возможностью подключения PLL&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; внутреннего низкочастотного RC генератора 32 кГц&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; дополнительного кварцевого генератора с параметрами, оптимизированными для подключения часового резонатора (32768 Гц)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Внутренний PLL предназначен для получения максимальной таковой частоты при использовании источников тактирования с частотой меньшей 72 МГц. Модуль PLL так же имеет выходной делитель, что позволяет получить широкую сетку частот от одного внешнего источника.
&lt;/p&gt;

&lt;p&gt;
Как и в большинстве микроконтроллеров Microchip, существует возможность переключать источники тактирования в ходе выполнения программы и подстраивать внутренний высокочастотный генератор в диапазоне ±12%.
&lt;/p&gt;

&lt;p&gt;
В систему тактирования PIC32MX входит монитор наличия тактовой частоты, который генерирует прерывание и переключает источник тактирования на дополнительный (внутренний RC генератор) при отказе основного. Этот же модуль обеспечивает вывод микроконтроллера из режима SLEEP с дополнительным источником с последующим переключением на основной. Это позволяет быстро начать выполнение приложения, не дожидаясь стабилизации частоты кварцевого генератора.
&lt;/p&gt;

&lt;p&gt;
Дополнительный кварцевый генератор 32768 Гц может быть включен и отключен программно. Он может использоваться для тактирования ядра, одного из таймеров и модуля часов реального времени.
&lt;/p&gt;

&lt;p&gt;
Для снижения потребления энергии можно уменьшить тактовую частоту периферийных модулей с помощью делителя частоты ядра с коэффициентами деления 2, 4 и 8.
&lt;/p&gt;

&lt;p&gt;
Микроконтроллеры семейства PIC32MX имеют два основных режима энергосбережения IDLE и SLEEP. В режиме IDLE ядро останавливает выполнение программы, однако основной тактовый генератор и периферийные модули продолжают работу. При входе в режим SLEEP, основной тактовый генератор отключается.
&lt;/p&gt;

&lt;p&gt;
Вывод микроконтроллера из энергосберегающих режимов возможен при сбросе, прерывании или переполнении сторожевого таймера. Для входа в энергосберегающий режим используется инструкция WAIT.
&lt;/p&gt;

&lt;p&gt;
Использование энергосберегающих режимов совместно с гибким управлением тактированием, позволит значительно уменьшить потребление энергии устройством.

&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Система тактирования и энергосберегающие режимы&quot; [35853-40303] --&gt;
&lt;h2&gt;&lt;a name=&quot;периферийные_модули&quot; id=&quot;периферийные_модули&quot;&gt;Периферийные модули&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

32-битное семейство PIC32MX имеет обширный набор периферийных модулей:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; универсальные порты ввода-вывода, толерантные к +5 В&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 24 входа внешних прерываний по изменению уровня с одним вектором&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 5 входов внешних прерываний по фронту с индивидуальным векторами&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 5 16-разрядных таймеров общего назначения&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 5 модулей захвата&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 5 модулей сравнения&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2 модуля SPI&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2 модуля I2C&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 2 модуля UART с аппаратной поддержкой IrDA, LIN и RS-485&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; параллельный 16-битный порт с 16-битной адресной шиной&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; часы реального времени с календарем&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; 10-битный 16 канальный аналого-цифровой преобразователь&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; два компаратора с регулируемым модулем опорного напряжения&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; JTAG интерфейс для граничного сканирования, программирования и отладки&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; модуль прямого доступа к памяти (DMA) с интегрированной функцией вычисления CRC&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
Большинство периферийных модулей аналогично по функциональности соответствующим модулям семейства PIC24FJ, что должно упростить переход на 32-битные PIC32MX. Компания Microchip предоставляет библиотеку обслуживания периферии &lt;em&gt;Peripheral Library PIC32MX&lt;/em&gt;, &lt;acronym title=&quot;Application Programming Interface&quot;&gt;API&lt;/acronym&gt; которой совместим с аналогичным пакетом для PIC24FJ.
&lt;/p&gt;

&lt;p&gt;
Следует отметить основную особенность управления периферийными модулями. Все периферийные регистры PIC32MX имеют по три дополнительных слова для атомарной манипуляции с битами: &lt;code&gt;xSET&lt;/code&gt;, &lt;code&gt;xCLR&lt;/code&gt; и &lt;code&gt;xINV&lt;/code&gt;. Установка битов в слове &lt;code&gt;xSET&lt;/code&gt; устанавливает соответствующие биты в периферийном регистре. Установка битов в слове &lt;code&gt;xCLR&lt;/code&gt; сбрасывает соответствующие биты в периферийном регистре. Слово &lt;code&gt;xTGL&lt;/code&gt; предназначено для инвертирования битов в регистре.
&lt;/p&gt;

&lt;p&gt;
Например, сброс младшего бита в регистре &lt;code&gt;TRISA&lt;/code&gt; будет выглядеть следующим образом:
&lt;/p&gt;
&lt;pre class=&quot;code c&quot;&gt;TRISACLR &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
В этом случае нет необходимости считывать значение TRISA в регистр, обнулять бит и сохранять итоговое значение:
&lt;/p&gt;
&lt;pre class=&quot;code c&quot;&gt;TRISA &lt;span class=&quot;sy0&quot;&gt;&amp;amp;=&lt;/span&gt; ~&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
Такой механизм позволяет значительно сократить количество инструкций на обслуживание периферии, увеличить скорость работы и обеспечить атомарность операций. Кроме того, большинство периферийных регистров используют только младшую часть слова, что позволяет компилятору использовать эффективные арифметические и логические инструкции с константными операндами.
&lt;/p&gt;

&lt;p&gt;
Как уже отмечено, большинство периферийных модулей в PIC32MX перенесено из 16-битного семейства PIC24F, поэтому для более подробного ознакомления с периферией PIC32 можно обратиться к статье &lt;a href=&quot;http://www.pic24.ru/doku.php/articles/mchp/16_bit_mcu&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:16_bit_mcu&quot;&gt;16-битные микроконтроллеры Microchip&lt;/a&gt;.
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Периферийные модули&quot; [40304-44649] --&gt;
&lt;h2&gt;&lt;a name=&quot;средства_разработки&quot; id=&quot;средства_разработки&quot;&gt;Средства разработки&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Компания Microchip традиционно предоставляет полный набор отладочных средств для освоения и профессиональной работы с семейством PIC32MX.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Средства разработки&quot; [44650-44946] --&gt;
&lt;h3&gt;&lt;a name=&quot;программные_средства_разработки&quot; id=&quot;программные_средства_разработки&quot;&gt;Программные средства разработки&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Одновременно с анонсом 32-разрядных контроллеров PIC32MX компания Microchip выпустила новую версию среды разработки &lt;a href=&quot;http://www.microchip.com/mplab&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/mplab&quot;  rel=&quot;nofollow&quot;&gt;MPLAB 8.0&lt;/a&gt; (актуальная версия - &lt;strong&gt;8.14&lt;/strong&gt;), которая на сегодняшний день поддерживает все семейства, начиная от PIC10 и заканчивая PIC32. 
&lt;/p&gt;

&lt;p&gt;
Выпущен компилятор с языка Си &lt;a href=&quot;http://www.microchip.com/c32&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/c32&quot;  rel=&quot;nofollow&quot;&gt;MPLAB C32&lt;/a&gt; – порт известного компилятора GCC. Компилятор включает библиотеки стандартных функций, написанные разработчиком ядра MIPS. Доступна бесплатная студенческая версия компилятора с ограничением по объему исполняемого кода (64 кБ). Актуальная версия - &lt;strong&gt;1.02&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;
Доступны средства разработки сторонних компаний: 

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.ashling.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.ashling.com/&quot;  rel=&quot;nofollow&quot;&gt;Ashling asIDE&lt;/a&gt; – среда разработки, включающая в себя менеджер проектов, текстовый редактор, отладчик кода PathFinder и аппаратный EJTAG эмулятор. В качестве компилятора может использоваться либо MPLAB C32, либо компилятор C/C++ от компании MIPS (MIPS SDE).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.ghs.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.ghs.com/&quot;  rel=&quot;nofollow&quot;&gt;Green Hills MULTI IDE&lt;/a&gt; – среда разработки, включающая в себя менеджер проектов, текстовый редактор, пофайлер DoubleCheck™, и Green Hills Probe – EJTAG эмулятор. В качестве компилятора используется компилятор Green Hills MIPS.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://microchip.htsoft.com/products/compilers/pic32.php&quot; class=&quot;urlextern&quot; title=&quot;http://microchip.htsoft.com/products/compilers/pic32.php&quot;  rel=&quot;nofollow&quot;&gt;Hi-Tech C PRO&lt;/a&gt; - компилятор и среда от давнего партнера Microchip, компании Hi-Tech Software, известной компиляторами для семейств PIC16 и PIC18.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Программные средства разработки&quot; [44947-47258] --&gt;
&lt;h3&gt;&lt;a name=&quot;аппаратные_средства_разработки&quot; id=&quot;аппаратные_средства_разработки&quot;&gt;Аппаратные средства разработки&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

PIC32MX – первое семейство в линейке Microchip, которое имеет не только проприетарный интерфейс внутрисхемной отладки. Ядро MIPS32 M4K™ включает в свой состав модуль внутрисхемной отладки EJTAG и модуль трассировки исполняемого кода и данных. Таким образом, сторонние разработчики отладочных средств могут интегрировать в свои продукты поддержку программирования и отладки PIC32MX с помощью JTAG.
&lt;/p&gt;

&lt;p&gt;
Тем не менее, PIC32MX включает в себя модуль теневой отладки, который на сегодняшний день поддерживают внутрисхемный отладчик ICD2 и внутрисхемный эмулятор REAL ICE, причем последний позволяет выполнять трассировку кода и данных. Семейство PIC32MX имеет 4 аппаратных точки останова по коду и 2 точки останова по данным.
&lt;/p&gt;

&lt;p&gt;
Для начала освоения PIC32MX компания Microchip предлагает использовать &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2615&amp;amp;dDocName=en532453&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2615&amp;amp;dDocName=en532453&quot;  rel=&quot;nofollow&quot;&gt;PIC32 Starter Kit&lt;/a&gt; – отладочную плату с установленным микроконтроллером &lt;strong&gt;PIC32MX360F512L&lt;/strong&gt;. Плата включает в себя внутрисхемный отладчик с интерфейсом USB, реализованный на микроконтроллере PIC18F4550. На плате установлены 3 светодиода и 3 кнопки. Плата питается от интерфейса USB.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Краткий видеообзор отладочной платы PIC32 Starter Kit можно посмотреть по &lt;a href=&quot;http://video.edn.com/services/link/bcpid1358313811/bclid1358639275/bctid1579853499&quot; class=&quot;urlextern&quot; title=&quot;http://video.edn.com/services/link/bcpid1358313811/bclid1358639275/bctid1579853499&quot;  rel=&quot;nofollow&quot;&gt;ссылке&lt;/a&gt; (англ.)&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
Освоение контроллеров семейства PIC32MX460 (с интерфейсом UAB OTG) можно начать, используя плату &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2615&amp;amp;dDocName=en535536&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2615&amp;amp;dDocName=en535536&quot;  rel=&quot;nofollow&quot;&gt;PIC32 USB Starter Board&lt;/a&gt;. Кит аналогичен предыдущему, но имеет установленные разъемы USB A (host) и USB micro-AB (OTG).
&lt;/p&gt;

&lt;p&gt;
Доступна &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2615&amp;amp;dDocName=en535444&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=2615&amp;amp;dDocName=en535444&quot;  rel=&quot;nofollow&quot;&gt;плата расширения&lt;/a&gt; к PIC32 Starter Kit (PIC32 USB Starter Board) , которая подключается к 122-выводному разъему, установленному на плате. 
&lt;/p&gt;

&lt;p&gt;
Так же доступны процессорные модули, предназначенные для использования совместно с популярной отладочной платой для 16-битных семейств &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en024858&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en024858&quot;  rel=&quot;nofollow&quot;&gt;Explorer 16&lt;/a&gt;. На процессорном модуле установлен разъем трассировки, который можно использовать для подключения к внутрисхемному эмулятору REAL ICE. Доступны модули как для семейства PIC32MX360, так и для PIC32MX460.
&lt;/p&gt;

&lt;p&gt;
Для программирования и отладки можно использовать знакомые средства - внутрисхемный отладчик &lt;a href=&quot;http://www.microchip.com/icd2&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/icd2&quot;  rel=&quot;nofollow&quot;&gt;MPLAB ICD2&lt;/a&gt; и внутрисхемный эмулятор &lt;a href=&quot;http://www.microchip.com/realice&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/realice&quot;  rel=&quot;nofollow&quot;&gt;REAL ICE&lt;/a&gt;. Семейство PIC32MX так же поддерживается бюджетным программатором начального уровня &lt;a href=&quot;http://www.microchip.com/pickit2&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/pickit2&quot;  rel=&quot;nofollow&quot;&gt;PICKit2&lt;/a&gt; (пока только программирование из оболочки PICKit2).
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Обзор аппаратных средств разработки для PIC32 (англ.)&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;div align=center&gt;&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/tAUJFeyf9as&amp;hl=en&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/tAUJFeyf9as&amp;hl=en&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Аппаратные средства разработки&quot; [47259-52067] --&gt;
&lt;h3&gt;&lt;a name=&quot;программные_библиотеки&quot; id=&quot;программные_библиотеки&quot;&gt;Программные библиотеки&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Компания Microchip традиционно обеспечивает разработчиков квалифицированной технической поддержкой в виде руководств по применению и программных библиотек.
&lt;/p&gt;

&lt;p&gt;
Не является исключением и семейство PIC32MX, для которого на данный момент доступны следующие библиотеки:

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534263&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534263&quot;  rel=&quot;nofollow&quot;&gt;USB Device and Embedded Host Stack&lt;/a&gt; - стек обслуживания модуля USB OTG микроконтроллеров семейства PIC32MX460. Реализованы функции &lt;strong&gt;device&lt;/strong&gt; и &lt;strong&gt;host&lt;/strong&gt;. Поддержка двухролевого стека (OTG) будет добавлена позднее.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1489&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1489&quot;  rel=&quot;nofollow&quot;&gt;Microchip TCP/IP&lt;/a&gt; - стек протоколов TCP/IP&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en532885&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en532885&quot;  rel=&quot;nofollow&quot;&gt;Microchip TCP/IP with BSD Sockets&lt;/a&gt; - TCP/IP стек с BSD (Berkley Socket Distribution) &lt;acronym title=&quot;Application Programming Interface&quot;&gt;API&lt;/acronym&gt;. Механизм сокетов позволяет использовать стороннее программное обеспечение, например, &lt;acronym title=&quot;Hyper Text Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; и &lt;acronym title=&quot;File Transfer Protocol&quot;&gt;FTP&lt;/acronym&gt; серверы и клиенты, различные сетевые протоколы и т. п. В состав стека входит реализация файловой системы FAT16, примеры реализации &lt;acronym title=&quot;Hyper Text Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; и &lt;acronym title=&quot;File Transfer Protocol&quot;&gt;FTP&lt;/acronym&gt; сервера, реализация SNMP агента.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en520606&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en520606&quot;  rel=&quot;nofollow&quot;&gt;MiWi™ Protocol Stack&lt;/a&gt; - стек обслуживания беспроводной сети MiWi™&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/qvga&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/qvga&quot;  rel=&quot;nofollow&quot;&gt;Microchip Graphics Library&lt;/a&gt; - библиотека графического интерфейса пользователя (&lt;acronym title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/acronym&gt;) для TFT-панелей.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534592&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534592&quot;  rel=&quot;nofollow&quot;&gt;CAN Library for PIC32&lt;/a&gt; - библиотека поддержки CAN (используется CAN-контроллер MCP2515)&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534485&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534485&quot;  rel=&quot;nofollow&quot;&gt;Audio Library for PIC32MX&lt;/a&gt; - библиотека сжатия и воспроизведения речи. Поддерживаются кодеки SPEEX и ADPCM.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en532040&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en532040&quot;  rel=&quot;nofollow&quot;&gt;32-bit File System&lt;/a&gt; - файловая система FAT16/FAT32. В состав библиотеки включен драйвер SD/MMC карт памяти.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534194&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1824&amp;amp;appnote=en534194&quot;  rel=&quot;nofollow&quot;&gt;Data EEPROM Emulation Library&lt;/a&gt; - библиотека эмуляции EEPROM во Flash-памяти микроконтроллеров.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;

Доступно большое количество библиотек и от сторонних разработчиков:
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;RTOS&lt;/strong&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.cmx.com/rtx.htm&quot; class=&quot;urlextern&quot; title=&quot;http://www.cmx.com/rtx.htm&quot;  rel=&quot;nofollow&quot;&gt;CMX-RTX™&lt;/a&gt; – коммерческая вытесняющая операционная система реального времени, с малым объемом кода и быстрым переключением контекста. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.rtos.com/page/product.php?id=2&quot; class=&quot;urlextern&quot; title=&quot;http://www.rtos.com/page/product.php?id=2&quot;  rel=&quot;nofollow&quot;&gt;ThreadX®&lt;/a&gt; – коммерческая вытесняющая RTOS&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.freertos.org/port_PIC32_MIPS_MK4.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.freertos.org/port_PIC32_MIPS_MK4.html&quot;  rel=&quot;nofollow&quot;&gt;freeRTOS&lt;/a&gt; – бесплатная вытесняющая операционная система реального времени, поставляемая с открытыми исходными кодами, поставляемая под лицензией &lt;acronym title=&quot;GNU General Public License&quot;&gt;GPL&lt;/acronym&gt;-like, разрешающей применение freeRTOS в коммерческих проектах без публикации исходного кода проекта.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.micrium.com/microchip/index.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.micrium.com/microchip/index.html&quot;  rel=&quot;nofollow&quot;&gt;Micrium uC/OS-II&lt;/a&gt; – широко известная коммерческая вытесняющая RTOS.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.segger.com/embos_general.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.segger.com/embos_general.html&quot;  rel=&quot;nofollow&quot;&gt;Segger embOS&lt;/a&gt; – коммерческая вытесняющая RTOS&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.pumpkininc.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.pumpkininc.com/&quot;  rel=&quot;nofollow&quot;&gt;Salvo™&lt;/a&gt; - коммерческая кооперативная RTOS.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;strong&gt;&lt;acronym title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/acronym&gt;&lt;/strong&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.easygui.com&quot; class=&quot;urlextern&quot; title=&quot;http://www.easygui.com&quot;  rel=&quot;nofollow&quot;&gt;easyGUI&lt;/a&gt; – коммерческая библиотека для реализации графического интерфейса пользователя с использованием монохромных и цветных панелей. Поддерживает большое количество контроллеров ЖКИ&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.ramtex.dk/&quot; class=&quot;urlextern&quot; title=&quot;http://www.ramtex.dk/&quot;  rel=&quot;nofollow&quot;&gt;RAMTEX GUI&lt;/a&gt; – коммерческая библиотека &lt;acronym title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/acronym&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.segger.com/emwin.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.segger.com/emwin.html&quot;  rel=&quot;nofollow&quot;&gt;Segger emWin&lt;/a&gt; – коммерческая библиотека &lt;acronym title=&quot;Graphical User Interface&quot;&gt;GUI&lt;/acronym&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;strong&gt;TCP/IP&lt;/strong&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.cmx.com/micronet.htm&quot; class=&quot;urlextern&quot; title=&quot;http://www.cmx.com/micronet.htm&quot;  rel=&quot;nofollow&quot;&gt;CMX-MicroNet™&lt;/a&gt; - коммерческий стек протоколов TCP/IP c реализацией &lt;acronym title=&quot;Hyper Text Transfer Protocol&quot;&gt;HTTP&lt;/acronym&gt; сервера, &lt;acronym title=&quot;File Transfer Protocol&quot;&gt;FTP&lt;/acronym&gt; сервера и клиента.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;strong&gt;FAT&lt;/strong&gt;

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.cmx.com/ffs.htm&quot; class=&quot;urlextern&quot; title=&quot;http://www.cmx.com/ffs.htm&quot;  rel=&quot;nofollow&quot;&gt;CMX-FFS-FAT™&lt;/a&gt; - коммерческая файловая система FAT12/16/32 с поддержкой длинных имен, нескольких дисков и нескольких разделов на диске.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://www.segger.com/emfile.html&quot; class=&quot;urlextern&quot; title=&quot;http://www.segger.com/emfile.html&quot;  rel=&quot;nofollow&quot;&gt;Segger emFile&lt;/a&gt; – коммерческая файловая система FAT12/16/32&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 

&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Программные библиотеки&quot; [52068-] --&gt;</description>
    </item>
    <item rdf:about="http://www.pic24.ru/doku.php/articles/mchp/c30_atomic_access?rev=1276171040">
        <dc:format>text/html</dc:format>
        <dc:date>2010-06-10T15:57:20+04:00</dc:date>
        <title>Атомарный доступ к структурам</title>
        <link>http://www.pic24.ru/doku.php/articles/mchp/c30_atomic_access?rev=1276171040</link>
        <description>


&lt;h1&gt;&lt;a name=&quot;атомарный_доступ_к_структурам&quot; id=&quot;атомарный_доступ_к_структурам&quot;&gt;Атомарный доступ к структурам&lt;/a&gt;&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Атомарный доступ к структурам&quot; [1-72] --&gt;
&lt;h2&gt;&lt;a name=&quot;проблема_атомарного_доступа&quot; id=&quot;проблема_атомарного_доступа&quot;&gt;Проблема атомарного доступа&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Под атомарным доступом будем понимать такое обращение (операции чтения, модификации, записи, или их последовательность) к переменной или периферийному регистру, которое не приведет к конфликту при возникновении прерывания или приоритетного вытеснения задачи в RTOS системах во время выполнения операции. Конфликт может возникнуть, когда в прерывании, или другой задаче выполняется доступ к этому же ресурсу.
&lt;/p&gt;

&lt;p&gt;
Простой пример: необходимо инвертировать вывод RA0 контроллера: 

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;_LATA0 &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; ~_LATA0;&lt;/pre&gt;
&lt;p&gt;

С точки зрения синтаксиса и логики все правильно, но давайте посмотрим на код, который получится в результате компиляции

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;10:                        _LATA0 = ~_LATA0;
  0288  202C41     mov.w #0x2c4,0x0002
  028A  784091     mov.b [0x0002],0x0002
  028C  60C0E1     and.b 0x0002,#1,0x0002
  028E  A20401     btg 0x0002,#0
  0290  BFC2C4     mov.b 0x02c4,0x0000
  0292  A10400     bclr 0x0000,#0
  0294  704001     ior.b 0x0000,0x0002,0x0000
  0296  B7E2C4     mov.b 0x0000,0x02c4&lt;/pre&gt;
&lt;p&gt;
&lt;p&gt;&lt;div class=&quot;notewarning&quot;&gt;&lt;strong&gt;Никогда так не делайте!&lt;/strong&gt; C30 предоставляет встроенную функцию &lt;code&gt;__builtin_btg()&lt;/code&gt;, которая атомарно инвертирует бит в адресном пространстве. Код выше - пример некорректного обращения к периферии. 
&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;

&lt;p&gt;
В приведенном примере текущее значение регистра &lt;code&gt;LATA&lt;/code&gt; загружается в регистр ядра, модицифируется и затем сохраняется обратно в регистр &lt;code&gt;LATA&lt;/code&gt;. Теперь представьте, что после выполнения инструкции

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  0288  202C41     mov.w #0x2c4,0x0002&lt;/pre&gt;
&lt;p&gt;

возникло прерывание, которое так же обращается к регистру &lt;code&gt;LATA&lt;/code&gt;, модифицирует его, например, устанавливает какой-нибудь бит. После выхода из обработчика прерывания начнет выполняться инструкция по адресу &lt;code&gt;0x028A&lt;/code&gt;. Но ведь значение значение &lt;code&gt;LATA&lt;/code&gt;, которое было до прерывания &lt;span class=&quot;important&quot;&gt;уже сохранено&lt;/span&gt;! И модифицироваться будет именно оно, а не актуальное состояние защелки порта. И после выполнения 

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;  0296  B7E2C4     mov.b 0x0000,0x02c4&lt;/pre&gt;
&lt;p&gt;

в порт запишется значение, которое не учитывает установку бита в прерывании. Графитовый стержень не опустился. Бум!
&lt;/p&gt;

&lt;p&gt;
В результате мы получим конфликт доступа к ресурсу и, как следствие, неработоспособную программу. Если вы считаете, что такая ситуация надуманная, то пройдите по &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/faq#разделяемые_ресурсы&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:faq&quot;&gt;ссылке&lt;/a&gt;. Это реальный вопрос от реального человека, который наткнулся на проблему атомарного доступа к периферии сразу же после начала освоения вытесняющей RTOS &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/intro&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:intro&quot;&gt;TNKernel&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Проблема становится еще более актуальной при работе с архитектурами типа Read-Modify-Write (ARM, MIPS) которые не имеют инструкций прямой модификации памяти в адресном пространстве. Для изменения значения периферийного регистра или переменной требуется загрузка данных в регистр АЛУ, модификации и выгрузка обратно. А ведь есть еще многоядерные процессоры…
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Проблема атомарного доступа&quot; [73-4716] --&gt;
&lt;h2&gt;&lt;a name=&quot;методы_решения&quot; id=&quot;методы_решения&quot;&gt;Методы решения&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Вариантов решения проблемы существует несколько. Каждый из них имеет свои плюсы и минусы.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Методы решения&quot; [4717-4923] --&gt;
&lt;h3&gt;&lt;a name=&quot;запрещение_прерываний&quot; id=&quot;запрещение_прерываний&quot;&gt;Запрещение прерываний&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;DI&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
_LATA0 &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; ~_LATA0;
EI&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
Самый простой и очевидный способ: чтобы последовательность выполнения инструкций не нарушилась, нужно просто исключить саму возможность запуска конкурирующего кода. В этом случае операция инвертирования бита будет выполняться атомарно.
Однако, этот метод имеет множество недостатков:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Увеличение объема кода за счет инструкций запрещающих и разрешающих прерывание.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Уменьшение скорости выполнения кода по тем же причинам.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; При таком способе реализации атомарного доступа невозможно обеспечить детерминированную задержку входа в прерывание - появится джиттер. В некоторых системах это недопустимо.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Такое решение нельзя использовать в системах с вытесняющей RTOS (там есть свои методы).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Если целевая платформа включает в себя гибкий контроллер прерывания, то побочные эффекты такого метода могут быть довольно сильными, так как необходимо выполнить больше действий для запрещения прерываний. Например, для PIC24/dsPIC нужно сохранить во временной переменной (в стеке) текущий приоритет ядра, установить приоритет ядра на максимум, а после выполнения атомарной операции доступа восстановить приоритет из временной переменной. Это является единственно корректным способом запрещения прерываний при разработке ПО на языке Си (использование инструкции &lt;code&gt;disi&lt;/code&gt; не рекомендуется).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Запрещение прерываний&quot; [4924-7377] --&gt;
&lt;h3&gt;&lt;a name=&quot;критическая_секция&quot; id=&quot;критическая_секция&quot;&gt;Критическая секция&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;tn_sys_enter_critical&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
_LATA0 &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; ~_LATA0;
tn_sys_exit_critical&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
Такой метод можно применять при использовании вытесняющей RTOS. &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/sys/intro#запрещение_переключения_контекста&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:sys:intro&quot;&gt;Критическая секция&lt;/a&gt; - это часть кода, в которой запрещено переключение контекста. Чаще всего это означает запрещение прерываний и (возможно) выполнение дополнительных действий над внутренними переменными планировщика.
&lt;/p&gt;

&lt;p&gt;
Критическая секция имеет те же недостатки, что и предыдущий способ. Кроме того, использование критических секций не поощряется, так как в этом случае вы вмешиваетесь в работу планировщика и нарушаете принципы функционирования RTOS. Если доступ к ресурсу можно выделить в относительно большой кусок кода, тогда разумнее использовать мютексы.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Критическая секция&quot; [7378-8746] --&gt;
&lt;h3&gt;&lt;a name=&quot;мютексы&quot; id=&quot;мютексы&quot;&gt;Мютексы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;tn_mutex_lock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;mutex, TIMEOUT&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
_LATA0 &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; ~_LATA0;
tn_mutex_unlock&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;mutex&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mutex/intro&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mutex:intro&quot;&gt;Мютекс&lt;/a&gt; - это объект RTOS, предназначенный для реализации конкурентного доступа к общему для задач ресурсу.
&lt;/p&gt;

&lt;p&gt;
Если в используемой вами RTOS механизм мютексов не реализован, можно использовать двоичные семафоры, но в этом случае может возникнуть &lt;a href=&quot;http://www.pic24.ru/doku.php/tnkernel/ref/mutex/intro#инверсия_приоритетов&quot; class=&quot;wikilink1&quot; title=&quot;tnkernel:ref:mutex:intro&quot;&gt;инверсия приоритетов&lt;/a&gt; - неприятная ситуация при которой более приоритетная задача не может получить доступ к ресурсу.
&lt;/p&gt;

&lt;p&gt;
Использование мютексов - наиболее правильный метод обеспечения доступа к разделяемым ресурсам. Однако, при обслуживании периферии такой метод может быть очень накладным по объему и, что самое главное, по скорости выполнения кода.
&lt;/p&gt;

&lt;p&gt;
&lt;p&gt;&lt;div class=&quot;noteimportant&quot;&gt;Ограничивать мютексом рекомендуется относительно большую часть кода, но никак не доступ к полю структуры или биту порта.
&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Мютексы&quot; [8747-10291] --&gt;
&lt;h3&gt;&lt;a name=&quot;аппаратные_методы&quot; id=&quot;аппаратные_методы&quot;&gt;Аппаратные методы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Некоторые архитектуры имеют удобные способы обеспечения атомарного доступа. Из известных мне это Cortex-M3 с его &lt;a href=&quot;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/15921.html&quot; class=&quot;urlextern&quot; title=&quot;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/15921.html&quot;  rel=&quot;nofollow&quot;&gt;&amp;quot;bit-band&amp;quot;&lt;/a&gt; областью в адресном пространстве и MIPS32 с инструкциями &lt;code&gt;LL&lt;/code&gt; и &lt;code&gt;SC&lt;/code&gt;. Последние, впрочем, предназначены для использования в многоядерных процессорах, однако так же успешно могут применяться и при работе с &lt;a href=&quot;http://www.pic24.ru/doku.php/articles/mchp/32_bit_first_step_ppt&quot; class=&quot;wikilink1&quot; title=&quot;articles:mchp:32_bit_first_step_ppt&quot;&gt;PIC32&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
К аппаратным методам обеспечения атомарного доступа можно так же отнести инструкцию &lt;code&gt;disi&lt;/code&gt; 16-битных контроллеров Microchip. Эта инструкция запрещает прерывания на определенное количество командных тактов.
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Аппаратные методы&quot; [10292-11424] --&gt;
&lt;h2&gt;&lt;a name=&quot;доступ_к_битовым_полям_структуры&quot; id=&quot;доступ_к_битовым_полям_структуры&quot;&gt;Доступ к битовым полям структуры&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

Мы рассмотрели общую проблему конкурентного доступа к ресурсам программы. Однако, существует и частный случай этой проблемы - доступ к битовым полям структуры.
&lt;/p&gt;

&lt;p&gt;
Как правило, для работы с периферией микроконтроллера используются служебные регистры, находящиеся в адресном пространстве процессора, которые будем называть &lt;strong&gt;периферийными&lt;/strong&gt;. Эти регистры чаще всего представляются в виде структур с битовыми полями:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;__extension__ &lt;span class=&quot;kw4&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;struct&lt;/span&gt; tagOC4CONBITS &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw4&quot;&gt;union&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw4&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCM    &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;3&lt;/span&gt;;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCTSEL &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCFLT  &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt;        &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCSIDL &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;;
    &lt;span class=&quot;kw4&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCM0   &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCM1   &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
      &lt;span class=&quot;kw4&quot;&gt;unsigned&lt;/span&gt; OCM2   &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; OC4CONBITS;
&lt;span class=&quot;kw4&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;volatile&lt;/span&gt; OC4CONBITS OC4CONbits __attribute__&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;__sfr__&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
При доступе к этим битовым полям компилятор может сгенерировать атомарную инструкцию:

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;75:                        AD1CON1bits.ADON = 1;
 00298  A8E321     bset.b 0x0321,#7
76:                        AD1CON1bits.ADON = 0;
 0029A  A9E321     bclr.b 0x0321,#7&lt;/pre&gt;
&lt;p&gt;
Но все станет гораздо хуже, когда вы попытаетесь записать в поле структуры значение переменной:

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;74:                        a = 1;
 00298  200010     mov.w #0x1,0x0000
 0029A  884010     mov.w 0x0000,0x0802
75:                        b = 0;
 0029C  EF2800     clr.w 0x0800
76:
77:                        AD1CON1bits.ADON = a;
 0029E  804011     mov.w 0x0802,0x0002
 002A0  DD08C7     sl 0x0002,#7,0x0002
 002A2  BFC321     mov.b 0x0321,0x0000
 002A4  A17400     bclr 0x0000,#7
 002A6  704001     ior.b 0x0000,0x0002,0x0000
 002A8  B7E321     mov.b 0x0000,0x0321
78:                        AD1CON1bits.ADON = b;
 002AA  804001     mov.w 0x0800,0x0002
 002AC  DD08C7     sl 0x0002,#7,0x0002
 002AE  BFC321     mov.b 0x0321,0x0000
 002B0  A17400     bclr 0x0000,#7
 002B2  704001     ior.b 0x0000,0x0002,0x0000
 002B4  B7E321     mov.b 0x0000,0x0321&lt;/pre&gt;
&lt;p&gt;
Проблемы так же могут появиться при доступе к битовому полю, размер которого больше 1 бита:

&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;82:                        IPC0bits.INT0IP = 2;
 002BE  BFC0A4     mov.b 0x00a4,0x0000
 002C0  B3CF81     mov.b #0xf8,0x0002
 002C2  604001     and.b 0x0000,0x0002,0x0000
 002C4  A01400     bset 0x0000,#1
 002C6  B7E0A4     mov.b 0x0000,0x00a4&lt;/pre&gt;
&lt;p&gt;
Способ решения проблемы тут один - использовать инструкцию &lt;code&gt;xor&lt;/code&gt;, которая обеспечивает атомарный доступ &lt;strong&gt;в любом случае&lt;/strong&gt;, даже если требуется изменить большое битовое поле.
&lt;/p&gt;

&lt;p&gt;
&lt;p&gt;&lt;div class=&quot;noteclassic&quot;&gt;
Рассмотрим пример: запись в младшие четыре бита регистра TRISB значения 0x000A.
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt; 002FA  801630     mov.w TRISB, W0
 002FC  68006A     xor.w W0, #0x000A, W0
 002FE  60006F     and.w W0, #0x000F, W0
 00300  B6A2C6     xor.w TRISB&lt;/pre&gt;&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;TRISB = 0xFFFF&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; первая инструкция загружает значение &lt;code&gt;TRISB&lt;/code&gt; в регистр &lt;code&gt;W0&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; вторая инструкция атомарно и безопасно модифицирует четыре младших бита регистра &lt;code&gt;W0&lt;/code&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; третья инструкция накладывает на регистр &lt;code&gt;W0&lt;/code&gt; маску, выделяя 4 младших бита&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; последняя инструкция атомарно и безопасно (&lt;strong&gt;не трогая остальных битов!&lt;/strong&gt;) модифицирует &lt;code&gt;TRISB&lt;/code&gt;; &lt;strong&gt;TRISB = 0xFFFA&lt;/strong&gt;;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Даже если после выполнения первой инструкции возникнет прерывание, которое изменит значение TRISB (естественно, не младших 4-х битов), операция выполниться корректно. Приведенный выше код является &lt;strong&gt;атомарным&lt;/strong&gt;.

&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;

&lt;p&gt;
О &amp;quot;волшебном&amp;quot; свойстве XOR я знал давно, но формализованный подход увидел первый раз на &lt;a href=&quot;http://www.microchip.com/forums/tm.aspx?m=375664&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/forums/tm.aspx?m=375664&quot;  rel=&quot;nofollow&quot;&gt;форуме microchip.com&lt;/a&gt;. Автор замечательной коммерческой &lt;a href=&quot;http://www.avix-rt.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.avix-rt.com/&quot;  rel=&quot;nofollow&quot;&gt;RTOS AVIX-RT&lt;/a&gt; выложил макрос, который использует inline ассемблер для реализации xor доступа. Затем в состав AVIX вошел заголовочный файл, в котором реализованы расширенные варианты подобного макроса для архитектур PIC24/dsPIC (компилятор C30) и PIC32 (MIPS32 M4K, компилятор C32).
&lt;/p&gt;

&lt;p&gt;
По моему скромному мнению эти макросы являются высшим пилотажем. В них используется много интересных решений которые я рассмотрю ниже.
&lt;/p&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Доступ к битовым полям структуры&quot; [11425-17098] --&gt;
&lt;h2&gt;&lt;a name=&quot;макросы_атомарного_доступа_к_полям_структуры&quot; id=&quot;макросы_атомарного_доступа_к_полям_структуры&quot;&gt;Макросы атомарного доступа к полям структуры&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;

&lt;p&gt;&lt;div class=&quot;notewarning&quot;&gt;Согласно лицензионному соглашению, код, который содержится в файле &lt;code&gt;AVIXAtomicSFR.h&lt;/code&gt; является неотъемлемой частью &lt;strong&gt;RTOS AVIX-RT&lt;/strong&gt; и не может быть приведен полностью или частично без согласования с держателем права. Поэтому пришлось сделать небольшой рефакторинг. Оригинальный код входит в состав AVIX-RT, демонстрационная версия которой может быть скачана с сайта &lt;a href=&quot;http://www.avix-rt.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.avix-rt.com/&quot;  rel=&quot;nofollow&quot;&gt;http://www.avix-rt.com/&lt;/a&gt;.
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Я не являюсь автором данных макросов.&lt;/strong&gt;

&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Макросы атомарного доступа к полям структуры&quot; [17099-17976] --&gt;
&lt;h3&gt;&lt;a name=&quot;скачать&quot; id=&quot;скачать&quot;&gt;Скачать&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;1.0.70&lt;/strong&gt; (14 сентября 2009) &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/bfa_rev_1_0_70.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:bfa_rev_1_0_70.rar&quot;&gt;скачать&lt;/a&gt; @ 6 кБ&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Исправлен макрос &lt;code&gt;BFAR()&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Инструкции обслуживания единичных битов заменены на ассемблерные, так при некоторых уровня оптимизации получался совсем уж неоптимальный код&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Добавлены макросы &lt;code&gt;BFAM()&lt;/code&gt;, &lt;code&gt;BFAMI()&lt;/code&gt;, &lt;code&gt;BFAMD()&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Предназначены для того же, для чего и &lt;code&gt;BFAR()&lt;/code&gt;, но биты, на которые влияет операция увазываются не диапазоном, а маской. Полное описание будет чуть позже&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;1.0.31&lt;/strong&gt; (8 мая 2009) &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/bfa_rev_1_0_31.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:bfa_rev_1_0_31.rar&quot;&gt;скачать&lt;/a&gt; @ 6 кБ&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Исправлена ошибка в макросе &lt;code&gt;BFAR()&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;При установке опции компиляции &lt;code&gt;-mlarge-scalar&lt;/code&gt; (разрешение располагать скалярные переменные в far области ОЗУ) выдавалась ошибка при использовании макроса &lt;code&gt;BFAR()&lt;/code&gt; с произвольной переменной (без атрибута SFR).&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Исправлен макрос &lt;code&gt;BFA()&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;При использовании макроса &lt;code&gt;BFA()&lt;/code&gt; выдавалось предупреждение о безусловном преобразовании большой константы в &lt;code&gt;unsigned int&lt;/code&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;Добавлен макрос BFARD()&lt;/strong&gt;, предназначенный для прямого доступа к любой скалярной переменной в ОЗУ.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 

&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 

&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;1.0.24&lt;/strong&gt; (4 марта 2009) &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/bfa_rev_1_0_24.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:bfa_rev_1_0_24.rar&quot;&gt;скачать&lt;/a&gt; @ 6 кБ&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Изменен порядок передачи параметров&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Параметр, указывающий тип операции в макрос передается первым&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Добавлен макрос &lt;code&gt;BFARI()&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Макрос &lt;code&gt;BFARI()&lt;/code&gt; обеспечивает доступ к структуре по указателю&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Для всех макросов добавлены новые операции: &lt;code&gt;BFA_SET&lt;/code&gt; и &lt;code&gt;BFA_CLR&lt;/code&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level3&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Эти операции могут использоваться для установки или сброса битов по маске в битовом поле. Маска может передаваться как в виде константы, так и в виде переменной.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;BFA_IV&lt;/code&gt; заменено на &lt;code&gt;BFA_INV&lt;/code&gt;. Операция инвертирования теперь инвертирует биты по передаваемой маске.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;strong&gt;1.0.21&lt;/strong&gt; (3 марта 2009) &lt;a href=&quot;http://www.pic24.ru/lib/exe/fetch.php/articles/mchp/bfa_rev_1_0_21.rar&quot; class=&quot;media mediafile mf_rar&quot; title=&quot;articles:mchp:bfa_rev_1_0_21.rar&quot;&gt;скачать&lt;/a&gt; @ 4 кБ&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; Первая версия. Только для компилятора Microchip C30&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Скачать&quot; [17977-21229] --&gt;
&lt;h3&gt;&lt;a name=&quot;описание&quot; id=&quot;описание&quot;&gt;Описание&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

Архив содержит заголовочный файл &lt;code&gt;bfa.h&lt;/code&gt;, который включает в себя четыре макроса, реализующих атомарный доступ к полю структуры или к любой скалярной переменной. Один из макросов предназначен для работы со структурами, именование которых соответствует правилам Microchip C30 для периферийных регистров. Остальный макросы могут использоваться с любой структурой или переменной размером не больше машинного слова (&lt;code&gt;int&lt;/code&gt;).
&lt;/p&gt;

&lt;p&gt;
Для использования макросов необходимо и достаточно подключить к модулю файл &lt;code&gt;bfa.h&lt;/code&gt; и &lt;span class=&quot;important&quot;&gt;включить оптимизацию не ниже &lt;code&gt;-01&lt;/code&gt;&lt;/span&gt;.
&lt;br/&gt;
 
&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Список макросов&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;strong&gt;BFA&lt;/strong&gt;(comm, reg_name, field_name, …)&lt;/code&gt; - &lt;strong&gt;B&lt;/strong&gt;it &lt;strong&gt;F&lt;/strong&gt;ield &lt;strong&gt;A&lt;/strong&gt;ccess&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Атомарный доступ к именованым полям периферийных регистров PIC24/dsPIC&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;strong&gt;BFAR&lt;/strong&gt;(comm, reg_name, lower, upper, …)&lt;/code&gt; - &lt;strong&gt;B&lt;/strong&gt;it &lt;strong&gt;F&lt;/strong&gt;ield &lt;strong&gt;A&lt;/strong&gt;ccess using &lt;strong&gt;R&lt;/strong&gt;ange&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Атомарный доступ к битовым полям периферийных регистров и переменных. Битовое поле указывается как числовой диапазон. Переменная должна быть расположена в NEAR DATA SPACE (первые 8 r&amp;lt; ОЗУ)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;strong&gt;BFARI&lt;/strong&gt;(comm, pt, lower, upper, …)&lt;/code&gt; - &lt;strong&gt;B&lt;/strong&gt;it &lt;strong&gt;F&lt;/strong&gt;ield &lt;strong&gt;A&lt;/strong&gt;ccess using &lt;strong&gt;R&lt;/strong&gt;ange &lt;strong&gt;I&lt;/strong&gt;ndirect&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Атомарный доступ к битовым полям периферийных регистров и переменных по указателю. Битовое поле указывается как числовой диапазон&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;code&gt;&lt;strong&gt;BFARD&lt;/strong&gt;(comm, val, lower, upper, …)&lt;/code&gt; - &lt;strong&gt;B&lt;/strong&gt;it &lt;strong&gt;F&lt;/strong&gt;ield &lt;strong&gt;A&lt;/strong&gt;ccess using &lt;strong&gt;R&lt;/strong&gt;ange &lt;strong&gt;D&lt;/strong&gt;irect&lt;/div&gt;
&lt;ul&gt;
&lt;li class=&quot;level2&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;span style='color:grey; '&gt;Атомарный доступ к битовым полям периферийных регистров и переменных. Битовое поле указывается как числовой диапазон. Переменная может быть расположена в любом месте ОЗУ (NEAR или FAR DATA SPACE)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;bfa&quot; id=&quot;bfa&quot;&gt;BFA()&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Макрос обеспечивает атомарный доступ к именованым полям структур периферийных регистров микроконтроллеров PIC24/dsPIC.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;comm, reg_name, field_name, ...&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Параметры:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;comm&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;тип доступа:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_WR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 запись в битовое поле		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_RD&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 чтение битового поля		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_SET&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 установка битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_CLR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 сброс битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_INV&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 инвертирование битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
  
&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;reg_name&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;имя периферийного регистра, к которому осуществляется доступ, например, &lt;code&gt;PORTA&lt;/code&gt;, &lt;code&gt;TRISB&lt;/code&gt;, &lt;code&gt;CMCON&lt;/code&gt; и т.п.&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;field_name&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;имя битового поля в структуре регистра (см. документацию на микроконтроллер и заголовочный файл C30 для этого микроконтроллера). Например, для регистра &lt;code&gt;IPC0&lt;/code&gt; это может быть &lt;code&gt;T1IP&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;. . .&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;необязательный параметр, используется только если &lt;code&gt;comm = [BFA_WR, BFA_SET, BFA_CLR, BFA_INV]&lt;/code&gt;. Если &lt;code&gt;comm = BFA_RD&lt;/code&gt; - параметр не указывается. Если &lt;code&gt;comm = BFA_WR&lt;/code&gt;, параметр указывает значение, которое записывается в битовое поле. В остальных случаях параметр должен быть равен битовой маске. &lt;span class=&quot;important&quot;&gt;Параметр может быть переменной&lt;/span&gt;.
&lt;br/&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR,  IPC0, INT0IP, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;         &lt;span class=&quot;coMULTI&quot;&gt;/* Запись в поле INT0IP регистра IPC0
                                          константы 0 */&lt;/span&gt;
BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_INV, IPC0, INT0IP, &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Инвертирование младшего бита поля
                                          INT0IP регистра IPC0 */&lt;/span&gt;
BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR,  IPC0, INT0IP, &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;         &lt;span class=&quot;coMULTI&quot;&gt;/* Запись в поле INT0IP регистра IPC0
                                          константы 4 */&lt;/span&gt;
BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_CLR, IPC0, INT0IP, &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Сброс младшего бита поля INT0IP
                                          регистра IPC0 */&lt;/span&gt;
a &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;;
BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR,  IPC0, INT0IP, a&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Запись в поле INT0IP регистра IPC0 значения
                                   переменной a */&lt;/span&gt;
b &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_RD, IPC0, INT0IP&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Чтение значения поля INT0IP регистра IPC0
                                   в переменную b */&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;bfar&quot; id=&quot;bfar&quot;&gt;BFAR()&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Макрос обеспечивает атомарный доступ к битовому полю любой структуры или переменной, которая находится в области &lt;strong&gt;NEAR DATA SPACE&lt;/strong&gt; (первые 8 кБ ОЗУ). Битовое поле указывается в виде диапазона (младщий бит / старший бит).
&lt;/p&gt;

&lt;p&gt;

&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;comm, reg_name, lower, upper, ...&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Параметры:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;comm&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;тип доступа:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_WR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 запись в битовое поле		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_RD&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 чтение битового поля		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_SET&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 установка битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_CLR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 сброс битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_INV&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 инвертирование битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
  
&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;reg_name&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;имя регистра, к которому осуществляется доступ, например, &lt;code&gt;PORTA&lt;/code&gt;, &lt;code&gt;TRISB&lt;/code&gt;, &lt;code&gt;CMCON&lt;/code&gt; и т.п. Может быть любой переменной программы, которая находится в области &lt;code&gt;near&lt;/code&gt; памяти данных (первые 8 кБ)&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;lower&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;младший бит поля структуры, от 0 до 15&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;upper&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;старший бит поля структуры, от 0 до 15, &lt;code&gt;upper &amp;gt;= lower&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;. . .&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;необязательный параметр, используется только если &lt;code&gt;comm = [BFA_WR, BFA_SET, BFA_CLR, BFA_INV]&lt;/code&gt;. Если &lt;code&gt;comm = BFA_RD&lt;/code&gt; - параметр не указывается. Если &lt;code&gt;comm = BFA_WR&lt;/code&gt;, параметр указывает значение, которое записывается в битовое поле. В остальных случаях параметр должен быть равен битовой маске. &lt;span class=&quot;important&quot;&gt;Параметр может быть переменной&lt;/span&gt;.
&lt;br/&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR,  TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xAA&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;    &lt;span class=&quot;coMULTI&quot;&gt;/* Запись 0xAA в младший байт регистра
                                         TRISB    */&lt;/span&gt;
BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_INV, TRISB, &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xFFFF&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Инвертирование старшего байта
                                         регистра TRISB */&lt;/span&gt;
a &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;;
BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_SET, TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;, a&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* Установка битов в младшем байте
                                         TRISB по маске в переменной a */&lt;/span&gt;
b &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_RD, TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* Чтение значения младшего байта
                                        регистра TRISB в переменную b */&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;bfari&quot; id=&quot;bfari&quot;&gt;BFARI()&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Макрос обеспечивает атомарный доступ к битовому полю любой структуры или переменной &lt;span style='color:green; '&gt;по указателю&lt;/span&gt;. Битовое поле указывается в виде диапазона (младщий бит / старший бит). Переменная может находиться как в NEAR, так и в FAR DATA SPACE.
&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFARI&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;comm, pt, lower, upper, ...&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Параметры:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;comm&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;тип доступа:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_WR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 запись в битовое поле		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_RD&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 чтение битового поля		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_SET&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 установка битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_CLR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 сброс битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_INV&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 инвертирование битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
  
&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;pt&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;указатель на периферийный регистр или любую переменную. Макрос автоматически приводит указатель к типу &lt;code&gt;int*&lt;/code&gt;.&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;lower&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;младший бит поля структуры, от 0 до 15&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;upper&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;старший бит поля структуры, от 0 до 15, &lt;code&gt;upper &amp;gt;= lower&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;. . .&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;необязательный параметр, используется только если &lt;code&gt;comm = [BFA_WR, BFA_SET, BFA_CLR, BFA_INV]&lt;/code&gt;. Если &lt;code&gt;comm = BFA_RD&lt;/code&gt; - параметр не указывается. Если &lt;code&gt;comm = BFA_WR&lt;/code&gt;, параметр указывает значение, которое записывается в битовое поле. В остальных случаях параметр должен быть равен битовой маске. &lt;span class=&quot;important&quot;&gt;Параметр может быть переменной&lt;/span&gt;.
&lt;br/&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR,  &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xAA&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;    &lt;span class=&quot;coMULTI&quot;&gt;/* Запись 0xAA в младший байт регистра
                                          TRISB    */&lt;/span&gt;
BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_INV, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;TRISB, &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xFFFF&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Инвертирование старшего байта
                                         регистра TRISB */&lt;/span&gt;
a &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;;
BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_SET, &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;, a&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* Установка битов в младшем байте
                                          TRISB по маске в переменной a */&lt;/span&gt;
c &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;sy3&quot;&gt;&amp;amp;&lt;/span&gt;TRISD;
b &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; BFAR&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_RD, c, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;            &lt;span class=&quot;coMULTI&quot;&gt;/* Чтение значения младшего байта
                                          регистра TRISD в переменную b */&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;bfard&quot; id=&quot;bfard&quot;&gt;BFARD()&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;
&lt;hr /&gt;

&lt;p&gt;

&lt;br/&gt;
 
&lt;/p&gt;

&lt;p&gt;
Макрос обеспечивает атомарный доступ к битовому полю любой структуры или переменной, которая находится в любой области ОЗУ (NEAR или FAR). Битовое поле указывается в виде диапазона (младщий бит / старший бит).
&lt;/p&gt;

&lt;p&gt;

&lt;strong&gt;Вызов:&lt;/strong&gt;

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFARD&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;comm, val, lower, upper, ...&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;Параметры:&lt;/strong&gt;
&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;comm&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;тип доступа:
&lt;/p&gt;
&lt;table class = &quot;fpl&quot;&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_WR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 запись в битовое поле		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_RD&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 чтение битового поля		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_SET&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 установка битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_CLR&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 сброс битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;
 &lt;code&gt;BFA_INV&lt;/code&gt;		&lt;/td&gt;
		&lt;td&gt;
 инвертирование битов в битовом поле по маске		&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
  
&lt;p&gt;
&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;val&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;имя регистра, к которому осуществляется доступ, например, &lt;code&gt;PORTA&lt;/code&gt;, &lt;code&gt;TRISB&lt;/code&gt;, &lt;code&gt;CMCON&lt;/code&gt; и т.п. Может быть любой скалярной переменной программы.&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;lower&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;младший бит поля структуры, от 0 до 15&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;upper&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;старший бит поля структуры, от 0 до 15, &lt;code&gt;upper &amp;gt;= lower&lt;/code&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;span class='term'&gt; &lt;code&gt;. . .&lt;/code&gt;&lt;/span&gt;&lt;/dt&gt;
&lt;dd&gt;необязательный параметр, используется только если &lt;code&gt;comm = [BFA_WR, BFA_SET, BFA_CLR, BFA_INV]&lt;/code&gt;. Если &lt;code&gt;comm = BFA_RD&lt;/code&gt; - параметр не указывается. Если &lt;code&gt;comm = BFA_WR&lt;/code&gt;, параметр указывает значение, которое записывается в битовое поле. В остальных случаях параметр должен быть равен битовой маске. &lt;span class=&quot;important&quot;&gt;Параметр может быть переменной&lt;/span&gt;.
&lt;br/&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;&lt;strong&gt;Пример вызова:&lt;/strong&gt;  

&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFARD&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR,  qwer, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xAA&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;     &lt;span class=&quot;coMULTI&quot;&gt;/* Запись 0xAA в младший байт
                                          переменной qwer */&lt;/span&gt;
BFARD&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_INV, TRISB, &lt;span class=&quot;nu0&quot;&gt;8&lt;/span&gt;, &lt;span class=&quot;nu0&quot;&gt;15&lt;/span&gt;, &lt;span class=&quot;nu12&quot;&gt;0xFFFF&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;  &lt;span class=&quot;coMULTI&quot;&gt;/* Инвертирование старшего байта
                                         регистра TRISB */&lt;/span&gt;
a &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nu0&quot;&gt;2&lt;/span&gt;;
BFARD&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_SET, TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;, a&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* Установка битов в младшем байте
                                         TRISB по маске в переменной a */&lt;/span&gt;
b &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; BFARD&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_RD, TRISB, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;,  &lt;span class=&quot;nu0&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;       &lt;span class=&quot;coMULTI&quot;&gt;/* Чтение значения младшего байта
                                        регистра TRISB в переменную b */&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;br/&gt;
 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Описание&quot; [21230-35193] --&gt;
&lt;h3&gt;&lt;a name=&quot;пояснения&quot; id=&quot;пояснения&quot;&gt;Пояснения&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;проверка_параметров&quot; id=&quot;проверка_параметров&quot;&gt;Проверка параметров&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Приведенные выше макросы проверяют передаваемый параметр &lt;code&gt;comm&lt;/code&gt;, указывающий на метод доступа к полю структуры. Остальные параметры не проверяются. Для &lt;code&gt;comm&lt;/code&gt; определены следующие разрешенные значения:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define BFA_WR    0xAAAA        /* Запись в битовое поле                  */&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#define BFA_RD    0x5555        /* Чтение битового поля                   */&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#define BFA_IV    0x9999        /* Побитовое инвертирование битового поля */&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Контроль передачи параметров в макрос сделан интересным способом: в заголовочном файле объявлены уникальные для каждого параметра типы:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define __BFA_COMM_ERR(a)               __BFA_COMMAND_ERROR_##a&lt;/span&gt;
&lt;span class=&quot;co2&quot;&gt;#define __BFA_COMM_GET(a)               __BFA_COMM_ERR(a)&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw4&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; __BFA_COMM_GET&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw4&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; __BFA_COMM_GET&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_RD&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&lt;span class=&quot;kw4&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;kw4&quot;&gt;int&lt;/span&gt; __BFA_COMM_GET&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_IV&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
которые используются в макросах для объявления локальной переменной:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;__BFA_COMM_GET&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;comm&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; v &lt;span class=&quot;sy1&quot;&gt;=&lt;/span&gt; __VA_ARGS__&lt;span class=&quot;sy2&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
Если передаваемый в макрос параметр отличается от определенных &lt;code&gt;BFA_WR&lt;/code&gt;, &lt;code&gt;BFA_RD&lt;/code&gt; и &lt;code&gt;BFA_IV&lt;/code&gt;, то компилятор выдаст ошибку:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;source\appl\appl.c: In function 'main':
source\appl\appl.c:73: error: '__BFA_COMMAND_ERROR_0' undeclared (first use in this function)&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;h4&gt;&lt;a name=&quot;условный_оператор&quot; id=&quot;условный_оператор&quot;&gt;Условный оператор ? :&lt;/a&gt;&lt;/h4&gt;
&lt;div class=&quot;level4&quot;&gt;

&lt;p&gt;

Использование условного оператора &lt;code&gt;?:&lt;/code&gt; позволило реализовать с помощью одного макроса как выполнение операции, так и возврат значения. Если не вдаваться в детали реализации, все макросы выглядят следующим образом:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define BFAXX(comm, ...)&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;comm&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;sy1&quot;&gt;==&lt;/span&gt; BFA_WR&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;sy4&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;coMULTI&quot;&gt;/* ........ */&lt;/span&gt;
    &lt;span class=&quot;sy4&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span class=&quot;coMULTI&quot;&gt;/* BFA_RD */&lt;/span&gt;
         __BFA_STRUCT_VAL&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;reg_name&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span class=&quot;me1&quot;&gt;field_name&lt;/span&gt;;
      &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Если параметр &lt;code&gt;comm&lt;/code&gt; (тип доступа к структуре) равен &lt;code&gt;BFA_RD&lt;/code&gt;, то макрос генерирует следующее выражение:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;__BFA_STRUCT_VAL(reg_name).field_name;&lt;/pre&gt;
&lt;p&gt;
где
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#define __BFA_STRUCT_VAL(a)   a##bits&lt;/pre&gt;
&lt;p&gt;
Таким образом, написав
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;b = BFA(BFA_RD, IPC0, INT0IP);&lt;/pre&gt;
&lt;p&gt;
после работы препроцессора получим простое присваивание:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;b = IPC0bits.INT0IP;&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Пояснения&quot; [35194-38205] --&gt;
&lt;h3&gt;&lt;a name=&quot;примеры_использования&quot; id=&quot;примеры_использования&quot;&gt;Примеры использования&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

В оригинальной документации, которая поставляется с демонстрационной версией AVIX-RT приведено много примеров использования этих макросов. К сожалению, лицензионное соглашение запрещает публикацию документа третьим лицам. Однако никто не запрещает зарегистрироваться на сайте &lt;a href=&quot;http://www.avix-rt.com/&quot; class=&quot;urlextern&quot; title=&quot;http://www.avix-rt.com/&quot;  rel=&quot;nofollow&quot;&gt;http://www.avix-rt.com/&lt;/a&gt; и скачать AVIX-RT.
&lt;/p&gt;

&lt;p&gt;
Конечно, прямое использование макросов &lt;code&gt;BFA()&lt;/code&gt; и &lt;code&gt;BFAR()&lt;/code&gt; не слишком наглядно. Тем не менее это один из методов:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR, IPC0, INT0IP, &lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;    &lt;span class=&quot;coMULTI&quot;&gt;/* Запись в поле INT0IP регистра IPC0 константы 0 */&lt;/span&gt;
BFA&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;BFA_WR, IPC0, INT0IP, &lt;span class=&quot;nu0&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;    &lt;span class=&quot;coMULTI&quot;&gt;/* Запись в поле INT0IP регистра IPC0 константы 4 */&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Если регистр используется в вашем приложении только на запись, можно определить следующий макрос:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span class=&quot;co2&quot;&gt;#define LED(v)   BFA(BFA_WR, LATB, LATB0, (v))&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
и затем использовать уже его:
&lt;/p&gt;
&lt;pre class=&quot;cpp code cpp&quot; style=&quot;font-family:monospace;&quot;&gt;LED&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu0&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
LED&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;nu19&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
Если поле структуры используется как на запись, так и на чтение, можно определить следующий макрос с переменным количеством параметров:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#define TMR1_PS(a, ...)   BFA((a), T1CON, TCKPS, __VA_ARGS__)&lt;/pre&gt;
&lt;p&gt;
Использовать это макрос нужно так:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;TMR1_PS(BFA_WR, 0);
a = TMR1_PS(BFA_RD);&lt;/pre&gt;
&lt;p&gt;
Очень часто необходимо получить атомарный доступ к необъявленному полю структуры - например, установить определенное значение на нескольких выводах контроллера. Для этого можно использовать макрос &lt;code&gt;BFAR()&lt;/code&gt;:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;#define LCD_PORT(v)  BFAR(BFA_WR, LATE,  0, 3, (v))&lt;/pre&gt;
&lt;p&gt;
А дальше очевидно:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;LCD_PORT(0x02);
LCD_PORT(0x00);&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Примеры использования&quot; [38206-40601] --&gt;
&lt;h3&gt;&lt;a name=&quot;выводы&quot; id=&quot;выводы&quot;&gt;Выводы&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;

&lt;p&gt;&lt;div class=&quot;noteclassic&quot;&gt;Использование подобных макросов &lt;span class=&quot;important&quot;&gt;обязательно&lt;/span&gt; для всех, кто хочет писать быстрый и безопасный код для микроконтроллеров PIC24/dsPIC с использованием компилятора C30.

&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;p&gt;&lt;div class=&quot;noteimportant&quot;&gt;
Рассмотренный подход может быть реализован и для любой другой архитектуры и другого компилятора. Для этого необходимо чтобы:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; компилятор имел гибкий inline-ассемблера (например, как у &lt;a href=&quot;http://gcc.gnu.org/&quot; class=&quot;urlextern&quot; title=&quot;http://gcc.gnu.org/&quot;  rel=&quot;nofollow&quot;&gt;gcc&lt;/a&gt;)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; архитектура имела механизмы прямого доступа к памяти&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

Последнее означает, что должно выполняться одно из двух условий:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Набор инструкций должен включать в себя инструкцию &lt;code&gt;xor&lt;/code&gt; с прямым доступом к интересующей области памяти&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Архитектура должна иметь специальные механизмы прямого доступа. Примером может служить &lt;a href=&quot;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/Behcjiic.html&quot; class=&quot;urlextern&quot; title=&quot;http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337e/Behcjiic.html&quot;  rel=&quot;nofollow&quot;&gt;bit-band область&lt;/a&gt; у Cortex-M3 или регистры SET/CLR/INV для всей периферии у &lt;a href=&quot;http://www.microchip.com/pic32/&quot; class=&quot;urlextern&quot; title=&quot;http://www.microchip.com/pic32/&quot;  rel=&quot;nofollow&quot;&gt;PIC32&lt;/a&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;

&lt;/div&gt;&lt;/p&gt;
&lt;/p&gt;

&lt;p&gt;
К основным достоинствам макросов &lt;code&gt;BFA()&lt;/code&gt; и &lt;code&gt;BFAR()&lt;/code&gt; относится реализация &lt;span class=&quot;important&quot;&gt;атомарного доступа&lt;/span&gt; к разделяемым ресурсам. Конечно, это не означает, что в прерывании и в основном коде можно безболезненно шевелить одной и той же ногой контроллера. Но доступ к разным битам порта осуществляется безопасно. 
&lt;/p&gt;

&lt;p&gt;
При использовании макросов &lt;code&gt;BFA()&lt;/code&gt; и &lt;code&gt;BFAR()&lt;/code&gt; нет необходимости запрещать прерывания или реализовывать критическую секцию. Это позволяет детерминировать время входа в прерывание, уменьшить объем занимаемого кода и скорость выполнения операций.
&lt;/p&gt;

&lt;p&gt;
Более того при использовании макросов доступа к полям структуры уменьшается объем кода и время выполнение по сравнению с непосредственным доступом:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;75:                        IPC0bits.INT0IP = 4;
 00294  BFC0A4     mov.b 0x00a4,0x0000
 00296  B3CF81     mov.b #0xf8,0x0002
 00298  604001     and.b 0x0000,0x0002,0x0000
 0029A  A02400     bset 0x0000,#2
 0029C  B7E0A4     mov.b 0x0000,0x00a4
76:                        BFA(BFA_WR, IPC0, INT0IP, 4);
 0029E  800520     mov.w 0x00a4,0x0000
 002A0  A22000     btg 0x0000,#2
 002A2  600002     and.w 0x0000,0x0004,0x0000
 002A4  B6A0A4     xor.w 0x00a4&lt;/pre&gt;&lt;div class=&quot;plugin_uparrow&quot;&gt;
  &lt;a href=&quot;#&quot; title=&quot;Наверх&quot;&gt;
    &lt;img src=&quot;http://www.pic24.ru/lib/plugins/uparrow/images/blue_arrow.png&quot; alt=&quot;Наверх&quot;/&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;!-- SECTION &quot;Выводы&quot; [40602-] --&gt;</description>
    </item>
</rdf:RDF>
