This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我使用28375D想通过CPU1去启动CPU2,目前双核程序都下载到各自的RAM中,CPU1知行了 IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM); 发出从RAM启动CPU2的命令,同时也使能CPU1 INT0中断但CPU1一直循环再下面的查询程序中:
do
{
bootStatus = IPCGetBootStatus() & 0x0000000F;
} while ((bootStatus != C2_BOOTROM_BOOTSTS_SYSTEM_READY));
看这句话的意思是从CPU2读取boot状态 但是读取过来的数据一直是个0 这里我不太明白,此时CPU2还没有运行到main函数中,这个boot状态寄存器CPU2是怎么写进去的? CPU1读取这个状态赋值给这个变量bootStatus一直是零没有变化CPU2也应该没启动。
我想请教一下,双核启动这么处理是否正确,是不是还有什么设置我没有使能?如何处理CPU1和CPU2的初始化。谢谢!
uint32_t
IPCGetBootStatus (void)
{
return(IpcRegs.IPCBOOTSTS);
}
上面这个函数读取IPCBOOTS寄存器,BOOTSTS This register is used by CPU2 to pass the boot Status to CPU1. The
data format is software-defined. It can only be written by CPU2. Reset type: CPU2.SYSRSn 。
我想请教对BOOTSTS寄存器的改写在哪部分程序中?
你好,下面这个例程,麻烦您看看
controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Dual\cla_iir2p2z
您好。
RAM(DEBUG)模式下的调试流程:
首先应该注意,cpu1和cpu2的程序应该都被导入到CCS workspace中并最好分别编译一下,
build configuration:
CPU1:CPU1_RAM_DEBUG
CPU2:CPU2_RAM;
然后,
默认是这样配置的,可以看到CPU2加载的也是CPU1的程序!:
如果使用这种配置debug:
CPU2运行起来看一下:
不出所料,两个CPU加载的确实都是CPU1的程序。这个时候在CPU2的程序中打断点,是没有办法设置成功的(因为它根本没有被调试器加载):
按如下更改:
加载正确!
****************************************************************************************
针对您的具体问题,我的上述配置中build configuration都是RAM(DEBUG),看样子您使用的是FLASH(STANDALONE)。在这个模式下这些代码会被加入编译:
如果按照例程中设计的来的话,您还需要修改BOOT相关的寄存器(或相应的RAM上的值)来使用相关的BOOT模式。
例程中使用的是BOOT_FROM_FLASH,下面的状态机没有相关配置,因为这个配置是默认配置,如果不使用状态机中列出的BOOT模式的话,就从FLASH BOOT。
您需要在CPU2的程序中增加写入IPCBOOTSTS的代码来解除CPU1的阻塞。
另外需要注意的是,IPC模块中的寄存器、内存,它们的名字只是名义上的,实际含义完全取决于软件上的定义(用户定义)。
controlsuite是之前C2000的SDK,目前已经停止更新。现在更推荐您使用C2000ware。
建议您如果要看哪个模块的例程,就挑一个专门使用这个模块的例程,不要去选综合性比较强的,这样精力会更加集中。
最后再次向您表示歉意。
如果您有疑问的话欢迎随时向我们寻求帮助