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

c6455检测到doorbell中断标志,但是进不了中断服务程序

fpga给c6455发doorbell中断,从DOORBELL0_ICSR寄存器来看是收到了中断信号,但是进不了中断服务函数,配置为1x模式,srio可以进行nwrite等操作,

我的doorbell中断配置如下:

在dsp/bios中的配置:

bios.HWI.instance("HWI_INT10").fxn = prog.extern("srio_db_ISR");

bios.HWI.instance("HWI_INT10").interruptSelectNumber = 20;

bios.HWI.instance("HWI_INT10").useDispatcher = 1;

中断服务程序为:

void srio_db_ISR(void)

{

Uint32 doorbell;

printf("enter doorbell interrupt \n");

//read doorbell.

doorbell = SRIO_REGS->DOORBELL_INTR[0].DOORBELL_ICSR;

//printf("received doorbell value %d\n",doorbell);

//clear doorbell interrupt

SRIO_REGS->DOORBELL_INTR[0].DOORBELL_ICCR = doorbell;

SRIO_REGS->INTDST_RATE_CNTL[0] = 0;

……………

}

请问还有那些需要注意的?谢谢

Shine:

请检查一下总中断CSR有没有使能?IFR对应的标志位有没有置1?

user6027759:

回复 Shine:

我查看了寄存器,如下图

请问有什么问题?另外我还使用了i2c中断,HWI_INT4事件是16,i2c中断能正常工作。

user6027759:

回复 Shine:

另外我的程序是跑在dsp/bios上的

下面是关于中断的初始化

srioRegs->LSU_ICCR = 0xFFFFFFFF; for (i = 0; i < 4; i++) { srioRegs->LSU_ICRR[i] = 0x11111111; }

srioRegs->ERR_RST_EVNT_ICCR = 0xFFFFFFFF; for (i = 0; i < 4; i++) { srioRegs->DOORBELL_INTR[i].DOORBELL_ICCR = 0xFFFFFFFF; srioRegs->DOORBELL_INTR_ROUTE[i].DOORBELL_ICRR = 0x11111111; srioRegs->DOORBELL_INTR_ROUTE[i].DOORBELL_ICRR2 = 0x11111111; }

Shine:

回复 user6027759:

看了一下IFR=0x8,您把SRIO中断映射到INT10,IFR对应的INT10并没有置1,表示中断没有发生。CSR.bit0 GIE位也没有置1,使能总中断。检查一下INTMUXn是否把中断事件映射到INT10了?

另外,您可以按照配置I2C中断的方法配置SRIO。

user6027759:

回复 Shine:

INTMUXn中断事件映射成功,CSR.bit0我强制置1了,但是fpga发送门铃中断还是进不了中断函数。

另外我就是用i2c的方法配置的doorbell中断!

我调试c6678发现能否进中断函数跟FPGA的门铃信息有关。

请问这跟门铃信息的值相关吗,FPGA需要写多少?

Shine:

回复 user6027759:

你把IFR.int10位强制置1看能不能进中断?

user6027759:

回复 Shine:

IFR.int10无法控制,只能控制ISR.int10是可以进入中断函数的

user6027759:

回复 user6027759:

请问有什么建议

Shine:

回复 user6027759:

您的意思是不能手动改IFR寄存器?进入中断的条件是需要IFR置1,GIE使能,这两个条件需要同时满足,才会跳转到中断子程序。

赞(0)
未经允许不得转载:TI中文支持网 » c6455检测到doorbell中断标志,但是进不了中断服务程序
分享到: 更多 (0)