开发环境:CCS_v9_1
开发板:LAUNCHXL-F28379D
参考资料:control-suite
想实现效果:F28379D两个CPU皆可脱机运行程序:CPU1启动CPU2,CPU2控制PWM模块输出波形
问题描述:
我参考control-suite里面的双核例程,搭建了两个工程:分别为CPU1对应的工程,和CPU2对应的工程。其中CPU1对应的工程烧录模式有3种:RAM、FLASH、STANDALONE_FLASH;CPU2对应的工程烧录模式有2种:RAM、FLASH。
在对CPU1和CPU2使用RAM模式烧录时,CPU2可控制PWM模块输出波形。
现想实现脱机运行,上电后直接让CPU2控制PWM输出波形,CPU1工程配置为STANDALONE_FLASH,CPU2工程配置为FLASH模式。烧录成功后,脱机执行。重新上电后,由CPU2控制的LED灯可以完成闪烁(CPU2程序控制),说明CPU1启动CPU2成功。但问题来了,CPU2控制的PWM模块没有输出PWM波形,但在RAM模式下是可以控制输出的。
为什么CPU1启动CPU2成功,但CPU2没有控制PWM模块输出波形呢?在CPU1工程中已经将PWM模块的控制权交给了CPU2。
Susan Yang:
您使用的是下面的例程?
C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Dual\adc_epwm
我会在测试后给您回复
user4415031:
回复 Susan Yang:
对的,就是这个例程,这个例程里面发现一个情况,就是CPU1工程里面虽然有STANDALONE_FLASH模式,但没有找到对应的用CPU1利用IPC启动CPU2的代码,但在单核例程中是有的。
这是我的代码工程:
3125.F28379D_LANCHPAD_PWM_CPU1_CCSV9_1-20200630.zip
F28379D_LANCHPAD_PWM_CPU2_CCSV9_1-20200630.zip
Susan Yang:
回复 user4415031:
是的,您需要添加下面的代码#ifdef _STANDALONE #ifdef _FLASH // // Send boot command to allow the CPU2 application to begin execution // IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH); #else // // Send boot command to allow the CPU2 application to begin execution // IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_RAM); #endif #endif另外需要注意
The examples provided are built for controlCARD compatibility. For LaunchPad use, some minor modifications may be required.
If using a Launchpad, add a pre-defined symbol within the project properties called "_LAUNCHXL_F28379D". This is required to setup the proper device clocking.
user4415031:
回复 Susan Yang:
您好,感谢您的指导,上述代码已经添加到工程里面了,如下图一。代码对Launchpad时钟也做了修改,倍频后时钟频率为200MHz,如下图二。这些地方我都注意到了,可还是无法让CPU2控制PWM模块输出波形,您可以用我上一个帖子里包含的两套工程代码实验一下吗,那套工程代码就是基于您所说的例程改编的。现在实验好多次了,就是无法达到让CPU2脱机运行,控制PWM模块输出波形的效果。
user4415031:
回复 Susan Yang:
已经可以啦,我把这行命令放到前面了,就可以了,之前那个是放到一个1s的延时后了,导致没有来的及交给CPU2来控制
EALLOW;DevCfgRegs.CPUSEL5.bit.SCI_B = 1;// Transfer ownership of SCI_B to CPU02EDIS;
Susan Yang:
回复 user4415031:
谢谢您的反馈!