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

C6678的IPC中断无法进入ISR

大家好,这个问题困惑我很久,希望不吝赐教!

    我在测试例程IPC_example_on_6678时,各核能够响应IPC中断,并进入中断服务函数。但在开发基于Self Test Kit的IPC中断时,却发现怎么都进不了IPC中断服务函数(即使核0直接给自己发IPC中断)。代码如下:
void ipc_config(void)
{
    gpCGEM_regs->INTMUX1 = (CSL_GEM_IPC_LOCAL<<CSL_CGEM_INTMUX1_INTSEL7_SHIFT);
    CPU_interrupt_enable((1<<7));
}
void ipc_test()
{
    KICK0 = KICK0_UNLOCK;
    KICK1 = KICK1_UNLOCK;
    *(volatile unsigned int *) iIPCGR0ADDR |= 1;
    KICK0 = KICK_LOCK;
    KICK1 = KICK_LOCK;
}
void interrupt ipc_isr()
{
    …..
}

vectors:
VEC_RESET Nested_Exception_service_routine ;Nested exception VEC_ENTRY NMI_ISR ;NMI/Exception
VEC_DUMMY ;RSVD
VEC_DUMMY ;RSVD
VEC_DUMMY ;interrupt 4
VEC_DUMMY ;interrupt 5
VEC_DUMMY ;interrupt 6 VEC_ENTRY ipc_isr() ;interrupt 7 VEC_DUMMY ;interrupt 8 VEC_DUMMY ;interrupt 9
VEC_DUMMY ;interrupt 10
VEC_DUMMY ;interrupt 11
VEC_DUMMY ;interrupt 12
VEC_DUMMY ;interrupt 13
VEC_DUMMY ;interrupt 14
VEC_DUMMY ;interrupt 15

其他帖子中也有相同的问题:
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/29864.aspx

另外,
1、在IPC_example_on_6678中,中断初始化时,使能了NMI,这和IPC中断相关么?
2、csl_intc.h对应的CSL中断库中包含有中断向量表,而Self Test Kit也有自定义的中断向量表,二者同时使用,中断会冲突么?

hongkun ma:

在IPC_example_on_6678中,中断初始化时,使能了NMI,这和IPC中断相关么?

NMIE 必须使能,GIE使能,所有INT4-INT15才会有效。

IPC你映射到INT7,所以,NMIE和GIE都要打开才可以。

Shine:

回复 hongkun ma:

1.请检查一下IFR标志位是否置1? IER, GIE使能位是否使能?2. 不会互相影响,Interrupt Service Table Pointer (ISTP)只能指向一个中断向量表。

user3500278:

回复 Shine:

你好,

      今天查看了下寄存器,TSR和CSR的GIE标志位都使能了,IER的NMI、7号中断标志位也置1了。但核0在写入自己的IPC寄存器IPCGR0地址(0x02620240)后,IFR的7号标志位并未置1,也并没有进入中断服务函数。请问IPC中断还有什么需要特别设置的地方?

hongkun ma:

回复 user3500278:

Zhangtao Jiang

你好,

      今天查看了下寄存器,TSR和CSR的GIE标志�都使能了,IER的NMI、7号中断标志位也置1了。但核0在写入自己的IPC寄存器IPCGR0地址(0x02620240)后,IFR的7号标志位并未置1,也并没有进入中断服务函数。请问IPC中断还有什么需要特别设置的地方?

seareen xiao:

回复 user3500278:

你好,请问你的问题解决了吗?我也遇到同样的问题了

user3500278:

回复 seareen xiao:

能试的方法都试了,还是没解决,后来就stk和csl混着用了

user5267556:

回复 user3500278:

您好,我最近也在用6678做多核通信,我是把IPC_LOCAL映射到 INT 12 ,core1往共享存储空间缓存数据到一定数量以后触发core1的中断代码如下:
void Interrupt_Init(void)
{
gpCGEM_regs->INTMUX1=0;
gpCGEM_regs->INTMUX3=0;
gpCGEM_regs->INTMUX2=0;

gpCGEM_regs->INTMUX1 = (CSL_GEM_GPINT8<<CSL_CGEM_INTMUX1_INTSEL4_SHIFT);
gpCGEM_regs->INTMUX1 = (CSL_GEM_TINT8L<<CSL_CGEM_INTMUX1_INTSEL5_SHIFT);
gpCGEM_regs->INTMUX1 = (CSL_GEM_GPINT10<<CSL_CGEM_INTMUX1_INTSEL6_SHIFT);
gpCGEM_regs->INTMUX1 = (CSL_GEM_GPINT11<<CSL_CGEM_INTMUX1_INTSEL7_SHIFT);
gpCGEM_regs->INTMUX1 = (CSL_GEM_IPC_LOCAL<<CSL_CGEM_INTMUX3_INTSEL12_SHIFT);CPU_interrupt_enable((1<<6)|(1<<4)|(1<<5)|(1<<7));

}
但是在.asm文件里我
.refIPC_ISR

NMI_ISR:
VEC_DUMYIPC_ISR()/*带不带这个小括号都报错*/
以后编译出错错误信息为[E0004] No parameters available

请问这是怎么回事,是我哪里设置错了吗?
希望大神们能尽快回答,本人不胜感激

user4240389:

您好,请问您的问题解决了没有。我在调试C6678时,也遇到了同样的问题,无法进入到IPC中断服务函数,我查看了IPCGR寄存器,发现往IPCGR寄存器0位写1时没有写进去,尝试了好多方法都不行

您的问题如果已经解决了,能否给我一些指导,非常感谢

user3500278:

回复 user4240389:

你好,stk中的ipc通信问题一直没有解决。但根据ti文件夹里的ipc例程(IPC_example_on_6678),直接调用csl库中的ipc相关函数是可以实现ipc中断的。希望能帮到你

user4683768:

回复 user3500278:

你好,我现在用的就是IPC_example_on_6678例程基础上加入自己的一些函数,但是发现无法进入到中断服务函数,请问你后面注明怎么解决的?

赞(0)
未经允许不得转载:TI中文支持网 » C6678的IPC中断无法进入ISR
分享到: 更多 (0)