27.1. Добавление программы обработки прерывания
В этом разделе будет рассмотрено, как простым способом программно симулировать генерацию прерывания. Программа обработки прерывания будет читать значения из регистра приема UART UARTRBRTHR (в заголовочных
файлах —_UARTRBRTHR), а затем выводить эти значения для просмотра.
Основная программа разрешает прерывания и в ходе своего выполнения начинает выводить в окне Terminal I/O для просмотра периоды в виде точек (.), иллюстрирующие выполнение основного цикла (так называемого приоритетного процесса) в ожидании прерываний.
27.1.1. Текст программы обработки прерывания
Следующие строки определяют программу обработки прерывания, используемую в -этом примере (полный исходный код может быть найден в файле Interrupt.c, находящемся в каталоге arm/tutor):
II определить обработчик запроса IRQ _irq _arm void irqHandler( void )
В этом определении:
_irq — ключевое слово, которое служит для того, чтобы сообщить компилятору, что используется соглашение о вызовах, для которого требуются функции обработки прерываний;
_arm — ключевое слово, которое служит для того, чтобы гарантировать, что
обработчик IRQ будет откомпилирован в режиме ARM. В этом примере прерывания генерирует только UART, так что нет никакой необходимости программно проверять источник прерывания. В общем случае, когда используется несколько источников прерываний, программа обработки прерывания должна проверять источник прерывания перед выполнением его обработки.
27.2. Задание параметров проекта
1. Добавить новый проект project4 в рабочую область, используемую в предыдущих примерах.
2. Добавить к проекту файлы Utilities.c и Interrupts.
3. В окне рабочей области выберите узел уровня проекта и выберите в нем Project>Options. Выберите категорию General Options и «кликните» на позиции табуляции Target. Выберите ARM7TDMI из раскрывающегося меню Core. Кроме того, удостоверьтесь, что в категориях C/C++ Compiler и Linker используются заданные по умолчанию параметры настройки.
Теперь следует установить среду симуляции.
27.2.1. Установка среды симуляции
Система прерываний C-SPY основана на использовании счетчика циклов. Пользователь может вручную определить количество циклов, которое будет выполнено симулятором прежде, чем C-SPY сгенерирует прерывание. Чтобы симулировать ввод данных из интерфейса UART, значения будут читаться из файла InputData.txt, который содержит числа ряда Фибоначчи. На приемный регистр UART (UARTRBRTHR) будет установлена так называемая точка останова немедленного чтения и подключена определенная пользователем макрофункция (в этом примере — макрофункция AccessQ). Макрофункция прочитает значение числа Фибоначчи из указанного текстового файла.
Всякий раз, когда будет сгенерировано прерывание, подпрограмма прерывания будет читать регистр UARTRBRTHR. При этом будет срабатывать точка останова, выполняться макрофункция AccessQ и значения чисел Фибоначчи будут попадать в приемный регистр UART. Необходимо подчеркнуть, что точка останова немедленного чтения вызовет останов до того, как процессор прочитает регистр UARTRBRTHR, что позволит макрокоманде сохранить новое значение в регистре, который затем будет прочитан командой немедленного чтения.
НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |