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

TMS320C6678: 【TMDXEVM667LE】SRIO_STK例程——中断系统

Part Number:TMS320C6678

SRIO例程

SRIO_Interrupt_Map interrupt_map[]=
{
/*interrupt_event*/ /*INTDST_number*/
{DOORBELL0_0_INT, INTDST_16}, /*route to core 0*/
{DOORBELL0_1_INT, INTDST_16}, /*route to core 0*/
{DOORBELL0_2_INT, INTDST_16}, /*route to core 0*/
{DOORBELL0_3_INT, INTDST_16}, /*route to core 0*/
{DOORBELL0_4_INT, INTDST_16} /*route to core 0*/

{DOORBELL1_0_INT, INTDST_17},

};

1.我想问下是不是只有在这个map进行映射的中断事件才会响应?

执行srio_doorbell_latency_test(0,SRIO_DOORBELL_MSG_LATENCY_TEST);
执行srio_doorbell_latency_test(0,0×27); 

                                                                     debug:两次中断均触发

2.我将doorbell包里的doorbellinfo设置为0x27,那么应该是会映射到DOORBELL1_7_INT中断事件,但是我并没有在map中映射这个事件,那么请问这是正常现象吗?对于这种没有进行映射的中断事件是否会响应?如果会响应的话,那么它默认映射至哪个INTDST?

执行srio_doorbell_latency_test(0,0×20);

                                                                   debug:未进入中断服务程序

3.随后,我在这个map中加入了{DOORBELL1_0,INTDST17},doorbell包里的doorbellinfo设置为0x20,0核没有响应。

Shine:

请参考下面的帖子https://e2echina.ti.com/support/processors/f/processors-forum/21579/srio

,

Zahir Wang:

您提供的这个帖子里关于中断的内容我都明白,我也知道中断的路径。但是就是在调试的时候,想进行验证的时候遇到了上面这两个问题。明明没有进行映射,却能够响应中断服务程序。

执行srio_doorbell_latency_test(0,SRIO_DOORBELL_MSG_LATENCY_TEST);执行srio_doorbell_latency_test(0,0×27); 

                                                                     debug:两次中断均触发

2.我将doorbell包里的doorbellinfo设置为0x27,那么应该是会映射到DOORBELL1_7_INT中断事件,但是我并没有在map中映射这个事件,那么请问这是正常现象吗?对于这种没有进行映射的中断事件为什么会响应?

,

Zahir Wang:

另外我想问下,SRIO_vectors.asm文件如果我想移植到其他工程里,除了把文件复制过去,然后根据需要修改中断向量表之外,还需不需要其他操作?比如#include或者调用之类的操作?

在SRIO例程中.不清楚SRIO_vectors.asm的调用过程?

,

Zahir Wang:

已清楚关于SRIO_vectors.asm文件的使用.

如果想使用该中断向量表共有三部分操作.

1.在中断初始化程序中,进行中断映射等步骤,如下图所示.

2.修改SRIO_vectors.asm文件,将自定义中断程序与中断向量进行捆绑,如下图所示.

3.修改.cmd文件,

在MEMORY里添加如下语句

VECTORS: o = 0x00800000  l = 0x00000200

在SECTIONS里添加如下语句

vecs        >    VECTORS

完成这三步操作应该就可以待中断产生时,响应中断跳入中断服务程序.

,

Shine:

srio_doorbell_latency_test函数只有一个参数Uint32 uiPortNum,您调用的时候传了两个参数。volatile Uint32 uiDoorbell_TSC= 0; //timestamp when doorbell interrupt happensvoid srio_doorbell_latency_test(Uint32 uiPortNum){ Uint32 cycles;

cycles= TSCL; KeyStone_SRIO_DoorBell(uiPortNum, uiPortNum, DSP0_SRIO_BASE_ID+uiPortNum, SRIO_DOORBELL_MSG_LATENCY_TEST);

if(0==uiDoorbell_TSC) asm(" IDLE"); //waiting for doorbell interupt cycles= ((unsigned int)((0xFFFFFFFFl+uiDoorbell_TSC)- (unsigned long long)cycles)+ 1);

printf("doorbell latency is %4d cycles\n\n", cycles);}可以看一下KeyStone_1_SRIO_STK_User's_Guide.doc里的3.3 Doorbell latency,中断是接收到doorbell触发的。

,

Zahir Wang:

我传的第二个参数就是doorbellinfo,为了可视化,我就把它加进了形参里。

中断确实是发送doorbell包产生的,并且我也清楚doorbell里的info位和interrupt event以及INTDST_NUM是相互关联的,是在interrupt map中进行映射的。

因此,我想验证一下这映射关系,进行了两个实验。

1.将doorbellinfo位值设置为interrupt map里并没进行映射的事件,如0x27(对应于DOORBELL1_7_INT),实验结果是0核响应了这个doorbell包。按道理没有进行映射,不是不应该响应嘛,所以我就产生了疑问。

2.将某一事件映射至INTDST17,然后发对应的doorbell包,结果是0核并没有产生中断,应该是符合逻辑的。

,

Shine:

如果不修改例程,也会产生中断吗?发生中断的话,应该是进行中断映射和使能了。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: 【TMDXEVM667LE】SRIO_STK例程——中断系统
分享到: 更多 (0)