打印

关于TMS320C6455的SRIO中断

[复制链接]
2398|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiangwenj02|  楼主 | 2015-12-23 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jiangwenj02 于 2015-12-23 22:16 编辑

目前正在调试SRIO doorbell中断程序,slave断已经能够正常接收到doorbell信息,并且相应的标志位也已经有了响应。但是slave端就是不进中断程序,接下来也不知道怎么去调试。
程序是触发INTDST0中断。接收到信号之后INTDST0_DECODE中的最后一位也被置为了1。大神指点一下该怎么去调试吧。不知道接下去怎么去做了。还有就是INTDST0_RATE_CNTL这个寄存器到底是什么意思啊。看半天文档都看不明白。
中断设置程序如下:
void initInt()
{
        
        CSL_IntcContext             intcContext;  
        CSL_IntcGlobalEnableState   state;
        CSL_IntcEventHandlerRecord  EventRecord;
        CSL_IntcParam               vectId;
        CSL_Status                                        status;
        CSL_IntcObj                 SrioIntcObj;
        CSL_IntcHandle              SrioIntcHandle;
        CSL_IntcEventHandlerRecord  record[11];

        RIO_DOORBELL0_ICCR = 0xffffffff;
        RIO_DOORBELL1_ICCR = 0xffffffff;
        RIO_DOORBELL2_ICCR = 0xffffffff;
        RIO_DOORBELL3_ICCR = 0xffffffff;
        DSP_EVTCLR0 = 0xffffffff;
        DSP_EVTCLR1 = 0xffffffff;
        DSP_EVTCLR2 = 0xffffffff;
        DSP_EVTCLR3 = 0xffffffff;

        intcContext.eventhandlerRecord = record;
    intcContext.numEvtEntries      = 11;
           status = CSL_intcInit(&intcContext);
        if (status != CSL_SOK) {
        printf("Intc initialization failed\n");
        return;
           }
            
         /* Enable NMIs */
         status = CSL_intcGlobalNmiEnable();
        if (status != CSL_SOK) {
                printf("Intc global NMI enable failed\n");
                        return;
         }
            
         /* Enable global interrupts */
         status = CSL_intcGlobalEnable(&state);
         if (status != CSL_SOK) {
                 printf ("Intc global enable failed\n");
                        return;
         }
            
         /* Opening intc module */
         vectId = CSL_INTC_VECTID_8;
         SrioIntcHandle = CSL_intcOpen (&SrioIntcObj, CSL_INTC_EVENTID_RIOINT0, \
                                      &vectId , NULL);

         if (SrioIntcHandle == NULL) {
                 printf("Intc open failed\n");
                        return;
         }

        EventRecord.handler = (CSL_IntcEventHandler)&eventSrioHandler;
           EventRecord.arg = (void*)(SrioIntcHandle);
    status = CSL_intcPlugEventHandler(SrioIntcHandle,&EventRecord);

    if (status != CSL_SOK) {
        printf("Intc plug event handler failed\n");
        return;
    }

        CSL_intcHwControl(SrioIntcHandle, CSL_INTC_CMD_EVTCLEAR, NULL);  
        CSL_intcHwControl(SrioIntcHandle, CSL_INTC_CMD_EVTENABLE, NULL);


}

相关帖子

沙发
jiangwenj02|  楼主 | 2015-12-23 23:16 | 只看该作者
查看了EVTFLAG0和INTMUX发现寄存器都正确,EVTFLAG0第20位为1,INTMUX2后六位代表INT8正好是20,代表中断源。

使用特权

评论回复
评论
huster89 2020-1-15 14:27 回复TA
调试成功没有?我怀疑是intcContext问题 
板凳
jiangwenj02|  楼主 | 2015-12-26 10:29 | 只看该作者
没有人调过吗?

使用特权

评论回复
地板
Snow7| | 2015-12-28 20:29 | 只看该作者
每次Doorbell中断服务程序中都要清除Doorbell标志,否则后面的Doorbell就不能再触发中断

使用特权

评论回复
5
jiangwenj02|  楼主 | 2015-12-28 20:52 | 只看该作者
Snow7 发表于 2015-12-28 20:29
每次Doorbell中断服务程序中都要清除Doorbell标志,否则后面的Doorbell就不能再触发中断 ...

嗯。这个做了。我现在发现问题在于可以触发中断,但是进入的中断不是我设置的程序。

使用特权

评论回复
6
jiangwenj02|  楼主 | 2015-12-28 20:54 | 只看该作者
Snow7 发表于 2015-12-28 20:29
每次Doorbell中断服务程序中都要清除Doorbell标志,否则后面的Doorbell就不能再触发中断 ...

应该就是CSL库函数设置中断那一块出了问题。可是检查了半天就是没检查出错误。。。。

使用特权

评论回复
7
jiangwenj02|  楼主 | 2016-1-2 21:16 | 只看该作者
没人回答结题了。用bios调出来了这个找不到错

使用特权

评论回复
8
李大家| | 2016-12-7 11:06 | 只看该作者
jiangwenj02 发表于 2016-1-2 21:16
没人回答结题了。用bios调出来了这个找不到错

请问你的中断这个问题解决了没

使用特权

评论回复
9
zhangmangui| | 2020-1-31 23:52 | 只看该作者
这个帖子为什么被顶起了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

69

帖子

1

粉丝