TI中文支持网
TI专业的中文技术问题搜集分享网站

TM4C1231E6PM使用bootloader时程序跳转的问题

芯片TM4C1231E6PM,做bootloader通过SD卡升级应用程序,本来想在应用程序中跳回bootdoader升级应用程序,升级完后又跳到应用程序中运行。刚开始应用程序开的资源很少,可以实现这个功能。后来应用程序中开的资源多了,跳转就出问题了。具体如下

1、从应用程序跳转到bootloader正常(跳转之前关闭了外设及对应中断),升级完程序后跳转到应用程序,就死在这里了。但是如果上电后先进入到bootloader程序,升级程序后跳转到应用程序就OK,因此怀疑是应用程序开的什么资源影响的。应用程序中跳转代码如下

OS_ENTER_CRITICAL();
SysTickDisable();
SysTickIntDisable();

ROM_UARTDisable(UART0_BASE);
ROM_IntDisable(INT_UART0); MAP_SysCtlPeripheralDisable(SYSCTL_PERIPH_UART0); 

__asm(" MOVW R0, #(0x00000000 & 0xffff)\n"
" MOVT R0, #(0x00000000 >> 16)\n"
" MOVW R1, #(0xE000ED08 & 0xffff)\n"
" MOVT R1, #(0xE000ED08 >> 16)\n"
" STR R0, [R1]\n"
" LDR SP, [R0]\n"
" LDR R0, [R0, #4]\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" NOP\n"
" BX R0\n");
OS_EXIT_CRITICAL();

2、既然这样跳转有问题,我又想在应用程序中开启看门狗使系统复位进入bootloader,但是系统没有复位,而是进入到FaultISR处。开启看门狗代码如下

SysCtlPeripheralEnable(SYSCTL_PERIPH_WDOG0);
// Check to see if the registers are locked, and if so, unlock them.
if(WatchdogLockState(WATCHDOG0_BASE) == true)
WatchdogUnlock(WATCHDOG0_BASE);
WatchdogResetEnable(WATCHDOG0_BASE);
WatchdogReloadSet(WATCHDOG0_BASE,10);
WatchdogEnable(WATCHDOG0_BASE);

请帮我看看这两个问题原因在哪?如何解决,谢谢。

xyz549040622:

你这个问题太高大上了,等待TI的员工来解决吧。

赞(0)
未经允许不得转载:TI中文支持网 » TM4C1231E6PM使用bootloader时程序跳转的问题
分享到: 更多 (0)