Part Number:TMS320F28335
28335使用XINTF模块在power up时会出现跑飞现象,因此按照《ErrataTMS320F2833x, TMS320F2823x DSCs Silicon Errata Silicon Revisions A, 0》5.2章节第13条的建议使用DSP的看门狗模块在POWER UP 后对DSP进行一次复位,使用WDCR寄存器FLAG位判断是否是power-up. 如果是power-up则使用看门狗产生一个复位信号,但执行过程中发现:FLAG位的值并不是每次power-up都是0,有时是1有时是0,if条件有时可以进入然后执行软件复位,有时无法进入,直接跳到else,此时未实施软件复位,请问这个原因是什么?
void SoftWDReset(void) {if((SysCtrlRegs.WDCR&0x0080) == 0)//硬件复位或者上电 {EALLOW; //刚上电 使能看门狗GpioDataRegs.GPBCLEAR.bit.GPIO49 = 1; while(Conut2<200) { Conut2++; }//从GPIO49变低到发出复位信号400us SysCtrlRegs.WDCR= 0x00B8; //0xB8//使能看门狗 触发软件复位 清除硬件复位标志 EDIS; // SysCtrlRegs.WDCR= 0x0000; //触发软件复位 // DELAY_US(50); } else { EALLOW; //清除软件复位标志//关闭看门狗 SysCtrlRegs.WDCR = 0x00E8; GpioDataRegs.GPBCLEAR.bit.GPIO48 = 1; //SysCtrlRegs.WDCR = 0x0068; EDIS; //关闭看门狗//SysCtrlRegs.WDCR = 0x0068; //0x0068 清除FLAG 关闭使能 } }
POWER UP 后RST引脚变高,WDRST信号也会变高,WDRST有个上升沿,此时FLAG是0还是1?按照《TMS320x2833x System Control and
Interrupts Reference Guide》文件(Literature Number: SPRUFB0)3.4.5节的描述,此时FLAG可能是1?那这样是不是错的?
When the XRS line is low, the WDFLAG bit is forced low. The WDFLAG bit is only set if a rising edge on
WDRST signal is detected (after synch and an 8192 SYSCLKOUT cycle delay) and the XRS signal is
high. If the XRS signal is low when WDRST goes high, then the WDFLAG bit remains at 0. In a typical
application, the WDRST signal connects to the XRS input. Hence to distinguish between a watchdog reset
and an external device reset, an external reset must be longer in duration then the watchdog pulse.
Green Deng:
我的理解是,WDFLAG只能用来判断芯片的复位是由watchdog引起的还是由外部设备引起的。
所以,1、当外部设备复位(XRS低)的时候,不管WDRST高低,WDFLAG肯定是低的。
相反,2、当外部设备没有复位(XRS高),WDRST的高低就会决定WDFLAG的高低。
基于第2点,如果芯片上电的时候复位引脚已经被拉高,那么WDFLAG位的高低就会由WDRST来决定。此时如果芯片处于启动中,而WDRST的状态为被控制的话有可能会是1也可能会是0,从而导致WDFLAG有可能是1有可能是0.
故,如果要用WDFLAG来判断是否是芯片power-up,可能在上电时要保持XRS为低的状态,才能保证WDFLAG肯定是0。也就是上电的时候,用电源控制芯片保证MCU芯片的供电要先于复位引脚的供电。但是我没了解过这样会不会对芯片上电有影响,也不知道你这边是否有条件测试
,
li xiang:
感谢回复。
1.“此时如果芯片处于启动中,而WDRST的状态未被控制的话有可能会是1也可能会是0”,这个的意思是:在代码执行到if判断条件时,WDRST的状态不确定吗?按照SPRUFB0文档中看门狗模块的描述,WDRST为低时,XRS也会被拉低,代码能执行到if语句是否说明WDRST为高呢? 那是否可以推测在power-up时,WDRST肯定有个上升沿?
2.“如果要用WDFLAG来判断是否是芯片power-up,可能在上电时要保持XRS为低的状态,才能保证WDFLAG肯定是0。” 请问XRS为低时,看门狗模块正常工作吗?power-up后XRS拉低多长时间?该时间指的是内核1V9上电后到XRS拉高的时间吗?
3.在测试时,有个现象:如果物理连接仿真器的JTAG引脚(与DSP的JTAG口)和U口(与电脑U口),不点击CCS中的(Connect Target)按钮,实际未链接,仅物理连接,此时power-up,每次FLAG都为0,每次都可以正常软复位,请问可能的原因是什么?仿真器是XDS100V3 开发环境CCS6
,
Green Deng:
1、确实,代码能执行到if语句的话应该上电已经完成了。不知道WDFLAG的状态会不会延续。
2、这个问题就如上面我说到的,我也没了解过这样会不会对芯片上电有影响,因为我们身处上海,目前确实没办法进行测试,所以不知道你那边能否测试一下这点。包括1中的情况,可以看一下WDFLAG寄存器的值是否每次都会随机
我能想到的是,连接JTAG的情况下,芯片的TRST引脚是被拉高的。但是不管是datasheet还是TRM都没有讲到TRST跟XRS或者watchdog有什么关系。。。
,
li xiang:
好的 感谢回复 我尝试一下
,
Green Deng:
好的