ZHCU022AF July 2010 – September 2022
将程序计数器设定到内存位置 0x1000 来启动 BSL。堆栈总是被复位,且 RAM 被清除。应该注意的是,GIE 位没有被禁用,所以如果不需要中断,应该通过调用应用来完成该操作,如果使用中断,则应该从“返回到BSL”适当地返回。
由于堆栈被复位,位置 0x1000 也可以作为 C 函数被调用,如下述示例代码所示:
__disable_interrupt();
((void (*)())0x1000)();
如果在调用 USB BSL 之前 USB 堆栈正在运行,则必须先断开此 USB 堆栈。下述示例显示了 C 中建议的序列:
TI 建议清除 BSL 应用程序中使用的任何模块寄存器的配置,因为外部应用程序的配置可能会中断 BSL 应用程序并导致意外行为。一个示例是在 USB BSL 中,Timer_B 模块用于时钟初始化。如果外部应用程序也使用了 Timer_B ,则可能会导致 BSL 初始化失败。
__disable_interrupt();
USBKEYPID = 0x9628; // Unlock USB configuration registers
USBCNF &= ~PUR_EN; // Set PUR pin to hi-Z, logically disconnect from host
USBPWRCTL &= ~VBOFFIE; // Disable VUSBoff interrupt
USBKEYPID = 0x9600; // Lock USB configuration register
__delay_cycles(500000);
((void (*)())0x1000)(); // Call BSL
TI 建议在各种主机上测试此序列。