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.

TMS320F280049: 自写引导程序C28x运行环境配置汇编指令问题

Part Number: TMS320F280049


通过CAN对280049程序进行更新,自己写引导程序,包括flash API操作。应用程序和升级程序放在不同的FALSH区。

在没有做代码在线升级功能之前,在 f28004x_codestartbranch.asm中将Boot-to-Flash地址(0x080000-0x080001)放一个跳转语句代码LB _c_int00,然后会自动调用boot28.asm进行C28x运行环境配置,最后执行main()函数。

增加代码在线升级功能之后,在 f28004x_codestartbranch.asm中将Boot-to-Flash地址(0x080000-0x080001)放一个跳转语句代码LB _SwitchFunction,进入自定义的函数,需要手动进行C28x运行环境配置,然后再判断升级标志位,如果等于1,则跳转到LB _c_int00,调用boot28.asm进行C28x运行环境配置,最后执行main()函数;如果等于0,则执行升级程序。

下面就是手动进行C28x运行环境配置的汇编代码,请问是否正确?有没有借鉴的例程?(备注:在F28035和F28335上测试过,是可行的。但在F280049上测试不成功,按该汇编代码配置后,然后进行GPIO口配置点亮1个LED,没有成功)

asm(" MOV @SP,#0x0000"); //把16位的立即数0x0000赋给堆栈指针SP
asm(" SPM 0"); //设置乘积移位模式为不移位(正数左移,负数右移)
asm(" SETC OBJMODE"); //目标匹配模式位(OBJMODE)置1,选择C28x目标模式(OBJMODE=0为C27x目标模式)
asm(" CLRC AMODE"); //地址模式位(AMODE)清零,选择C28x指令寻址模式(AMODE=1为C27x指令寻址模式)
asm(" SETC M0M1MAP"); //存储器M0和M1映射模式位(M0M1MAP)置1,在C28x目标模式下,M0M1MAP一直保持为1,这是复位时的默认值
asm(" CLRC PAGE0"); //使用堆栈寻址模式
asm(" MOVW DP,#0x0000"); //把16位的立即数0x0000赋给装载页指针DP,初始化DP指向低 64K 地址
asm(" CLRC OVM"); //溢出模式位清零,关闭溢出模式(累加器中结果正常溢出)
asm(" ASP"); //对齐堆栈指针SP