打印
[汽车MCU – KEA]

KEA128RM WDOG 问题

[复制链接]
2975|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2008雨声|  楼主 | 2015-4-29 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2008雨声 于 2015-4-29 14:38 编辑

实验板:TRK-KEA128,  
开发软件:IAR7.4
KEA128RM  手册上关于WDOG->CS1  复位后的的值为0x80,意思就是看门狗上电默认使能,但上电后wdogState 的值却是0x00?这个怎么解释?
void start(void)
{
    wdogState = WDOG->CS1;
    WDOG_DisableWDOGEnableUpdate();
    common_startup();
    sysinit() ;
    main();
    while(1);
}

在《【经验分享】KE KEA 看门狗不复位的几点说明》文档里面说的WDOG_CS1,WDOG_CS2上电复位后,只能写一次,也不是太理解,因为上电后执行了一次函数WDOG_DisableWDOGEnableUpdate(),后面我又重新初始化了一次 Wdog_Init(1000),  程序里面喂狗,程序正常;如果去掉函数WDOG_DisableWDOGEnableUpdate(),主程序则不能正常工作。

相关帖子

沙发
FSL_TICS_ZJJ| | 2015-4-29 13:28 | 只看该作者
你好!
你上电之后再什么地方看WDOG_CS1[EN]是0的?
你不要直接读wdogState, 你要看WDOG_CS1[EN]寄存器。
另外,关于上电后只写一次,在RM中也讲了,WDOG_CS1,WDOG_CS2很多位是复位之后,只写一次的,如果你写过一次,再重复操作,那么就写不进去了,除非你复位或者写一下Robust write sequence,(0X20C5和0X28D9)这个序列,这样可以在128个bus时钟内更新只写一次的看门狗寄存器。
你说的能正常工作,是因为你WDOG_DisableWDOGEnableUpdate函数中有更新寄存器的序列,然后你紧接着配置开启看门狗,这样当然能工作。
如果你只是禁止看门狗,后面不去配置使能看门狗,那么你看门狗同样是不能工作的。

使用特权

评论回复
板凳
2008雨声|  楼主 | 2015-4-29 14:37 | 只看该作者
通过SWD接口 (JTAG仿真器) 查看  WDOG_CS1[EN]也是0;
之所以通过wdogState = WDOG->CS1 来看,是我当时怀疑仿真器问题;
结果就是两种方式查看的结果是一致的。

“只写一次寄存器”  我的理解可能有误,没有考虑到(0X20C5和0X28D9)序列之后,还是可以写的。

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2015-4-29 14:45 | 只看该作者
2008雨声 发表于 2015-4-29 14:37
通过SWD接口 (JTAG仿真器) 查看  WDOG_CS1[EN]也是0;
之所以通过wdogState = WDOG->CS1 来看,是我当时 ...

好的,我待会看下KEA128复位后WDOG的情况,然后告诉你。

使用特权

评论回复
5
2008雨声|  楼主 | 2015-5-5 22:44 | 只看该作者
FSL_TICS_ZJJ 发表于 2015-4-29 14:45
好的,我待会看下KEA128复位后WDOG的情况,然后告诉你。

你好,实验有结果吗?

使用特权

评论回复
6
FSL_TICS_ZJJ| | 2015-5-7 10:24 | 只看该作者
2008雨声 发表于 2015-5-5 22:44
你好,实验有结果吗?

楼主你好!
不好意思,回复迟了。
我这边实验结果和你一样,也是关闭的,我帮你问下管KEA的工程师,有回复再告诉你。

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2015-5-7 10:38 | 只看该作者
2008雨声 发表于 2015-5-5 22:44
你好,实验有结果吗?

楼主你好!
正如你说的那样,KEA128的看门狗的确是复位后禁止的,这点和手册写的复位后的值不一样。

使用特权

评论回复
8
FSL_TICS_ZJJ| | 2015-5-7 11:30 | 只看该作者
楼主你好!
刚才仔细研究了下,发现,这个和下载文件应该也是有关系的。
我们试的是CW中新建的一个空工程,直接下载复位尝试,发现和你现象一样。
发现,如果masserase之后,第一次进入程序查看看门狗是禁止的。
但是如果点击reset按钮之后,看门狗就默认被关闭了。
然后跟了下复位调用文件 project_settings中Debugger下的initi_kinetis.tcl,发现里面有“:
proc init_debug_modules {} {
    # initialize LR to avoid invalid stack after reset
    reg "User\\/System Mode Registers/LR" = 0xFFFFFFFF
    # clear FPB comparators
    reg "Breakpoint Unit Registers/BP_COMP0" = 0x0
    reg "Breakpoint Unit Registers/BP_COMP1" = 0x0
    # clear DWT function registers
    reg "Core Debug Registers/DEMCR" = 0x1000001
    reg "Data Watchpoint and Trace Unit Registers/DWT_FUNCTION0" = 0x0
    reg "Data Watchpoint and Trace Unit Registers/DWT_FUNCTION1" = 0x0

    # Disable the Watchdog because it may reset the core before entering main()
    #reg "Watchdog timer (WDOG)/WDOG_TOVALH" = 0x03
    #reg "Watchdog timer (WDOG)/WDOG_TOVALL" = 0xE8
    #reg "Watchdog timer (WDOG)/WDOG_CS2" = 0x03   
    #reg "Watchdog timer (WDOG)/WDOG_CS1" = 0x23
}
你可以看到有对看门狗的操作,直接关闭了。如果屏蔽地道看门狗操作代码,再按reset按钮,复位后CS1值就是0X80了。
如果是IAR,我认为,你可以masserase一下,然后看第一次,是否是开启的。
后续如果按复位按钮,就需要查看下复位调用的内部代码情况了,这个和IDE有关。

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-5-7 11:31 | 只看该作者
总结下,文档写的是正确的,复位之后,芯片默认是开启看门狗的。
目前看到现象关闭,是因为编译器做了关闭看门狗的动作。

使用特权

评论回复
10
FSL_TICS_ZJJ| | 2015-5-13 15:41 | 只看该作者
非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

87

帖子

2

粉丝