4
0
Эх сурвалжийг харах

Merge pull request #1 from wyfcyx/master

Modify Rust SBI on K210 to execute rCore-Tutorial lab1-6(include 3+)
Luo Jia 4 жил өмнө
parent
commit
9e396a71ae
2 өөрчлөгдсөн 12 нэмэгдсэн , 3 устгасан
  1. 1 0
      .gitignore
  2. 11 3
      platform/k210/src/main.rs

+ 1 - 0
.gitignore

@@ -1,4 +1,5 @@
 /target
+/.idea
 Cargo.lock
 
 .DS_Store

+ 11 - 3
platform/k210/src/main.rs

@@ -211,9 +211,9 @@ fn main() -> ! {
         medeleg::set_instruction_misaligned();
         medeleg::set_breakpoint();
         medeleg::set_user_env_call();
-        medeleg::set_instruction_page_fault();
-        medeleg::set_load_page_fault();
-        medeleg::set_store_page_fault();
+        medeleg::set_instruction_fault();
+        medeleg::set_load_fault();
+        medeleg::set_store_fault();
         mie::set_mext();
         // 不打开mie::set_mtimer
         mie::set_msoft();
@@ -369,6 +369,14 @@ extern "C" fn start_trap_rust(trap_frame: &mut TrapFrame) {
                 mie::clear_mtimer();
             }
         }
+        Trap::Interrupt(Interrupt::MachineExternal) => {
+            let irq_id = unsafe { (0x0c20_0004 as *const u32).read_volatile() };
+            let ch: u8 = unsafe { (0x3800_0004 as *const u32).read_volatile() & 0xFF } as u8;
+            print!("{}", 0 as char);
+            unsafe { (0x0c20_0004 as *mut u32).write_volatile(irq_id); }
+            unsafe { llvm_asm!("csrw stval, $0" :: "r"(ch as usize) :: "volatile"); }
+            unsafe { mip::set_ssoft(); }
+        }
         Trap::Exception(Exception::IllegalInstruction) => {
             let vaddr = mepc::read();
             let ins = unsafe { get_vaddr_u32(vaddr) };