TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678的SRIO中断问题

TI工程师您好,我使用的是C6678,现在通过SRIO接收来自FPGA的数据,

1、当接收到doorbell触发中断时只能进入一次中断服务函数,这是为什么呢?中断服务函数如下:

void test_isr_handler (void* handle)
{
  Uint16          doorbellStatus;
  hnd = CSL_CPINTC_open (0);
  printf("receive a interrupt from SRIO\n");
  INT_Flag = 1;
  // 使主机中断失效
  CSL_CPINTC_disableHostInterrupt (hnd, 10);
  // 清除系统中断
  CSL_CPINTC_clearSysInterrupt (hnd,116);
  // 使能主机中断
  CSL_CPINTC_enableHostInterrupt (hnd, 10);
  // 获得正在等待的doorbell中断状态
  CSL_SRIO_GetDoorbellPendingInterrupt (hSrio, 0, &doorbellStatus);
  // 如果有doorbell中断正在等待,则清除正在等待的doorbell中断,以等待进入下一次中断
  CSL_SRIO_ClearDoorbellPendingInterrupt (hSrio, 0, doorbellStatus);
}

2、INT_Flag标志位在别的函数中被调用时值始终是0,这是为什么?

3、选择INTDST4的时候可以配置interrupt rate,看了手册对这不是很明白,请问中断速率是什么?

user4683768:

回复 Nancy Wang:

1、 CSL_SRIO_GetDoorbellPendingInterrupt (hSrio, 0, &doorbellStatus);// 如果有doorbell中断正在等待,则清除正在等待的doorbell中断,以等待进入下一次中断CSL_SRIO_ClearDoorbellPendingInterrupt (hSrio, 0, doorbellStatus);程序中这两句就是对doorbell标志的清除,请问清除doorbell标志需要在进入到服务子函数就立即清除吗?
2、SRIO是参考stk进行的修改,中断部分是参照cpIntc.c进行的修改,INT_Flag在别的函数中有if(INT_Flag),等待INT_Flag置1,但是中断服务函数执行完之后,INT_Flag仍然是0
3、interrupt rate应该怎么设置寄存器?怎么配置INTDSTn_RATE_CNTL和INTDSTn_RATE_DIS寄存器

Nancy Wang:

回复 user4683768:

1、不是立即清除,是等cpu读完ICSR之后再清除。具体流程可以看一下srio手册2.3.9.3章节。2、INT_Flag在哪里清零了吗?在你贴出来的代码里没看到。3、STK的代码里有KeyStone_SRIO_Init_drv.c .

user4683768:

回复 Nancy Wang:

1、INT_Flag的调用程序如下:
void user_ser(void)
{while(1){if(INT_Flag){printf("waiting next interrupt");INT_Flag=0;}}
}
程序执行完中断服务函数之后回到此函数if(INT_Flag)处,但是INT_Flag的值仍然为0;
2、KeyStone_SRIO_Init_drv.c中因为使用的是INTDST16,所以、没有Interrupt rate的配置,如果interrupt control reg[0]=1,选择INTDST4的时候需要配置Interrupt rate,这个是跟我隔多长时间响应一次doorbell有关系吗?我怀疑是不是doorbell发送太快导致dsp来不及响应
3、请问DSP对FPGA发送过来的doorbell是自动响应的吗?

Nancy Wang:

回复 user4683768:

Interrupt pacing requires DSP core rewrite INTDSTn_RATE_CNT register after each interrupt service to enable the next interrupt, otherwise, the interrupt will not be trigger again regardless of the internal interrupt status changes. This is the common reason user only sees one SRIO interrupt。
看一下是不是这个原因造成的。

赞(0)
未经允许不得转载:TI中文支持网 » C6678的SRIO中断问题
分享到: 更多 (0)