Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорная техника Сторожок / MPLAB_C30_Руководство пользователя.pdf
Скачиваний:
161
Добавлен:
20.02.2016
Размер:
1.26 Mб
Скачать

Глава 6. Дополнительные типы указателей Си

управление компилятора регистром PSVPAG для ISR. Это необходимо для доступа к любым постоянным данным в пространстве auto_psv или любым строковым литералам или константам, когда выбрана опция по умолчанию -mconst-in-code. Создавая программу обслуживания прерывания, лучше всего определить, необходимо ли обеспечение установки по умолчанию для регистра PSVPAG.

Это достигается использованием следующего атрибута в определении функции обслуживания прерывания:

auto_psv — компилятор установит регистр PSVPAG в нужное состояние для доступа к пространству auto_psv, гарантируя, что он будет восстановлен при

выходе из ISR

.

 

A

no_auto_psv — компилятор не будет устанавливать регистр PSVPAG

Например:

Wilson

 

void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void) { IFS0bits.T1IF = 0;

}

Данный код (который не обеспечен атрибутом auto_psv), может не выполниться правильно, если не будет перекомпилирован. При перекомпиляции, если никаких указаний не сделано, компилятор выдаст предупреждение и выберет модель auto_psv.

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

Заметьте, что boot или secure ISR будут использовать разные установки регистра PSVPAG для своих постоянных данных.

6.3.PMP указатели

НекоторыеTranslatedустройства содержат периферийное оборудование параллельного

мастер порта (PMP), который допускает непосредственное соединение с различными запоминающими и не только устройствами. Доступ к периферии управлялся через выбор периферийных устройств. Подробную информацию об этом периферийном устройстве можно найти в руководстве по семейству микроконтроллеров либо в справочных данных конкретного устройства.

Управление указателями PMP подобно управлению указателями PSV, описанному в предшествующем разделе. Эти указатели облегчают чтение и запись данных с использованием PMP.

Периферия, в зависимости от типа и марки подключенного устройства памяти, может потребовать существенного объема конфигурирования. Это конфигурирование не производится автоматически компилятором.

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

Чтобы использовать эту возможность, необходимы:

Инициализация PMP — определение функции инициализации: void __init_PMP(void)

Объявление нового пространства памяти

Определение переменных в пространстве PMP

6.3.1. Инициализация PMP

Периферийное устройство PMP должно быть инициализировано прежде, чем может быть правильно обработан любой доступ. Обратитесь к соответствующей

© 2008 Microchip Technology Inc.

DS51284H(ru) стр. 6-3

16-битовый компилятор Си. Руководство

документации на устройство, которое вы подключаете, и к инструкции по используемому вами 16-битовому микроконтроллеру.

При использовании PMP инструментальная среда будет вызывать функцию void __init_PMP(void) во время инициализации периода исполнения Cи. Если используется модифицированный пользователем процесс инициализации, убедитесь, что эта функция в нем вызвана.

Эта функция должна сделать необходимые установки в регистрах PMMODE и PMCON.

В частности:

.

 

Периферийное устройство не должно быть конфигурировано для генерации

прерываний:

A

 

PMMODEbits.IRQM = 0

Wilson

 

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

PMMODEbits.INCM = 0

Компилятор изменит эту установку в течение периода исполнения как потребуется.

Периферийное устройство должно быть инициализировано в 16-битовом режиме:

PMMODEbits.MODE16 = 1

Компилятор изменит эту установку в течение периода исполнения как потребуется.

Периферийное устройство должно быть сконфигурировано для работы в одном из режимов МАСТЕРА:

PMMODEbits.MODE = 2 или PMMODEbits.MODE = 3

Установите биты ожидания PMMODEbits.WAITB, PMMODEbits.WAITM, и

PMMODEbits.WAITE как требуется для подключенного устройства.

Регистр PMCON должен быть сконфигурирован подходящим образом, чтобы

функциональные биты выбора кристалла PMCONbits.CSF соответствовали информации, переданной компилятору при определении пространства памяти.by

Например,Translatedмогло бы быть: void init PMP(void) {

PMMODEbits.IRQM = 0;

PMMODEbits.INCM = 0;

PMMODEbits.MODE16 = 1;

PMMODEbits.MODE = 3;

/* далее следует специфическое для устройства конфигурирование PMMODE и PMCCON */

}

6.3.2. Объявление нового пространства памяти

Инструментарий компилятора требует информации о каждой дополнительной памяти, подключаемой через PMP. Для того, чтобы компоновщик 16-битового устройства был способен правильно назначать память, должна быть предусмотрена информация о размере доступной памяти и количестве битов выбора кристалла.

В Главе 2. «Отличия 16-битового компилятора от ANSI» было введено новое пространство памяти pmp. Этот атрибут служит двум целям: объявлению расширенного пространства памяти и назначению внешней памяти для декларации переменной Си (этому посвящен следующий подраздел).

При объявлении расширенной памяти требуется задать ее размер. Вы можете дополнительно назначить памяти отдельный вывод выборки кристалла; если ничего не будет назначено, предполагается, что выбор кристалла не используется. Эти декларации памяти выглядят похожим на обычные внешние декларации Cи:

extern int external_PMP_memory __attribute__((space(pmp(size(1024),cs(0)))));

DS51284H(ru) стр. 6-4

© 2008 Microchip Technology Inc.

Соседние файлы в папке Микропроцессорная техника Сторожок