Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным


НазваниеУчебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным
страница7/10
ТипУчебное пособие
1   2   3   4   5   6   7   8   9   10

3.3.1. Прерывания от параллельных портов
Регистры параллельных портов процессорной системы были показаны на рис. 3.4, который воспроизведен на рис. 3.13. Как видно из рис. 3. 13, параллельные порты, поддерживающие прерывания, включают два дополнительных регистра с адресами Base+8 и Base. Регистр маскирования прерываний, доступный по адресу Base+8, определяет должен или нет формироваться сигнал прерывания, который будет посылаться в процессор Nios II, когда данные, присутствующие на входном порте, изменят величину. Установка бита в 1 разрешит формирование соответствующего прерывания, в то время как установка 0 - запретит его. Параллельный порт содержит регистр захвата фронта, доступный по адресу Base. Каждый бит в этом регистре устанавливается в 1, когда соответствующий бит в параллельном порте изменит своё значение с 0 в 1. Выполнение операции записи в этот регистр установит все биты регистра в 0 и снимет соответствующие сигналы прерывания.


Рис. 3.13 – Регистры параллельного порта ввода/вывода
3.3.1.1. Прерывания от кнопок



Рис. 3.14 – Регистры параллельного порта ввода с кнопок

Рис. 3.8, воспроизведенный на рис. 3.14, показывает регистры, связанные с параллельным портом кнопок. Регистр маски разрешает или запрещает формирование прерываний процессора при нажатии отдельных кнопок. Каждый бит в регистре захвата фронта устанавливается в 1, когда происходит нажатие соответствующей кнопки, если соответствующий бит регистра маски установлен в 1. Процессор Nios II после получения сигнала запроса прерывания может считать содержимое этого регистра, чтобы определить, какая из кнопок была нажата. Запись любой величины в регистр захвата фронта снимет запрос прерывания и установит все биты регистра захвата фронта в 0.
3.3.2. Прерывания от JTAG UART
Рис. 3.10, воспроизведенный на рис. 3.15, показывает регистры данных и управления JTAG UART. Как было сказано в разделе 3.2.4, поле RAVAIL в регистре данных отражает число символов, которые хранятся в получаемом буфере FIFO в текущий момент времени. Поле WSPACE в регистре управления показывает размер свободного места в байтах в передаваемом буфере FIFO, то есть число символов, которые можно еще в него записать. Биты RE и WE регистра управления (см. рис. 3.15) используются для того, чтобы разрешить прерывания процессора, связанные с приемом или передачей символов. Если прерывание разрешено, то оно будет происходить, когда RAVAIL для буфера FIFO принимаемых данных превысит 7, или WSPACE для буфера FIFO отправляемых данных станет меньше 7. Произошедшие прерывания будут сопровождаться установкой в 1 разрядов RI и WI в регистре управления, которые потом могут быть очищены путем чтения или записи данных из/в JTAG UART.


Рис. 3.15 – Регистры порта JTAG UART
3.3.3. Прерывания от последовательного порта UART
Регистры данных и управления, связанные с последовательным портом UART, приведены на рис. 3.11 в разделе 3.2.5. Биты RE и WE в регистре управления (см. рис. 3.11) используются для того, чтобы разрешить прерывания процессора, связанные с заполнением получаемого и передаваемого буферов FIFO. Если прерывания разрешены, они будут формироваться, когда RAVAIL, для получаемого FIFO, или WSPACE, для передаваемого FIFO, превзойдет границу 31. Произошедшие прерывания будут сопровождаться установкой в 1 разрядов RI и WI в регистре управления, которые потом могут быть очищены путем чтения или записи данных из/в UART последовательного порта.
3.3.4. Прерывания от интервального таймера
Рис. 3.12. в разделе 3.2.6 показывает 6 регистров, которые связаны с интервальным таймером. Как было сказано в разделе 3.2.6, бит TO регистра состояния таймера установится в 1, когда таймер досчитает до нулевой величины. Возможно формирование прерывания процессора, когда установится этот бит. Для этого используется бит ITO в регистре управления таймера. Установка бита ITO в 1 позволит сформировать запрос прерывания, когда сигнал TO станет равным 1. После возникновения прерывания этот бит может быть очищен путем записи любой величины в регистр, содержащий бит TO.

3.3.5. Использование прерываний в программе на языке ассемблер
Пример программы на ассемблере для процессорной системы «DE2-70 Media Computer», в котором используются прерывания, показан в листинге 7. Эта программа отображает циклически сдвигаемый набор на 7-сегментных индикаторах. Набор сдвигается вправо, если нажата кнопка KEY1, и влево, если нажата KEY2. Нажатие KEY3 приводит к тому, что набор переустанавливается с использованием величины, заданной на переключателях. Два типа прерываний используется в этом примере. Отображение шестнадцатеричных чисел на 7-сегментных индикаторах выполняется программой обслуживания прерываний от интервального таймера и другая программа обработки прерываний, вызывается нажатием кнопок. Скорость, с которой шестнадцатеричные наборы отображаются в режиме бегущей строки на 7-сегментных индикаторах, устанавливается в основной программе посредством использования интервального таймера, который формирует прерывания каждые 33 мс.
Лпрямая соединительная линия 88истинг 7. Пример программы на ассемблере, в которой используются прерывания

.equ KEY1, 0

.equ KEY2, 1

/*******************************************************************************

* Эта программа демонстрирует использование прерываний на стенде

* DE2-70 Media Computer. Вначале запускается таймер, который генерирует

* прерывания каждые 33 мс. Затем разрешаются прерывания от таймера и кнопок.

* Процедура обработки прерывания таймера отображает текст на 7-сегментных

* индикаторах и сдвигает его влево или вправо. Направление сдвига определяется

* кнопками. При нажатии кнопки key1 текст сдвигается вправо, при нажатии

* key2 – влево, при нажатии key3 изменяется текст, используя данные с переключателей.

********************************************************************************/

.text

.global _start

_start:

movia sp, 0x03FFFFFC /* Определяем адрес вершины стека */
movia r16, 0x10002000

/* Определяем период срабатывания интервального таймера */

movia r12, 0x190000 /* 1/(50 MHz) x (0x190000) = 33 msec */

sthio r12, 8(r16) /*определяем младшее полуслово как стартовое значение*/

srli r12, r12, 16

sthio r12, 0xC(r16) /* старшее полуслово как стартовое значение */
/* Запускаем таймер и разрешаем прерывания от него */

movi r15, 0b0111 /* START = 1, CONT = 1, ITO = 1 */

sthio r15, 4(r16)
/* Разрешаем прерывания PIO, к которому подсоединены кнопки */

movia r15, 0x10000050 /* Адрес регистра кнопок */

movi r7, 0b01110

stwio r7, 8(r15) /* Устанавливаем 3 бита регистра маски прерывания*/

/* Разрешаем прерывания NIOS 2 процессора */

movi r7, 0b011

wrctl ienable, r7 /*Разрешаем прерывания от кнопок*/

movi r7, 1

wrctl status, r7 /* Разрешаем процессору обрабатывать прерывания */
IDLE:

br IDLE /* Бесконечный цикл */
.data

.global PATTERN

PATTERN:

.word 0x0000000F

.global KEY_PRESSED

KEY_PRESSED:

.word KEY2

.end

прямая соединительная линия 89


Обработчики сброса и исключений процессора для представленной выше программы приведены в листинге 8. Обработчик сброса процессора просто выполняет переход на метку _start в основной программе. Обработчик исключений вначале проверяет, является ли исключение внешним прерыванием, или внутренним. В случае внутреннего прерывания, такого как обнаружение некорректного кода операции или команды ловушки (trap) обработчик просто выполняет возврат из прерывания. То есть, он не обрабатывает эти случаи. Для внешних прерываний он вызывает либо программу обслуживания интервального таймера для прерывания уровня 0, либо программу обслуживания прерываний от кнопок для прерывания уровня 1. Эти программы показаны в листингах 9 и 10, соответственно.
Лпрямая соединительная линия 92истинг 8. Обработчики сброса и исключений

/*****************************************************************************

* ОБРАБОТЧИК СБРОСА

* "ax" требуется для того, чтобы определить секцию как исполняемую.

* AMP автоматически размещает секцию сброса по адресу, определяемому в настройках

* процессора в SOPC Builder.

*****************************************************************************/

.section .reset, "ax"

movia r2, _start

jmp r2 /* Переходим в основную программу */
/*****************************************************************************

* ОБРАБОТЧИК ИСКЛЮЧЕНИЙ

* "ax" требуется для того, чтобы определить секцию как исполняемую.

* AMP автоматически размещает секцию сброса по адресу, определяемому в настройках

* процессора в SOPC Builder.

*****************************************************************************/

.section .exceptions, "ax"

.global EXCEPTION_HANDLER /*Определяем процедуру как глобальную*/

EXCEPTION_HANDLER: /*Процедура обработки прерываний*/

subi sp, sp, 16 /* Изменяем адрес указателя стека */

stw et, 0(sp) /*Сохраняем содержимое регистра et в стеке*/
rdctl et, ctl4

beq et, r0, SKIP_EA_DEC /* Если прерывание не внешнее, то переходим на SKIP_EA_DEC */
subi ea, ea, 4 /* декрементируем регистр ea на 1 команду */

SKIP_EA_DEC:

stw ea, 4(sp) /* Сохраняем регистры в стеке */

stw ra, 8(sp)

stw r22, 12(sp)

rdctl et, ctl4

bne et, r0, CHECK_LEVEL_0 /* Если прерывание внешнее, то переходим на CHECK_LEVEL_0*/
NOT_EI: /* Прерывание произошло в случае встречи невыполнимой команды или команды TRAP */

br END_ISR /* Выходим из обработчика прерываний */
CHECK_LEVEL_0: /* Проверка, является ли прерывание прерыванием от таймера IRQ0 */

andi r22, et, 0b1

beq r22, r0, CHECK_LEVEL_1 /*Если бит 0b1 регистра et не равен 1, то переходим к проверке, является ли прерывание прерыванием от кнопок*/
call INTERVAL_TIMER_ISR /*Вызываем процедуру обработки прерывания от таймера*/

br END_ISR /*Выходим из обработчика прерываний*/
CHECK_LEVEL_1: /*Проверка, является ли прерывание прерыванием от кнопок IRQ1*/

andi r22, et, 0b10

beq r22, r0, END_ISR /* Если бит 0b10 регистра et не равен 10, то выходим из обработчика прерываний*/
call PUSHBUTTON_ISR /*Вызываем процедуру обработки прерываний от кнопок*/
END_ISR:

/*Восстанавливаем из стека все используемые регистры*/

ldw et, 0(sp)

ldw ea, 4(sp)

ldw ra, 8(sp)

ldw r22, 12(sp)

addi sp, sp, 16
eret /*Выходим из процедуры обработки прерывания*/

.end

прямая соединительная линия 93


Лпрямая соединительная линия 94истинг 9. Программа обработки прерываний от интервального таймера

.include "key_codes.s"

.extern PATTERN

.extern KEY_PRESSED

/*****************************************************************************

* Процедура обработки прерываний от таймера

******************************************************************************/

.global INTERVAL_TIMER_ISR

INTERVAL_TIMER_ISR:

subi sp, sp, 40 /* Сохраняем регистры в стеке */

stw ra, 0(sp)

stw r4, 4(sp)

stw r5, 8(sp)

stw r6, 12(sp)

stw r8, 16(sp)

stw r10, 20(sp)

stw r20, 24(sp)

stw r21, 28(sp)

stw r22, 32(sp)

stw r23, 36(sp)
movia r10, 0x10002000

sthio r0, 0(r10)
movia r20, 0x10000020 /*адрес регистра HEX3_HEX0 */

movia r21, 0x10000030 /*адрес регистра HEX7_HEX4*/

addi r5, r0, 1

movia r22, PATTERN

movia r23, KEY_PRESSED
ldw r6, 0(r22) /* загружаем текст для вывода на 7-сегментные индикаторы */

stwio r6, 0(r20) /* выводим на HEX3 ... HEX0 */

stwio r6, 0(r21) /* выводим на HEX7 ... HEX4 */
ldw r4, 0(r23) /* Проверяем, какая кнопка была нажата */

movi r8, KEY1

beq r4, r8, LEFT /* Если была нажата key1, то сдвигаем текст вправо */

rol r6, r6, r5 /* иначе, сдвигаем влево */

br END_INTERVAL_TIMER_ISR

LEFT:

ror r6, r6, r5 /* сдвигаем текст вправо*/
END_INTERVAL_TIMER_ISR:

stw r6, 0(r22) /* выводим текст на 7-сегментные индикаторы */
ldw ra, 0(sp) /* Восстанавливаем регистры из стека */

ldw r4, 4(sp)

ldw r5, 8(sp)

ldw r6, 12(sp)

ldw r8, 16(sp)

ldw r10, 20(sp)

ldw r20, 24(sp)

ldw r21, 28(sp)

ldw r22, 32(sp)

ldw r23, 36(sp)

addi sp, sp, 40

ret
.end

прямая соединительная линия 95


Листинг 10. Программа обработки прерываний от кнопок

прямая соединительная линия 96


.include "key_codes.s"

.extern KEY_PRESSED

.extern PATTERN

/*******************************************************************************

Обработчик прерываний от кнопок

*******************************************************************************/

.global PUSHBUTTON_ISR

PUSHBUTTON_ISR:

subi sp, sp, 20 /* Сохраняем регистры в стеке*/

stw ra, 0(sp)

stw r10, 4(sp)

stw r11, 8(sp)

stw r12, 12(sp)

stw r13, 16(sp)
movia r10, 0x10000050

ldwio r11, 0xC(r10) /* Считываем значение из edge-capture регистра*/

stwio r0, 0xC(r10) /* Сбрасываем прерывание */
movia r10, KEY_PRESSED

CHECK_KEY1:

andi r13, r11, 0b0010 /* Если была нажата кнопка key1 */

beq r13, zero, CHECK_KEY2

movi r12, KEY1

stw r12, 0(r10)

br END_PUSHBUTTON_ISR
CHECK_KEY2:

andi r13, r11, 0b0100 /* Если была нажата кнопка key2*/

beq r13, zero, DO_KEY3

movi r12, KEY2

stw r12, 0(r10)

br END_PUSHBUTTON_ISR
DO_KEY3:

movia r13, 0x10000040

ldwio r11, 0(r13) /* Считываем значение с переключателей */

movia r13, PATTERN

stw r11, 0(r13) /* Сохраняем измененный текст */
END_PUSHBUTTON_ISR:

ldw ra, 0(sp) /* Восстанавливаем регистры из стека */

ldw r10, 4(sp)

ldw r11, 8(sp)

ldw r12, 12(sp)

ldw r13, 16(sp)

addi sp, sp, 20
ret

.end

прямая соединительная линия 97

1   2   3   4   5   6   7   8   9   10

Похожие:

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие Издательство Иркутского государственного технического университета 2012
Тимофеева С. С. Защита литосферы и обращение с опасными отходами : учеб пособие. – Иркутск : Изд-во Иргту, 2012. – 159 с

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие Москва «Альтаир» 2010 удк 349. 6(470)(075) ббк 67. 407 Я 7
Негосударственное (частное) образовательное учреждение дополнительного профессионального образования (повышения квалификации) специалистов...

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие. М.: Издательство Московского университета, 2004
«Вся Россия», «Моя провинция», «Новости – время местное» и др Представлены также некоторые особенности совместной работы журналистов...

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие Москва 2008
Юдин В. П. Профсоюзная работа в школе. Учебное пособие. Москва, Издательство мгоу, 2008. 126 с

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие Издательство Казанского (Приволжского) федерального университета 2014
Учебное пособие предназначено для студентов, аспирантов, преподавателей юридических учебных заведений, работников судов, адвокатуры,...

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие Издательство Казанского (Приволжского) федерального университета 2014
Учебное пособие предназначено для студентов, аспирантов, преподавателей юридических учебных заведений, работников судов, адвокатуры,...

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебное пособие для бакалавров направления подготовки 230700. 62...
Учебное пособие для бакалавров направления подготовки 230700. 62 «Прикладная информатика в области экономики»

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconПермский филиал Факультет бизнес-информатики Кафедра информационных...
Описание процесса разработки системы поддержки принятия решений в управлении персоналом 38

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебно-методическое пособие Красноярск сфу 2012 удк 625. 7: 338(075) ббк 65. 315. 373
Г12 Экономика отрасли (Экономика дорожного строительства): учебно-методическое пособие [Текст] / сост. В. В. Гавриш, Е. В. Гуторин....

Учебное пособие Москва Издательство Московского государственного университета леса 2012 удк 004. 896(075) Е92 Разработано в соответствии с Федеральным государственным  iconУчебно-методическое пособие Красноярск сфу 2012 удк 625. 7: 338(075) ббк 65. 315. 373
Г12 Экономика отрасли (Экономика дорожного строительства): учебно-методическое пособие [Текст] / сост. В. В. Гавриш, Е. В. Гуторин....

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск