搜索
bottom↓
回复: 0

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

[复制链接]

出0入0汤圆

发表于 2010-9-7 14:03:28 | 显示全部楼层 |阅读模式
我用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, [r14, #AIC_IVR]
        STR     lr, [r14, #AIC_IVR]

        ; 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, [r14, #AIC_EOICR]

        ; Restore interrupt context and branch back to calling code
        LDMIA   sp!, {r0,r1,lr}
        MSR     SPSR_cxsf, lr
        LDMIA   sp!, {pc}^

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 17:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表