在调用API函数Flash_Program()编辑片内Flash时,通过单步调试,查看汇编语言其在关闭看门狗时将看门狗软复位的标志位WDFLAG位清零
$Flash28_Utils.asm:26:40$, Fl28x_WatchDogDisable:
00a42f: 7622 EALLOW 00a430: F5A97029 MOV @AL, *(0:0x7029)
00a432: 5068 ORB AL, #0x68 (1)
00a433: F4A97029 MOV *(0:0x7029), @AL
00a435: 761A EDIS 00a436: 0006 LRETR
然而,通过调用void DisableDog(void)函数关闭看门狗时,WDFLAG位并没有清零
130 EALLOW;
DisableDog:
339fa1: 7622 EALLOW 131 SysCtrlRegs.WDCR= 0x0068; (2)
339fa2: 761F01C0 MOVW DP, #0x1c0
339fa4: 56BF6829 MOVB @0x29, #0x68, UNC
132 EDIS;
339fa6: 761A EDIS
原因为(1)中用了按位或,在软启动后给WDFLAG写1,使得该位清零,这个是必须这样做吗?
除了TheWDFLAGbitis onlysetif arising edgeonWDRSTsignalis detected(aftersynchandan8192SYSCLKOUTcycledelay)andthe XRSsignalishigh该方法,还有什么方法使得看门狗在不软复位的情况下能够使WDFLAG位置1?
希望大家能够帮忙,先谢谢了!
Young Hu:
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.
就只有文档上说的这些了。
在调用API函数Flash_Program()编辑片内Flash时,通过单步调试,查看汇编语言其在关闭看门狗时将看门狗软复位的标志位WDFLAG位清零
$Flash28_Utils.asm:26:40$, Fl28x_WatchDogDisable:
00a42f: 7622 EALLOW 00a430: F5A97029 MOV @AL, *(0:0x7029)
00a432: 5068 ORB AL, #0x68 (1)
00a433: F4A97029 MOV *(0:0x7029), @AL
00a435: 761A EDIS 00a436: 0006 LRETR
然而,通过调用void DisableDog(void)函数关闭看门狗时,WDFLAG位并没有清零
130 EALLOW;
DisableDog:
339fa1: 7622 EALLOW 131 SysCtrlRegs.WDCR= 0x0068; (2)
339fa2: 761F01C0 MOVW DP, #0x1c0
339fa4: 56BF6829 MOVB @0x29, #0x68, UNC
132 EDIS;
339fa6: 761A EDIS
原因为(1)中用了按位或,在软启动后给WDFLAG写1,使得该位清零,这个是必须这样做吗?
除了TheWDFLAGbitis onlysetif arising edgeonWDRSTsignalis detected(aftersynchandan8192SYSCLKOUTcycledelay)andthe XRSsignalishigh该方法,还有什么方法使得看门狗在不软复位的情况下能够使WDFLAG位置1?
希望大家能够帮忙,先谢谢了!
mangui zhang:
相关问题
http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/68055.aspx
在调用API函数Flash_Program()编辑片内Flash时,通过单步调试,查看汇编语言其在关闭看门狗时将看门狗软复位的标志位WDFLAG位清零
$Flash28_Utils.asm:26:40$, Fl28x_WatchDogDisable:
00a42f: 7622 EALLOW 00a430: F5A97029 MOV @AL, *(0:0x7029)
00a432: 5068 ORB AL, #0x68 (1)
00a433: F4A97029 MOV *(0:0x7029), @AL
00a435: 761A EDIS 00a436: 0006 LRETR
然而,通过调用void DisableDog(void)函数关闭看门狗时,WDFLAG位并没有清零
130 EALLOW;
DisableDog:
339fa1: 7622 EALLOW 131 SysCtrlRegs.WDCR= 0x0068; (2)
339fa2: 761F01C0 MOVW DP, #0x1c0
339fa4: 56BF6829 MOVB @0x29, #0x68, UNC
132 EDIS;
339fa6: 761A EDIS
原因为(1)中用了按位或,在软启动后给WDFLAG写1,使得该位清零,这个是必须这样做吗?
除了TheWDFLAGbitis onlysetif arising edgeonWDRSTsignalis detected(aftersynchandan8192SYSCLKOUTcycledelay)andthe XRSsignalishigh该方法,还有什么方法使得看门狗在不软复位的情况下能够使WDFLAG位置1?
希望大家能够帮忙,先谢谢了!
chang qing:
回复 Young Hu:
这个我看到了,我想知道API函数中关看门狗为什么要用按位或?
在调用API函数Flash_Program()编辑片内Flash时,通过单步调试,查看汇编语言其在关闭看门狗时将看门狗软复位的标志位WDFLAG位清零
$Flash28_Utils.asm:26:40$, Fl28x_WatchDogDisable:
00a42f: 7622 EALLOW 00a430: F5A97029 MOV @AL, *(0:0x7029)
00a432: 5068 ORB AL, #0x68 (1)
00a433: F4A97029 MOV *(0:0x7029), @AL
00a435: 761A EDIS 00a436: 0006 LRETR
然而,通过调用void DisableDog(void)函数关闭看门狗时,WDFLAG位并没有清零
130 EALLOW;
DisableDog:
339fa1: 7622 EALLOW 131 SysCtrlRegs.WDCR= 0x0068; (2)
339fa2: 761F01C0 MOVW DP, #0x1c0
339fa4: 56BF6829 MOVB @0x29, #0x68, UNC
132 EDIS;
339fa6: 761A EDIS
原因为(1)中用了按位或,在软启动后给WDFLAG写1,使得该位清零,这个是必须这样做吗?
除了TheWDFLAGbitis onlysetif arising edgeonWDRSTsignalis detected(aftersynchandan8192SYSCLKOUTcycledelay)andthe XRSsignalishigh该方法,还有什么方法使得看门狗在不软复位的情况下能够使WDFLAG位置1?
希望大家能够帮忙,先谢谢了!
chang qing:
回复 mangui zhang:
这个帖子我看过,但还是解决不了我的问题,会是我的程序一直在复位重启。。。