キーボード入力を処理するハードウェア割り込みハンドラーを作成しようとしています。問題は、Receiver Control Registerの値が1の場合にのみ、ハンドラーが続行することになっていることです。現在、コードは値3を生成しているため、ハードウェア割り込みのみを処理したいので、ハンドラーは単に終了します。レベル3の割り込みとは何か、レベル1の割り込みが発生するようにコードを修正する方法を説明しているオンラインの場所はどこにも見つかりません。
誰かがレベル3とは何か教えてくれますか、少なくとも私にリソースを教えてもらえますか?ありがとう
これに追加します。原因レジスタの値として256も取得しています。すべてのコードが16進数であると思うので、それはコード4になります。私が見ることができるのは、不正なアドレスからのロードです。キーボードのキーを押すまで割り込みハンドラーが呼び出されないため、これは意味がありません。コードは次のとおりです。
.data 0xffff0000
RecvCtrlReg: .word 0
.ktext 0x80000180
#move $k1, $at
#la $k0, frogger # save the address to frogger function for long call
mfc0 $k1, $13
beq $k1, 0, keyboard # If cause register is not zero, exit
li $v0, 10 # Do nothing and exit
syscall
keyboard: # else check interupt level
lw $t7, RecvCtrlReg
beq $t7, 1, continue # if the Reciever Control Reg is 1, its a hardware interrupt, so continue
li $v0, 10 # else do nothing and exit
syscall
continue:
jalr $k0 # long call frogger function
mtc0 $0, $13 # set cause register to 0
mfc0 $k0, $12 # Fix status register
andi $k0, 0xfffd # clear EXL bit
ori $k0, 0x1 # Enable interrupts
mtc0 $k0, $12 # Store value back into status register
#move $at, $k1
eret