板子是我们自己做的,发现程序执行前需要调用GEL_Reset才能正常执行,执行System Reset不能起到这种效果。向大家请教两者的区别在哪?
为进一步找到问题所在,对比调用和不调用GEL_Reset程序执行的轨迹,从_int00开始执行,发现不执行GEL_Reset的话,程序执行到BIOS_init的EXC_init的00A298A8 行代码后,会进入中断HWI_NMI。而执行GEL_Reset的话程序则不会进入中断。
00A298A0 EXC_init:
00A298A0 026803E2 MVC.S2 TSR,B4
00A298A4 02118FDA OR.L2 12,B4,B4
00A298A8 0D1003A2 MVC.S2 B4,TSR
00A298AC 000C0362 B.S2 B3
因为程序最终要烧到flash,没办法通过仿真器GEL_Reset执行,所以想知道GEL_Reset执行了那些不同于System Reset的操作,从而把这部分操作写入bootloader里,来让程序正常执行。或者有什么其他的解决办法?
Gary Wu:
你好!请参考如下文档《TMS320C6000 Boot Mode and Emulation Reset》
http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=spra978&track=no
wei wang14:
回复 Gary Wu:
首先谢谢您的回复!
通过看您给出的资料,确定了一点:GEL_Reset和Debug->CPU Reset是等效的。但还是不清楚下图中红圈中的两者有什么不同。
因为我们上一版的硬件,执行System Reset,之后Load程序,执行就可以跑起来。并且烧进flash的程序也能正常引导、运行。
而现在板子需要先执行System Reset,再执行CPU Reset,之后Load程序,才能正常执行,否则会跳到HWI_NMI。所以用我们原来的bootloader,程序跑不起来了,不知道什么原因,可能是缺少了CPU Reset这一步所做的操作。我们想把这部分操作加进去但又不知道它做了哪些工作,您有什么建议?
硬件上可能与此相关的改动有EMIF口、VPort口。