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

CC1310 基于NORTOS SDK自定义的BootLoader相关问题

目前在项目中,使用CC1310,将Flash划分为BootLoader和APP分区,发现在BootLoader中无法正常跳转到APP去,目前类似功能是否有可供参考的例程?

另外,因为CC1310在系统起来后,已经将Vector Table复制到SRAM中使用,因此在BootLoader跳转到APP前是否有必要再进行Vector Tabale偏移设置?如果需要,要怎么设置呢?

跳转部分的代码如下:

#define FLASH_START_ADDR         0x00000000

#define APP_START_ADDR             0xC000

typedef void (*pFunction)(void);
uint32_t u4StackTopAddr = *(volatile uint32_t*)APP_START_ADDR;
if(IS_STACK_TOP_ADDR_VALID(u4StackTopAddr))
{uint32_t u4AppResetAddr = *(volatile uint32_t*)(APP_START_ADDR+4);if(u4AppResetAddr > APP_START_ADDR){pFunction Jump_To_Application;Jump_To_Application = (pFunction) u4AppResetAddr;
//HWREG(CPU_SCS_O_VTOR) = (APP_START_ADDR - FLASH_START_ADDR)<<7;__set_MSP(u4StackTopAddr);Jump_To_Application();}
}
其中
u4AppResetAddr的值等于0x15A69,
u4StackTopAddr  的值等于0x20005000

上述代码中,如果有该段语句HWREG(CPU_SCS_O_VTOR) = (APP_START_ADDR – FLASH_START_ADDR)<<7;设置中断偏移量,则在设置后直接出错;

屏蔽掉该句,执行Jump_To_Application();完该条跳转语句后,PC指针等于0x10004618;

也麻烦帮忙看看,是哪里没设置对。

xd z:

回复 Viki Shi:

参考贴子中的跳转代码确实可以实现正常跳转了,谢谢!

不过我这边是NORTOS的工程,应该不存在BIOS/ROM的问题,CCFG中也没有打开TI自带的BootLoader。看前面无法正常跳转的原因在于编写的跳转代码在设置栈顶指针后,执行跳转指令前,看汇编又去栈里面拿PC值导致的:

//原程序中如下C代码对应的汇编如下:
Jump_To_Application = (pFunction) u4AppResetAddr;
ldrr0, [sp]
strr0, [sp, #8]// 这里将跳转指针存储在了栈顶偏移8的位置__set_MSP(u4StackTopAddr);
ldrr0, [sp, #4]
msrmsp, r0 // 这里将APP Code区的栈顶位置设置给了MSP,此时栈顶的位置已经改变了Jump_To_Application();
ldrr0, [sp, #8]//这里跳转前又从栈顶偏8的位置去拿跳转指针自然就会出错了
blxr0//如果将上面的C代码直接改成论坛里面汇编:
asm(" MOV R0, #0x0A000");
asm(" LDR R1, [R0, #0x4] ");
asm(" LDR SP, [R0, #0x0] ");
asm(" BX R1 ");
//则可以从BootLoader正常跳转到APP去;
//另外,如果不想嵌入汇编,还是用C语言实现,我这边将u4AppResetAddr变量定义为register类型的也可以
//因为u4AppResetAddr变量如果为register类型,则在跳转前就不用去栈里面拿跳转指针了
//只是比较奇怪,同样的代码在Keil里面编译生成的汇编会自动把u4AppResetAddr存在寄存器里,但是CCS不会,需要用register强制声明。
//C代码以及对应汇编如下:
register pFunction Jump_To_Application;
Jump_To_Application =(pFunction)u4AppResetAddr;
ldrr1, [sp, #4]
__set_MSP(u4StackTopAddr);
msrmsp, r1
Jump_To_Application();
blxr0

xd z:

回复 Felix ZF:

是的,项目准备自己写BootLoader。

赞(0)
未经允许不得转载:TI中文支持网 » CC1310 基于NORTOS SDK自定义的BootLoader相关问题
分享到: 更多 (0)