注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
flyangus的个人空间 https://home.eeworld.com.cn/space-uid-340757.html [收藏] [复制] [分享] [RSS]
日志

Tiva Bootloader 记录一

热度 1已有 3497 次阅读2014-5-3 22:21 |个人分类:TI| 应用程序, flash, Flash, 记录, 网站

Tiva M4的Bootloader有两种模式写,一种是要写一小段bootloader程序,先下载下去,然后再写应用程序,写的时候注意Flash的位置,我调试了部分成功,还是有一些诡异的问题,这种模式扩展性强,第二种是用到ROM中的ROM_Update****相关的函数,这种模式和写常规的应用程序无区别,就是不具备扩展性,用起来方便,放上代码吧,注意ROM_UpdateUART不用下载boot_serial,和通常的应用程序一样写,flash偏移位置0x0000000。
问题最终还是没有结局,等那天再调试看看,或有人给出答案吧。
代码:
#define TARGET_IS_BLIZZARD_RB1
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "inc/hw_nvic.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "driverlib/uart.h"
void
JumpToBootLoader(void)
{
    //
    // We must make sure we turn off SysTick and its interrupt before entering
    // the boot loader!
    //
    ROM_SysTickIntDisable();
    ROM_SysTickDisable();
    //
    // Disable all processor interrupts.  Instead of disabling them
    // one at a time, a direct write to NVIC is done to disable all
    // peripheral interrupts.
    //
    HWREG(NVIC_DIS0) = 0xffffffff;
    HWREG(NVIC_DIS1) = 0xffffffff;
    ROM_UpdateUART();
}
void
SetupForUART(void)
{
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    //
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    // Configure the UART for 115200, n, 8, 1
    ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200,
                            (UART_CONFIG_PAR_NONE | UART_CONFIG_STOP_ONE |
                             UART_CONFIG_WLEN_8));
    //
    // Enable the UART operation.
    //
    ROM_UARTEnable(UART0_BASE);
}
int main(void)
{
    int i;
    ROM_SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x02);
    for(i=0;i<50;i++)
        ROM_SysCtlDelay(100000);
    SetupForUART();
    ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, 0x04);
    JumpToBootLoader();
    while(1)
    {
    }
}
全部作者的其他最新日志
发表评论 评论 (2 个评论)
回复 tieren428 2014-10-10 21:02
为何我照搬了这段程序,用最新版本LM Flash programmer串口下载,依旧同步波特率就出错呢。我确认ROM_开头的API函数有效,是否可以证明ROM里存在bootloader?我试着调用ROM库的串口接收函数,运行 LM Flash programmer能收到数据。怎么排查问题呢?
回复 flyangus 2014-10-20 13:46
Ti的这块bootloader的确比较诡异,我一开始就是始终不行,然后突然有一次好了以后,就一直没有问题。如果你用固件的bootloader,那肯定是没有问题,我试了很多此了。注意一下,如果用固件的bootloader你应该是从0x0000放置的。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章