lycsqq 发表于 2010-9-7 14:03:28

[求助]9260裸机调中断,要么一直中断,要么不响应??

我用9260裸机调中断,思路是这样的:
我想启用周期时钟(PIT)中断和串口(DBGU)中断。
其中PIT中断准备提供给uC/OS使用,DBUG采用DMA方式收发。
由于PIT和DBGU使用相同的中断源(source 1),所以他们的中断在同一个函数中响应。在这个函数中再去判断是PIT产生的中断,还是DBGU产生的中断,然后再分开处理。
可是问题在于,单独启用一个中断的时候,中断正常响应,两个同时启用的时候,中断就不响应了。
不仅如此,DBGU同时开启两个中断(DMA发送完成中断和DMA接收缓冲区满中断)也出现类似的显现,即只开启一个中断时正常响应,两个同时开始时中断不响应。
不才以为,是中断设置或者处理不当造成的。
以下市关键部分代码,请高手指定。

中断配置:
    AIC_ConfigureIT(AT91C_ID_SYS,
                  AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE|priority, //此处设置为电平触发,则不停得产生中断。
                  handler);                                                                           //若设置为边缘触发,则中断不响应。
    //使能中断
    AIC_EnableIT(AT91C_ID_SYS);
    //同时启用DMA发送完成、接收缓冲区满中断。
    AT91C_BASE_DBGU->DBGU_IER = AT91C_US_ENDRX | AT91C_US_ENDTX;


中断处理:
    uint32 status;
    AT91F_AIC_ClearIt(AT91C_BASE_AIC,1);//清除中断标志
    status = AT91F_DBGU_GetInterruptMaskStatus(AT91C_BASE_DBGU);//读取中断状态
      
      if(status & AT91C_US_ENDTX)//处理对应的中断
      {
            //End of Tx Handler
            DBGU_ENDTX_Handler();
            status &= ~AT91C_US_ENDTX;
      }

      if(status & AT91C_US_ENDRX)
      {
            //End of Rx Handler
            DBGU_ENDRX_Handler();
            status &= ~AT91C_US_ENDRX;
      }

中断向量的汇编程序(其中有读IVR和写EOICR):

irqHandler
      ;Save interrupt context on the stack to allow nesting */
      SUB   lr, lr, #4
      STMFD   sp!, {lr}
      MRS   lr, SPSR
      STMFD   sp!, {r0,r1,lr}

      ; Write in the IVR to support Protect Mode */
      LDR   lr, =AT91C_BASE_AIC
      LDR   r0,
      STR   lr,

      ; Branch to interrupt handler in Supervisor mode */
      MSR   CPSR_c, #ARM_MODE_SVC
      STMFD   sp!, {r1-r4, r12, lr}
      MOV   lr, pc
      BX      r0
      LDMIA   sp!, {r1-r4, r12, lr}
      MSR   CPSR_c, #ARM_MODE_IRQ | I_BIT

      ; Acknowledge interrupt */
      LDR   lr, =AT91C_BASE_AIC
      STR   lr,

      ; Restore interrupt context and branch back to calling code
      LDMIA   sp!, {r0,r1,lr}
      MSR   SPSR_cxsf, lr
      LDMIA   sp!, {pc}^
页: [1]
查看完整版本: [求助]9260裸机调中断,要么一直中断,要么不响应??