大家好,这个问题困惑我很久,希望不吝赐教!
我在测试例程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_ISRNMI_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例程基础上加入自己的一些函数,但是发现无法进入到中断服务函数,请问你后面注明怎么解决的?