开发硬件:BBB外接SPI FLASH;
开发软件: CCS; AM335X_StarterWare;
参考AM335X_StarterWare,建立CCS裸机工程:
工程1:RBL工程:BOOT上电启动(从SPI FLASH里加载代码到内部RAM运行); 内部RAM空间;
工程2:APP工程:RBL工程代码实现从SPI FLASH里加载APP并跳转运行; 外部DDR空间;
APP工程是应用工程,相比RBL工程,使能了MMU和CACHE等;
在APP代码中,实现软件复位:
(*(void (*)(void))(0x40020000);//参考TRM. Memory Map: Boot ROM 开始地址;
正常应该会复位重启,但实际没有;
请问如何才能在应用程序中实现软件复位?谢谢!
附:
工程1:RBL主函数为:
int main(void)
{
BlPlatformConfig(); // Configures PLL and DDR controller
ImageCopy(); // Copies application from spi flash to DDR
UARTPuts("Jumping to StarterWare Application...\r\n\n", -1);
/* Giving control to the application */
appEntry = (void (*)(void)) entryPoint;
(*appEntry)( );
return 0;
}
工程2:APP复位函数为:
int SoftReset(void)
{
CacheDisable(CACHE_ALL); // 调试测试,关闭CACHE;
IntMasterIRQDisable();//调试测试,关闭总中断;
IntAINTCInit();//调试测试,初始化中断;
/// WdtSoftReset(); // 用看门狗可以复位;
// 跳转到复位
// (*(void (*)(void))(0x40000000))();
// (*(void (*)(void))(0x402F0400))();
// (*(void (*)(void))(0x40020000))();
// (*(void (*)(void))(0x402F0400))();
// ((void(*)(void))0x40020000)();
(*(void (*)(void))(0x40020000))();
for(;;);
return 0;
}