Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Листинг 4 Текст программы interrupt_example.s
.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
|