TI专家
你好,我公司正在使用TMS570LS3137PGE这款芯片,使用的开发环境是IAR
对于STC的self-test我有几个疑问:
1、首先我看手册“technical reference manual” page341有要保存的所有寄存器的列表
对于上面的1我有几个疑问,“PC”和“R15”不就是同一个寄存器吗?寄存器“SPSR”需要保存吗?
如果我想保存上面所列的所有寄存器怎么保存,能不能给我保存所有寄存器的例子。下面是我自己尝试保存寄存器的代码
2、self-test的过程是:(1)先保存相关寄存器;(2)然后进入IDLE状态进行自检,自检完成会复位;(3)还原CPU相关寄存器;
我的疑问是在完成(2)之后会进行复位,那我就无法执行(3),TMS570是怎么完成自检的?
3、我在HALCoGen上看到STC不能工作在debug模式下,我用“release”模式下运行,效果和debug模式下是一样的,如果不能再debug模式下运行的话,那应该 运行在什么模式下?
4、在产品软件开发中,self-test可以放在main函数里面吗?
Jay:
你好。
对于上面的1我有几个疑问,“PC”和“R15”不就是同一个寄存器吗?寄存器“SPSR”需要保存吗?
如果我想保存上面所列的所有寄存器怎么保存,能不能给我保存所有寄存器的例子。下面是我自己尝试保存寄存器的代码
R15和PC好像是同一个。至于SPSR,多保存一些总比少保存的好。你可以试试,复位后会不会用到这个寄存器。
2、self-test的过程是:(1)先保存相关寄存器;(2)然后进入IDLE状态进行自检,自检完成会复位;(3)还原CPU相关寄存器;
我的疑问是在完成(2)之后会进行复位,那我就无法执行(3),TMS570是怎么完成自检的?
还原CPU相关寄存器只能在(2)结束后来做。这也就是要求你的程序在复位后要进行判断。570上有一个寄存器会保存上一次复位的原因,你可以通过判断这个寄存器来确定复位是不是由STC引起的。如果是,那么就去做(3)的工作。
3、我在HALCoGen上看到STC不能工作在debug模式下,我用“release”模式下运行,效果和debug模式下是一样的,如果不能再debug模式下运行的话,那应该 运行在什么模式下?
这里说的不能在Debug模式下工作是指STC不能在仿真是使用。而你这里说的debug和release 是CCS工程中的两种配置,两者是不相干的。测试STC时,要断开仿真器,让CPU自由跑。
4、在产品软件开发中,self-test可以放在main函数里面吗?
可以放在Main中,但是要注意,STC后一定会复位,所以请保存好现场。
Mu Ren:
回复 Jay:
Jay
我这几天认真的想了一下,再加上你的解答,对于STC的selftest有一定的进展,但还是有好多不明白的地方,我把backup的寄存器和restore的寄存器都截图放在附件里面了(公司对程序加密,只能截图),没有在初始化时进行STC自检
第一个问题:
我把程序下载进去后,在SYSTER寄存器里面出现了以下改变,EXTRST、CPURST、WDRST都置“1”了,这是为什么?是我程序的问题吗?如果是的话大概是哪里有问题。
2、在selftest进入“空闲模式”后,会产生复位,程序是不是从_c_int00这个函数处开始执行?如果不是从哪里开始执行?
我首先假设他是从_c_int00这个函数开始执行,我在此时检测CPU是否复位(CPURST是否为1),但程序进入不到_coreRestoreStackPointer_这个函数,这是为什么?暂停后程序停在下图的地方,我把寄存器的restore函数放在这里是否有不妥?应该放在哪边?
stcSelfcheck函数如下:
3、在存储寄存器的函数里面我修改了压入堆栈PC的值,因为我觉如果不修改的话,PC弹出后指向的是上图的_gotoCPUIdle_函数,这是不正确的,不知道我的想法对不对?请指点。修改堆栈PC的值在附件图片backup1.png中
另外,请问可以给我你的邮箱吗?以方便联系,我的邮箱是zhuzl_sciyon@163.com 谢谢
Jay:
回复 Mu Ren:
1. 我试了看复位后的寄存器状态,没有出现你这样的现象。是不是你在下载程序前,寄存器状态就改了。你重新上电,再看看。
2. 复位后程序都是从_c_int00_开始的。看到你调用_coreRestoreStackPointer_后进入undef异常,是不是你没有定义_coreRestoreStackPointer_这个函数呢?_coreRestoreStackPointer_函数放在开头应该没有问题,就是调用完后,不要再往下执行,直接跳到恢复的PC那里。
3. 修改压栈PC的值,不会造成恢复不了吗?不是很明白你的意思。
PS: 我的邮箱: jay-shen@ti.com