Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
231
Добавлен:
04.01.2020
Размер:
5.37 Mб
Скачать

С адреса 0х0800 начинается сектор ОЗУ общего назначения, максимальный объем которого составляет 30 Кбайт (в разных МК только часть этого сектора может быть реализована физически). Верхнюю половину ОЗУ занимает область, в которую отображается часть программной памяти при использовании механизма PSV.

В семействе dsPIC33F реализовано два адресных генератора AGU (от англ. Address Generator Units), что позволяет инструкциям DSP-ядра делать две выборки из ОЗУ за один командный такт. Это объясняет разделение области ОЗУ общего назначения на два сектора Х и Y (рисунок 3.17). Однако это разделение не является сегментированием или ограничением – для всех инструкций CPU- ядра (MСU и DSP) сектор ОЗУ общего назначения линеен. Границы адресного пространства секторов X и Y зависят от конкретного устройства. Режим модульной адресации, используемой в DSP инструкциях поддерживают X и Y сектора ОЗУ. Адресный генератор Х поддерживает также бит-реверсивную адресацию для DSP инструкций, что значительно упрощает реализацию алгоритмов быстрого преобразования Фурье FFT (от англ. Fast Fourier Transform).

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

3.4.7 Система тактирования микроконтроллеров семейства dsPIC33F

МК состоит из множества различных модулей, работу которых необходимо синхронизировать и тактировать. Для этих целей служит тактовый генератор, который непрерывно формирует импульсы заданной частоты. Главной характеристикой генератора является частота.

Семейство dsPIC33F имеют переработанную схему конвейера, в результате команда выполняется за два тактовых периода генератора. Таким образом, частота выполнения команд соответствует частоте FCY и по умолчанию FCY = FOSC/2 (рисунок 3.22). Максимальная производительность dsPIC33F составляет 40 MIPS при тактовой частоте 80 МГц.

МК семейства dsPIC33F имеет возможность тактирования от одного из двух внутренних и двух внешних источников, позволяя производить их настройку и переключение. Внутренние генераторы позволяют уменьшить количество деталей и размеры платы и применяются в тех случаях, когда не требуется высокая

231

точность их работы. Внешние генераторы применяются при необходимости точной синхронизации нескольких устройств в схеме.

Таким образом, схема тактирования имеет четыре источника:

-первичный кварцевый генератор с частотой 4…10 МГц (Primary Oscillator);

-вторичный кварцевый генератор с частотой 32 КГц (Secondary Oscillator);

-внутренний высокочастотный RC-генератор с частотой 7,37 МГц (FRC Oscillator);

-внутренний низкочастотный RC-генератор с частотой 512 КГц (LPRC Oscillator);

Рисунок 3.22 – Структурная схема системы тактирования МК dsPIC33F

232

Для первичного генератора кварцевый резонатор подключается к выводам OSC0, OSC1, для вторичного – к выводам SOSC0 и SOSC1.

Первичный генератор может тактировать схему умножения частоты с ФАПЧ (PLL), коэффициент умножения является дробным и настраивается программно. PLL – умножитель не может быть подключен ко вторичному кварцевому генератору и внутреннему низкочастотному RC-генератору, его можно отключить программно. МК может тактироваться от внешнего источника частоты (0…40 МГц) через вывод OSC1. Система тактирования содержит детекторы стабильности частоты кварцевых генераторов, возможно автоматическое подключение на вторичный источник тактирования при сбое первичного. Сигнал тактирования на ядро (FCY) подается через программно управляемый делитель. Это позволяет уменьшить частоту тактировании ядра (что уменьшает потребление энергии) при сохранении частоты тактирования периферии, что важно, например, для быстрых коммуникационных интерфейсов SPI, UART и т. п.

Частота внутреннего генератора может программно корректироваться в пределах +/– 12 % с шагом в десятые доли процента.

Для работы с системой тактирования предназначены ниже перечисленные регистры:

-OSCCON – регистр управления генератором (выбор источника тактирования);

-FOSCSEL – регистр выбора генератора;

-FOSC – регистр конфигурации генератора;

-CLKDIV–регистр делителя частоты;

-OSCTUN–регистр для настройки генератора FRC.

Регистры FOSCSEL и FOSC относятся к регистрам битов конфигурации.

3.4.8 Биты конфигурации микроконтроллеров семейства dsPIC33F

Микроконтроллеры семейства dsPIC33F имеют биты конфигурации, задающие такие параметры работы МК, как источник тактирования, параметры защиты от нестабильности источника питания, параметры защиты кода программы и др. Такие биты программируются и устанавливаются единожды перед записью прошивки микроконтроллера и не могут быть изменены программно.

233

Установка битов конфигурации производится либо специальным инструментом среды программирования MPLAB IDE, либо специальной директивой в коде программы перед основной функцией программы.

Биты конфигурации микроконтроллера семейства dsPIC33F объединены в пять регистров:

-FOSCSEL – регистр выбора генератора;

-FOSC – регистр конфигурации тактового генератора;

-FWDT – регистр конфигурации сторожевого таймера;

-FBORPOR – регистр конфигурации контроля напряжения питания;

-FGS – регистр конфигурации сегмента кода.

3.4.9Система прерываний микроконтроллеров dsPIC33F

Прерывание – сигнал, сообщающий о наступлении какого-либо события. При этом приостанавливается выполнение текущей последовательности команд, и управление предается контроллеру прерываний Interrupt Controller (рисунок 3.17), который реагирует на событие и обслуживает его, после чего возвращает управление прерванной программе.

Семейство МК dsPIC33F имеет 118 векторов прерываний, часть из них зарезервирована. Система прерываний приоритетная. Наиболее часто используемыми источниками прерываний являются:

-таймеры (совпадение, переполнение);

-линии портов (появление сигнала требуемого уровня, изменение величины сигнала);

-модули приемо-передатчиков (прием данных, отправка данных);

-модуль АЦП (завершение преобразования).

Каждый источник прерывания имеет собственный вектор в таблице, расположенной в программной памяти. Вектор прерывания передается из шины данных программы в программный счетчик PC через мультиплексор, разрядностью 24 бит. Вектор прерывания представляет собой 24-разрядное слово программы, в котором должна быть расположена команда перехода на подпрограмму обслуживания прерывания.

Таблица векторов прерывания IVT (от англ. Interrupt Vector Table) и таблица альтернативных векторов прерывания AIVT (от англ. Alternate Interrupt Vector Table) расположены близко к началу программной памяти (начальные адреса 0х000004 и 0х000104 соответственно – рисунок 3.20).

234

Контроллер прерываний является ответственным за обработку исключений и прерываний, до их передачи ядру МК. Для обслуживания приоритета и разрешения прерывания используются регистры специального назначения IFSх, IECх, IPCх (где х = 0, 1, 2). Глобальное управление функциями прерывания производится с помощью регистров INTCON1<15:0> и INTCON2<15:0>. Регистр INTCON1 содержит флаги управления и состояния для исключений ядра МК. Регистр INTCON2 управляет поведением сигналов запроса внешних прерываний и используется альтернативной таблицей векторов. Текущий уровень приоритета ядра МК IPL<3:0> представлен в бите 3 IPL<3> регистра конфигурации ядра CORCON и битах 7…5 IPL<2:0> регистра статуса SR.

Биты флага прерывания устанавливаются когда выполняется условие прерывания, не обращая внимание на состояние соответствующих битов разрешения. Программа пользователя должна гарантировать очистку флагов прерывания до разрешения прерывания. Если бит 15 в регистре INTCON1 установлен, то не допускается вложенность прерываний. Таким образом, если в настоящее время обслуживается прерывание, то обработка нового прерывания не допускается, даже если новые прерывания имеют более высокий приоритет, чем обслуживаемое в настоящий момент.

Естественный порядок приоритетов определен позицией запроса прерывания в таблице вектора. Пользователь может изменить естественный приоритет, назначив источнику прерывания искусственный приоритет. При возникновении прерывания в программный счетчик записывается адрес вектора прерывания, а приоритет ядра МК становится равным приоритету возникшего прерывания. Это позволяет организовать гибкую систему вложенных прерываний. Возможно назначения приоритета каждому прерыванию, количество возможных уровней приоритета равно восьми. Ядро МК может иметь приоритет от 0 до 15, уровни 8…15 зарезервированы для аппаратных исключений.

Исключения – это определенный вид немаскируемых прерываний типа

TRAP, которые генерирует ядро МК. Условно исключения можно разделить на

программные и аппаратные.

К программным относятся исключения, которые позволяют продолжить выполнение работы после программного сброса флага исключения. Программные исключения имеют приоритет от 8 до 12. К программным исключениям относятся:

- исключения АЛУ, которое генерируется ядром МК, например, при делении на 0;

235

- ошибка стека.

При возникновении аппаратного исключения программа не может продолжить работу до тех пор, пока ошибка, которая вызвала исключение, не будет устранена – флаг аппаратного исключения не может быть сброшен программно.

Аппаратные исключения имеют приоритет от 13 до 15. К аппаратным исключениям относятся:

-ошибка адреса (не выровненный доступ к памяти программ или памяти данных, попытка выборки команд из области векторов);

-ошибка тактового генератора (не стабильная работа умножителя PLL, отсутствие внешней тактовой частоты).

Система прерываний имеет фиксированное время реакции – пять командных тактов. Возврат из прерывания осуществляется за три командных такта.

3.4.10 Система сброса микроконтроллеров семейства dsPIC33F

Система сброса всех 16-разрядных МК Microchip идентична, за исключением того, что в трехвольтовом семействе МК dsPIC33F отсутствует сброс по снижению напряжения питания BOR (от англ. Brown Out Reset). Это связано с тем, что МК семейства dsPIC33F обеспечивают максимальную производительность во всем диапазоне питающих напряжений (от 3 до 3,6 В), поэтому необходимость детектора BOR отсутствует. Источник сброса BOR заменен на сброс по снижению напряжения на выходе встроенного стабилизатора питания ядра.

Все семейства 16-разрядных МК Microchip имеют следующие источники сброса:

-программный сброс – инструкция RESET;

-внешний сброс по входу MCLR;

-сброс по переполнению сторожевого таймера WDT;

-сброс по включению напряжения питания;

-сброс при конфликте исключений;

-сброс при неверном коде инструкции (например, если программный счетчик указывает на область констант);

-сброс при использовании неинициализированных рабочих регистров W;

-сброс при неверном формате конфигурационного слова.

При любом виде сброса все служебные регистры устанавливаются в определенное состояние, одинаковое для всех видов сброса, за исключением регистра

236

RCON (в котором находятся флаги системы сброса) и регистра управления системой тактирования OSCCON.

3.4.11 Сторожевой таймер микроконтроллеров семейства dsPIC33F

Сторожевой таймер WDT (от англ.Watchdog Timer), как правило используется для сброса МК в случае нарушения нормальной работы системы – сброс происходит при переполнении WDT (при нормальной работе системы WDT периодически сбрасывается). Сторожевой таймер тактируется от встроенного RC-генератора, поэтому работа WDT не нарушается даже в случае остановки всех источников тактирования.

Сторожевой таймер имеет предделитель и постделитель, позволяющие установить период таймера от 1 мс до 131 секунды. Работа таймера может быть разрешена программно.

3.4.12 Энергосберегающие режимы работы микроконтроллеров семейства dsPIC33F

Все 16-разрядные микроконтроллеры Microchip имеют два основных энергосберегающих режима:

-«спящий» режим SLEEP;

-режим простоя IDLE.

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

В режиме IDLE прекращается выполнение программы, но система тактирования и периферийные модули продолжают нормальное функционирование. Все периферийные модули имеют бит разрешения работы в режиме IDLE – возможно дополнительное снижение потребления путем отключения неиспользуемой периферии. Вход в режим осуществляется программно, выход – при

237

Vcap

возникновении любого немаскируемого прерывания, сбросе МК или переполнении WDT.

МК семейства dsPIC33F имеют дополнительные функции, позволяющие значительно снизить энергопотребление. Это режим DOZE и возможность полного отключения периферийных модулей.

Суть режима DOZE состоит в возможности уменьшения тактовой частоты, подаваемой на ядро МК, при неизменной частоте тактирования периферии. Делитель блока DOZE (рисунок 3.22) имеет коэффициенты деления от 1 до 1/128, что позволяет использовать полную пропускную способность коммуникационных интерфейсов при относительно низком общем потреблении кристалла.

3.4.13 Параллельные порты ввода/вывода микроконтроллеров семейства dsPIC33F

Все выводы микроконтроллера (кроме выводов питания Vdd, Vss, AVdd, AVss, и вывода сброса MCLR) могут использоваться как периферийными модулями, так и параллельными портами ввода/вывода. Все вводные линии портов имеют триггер Шмидта по входу для исключения влияния электромагнитных

помех и шумов.

Линии ввода/вывода МК разделены на три порта: RA, RB, и RC. Подавляющее большинство линий ввода/вывода всех портов имеют дополнительные функции и могут использоваться различными периферийными модулями МК. Структурная схема линии порта приведена на рисунке 3.23.

Мультиплексор (Output Multiplexer) выбирает, каким образом функционирует линия порта (в качестве части периферийного модуля, либо в качестве линии параллельного порта ввода/вывода). Таким образом, перед использованием таких линий в качестве линий порта ввода/вывода необходимо предварительно отключить соответствующие периферийные устройства. Например, при использовании порта RA2 как линии ввода, необходимо отключить дополнительную функцию порта RA2 (выход тактирующего сигнала внутреннего генератора) соответствующей директивой программы.

Для работы с портами каждый из них имеет три специальных регистра:

- TRISx – регистр направления данных (где х = А, В, С), который задает каким образом используется линия порта (как вход либо как выход). При установке соответствующего бита регистра-защелки TRIS Latch (рисунок 3.23) в 1 линия порта будет сконфигурирована как вход;

238

Рисунок 3.23 – Структурная схема линии параллельного порта, объединенной с выводами периферийных функций

-LATx – регистр выводов порта. Установка соответствующего бита данного регистра в 1 позволяет установить высокий уровень сигнала на выходе линии порта, при установке соответствующего бита в 0 – низкий уровень сигнала. Для того, чтобы установка бита регистра LATx (регистр-защелка Data Latch на рисунке 3.23) приводила к соответствующему изменению состояния линии вывода порта, необходимо эту линию предварительно сконфигурировать как выход установкой требуемого бита в регистре TRISx;

-PORTx – регистр состояния порта. Чтение соответствующего бита из данного регистра позволяет получить состояние сигнала (высокий либо низкий уровень) на входе линии порта. Чтобы чтение бита регистра PORTx (регистрзащелка Data Latch на рисунке 3.23) отображало действительное состояние линии ввода порта, необходимо эту линию предварительно сконфигурировать как вход установкой требуемого бита в регистре TRISx.

239

Все контакты ввода/вывода (I/O Pin) после сброса МК определяются как входы.

3.4.14 Модуль таймера микроконтроллеров семейства dsPIC33F

Таймеры-счетчики предназначены для подсчета внешних событий, для получения программно-управляемых временных задержек и выполнения времязадающих функций МК.

МК семейства dsPIC33F имеют несколько 16-разрядных таймеров. Таймеры имеют обозначения Timer1, Timer2, Timer3 и т. д. С небольшими исключениями, все 16-разрядные таймеры имеют одинаковую функциональность и разделены на три типа:

-таймер типа А (Timer1);

-таймер типа В (Timer2, Timer4, Timer6, Timer8);

-таймер типа С (Timer3, Timer5, Timer7, Timer9).

Таймеры типов В и С могут быть объединены для формирования 32разрядного таймера.

Каждый из таймеров настраивается следующими регистрами, доступными для чтения и записи:

-TMRx – регистр счета (где х – номер таймера);

-PRx – регистр периода;

-TxCON – регистр конфигурации.

Также с каждым таймером ассоциированы следующие биты в регистрах управления прерываниями:

-TxIE – бит разрешения прерывания (регистр IESO);

-TxIF – бит статуса прерывания (регистр IFSO);

-TxIP <2:0> – биты установки уровня приоритета прерывания (регистр IPCO).

Структурная схема модуля Timer1 приведена на рисунке 3.24.

Модуль Timer1 является 16-разрядным таймером, который может служить как счетчик для часов реального времени или работать как интервальный тай- мер-счетчик.

16-разрядный Timer1 имеет следующие режимы работы:

-16-разрядный таймер;

-16-разрядный синхронный счетчик;

-16-разрядный асинхронный счетчик.

240