接收器控制寄存器的中断级别是什么

时间:2012-12-15 19:01:04

标签: assembly mips interrupt-handling

我正在尝试创建一个处理键盘输入的硬件中断处理程序。问题是我的处理程序只能在接收器控制寄存器的值为1时继续。目前,我的代码产生的值为3,所以我的处理程序只是退出,因为我只想处理硬件中断。我无法在网上找到描述3级中断的内容,以及如何修复我的代码,因此它会产生1级中断。

有人可以告诉我3级是什么或者至少指向一个资源?感谢

添加到此。我也得到256作为我的因果寄存器的值。我认为所有的代码都是十六进制的,因此这将是一个代码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

1 个答案:

答案 0 :(得分:0)

仅仅Cause寄存器中断位字段就足够了并接受请求。通常,Cause寄存器的中断字段与Status寄存器的中断字段进行逐位AND运算。结果位被“或”在一起,并且值与“Status寄存器的IE(中断的主使能)”位进行“与”运算将导致中断。