xx
This commit is contained in:
		
							parent
							
								
									a9c1a6f742
								
							
						
					
					
						commit
						e630e0743b
					
				
					 1 changed files with 13 additions and 11 deletions
				
			
		
							
								
								
									
										24
									
								
								trap.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								trap.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -21,6 +21,19 @@ trapinit(void)
 | 
			
		|||
  // send interrupts and exceptions to kerneltrap().
 | 
			
		||||
  w_stvec((uint64)kerneltrap);
 | 
			
		||||
 | 
			
		||||
  // set up the riscv Platform Level Interrupt Controller
 | 
			
		||||
  // to send uart interrupts to hart 0 S-Mode.
 | 
			
		||||
 | 
			
		||||
  // qemu makes UART0 be interrupt number 10.
 | 
			
		||||
  int irq = 10;
 | 
			
		||||
  // set uart's priority to be non-zero (otherwise disabled).
 | 
			
		||||
  *(uint*)(0x0c000000L + irq*4) = 1;
 | 
			
		||||
  // set uart's enable bit for hart 0 S-mode. 
 | 
			
		||||
  *(uint*)0x0c002080 = (1 << irq);
 | 
			
		||||
 | 
			
		||||
  // set hart 0 S-mode priority threshold to 0.
 | 
			
		||||
  *(uint*)0x0c201000 = 0;
 | 
			
		||||
 | 
			
		||||
  initlock(&tickslock, "time");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -43,17 +56,6 @@ usertrap(void)
 | 
			
		|||
  // save user program counter.
 | 
			
		||||
  p->tf->epc = r_sepc();
 | 
			
		||||
 | 
			
		||||
  // PLIC setup
 | 
			
		||||
  // qemu makes UART0 be interrupt number 10.
 | 
			
		||||
  int irq = 10;
 | 
			
		||||
  // set uart's priority to be non-zero (otherwise disabled).
 | 
			
		||||
  *(uint*)(0x0c000000L + irq*4) = 1;
 | 
			
		||||
  // set uart's enable bit for hart 0 s-mode. 
 | 
			
		||||
  *(uint*)0x0c002080 = (1 << irq);
 | 
			
		||||
 | 
			
		||||
  // hart 0 S-mode priority threshold.
 | 
			
		||||
  *(uint*)0x0c201000 = 0;
 | 
			
		||||
 | 
			
		||||
  intr_on();
 | 
			
		||||
  
 | 
			
		||||
  if(r_scause() == 8){
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue