Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Мартин Т. -> "Микроконтроллеры ARM7. Cемейство LPC2000 компании Philips Вводный курс" -> 75

Микроконтроллеры ARM7. Cемейство LPC2000 компании Philips Вводный курс - Мартин Т.

Мартин Т. Микроконтроллеры ARM7. Cемейство LPC2000 компании Philips Вводный курс — М.: Додэка 21, 2006. — 240 c.
ISBN 5-94120-104-4
Скачать (прямая ссылка): nicrokontrolleriarm7semeystvo2006.djvu
Предыдущая << 1 .. 69 70 71 72 73 74 < 75 > 76 77 78 79 80 81 .. 86 >> Следующая

10 SPI0 IRQ 00000000H 0 0
11 SPI1 IRQ 00000000H 0 0
12 PLL Lock PLOCK IRQ 00000000H 0 1
13 RTC IRQ 00000000H 0 0
14 External Interrupt 0 E.NTO IRQ 00000000H 0 0
16 External Interrupt 2 EINT2 IRQ 00000000H 0 0
Selected Interrupt: External Interrupt 1
P IntEnable Г Softlnt
Г" IntSelect F Rawlnt
VICVectAddr: (0x00000130 VICIntSeiect VlCSoftlnt: [OxOOOOOOOO VICIntEnable VlCSoWntClear: [ОЛООООООО“ VICIntEnCI
[ГЗ VICVectAddrO: |0х00бб01~30 ~
! 0x00000000 VICRawlntr: jOxOOOOSOOO VICIRQStatus: П
fOxOOOOOOOO VICFIQStatus: [ОХОШОООООГ
Все слоты модуля VIC
t Подробная информация о выделенном слоте
, Содержимое глобальных регистров контроллера
Рис. 5.54. Окно управления модулем VIC
При работе с симулятором воспользуйтесь счетчиком тактов, чтобы определить, сколько времени требуется микроконтроллеру для перехода к первой строке подпрограммы обработки прерывания. Этот счетчик находится в окне регистров. 205
Глава 5. Учебное пособие по средствам разработки компании Keil
Упражнение 13. Невекторное прерывание
В этом упражнении мы будем использовать векторный контроллер для получения самой медленной реакции на прерывание — обработки запроса как невекторного прерывания. Для генерации прерывания мы будем использовать внешнее прерывание EINT1. При возникновении этого события модуль VIC будет вызывать переход процессора к подпрограмме обработки прерывания общего назначения. После входа в эту подпрограмму необходимо определить источник прерывания, выполнить необходимые действия, а затем корректно выйти из нее и возобновить нормальное выполнение программы.
Откройте проект, расположенный в папке «C:\work\EX13-InterruptNonVectored». В файле «Startup.s» добавьте соответствующий код для вектора прерывания IRQ:
LDR PC,[PC, #-0x0FF0]
В файле «шаіп.с» сконфигурируйте блок управления выводами, чтобы разрешить использование вывода РО. 14 в качестве входа внешнего прерывания:
PINSEL0 - 0x20000000;
Поместите адрес подпрограммы NonVectoredlRQO в регистр адреса вектора по умолчанию. Напоминаю, что на языке Си это делается следующим образом:
VICDefVectAddr = (unsigned)<имя подпрограммы-обработчика>;
Разрешите в модуле VIC канал внешнего прерывания:
VICIntEnable = 0x8000;
В подпрограмме обработки прерывания проконтролируйте регистр состояния IRQ для определения источника прерывания:
if(VICIRQStatus&0x0000801000)
В конце подпрограммы обработки прерывания сбросьте флаг в регистре EINT0 и выполните фиктивную запись в требуемый регистр модуля VIC для сброса источника прерывания:
IOSETl = 0x00FF0000;
EXTINT = 0x00000002;
Скомпилируйте программу и запустите отладчик.
Выполняя программу, удостоверьтесь, что вход в обработчик прерывания осуществляется корректно и что он вызывается только один раз при каждом нажатии на кнопку EINT1.
Если вы используете симулятор, откройте окно управления 0-м портом ввода/вывода. Прерывание можно будет сгенерировать сбросом вывода Р0.14. Или же откройте окно инструментария и воспользуйтесь кнопкой Generate EINT1.
При работе с симулятором воспользуйтесь счетчиком тактов, чтобы определить, сколько времени требуется микроконтроллеру для перехода к первой строке 206 подпрограммы обработки прерывания.
Использование аппаратного JTAG-отладчика ULINK
Упражнение 14. Вложенные прерывания
В этом упражнении мы будем работать с двумя источниками прерываний — таймером 0 и внешним прерыванием. На время выполнения каждого из прерываний на определенные выводы микроконтроллера выдается напряжение НИЗКОГО уровня. При нормальной работе оба прерывания во время своего выполнения блокировали бы друг друга. Однако, вставив в подпрограмму обработки внешнего прерывания соответствующие макросы, мы можем сделать так, чтобы прерывание от таймера прерывало обработку внешнего прерывания, т.е. гарантированно генерировалось каждые 10 мс. Это можно наблюдать визуально на светодиодах платы МСВ2100 или в окне логического анализатора симулятора.
Откройте проект, расположенный в папке «C:\work\EX14-Nested Interrupt».
В файле «Intrpt.c» допишите два макроса IENABLE и IDISABLE:
#define IENABLE
__asm { MRS LR, SPSR }
__asm { STMFD SP!, {LR} }
__asm { MSR CPSR_c, #0xlF }
__asm { STMFD SP!, {LR} }
// Вход во вложенное прерывание // Копируем SPSR_irq в LR // Сохраняем SPSR_irq // Разрешаем IRQ (режим System) // Сохраняем LR
#define IDISABLE
__asm { LDMFD SP!, {LR}
__asm { MSR CPSR_c, #0x92
__asm { LDMFD SP!, {LR}
__asm { MSR SPSR_cxsf, LR
}
// Выход из вложенного прерывания // Восстанавливаем LR // Запрещаем IRQ (режим IRQ)
// Восстанавливаем SPSR_irq в LR // Копируем LR в SPSR_irq
Добавьте оба макроса в подпрограмму обработки внешнего прерывания:
void eintl_srv (void) ______irq
{
int і;
EXTINT = 2;
IENABLE; delay ();
++intrp_count;
IDISABLE;
VICVectAddr = 0;
}
// Сбросим флаг прерывания EINTl // Разрешаем вложенные прерывания // Ждем
// Инкрементируем счетчик // Запрещаем вложение прерываний // Подтверждаем прерывание
Скомпилируйте программу и загрузите ее в отладчик.
Если вы используете плату МСВ2100, запустите программу на выполнение в реальном времени. Периодически мигающий светодиод управляется прерыванием от таймера. Если вы нажмете кнопку INT1, включится второй светодиод, который управляется внешним прерыванием. Тем не менее, светодиод таймера продолжит мигать, поскольку прерывание не заблокировано.
Предыдущая << 1 .. 69 70 71 72 73 74 < 75 > 76 77 78 79 80 81 .. 86 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.