Часть 6. Использование инфракрасного порта для беспроводной передачи данных между процессорными системами

Для выполнения этой части работы требуется модификация процессорной системы «DE2- 70 Media Computer». В её состав необходимо добавить контроллер инфракрасного порта, реализованный в виде IP ядра.

Соответствующая модификация системы выполнена и все файлы, необходимые для выполнения работы, помещены в папку lab5 на рабочем столе.

1. Разместите два стенда таким образом, чтобы их приемопередатчики инфракрасного порта располагались друг напротив друга на небольшом расстоянии.

2. Произведите запись значения в поле данных регистра инфракрасного порта. На второй процессорной системе выполните команду Refresh memory. Убедитесь, что данные получены. Обратите внимание! Отправляемые данные могут попадать во входной буфер инфракрасного порта первой процессорной системы.

3. Модифицируйте программу из предыдущей части таким образом, чтобы вместо COM-порта использовался инфракрасный порт.

Отчетные материалы

Отчетные материалы должны содержать:

1. Цель лабораторной работы.

2. Материалы, связанные с подготовкой к работе, включая теоретическую часть.

3. Фрагменты программ JTAG UART.s и TEST_DE2_70_Media_Computer.

4. Информацию по выполнению каждого пункта задания. Причем в отчете должны содержаться выполняемые Вами действия, наблюдаемые результаты, и Ваши объяснения.

5. Написанные Вами фрагменты программ.

6. Краткое заключение.

Приложение

В приложении содержится файл JTAG UART, встроенный в приложение AMP. В этой программе осуществляется вывод текстовой строки из процессорной системы в JTAG UART, и ввод текстовой строки, набираемой в терминальном окне AMP, через JTAG UART и вывод обратно.

В приложении также содержится фрагмент из файла Test_DE2_70_Media_Computer, который полностью приведен в приложении к первой лабораторной работе. В представленном фрагменте выполняется работа с регистрами UART JTAG и com-порта.

Листинг 8 Текст программы JTAG UART.s

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

* Программа выполняет следующее:

* 1. отправляет символьную строку из текстовой строки в JTAG UART

* 2. считывает данные из JTAG UART

* 3. отправляет считанные данные обратно в JTAG UART

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

.text

.global _start

_start:

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

movia r6, 0x10001000

movia r8, TEXT_STRING /* адрес текстовой строки в r8 */

LOOP:

ldb r5, 0(r8) /* из текстовой строки в r5*/

call PUT_JTAG /* вызываем процедуру, которая помещает символ в JTAG */

addi r8, r8, 1

br LOOP /* переходим на вывод очередного символа */

GET_JTAG:

ldwio r4, 0(r6) /*читаем регистр управления JTAG UART*/

andi r8, r4, 0x8000 /*проверяем есть ли новые данные*/

beq r8, r0, GET_JTAG /*если данных нет, то ожидаем их появления*/

andi r5, r4, 0x00ff /*получаем данные*/

call PUT_JTAG /*отправляем символ обратно в JTAG UART*/

call GET_JTAG

.end

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

* Подпрограмма, которая выводит символы в JTAG UART

* r5 = выводимый символ

* r6 = JTAG UART базовый адрес

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

.global PUT_JTAG

PUT_JTAG:

/* сохраняем используемые регистры */

subi sp, sp, 4 /* резервирум место в стеке*/

stw r4, 0(sp) /* сохраняем r4 в стеке */

ldwio r4, 4(r6) /* читаем регистр управления JTAG UART */

andhi r4, r4, 0xffff /* проверяем есть ли место для записи в буфере UART */

beq r4, r0, KONEC /* если места нет, то переполнение буфера */

stwio r5, 0(r6) /* отправляем символ в UART */

OVERFLOW:

/* восстанавливаем содержимое r4 */

ldw r4, 0(sp)

addi sp, sp, 4

ret

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

.data

TEXT_STRING:

.asciz "\nJTAG UART example code\n"

.end

Листинг 9 Фрагмент программы TEST_DE2_70_Media_Computer

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

* Процедура анализирует, имеются ли данные в буфере чтения JTAG порта.

* Если есть, то данные отправляются обратно в JTAG порт и дополнительно в

* COM-порт. Если новых данных нет, то выполняется проверка, имеются ли данные в буфере чтения com-порта. Если данные есть, то они отправляются обратно в com-порт и дополнительно в JTAG порт. А если нет, то происходит выход из процедуры.

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

.global UPDATE_UARTS

UPDATE_UARTS:

/* сохраняем регистры в стеке */

subi sp, sp, 28 /* резервируем область памяти в стеке*/

stw ra, 0(sp)

stw fp, 4(sp)

stw r15, 8(sp)

stw r16, 12(sp)

stw r17, 16(sp)

stw r18, 20(sp)

stw r19, 24(sp)

addi fp, sp, 28

movia r15, JTAG_UART_BASE /* помещаем в r15 адрес JTAG UART*/

movia r19, UART_BASE /* помещаем в r19 адрес com-порта*/

GET_CHAR:

ldwio r17, 0(r15) /* считываем слово из регистра данных JTAG UART*/

andi r18, r17, 0x8000 /* проверяем бит RVALID*/

beq r18, r0, GET_CHAR_UART /* если данных нет в буфере, то переходим на GET_CHAR_UART*/

andi r16, r17, 0x00ff /* выделяем байт данных из считанного из JTAG UART порта слова*/

PUT_CHAR:

ldwio r17, 4(r15) /* считываем слово из регистра управления JTAG UART*/

andhi r17, r17, 0xffff /* выделяем значение поля workspace*/

beq r17, r0, PUT_CHAR_UART /* если свободного места в буфере нет, то переходим на PUT_CHAR_UART*/

stwio r16, 0(r15) /* отправляем символ обратно в JTAG UART*/

PUT_CHAR_UART:

ldwio r17, 4(r19) /* считываем слово из регистра управления*/ com-порта*/

andhi r17, r17, 0xffff /* выделяем значение поля workspace*/

beq r17, r0, GET_CHAR_UART /* если свободного места нет в буфере, то переходим на GET_CHAR_UART*/

stwio r16, 0(r19) /* отправляем символ в com-порт*/

GET_CHAR_UART:

ldwio r17, 0(r19) /* считываем слово из регистра данных com-порта*/

andhi r18, r17, 0xFFFF /* выделяем значение поля RAVAIL*/

beq r18, r0, NO_CHAR * если новых данных нет, то переходим на NO_CHAR*/

andi r16, r17, 0x00ff /* выделяем байт данных из считанного из com-порта слова*/

ldwio r17, 4(r19) /* считываем слово из регистра управления com-порта*/

andhi r17, r17, 0xffff /* выделяем значение поля workspace*/

beq r17, r0, PUT_CHAR_JTAG /* если свободного места нет в буфере, то переходим на PUT_CHAR_JTAG*/

stwio r16, 0(r19) /* отправляем символ в com-порт*/

PUT_CHAR_JTAG:

ldwio r17, 4(r15) /* считываем слово из регистра управления JTAG UART*/

andhi r17, r17, 0xffff /* выделяем значение поля workspace*/

beq r17, r0, NO_CHAR /* если свободного места нет в буфере, то переходим на NO_CHAR*/

stwio r16, 0(r15) /* отправляем символ в JTAG UART*/

NO_CHAR:

/* извлекаем из стека регистры */

ldw ra, 0(sp)

ldw fp, 4(sp)

ldw r15, 8(sp)

ldw r16, 12(sp)

ldw r17, 16(sp)

ldw r18, 20(sp)

ldw r19, 24(sp)

addi sp, sp, 28

ret /* выполняем возврат из процедуры*/

Список литературы

1. Грушвицкий Р.И., Мурсаев А.X. Угрюмов Е.П. Проектирование систем на микросхемах с программируемой структурой. 2-е изд., перераб. и доп. СПб.: БХВ-Петербург, 2006. - 736с.

2. Тарасов И.Е. Разработка цифровых устройств на основе ПЛИС Xilinx с применением языка VHDL. – М.: Горячая линия – Телеком, 2005. -252с.

3. Ефремов Н.В. Введение в систему автоматизированного проектирования Quartus II. Учебное пособие. – М.: ГОУ ВПО МГУЛ, 2011.-147с.

4. DE2-70 Development and Education Board. Интернет ресурс.

http://www.altera.com/education/univ/materials/boards/de2-70/unv-de2-70-board.html?GSA_pos=1&WT.oss_r=1&WT.oss=de-270

5. Ефремов Н.В., Бородин А.А. Инструментальные средства проектирования и отладки цифровых систем на программируемом кристалле фирмы «Altera». Учебное пособие. – М.: ФГБОУ ВПО МГУЛ, 2012.- 123с.

6. Altera Monitor Program. Интернет ресурс.

ftp://ftp.altera.com/up/pub/Altera_Material/11.0/Tutorials/Altera_Monitor_Program.pdf

7. Введение в SOPC Builder. Интернет ресурс. ftp://ftp.altera.com/up/pub/Altera_Material/11.0/Tutorials/VHDL/Introduction_ to_the_Altera_SOPC_Builder.pdf

8. Введение в процессор NIOS II. Интернет ресурс.

ftp://ftp.altera.com/up/pub/Altera_Material/11.0/Tutorials/Nios2_ introduction.pdf

9. Процессорная система «DE2-70 Media Computer». Интернет ресурс.

ftp://ftp.altera.com/up/pub/Altera_Material/11.0/Examples/DE2-70/NiosII_Computer_Systems/DE2-70_Media_Computer.pdf


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: