From 12ed407140bef97956cdfe73202df418f62a37ab Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 14 Nov 2023 19:45:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A010.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B5=D0=B2=20=D0=B2=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=81=D1=82=D0=B8=D0=BD=D0=B3=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/10. Interrupt subsystem/README.md | 35 ++++++++++++++------------ 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md index 9e8679f9..cd1f2e48 100644 --- a/Labs/10. Interrupt subsystem/README.md +++ b/Labs/10. Interrupt subsystem/README.md @@ -246,27 +246,30 @@ _Рисунок 4. Структурная схема контроллера пр ```asm _start: # Инициализируем начальные значения регистров -li sp, 0x00003FFC # устанавливаем указатель на верхушку стека -li gp, 0x00000000 # устанавливаем указатель на глобальные данные +li sp, 0x00003FFC # устанавливаем указатель на верхушку стека + # данная псевдоинструкция будет разбита на две + # инструкции: lui и addi -li t0, 0x00000001 # подготавливаем маску прерывания единственного - # (нулевого) входа -csrw mie, t0 # загружаем маску в регистр маски +li gp, 0x00000000 # устанавливаем указатель на глобальные данные -la t0, interrupt # псевдоинструкция la аналогично li загружает число, - # только в случае la — это число является адресом - # указанного места (адреса обработчика перехвата) +li t0, 0x00000001 # подготавливаем маску прерывания единственного + # (нулевого) входа +csrw mie, t0 # загружаем маску в регистр маски -csrw mtvec, t0 # устанавливаем вектор прерывания +la t0, interrupt # псевдоинструкция la аналогично li загружает число, + # только в случае la — это число является адресом + # указанного места (адреса обработчика перехвата) -li t0, 0x00001FFC # готовим адрес верхушки стека прерывания -csrw mscratch, t0 # загружаем в указатель на верхушку стека прерывания +csrw mtvec, t0 # устанавливаем вектор прерывания -li t0, 1 # начальное значение глобальной переменной -sw t0, 0(gp) # загружаем переменную в память +li t0, 0x00001FFC # готовим адрес верхушки стека прерывания +csrw mscratch, t0 # загружаем в указатель на верхушку стека прерывания -li t1, 0 # начальное значение, чтобы в симуляции не было xxx -li t2, 0 # начальное значение, чтобы в симуляции не было xxx +li t0, 1 # начальное значение глобальной переменной +sw t0, 0(gp) # загружаем переменную в память + +li t1, 0 # начальное значение, чтобы в симуляции не было xxx +li t2, 0 # начальное значение, чтобы в симуляции не было xxx # Вызов ecall исключительно из хулиганских соображений, # поскольку в данной микроархитектурной реализации это @@ -275,7 +278,7 @@ li t2, 0 # начальное значение, чтобы в ecall # Вызов функции main main: - beq x0, x0, main # бесконечный цикл, аналогичный while (1); + beq x0, x0, main # бесконечный цикл, аналогичный while (1); # ОБРАБОТЧИК ПРЕРЫВАНИЯ # Без стороннего вмешательства процессор никогда не перейдет