在DE2板上生成PS2中断

时间:2012-11-01 00:44:24

标签: assembly interrupt intel-fpga nios ps2

我试图在带有NIOS II处理器的DE2板上生成PS2中断。以下汇编代码是一个非常简单的中断服务程序,但它永远不会被执行。我检查并检查了代码,我无法弄清楚问题。附件是指向PS2界面的链接。

感谢任何建议。

问候。

NIOS II PS2 Documentation

.text

.global _start

_start:

  .equ ADDR_PS2, 0x10000100
  .equ ADDR_PS2_CONTROL, 0x10000104

  /* Enable interrupts for PS2 by writing to bit 0 of the control register */
  movia r2, ADDR_PS2_CONTROL
  movia r3, 0x1
  stw r3, (r2)

  /* Set the PIE bit */
  movia r2, 0x1
  wrctl ctl0, r2

  /* Configure ienable: PS2 IRQ = 7 */
  movia r2, 0x80
  wrctl ienable, r2

  MAIN:
    br MAIN

  .section .exceptions, "ax"

  ISR:
    subi sp, sp, 56
    stw r14, 52(sp)
    stw r13, 48(sp)
    stw r12, 44(sp)
    stw r11, 40(sp)
    stw r10, 36(sp)
    stw r9, 32(sp)
    stw r8, 28(sp)
    stw r7, 24(sp) 
    stw r6, 20(sp)
    stw r5, 16(sp)
    stw r4, 12(sp)
    stw r3, 8(sp)
    stw r2, 4(sp)
    stw r1, 0(sp)
    rdctl r2, ipending
    movia r3, 0x80
    and r2, r2, r3
    bne r0, r2, PS2_HANDLER
    br ISR_RETURN

 PS2_HANDLER:
   /* Acknowledge the interrupt */
   movia r2, ADDR_PS2
   ldb r3, (r2)

   /* Turn on the green LEDs */
   .equ ADDR_GREEN_LEDS, 0x10000010
   movia r2, ADDR_GREEN_LEDS
   movi  r3, 0xff
   stwio r3, (r2)

   /* Wait for a moment */
   movia r2, 25000000
   PS2_WAIT:
   subi r2, r2, 1
   bne r0, r2, PS2_WAIT

   /* Turn off the green LEDs */
   movia r2, ADDR_GREEN_LEDS
   movi  r3, 0x0
   stwio r3, (r2)
   br ISR_RETURN

 ISR_RETURN:
   ldw r14, 52(sp)
   ldw r13, 48(sp)
   ldw r12, 44(sp)
   ldw r11, 40(sp)
   ldw r10, 36(sp)
   ldw r9, 32(sp)
   ldw r8, 28(sp)
   ldw r7, 24(sp)
   ldw r6, 20(sp)
   ldw r5, 16(sp)
   ldw r4, 12(sp)
   ldw r3, 8(sp)
   ldw r2, 4(sp)
   ldw r1, 0(sp)
   addi sp, sp, 56
   subi ea, ea, 4
   eret

0 个答案:

没有答案