ЛР12. Добавление оставшихся методических материалов

This commit is contained in:
Andrei Solodovnikov
2023-11-28 00:50:50 +03:00
parent 057c5fe75f
commit 2765ff3aff
20 changed files with 2747 additions and 44 deletions

View File

@@ -0,0 +1,32 @@
_start:
# Инициализируем начальные значения регистров
0: 050000b7 li x1 , 0x05000000 # сохраняем базовый адрес uart_rx
4: 06000137 li x2 , 0x06000000 # сохраняем базовый адрес uart_tx
8: 0001c1b7 li x3 , 0x0001c200 # устанавливаем бодрейт 115200
c: 20018193
10: 0030a623 sw x3 , 0x0c(x1)
14: 00312623 sw x3 , 0x0c(x2)
18: 00100213 li x4 , 0x00000001 # устанавливаем parity_bit
1c: 0040a823 sw x4 , 0x10(x1)
20: 00412823 sw x4 , 0x10(x2)
24: 00100293 li x5 , 0x00000001 # подготавливаем маску прерывания единственного
# (нулевого) входа
28: 30429073 csrw mie, x5 # загружаем маску в регистр маски
2c: 03c00293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
30: 00028293 # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две
# инструкции: lui и addi
34: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
# Вызов функции main
main:
38: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1);
# ОБРАБОТЧИК ПЕРЕХВАТА
# Без стороннего вмешательства процессор никогда не перейдет к инструкциям ниже,
# однако в случае прерывания в программный счетчик будет загружен адрес первой
# нижележащей инструкции.
# Сохраняем используемые регистры на стек
trap_handler:
3c: 0000a383 lw x7, 0(x1) # загружаем пришедший байт
40: 00712023 sw x7, 0(x2)
44: 30200073 mret