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.
工具/软件:TI-RTOS
你好!
我尝试了以下操作:
1.在开发板上编译并执行 boot_demo1示例(使用 TM4C129ENCPDT)-正常工作
2.修改了目标 MCU 并在我自己的板上运行 boot_demo1 (使用 TM4C129CNCPDT)-正常工作
3.使用了我自己的使用 TI-RTOS 的项目并添加了对 ROM_UpdateUART()的调用-当我调用 ROM_UpdateUART()时,程序停止响应,显然没有更新。
在调用 ROM_UpdateUART()之前,UART0通过 TI-RTOS 运行良好。
如果我使用 TI-RTOS、是否有任何特殊的方法来执行默认(UART) ROM 引导加载程序?
谢谢!
问题已解决!
事实证明、执行停止所有中断的代码和关闭 UART (使用 RTOS 的 UART_CLOSE ()例程)以及重新初始化 UART 是不够的。
我缺少它的原因是完全退出 BIOS。
因此、该解决方案包含3个部分:
1.编写一个函数,该函数将处理所有中断和 UART 内容,然后执行 ROM_UpdateUART()
2.将此函数添加到"atexit"例程列表中
3.调用 BIOS_exit(),它将终止所有 RTOS 任务和时钟(然后执行"atexit"例程)。
我添加的是我现在使用的实际代码、以防其他人出现同样的问题。 当需要更新固件时,我只需要执行“ExecuteUpdateFirmware()”,这就是...
空 ExecuteUpdateFirmware(){ System_atexit( UpdateFirmware ); BIOS_exit (0); } void UpdateFirmware (int val){ //禁用 SysTick 及其中断 ROM_SysTickIntDisable(); ROM_SysTickDisable(); //禁用所有中断 HWREG (NVIC_DIS0)= 0xffffffff; HWREG (NVIC_DIS1)= 0xffffffff; HWREG (NVIC_DIS2)= 0xffffffff; HWREG (NVIC_DIS3)= 0xffffffff; //准备 UART0 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART0); ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); // //将 GPIO PA0和 PA1设置为 UART。 // ROM_GPIOPinConfigure (GPIO_PA0_U0RX); ROM_GPIOPinConfigure (GPIO_PA1_U0TX); ROM_GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); // //将 UART0配置为9600、n、8、1 // gSysClockFreq 是先前返回的值 //通过调用 SysCtlClockFreqSet() // ROM_UARTConfigSetExpClk (UART0_BASE、gSysClockFreq、9600、 (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE | UART_CONFIG_WLEN_8)); // //启用 UART 操作。 // ROM_UARTEnable (UART0_BASE); //调用内置引导加载程序例程 ROM_UpdateUART(); }