您好:
我用 F28388D 芯片(用一个自己开发的电路板)分别在 CPU1和 CPU2上实现不同的功能(工作不同的 LED 灯)。 使用仿真器时、CPU1和 CPU2功能正常运行。 但是将程序刻录到芯片上、移除仿真器、然后重新上电、CPU1和 CPU2无法正常运行。
CPU1和 CPU2程序如下。 您能帮助了解一下有什么问题吗?
CPU1:
空 main (void)
{
//
// 步骤 1. 初始化 系统 控制:
// PLL、 看门狗、 启用 外设 时钟
// 此 示例 函数 位于 f2838x_sysctrl.c 文件中。
//
InitSysCtrl();
EALLOW;
ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0; // PWM时钟为200M
EDIS;
while ( !( MemCfgRegs.GSxMSEL.bit.MSEL_GS8 和
MemCfgRegs.GSxMSEL.bit.MSEL_GS9 & \
MemCfgRegs.GSxMSEL.bit.MSEL_GS10 & \
MemCfgRegs.GSxMSEL.bit.MSEL_GS11 & \
MemCfgRegs.GSxMSEL.bit.MSEL_GS12 & \
MemCfgRegs.GSxMSEL.bit.MSEL_GS13 & \
MemCfgRegs.GSxMSEL.bit.MSEL_GS14 和 \
MemCfgRegs.GSxMSEL.bit.MSEL_GS15 )
{
EALLOW;
MemCfgRegs.GSxMSEL.bit.MSEL_GS8 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS9 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS10 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS11 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS12 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS13 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS14 = 1;
MemCfgRegs.GSxMSEL.bit.MSEL_GS15 = 1;
EDIS;
}
InitGpio();
Dint;
InitPieCtrl();
//
// 禁用 CPU 中断 并 清除 所有 CPU 中断 标志:
//
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
CM_Device_Init (); // CM外设初始化
CPU2_Device_Init (); //μ CPU2外设初始化
GPIO_SetupPinMux (32、 0、0 );
GPIO_SetupPinOptions (32、 1、 0);
GPIO_WritePin (32、 0);
GPIO_SetupPinMux (17、 0、 0);
GPIO_SetupPinOptions (17、 1、 0);
GPIO_WritePin (17、 0);
GpioDataRegs.GPBSET.bit.GPIO32=1; //
#ifdef _flash
uint32_t cnt=0 ;
while (cn<5)
{
DELAY_US (1000000);
GPIO_WritePin (17、 1);
DELAY_US (1000000);
GPIO_WritePin (17、 0);
CNT++;
}
// Device_bootCM (bootmode_boot_to_flash_SECTOR0);
DEVICE_BOOTCPU2 (BOOTMODE_BOOT_TO_FLASH_SECTOR0);
#else
// Device_bootCM (BOOTMODE_BOOT_TO_S0RAM);
#endif
EINT;
ERTM;
while (1)
{
DELAY_US (3000000);
GPIO_WritePin (17、 1);
DELAY_US (3000000);
GPIO_WritePin (17、 0);
CNT++;
}
}
CPU2:
空 main (void)
{
G_softRunerrNo = 0;
G_ipcCpu21Isr0Cnt = 0;
G_ipcCpu2CmIsr0Cnt = 0;
//
// 初始化 设备 时钟 和 外设
//
device_init();
for (;;)
{
//
// 打开 LED
//
GPIO_writePin (16U、 0);
//
// 延迟 一个 位。
//
device_delay_us (500000);
//
// 关闭 LED
//
GPIO_writePin (16U、 1);
//
// 延迟 一个 位。
//
device_delay_us (500000);
}
}
我发现
1 μ s 在、仿真器的情况下运行时、CPU1在 bootCPU2的位置运行到 Device_(bootmode_boot.to-flash_SECTOR0)、CPU1重新启动。
2、如果我删除了 Device_bootCPU2 (bootmode_boot_to_flash_SECTOR0)函数,让 CPU1正常工作、则 CPU1可以 成功离线。