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