0

キーボード入力を処理するハードウェア割り込みハンドラーを作成しようとしています。問題は、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
4

1 に答える 1

0

Causeレジスタ割り込みビットフィールドだけで十分ではなく、要求を受け取ります。通常、Causeレジスタの割り込みフィールドは、Statusレジスタの割り込みフィールドともビット単位でAND演算されます。結果のビットはOR演算され、値はIE(割り込みのマスターイネーブル)ビットとAND演算され、Statusレジスタのビットによって割り込みが発生します。

于 2012-12-15T22:36:32.817 に答える