ЛР13. Обновление ПО для периферий

This commit is contained in:
Andrei Solodovnikov
2024-11-23 17:17:48 +03:00
parent 5797bf3190
commit 001fe2d91e
14 changed files with 63 additions and 62 deletions

View File

@@ -5,11 +5,11 @@
00e00413 00e00413
00f00493 00f00493
00000593 00000593
00100293
30429073
03400293 03400293
00028293 00028293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
04338263 04338263

View File

@@ -2,11 +2,11 @@
02000137 02000137
0e000193 0e000193
00000593 00000593
00100293
30429073
02800293 02800293
00028293 00028293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
00338663 00338663

View File

@@ -2,10 +2,10 @@
07000137 07000137
070011b7 070011b7
96018193 96018193
00100293
30429073
02400293 02400293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
00038403 00038403

View File

@@ -4,12 +4,12 @@
20018193 20018193
0030a623 0030a623
00100213 00100213
0040a823 0030a823
00100293
30429073
03400293 03400293
00028293 00028293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
00700333 00700333

View File

@@ -11,11 +11,11 @@ d0d18193
f7f20213 f7f20213
0ff00493 0ff00493
00100313 00100313
00100293
30429073
04c00293 04c00293
00028293 00028293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
00947433 00947433

View File

@@ -7,11 +7,11 @@
00100213 00100213
0040a823 0040a823
00412823 00412823
00100293
30429073
03c00293 03c00293
00028293 00028293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
00712023 00712023

View File

@@ -5,11 +5,11 @@ aaa18193
00005237 00005237
55520213 55520213
00100313 00100313
00100293
30429073
03400293 03400293
00028293 00028293
30529073 30529073
000102b7
30429073
00000063 00000063
0000a383 0000a383
00338863 00338863

View File

@@ -11,21 +11,21 @@ See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
_start: _start:
# Инициализируем начальные значения регистров # Инициализируем начальные значения регистров
0: 030000b7 li x1 , 0x03000000 # сохраняем базовый адрес клавиатуры 0: 030000b7 li x1 , 0x03000000 # сохраняем базовый адрес клавиатуры
4: 04000137 li x2 , 0x04000000 # сохраняем базовый адрес хекс-контроллера 4: 04000137 li x2 , 0x04000000 # сохраняем базовый адрес hex-контроллера
8: 0e000193 li x3 , 0x000000e0 # сохраняем сканкод e0 8: 0e000193 li x3 , 0x000000e0 # сохраняем сканкод e0
c: 0f000213 li x4 , 0x000000f0 # сохраняем сканкод f0 c: 0f000213 li x4 , 0x000000f0 # сохраняем сканкод f0
10: 00e00413 li x8 , 0x0000000e # сохраняем значение e 10: 00e00413 li x8 , 0x0000000e # сохраняем значение e
14: 00f00493 li x9 , 0x0000000f # сохраняем значение f 14: 00f00493 li x9 , 0x0000000f # сохраняем значение f
18: 00000593 li x11, 0x00000000 # сохраняем ноль 18: 00000593 li x11, 0x00000000 # сохраняем ноль
1c: 00100293 li x5 , 0x00000001 # подготавливаем маску прерывания единственного 1c: 03400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа 20: 00028293 # только в случае la это число является адресом
20: 30429073 csrw mie, x5 # загружаем маску в регистр маски
24: 03400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
28: 00028293 # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата) # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
2c: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания 24: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
28: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
# (нулевого) входа
2c: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:

View File

@@ -14,15 +14,15 @@ _start:
4: 02000137 li x2 , 0x02000000 # сохраняем базовый адрес led-контроллера 4: 02000137 li x2 , 0x02000000 # сохраняем базовый адрес led-контроллера
8: 0e000193 li x3 , 0x000000e0 # сохраняем сканкод e0 8: 0e000193 li x3 , 0x000000e0 # сохраняем сканкод e0
0с: 00000593 li x11, 0x00000000 # сохраняем ноль 0с: 00000593 li x11, 0x00000000 # сохраняем ноль
10: 00100293 li x5 , 0x00000001 # подготавливаем маску прерывания единственного 10: 02800293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа 14: 00028293 # только в случае la это число является адресом
14: 30429073 csrw mie, x5 # загружаем маску в регистр маски
18: 02800293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
1c: 00028293 # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата) # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
20: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания 18: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
1c: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
# (нулевого) входа
20: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:

View File

@@ -15,15 +15,13 @@ _start:
8: 070011b7 li x3, 0x07000960 # количество символов на экране 8: 070011b7 li x3, 0x07000960 # количество символов на экране
c: 96018193 # данная псевдоинструкция будет разбита на две c: 96018193 # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
10: 00100293 li x5, 0x00000001 # подготавливаем маску прерывания единственного 10: 02400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа
14: 30429073 csrw mie, x5 # загружаем маску в регистр маски
18: 02400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# только в случае la это число является адресом # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата) # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две 14: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
# инструкции: lui и addi 18: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
1c: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания # (нулевого) входа
1c: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:

View File

@@ -11,21 +11,22 @@ See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details.
_start: _start:
# Инициализируем начальные значения регистров # Инициализируем начальные значения регистров
0: 050000b7 li x1 , 0x05000000 # сохраняем базовый адрес uart_rx 0: 050000b7 li x1 , 0x05000000 # сохраняем базовый адрес uart_rx
4: 04000137 li x2 , 0x04000000 # сохраняем базовый адрес хекс-контроллера 4: 04000137 li x2 , 0x04000000 # сохраняем базовый адрес hex-контроллера
8: 0001c1b7 li x3 , 0x0001c200 # устанавливаем бодрейт 115200 8: 0001c1b7 li x3 , 0x0001c200 # устанавливаем бодрейт 115200
c: 20018193 c: 20018193
10: 0030a623 sw x3 , 0x0c(x1) 10: 0030a623 sw x3 , 0x0c(x1)
14: 00100213 li x4 , 0x00000001 # устанавливаем parity_bit 14: 00100213 li x4 , 0x00000001 # устанавливаем parity_bit
18: 0030a823 sw x4 , 0x10(x1) 18: 0030a823 sw x4 , 0x10(x1)
1c: 00100293 li x5 , 0x00000001 # подготавливаем маску прерывания единственного 1c: 03400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа 20: 00028293 # только в случае la это число является адресом
20: 30429073 csrw mie, x5 # загружаем маску в регистр маски
24: 03400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
28: 00028293 # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата) # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
2c: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания 24: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
28: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
# (нулевого) входа
2c: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:
30: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1); 30: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1);

View File

@@ -23,16 +23,16 @@ _start:
28: f7f20213 28: f7f20213
2c: 0ff00493 li x9, 0x000000ff # сохраняем маску для обнуления старшей части 2c: 0ff00493 li x9, 0x000000ff # сохраняем маску для обнуления старшей части
30: 00100313 li x6, 0x00000001 # сохраняем единицу 30: 00100313 li x6, 0x00000001 # сохраняем единицу
34: 00100293 li x5, 0x00000001 # подготавливаем маску прерывания единственного 34: 04c00293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа 38: 00028293 # только в случае la это число является адресом
38: 30429073 csrw mie, x5 # загружаем маску в регистр маски # указанного места (адреса обработчика перехвата)
3c: 04c00293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
40: 00028293 # только в случае la это число является адресом
40: 00028293 # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
44: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания 3c: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
40: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
# (нулевого) входа
44: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:
48: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1); 48: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1);

View File

@@ -19,15 +19,16 @@ _start:
18: 00100213 li x4 , 0x00000001 # устанавливаем parity_bit 18: 00100213 li x4 , 0x00000001 # устанавливаем parity_bit
1c: 0040a823 sw x4 , 0x10(x1) 1c: 0040a823 sw x4 , 0x10(x1)
20: 00412823 sw x4 , 0x10(x2) 20: 00412823 sw x4 , 0x10(x2)
24: 00100293 li x5 , 0x00000001 # подготавливаем маску прерывания единственного 24: 03c00293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа 28: 00028293 # только в случае la это число является адресом
28: 30429073 csrw mie, x5 # загружаем маску в регистр маски
2c: 03c00293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
30: 00028293 # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата) # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
34: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания 2c: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
30: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
# (нулевого) входа
34: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:
38: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1); 38: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1);

View File

@@ -17,15 +17,16 @@ _start:
10: 00005237 li x4, 0x00005555 # сохраняем спец-код для сброса 10: 00005237 li x4, 0x00005555 # сохраняем спец-код для сброса
14: 55520213 14: 55520213
18: 00100313 li x6, 0x00000001 # сохраняем единицу 18: 00100313 li x6, 0x00000001 # сохраняем единицу
1c: 00100293 li x5, 0x00000001 # подготавливаем маску прерывания единственного 1c: 03400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
# (нулевого) входа 20: 00028293 # только в случае la это число является адресом
20: 30429073 csrw mie, x5 # загружаем маску в регистр маски
24: 03400293 la x5, trap_handler # псевдоинструкция la аналогично li загружает число,
28: 00028293 # только в случае la это число является адресом
# указанного места (адреса обработчика перехвата) # указанного места (адреса обработчика перехвата)
# данная псевдоинструкция будет разбита на две # данная псевдоинструкция будет разбита на две
# инструкции: lui и addi # инструкции: lui и addi
2c: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания 24: 30529073 csrw mtvec, x5 # устанавливаем вектор прерывания
28: 000102b7 li x5 , 0x00010000 # подготавливаем маску прерывания единственного
# (нулевого) входа
2c: 30429073 csrw mie, x5 # загружаем маску в регистр маски
# Вызов функции main # Вызов функции main
main: main:
30: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1); 30: 00000063 beq x0, x0, main # бесконечный цикл, аналогичный while (1);