Hi all,
由于在论坛里面看到说在写IPC寄存器之前先要向KICK0、
KICK1寄存器写固定的值进行解锁。由于这两个寄存器没
有专门的寄存器,只有地址。只能对地址进行操作,比如
*(volatile int*)(0x02620038) = value,但是这样操作在
内存里面看到数据没有写进去。请问是怎么回事?
Thanks
Nick
Zhan Xiang:
不是很明白你的问题,CSL提供了下面的函数进行解锁,你只要调用对应的代码就行。
该函数实现是先将bootcfg寄存器结构体指针hBootCfg指向了boot config的基地址,这样就能直接进行寻址。你可以参考CSL的源码。
CSL_IDEF_INLINE void CSL_BootCfgUnlockKicker (void)
{
hBootCfg->KICK_REG0 = 0x83e70b13;
hBootCfg->KICK_REG1 = 0x95a4f1e0;
return;
}
,
Nick wang:
Hi Zhan Xiang,
感谢你的回复。但是我在程序中调用csl库中的CSL_BootCfgUnlockKicker()函数,但是程序跑起来之后,通过JTAG
看DSP的内存,实际KICK0、KICK1地址处仍然为0,也就是说数值没有写进去。请问要写这个寄存器需不需要其他别的
操作呢?
另外,请问我如果想核0boot其他核,需要写IPC寄存器触发IPC中断,将其他核带出IDLE状态,是不是需要先写
KICK0、KICK1寄存器呢?
Thanks a lot
Best regards,
Nick
,
Zhan Xiang:
KICK寄存器有可能是只写的寄存器,我会找同事确认,只要你按照顺序写,就能实现解锁。
因为IPC寄存器是通过KICK保护的,所以必须先写KICK解锁,将其他core的启动地址写到magic address,随后再触发IPC就可以boot其他core了。
,
Nick wang:
Hi Zhan Xiang
感谢你的帮助。现在可以对KICK0、KICK1寄存器操作了。
Thanks a lot
Best regards,
Nick
,
招财猫了个咪:
你好,请问你是怎么做的可以对KICK0,KICK1寄存器操作了,非常感谢
,
asher chou:
你好,请问你解决了么,我现在遇到问题,写kick0出现bus error