Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Микроконтроллеры PIC фирмы Microchip для начинающих выпуск №18


РАССЫЛКА Микроконтроллеры PIC фирмы Microchip для начинающих
Ведущий: Алексей (pont_a@mail.ru)


Доброго времени суток, дамы и господа!!

Сегодня продолжаем рассматривать систему прерываний  микроконтроллеров серии PIC18 на базе микроконтроллера PIC18F452! Рассмотрим регистры управления прерываниями периферийных устройств!
Открываем в datasheet пункты 8.2 – 8.4. В них описаны эти регистры. Как видим, они  сгруппированы в две тройки регистров: PIE1, PIR1, IPR1 и PIE2, PIR2, IPR2. И расположение битов управления прерыванием периферийного модуля в этих тройках одинаково. Это сделано для того, чтобы нам было удобно работать с периферийными прерываниями по маске. Если у нас отключен приоритет прерываний, то, чтобы вызывался обработчик прерываний, нам необходимо в регистре INTCON1  выставить бит PEIE и GIE и разрешить нужные прерывания. Если выставлен приоритет, то, чтобы вызвать обработчик прерываний с этим приоритетом, достаточно установить бит разрешения прерывания, соответствующего установленному приоритету в регистре INTCON1.

Ниже, в примерах, мы рассмотрим инициализацию системы прерываний, как с включенным приоритетом, так и без него.
Теперь ознакомимся с назначением битов данных регистров. Ниже, в таблицах, будут объединены, биты управления прерываниями периферийных устройств, которые расположены в регистрах PIR1, PIE1, IPR1 и PIR2, PIE2, IPR2.  

  • биты формата ххх располагаются в регистрах IPR1 и IPR2, они отвечают за приоритет соответствующих прерываний: 1 – высокий приоритет, 0 – низкий.
  • биты формата хххIF располагаются в регистрах PIR1 и PIR2. Это флаги прерываний. Они сигнализируют нам, какое из периферийных прерываний произошло. Если этот бит в единице, значит, прерывание произошло, 0 – прерывания не было. Выставляются микроконтроллером автоматически, при выполнении условия возникновения прерывания.
  • биты формата хххIE располагаются в регистрах PIE1 и PIE2. Это биты разрешения прерываний на каждый конкретный периферийный модуль. Если бит, установлен в единицу, то прерывание от  соответствующего модуля разрешено, 0 – нет.  

Теперь рассмотрим назначение битов каждой из групп регистров:
Первая группа PIE1, PIR1, IRP1:


№ бита

Название

Описание

7

PSPIE
PSPIF
PSPIP

Биты управления системой прерывания параллельного slave-порта. Флаг прерывания должен очищаться программно.

6

ADIE
ADIF
ADIP

Биты управления системой прерывания аналого-цифрового преобразователя (АЦП). Флаг прерывания должен очищаться программно.

5

RCIE
RCIF
RCIP

Биты управления системой прерывания приемника UART. Флаг прерывания очищается автоматически, после чтения аппаратного приемного буфера UART (RCREG).

4

TXIE
TXIF
TXIP

Биты управления системой прерывания передатчика UART. Флаг прерывания очищается автоматически, после записи в аппаратный буфер UART на передачу(TXREG) очередного байта.

3

SSPIE   SSPIF    SSPIP

Биты управления системой прерывания модуля SSP (I2C, SPI). Флаг прерывания должен очищаться программно.

2

ССP1IE
ССP1IF
ССP1IP

Биты управления системой прерывания модуля  захвата/сравнения ССP1. Флаг прерывания должен очищаться программно.

1

TMR2IE
TMR2IF
TMR2IP

Биты управления системой прерывания таймера 2. Флаг прерывания должен очищаться программно.

0

TMR1IE
TMR1IF
TMR1IP

Биты управления системой прерывания таймера 1. Флаг прерывания должен очищаться программно.

Вторая группа PIE2, PIR2, IRP2:


№ бита

Название

Описание

7-5

-

не используются

4

EEIE
EEIF
EEIP

Биты управлением системой прерывания устройства записи во FLASH или EEPROM – память. Флаг прерывания должен очищаться программно. 

3

BCLIE BCLIF BCLIP

Биты управления системой прерывания устройства, отслеживающего коллизию мультимастерного обмена шины I2C. Флаг прерывания должен очищаться программно. 

2

LVDIE LVDIF LVDIP

Биты управления системой прерывания устройства, отслеживающего понижения питания микроконтроллера ниже заданного. Флаг прерывания должен очищаться программно. 

1

TMR3IE
TMR3IF
TMR3IP

Биты управления системой прерывания таймера 3. Флаг прерывания должен очищаться программно.

0

ССP2IE
ССP2IF
ССP2IP

Биты управления системой прерывания модуля  захвата/сравнения ССP2. Флаг прерывания должен очищаться программно.

А теперь рассмотрим ряд примеров!
Инициализация системы прерываний с разрешенными приоритетами.
            BSF                RCON, IPEN, ab     ; разрешаем приоритетные прерывания
            CLRF             INTCON, ab             ; запрещаем все прерывания
            CLRF             INTCON2, ab
            CLRF             INTCON3, ab
            CLRF            IRP1, ab                    ;  все прерывания с низким приоритетом
            CLRF            IRP2, ab                    ;
            CLRF            PIR1, ab                    ;  сбрасываем флаги прерываний
            CLRF            PIR2, ab                    ;
            BSF                IRP1, TMR1IP, ab   ; задаем высокий приоритет прерывания таймера 1
            BSF                PIE1, TMR1IE, ab   ; разрешаем прерывание от таймера 1
            BSF                PIE1, TMR2IE, ab   ; разрешаем прерывание от таймера 2
            BSF                INTCON, GIEH, ab ; разрешаем все высокоприоритетные прерывания
            BSF                INTCON, GIEL, ab ; разрешаем все низкоприоритетные прерывания.

Таким образом, если будет выставлен бит GIEH,  то у нас будет разрешено прерывание только от таймера 1. И будет вызываться обработчик, расположенный по адресу 0х08.        
Как видим, в примере мы еще разрешили прерывание от таймера 2, но оно у нас с низким приоритетом, поэтому, чтобы это прерывание отрабатывалось, необходимо разрешить все низкоприоритетные прерывания установкой бита GIEL. После установки этого бита будет еще вызываться и обработчик низкоприоритетных прерываний, расположенный по адресу 0х18. Соответственно, выполнять прерывания от таймера 1 необходимо будет в обработчике, расположенном по вектору 0х08, а от таймера 2 – по вектору 0х18.
Инициализация системы прерываний без приоритетов.
            F                RCON, IPEN, ab     ; запрещаем приоритеты
            CLRF             INTCON, ab             ; запрещаем все прерывания
            CLRF             INTCON2, ab
            CLRF             INTCON3, ab
            CLRF            PIR1, ab                    ;  сбрасываем флаги прерываний
            CLRF            PIR2, ab                    ;
            BSF                PIE1, TMR1IE, ab   ; разрешаем прерывание от таймера 1
            BSF                PIE1, TMR2IE, ab   ; разрешаем прерывание от таймера 2
            BSF                INTCON, PEIE, ab ; разрешаем периферийные прерывания
            BSF                INTCON, GIE, ab    ; разрешаем все прерывания.
Все прерывания буду выполняться одним обработчиком, расположенным по вектору 0х08. Флаг GIE разрешает все прерывания, а флаг PEIE только прерывания, разрешенные регистрами PIE1, PIE2. Значения битов приоритета игнорируются!

В следующем выпуске напишем программу мигания светодиодом только уже с использованием системы прерываний микроконтроллера PIC18F452!
Внимание! Форум, располагавшийся на сайте http://microchip.ru,  по микроконтроллерам PIC переехал на новый адрес http://microchip.su.

Полный архив рассылки Вы можете прочитать на нашем сайте!  При любом опубликовании текстов данной рассылки ссылка на сайт http://www.2aplusa.ru обязательна!

Желаю Вам удачи! До скорой встречи!


С уважением, Алексей pont_a@mail.ru
Cайт разработчиков 2AplusA http://2aplusa.ru


В избранное