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.
通过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
额,很奇怪,我在E2E上找到其他工程师发布的同样的帖子,然后在下面补充了问题,但是一直没有工程师回复。
我又催了一下,你可以留意下面这个帖子:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1030032/tms320f280049c-break-at-address-0x3fb02a