查看: 3388|回复: 6

[原创] 【经验分享】RTC_TSR寄存器读出不正确,咋回事?

[复制链接]

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2014-4-22 17:39:25 | 显示全部楼层 |阅读模式
 客户问题介绍:
·        芯片型号:MK60DN512ZVMD10
·        描述:在程序中,连续不断的读取RTC_TSR寄存器值,并将结果传给上位机,但发现连续读出的值出现前后不匹配的问题,从理论上分析,RTC_TSR寄存器内的值应该逐渐递增的,但从打印的输出结果看,存在个别前后不一致的现象(如图1所示),所以怀疑这是不是芯片的Bug呢?
2.jpg

1

1

            #include   
            #include   
            #include   "cmd_rtcdebug.h"
            #include   "common.h"
             
            extern   "C"
            {
            #include   "wdog.h"
            }
             
            extern   "C"
            int   cmd_rtcdebug(const char *args)
            {
                        uint32_t lowestValue;
                        uint32_t lastFailValue = 0;
                        uint32_t failCountInRow = 0;
                int wdCount = 0;
             
                        lowestValue = RTC_TSR;
             
                        printf("press any key to   exit\r\n");
             
                        while(1)
                        {
                                    uint32_t nextValue =   RTC_TSR;
             
                                    if (uart_kbhit())
                                    {
                                                break;
                                    }
             
                                    if (nextValue <   lowestValue)
                                    {
                                                if   (lastFailValue != nextValue)
                                                {
                                                            printf("RTC   fail: lowest value: %u, next value: %u\r\n", lowestValue, nextValue);
                                                }
                                                lastFailValue   = nextValue;
                                                failCountInRow++;
                                    }
                                    else if (nextValue ==   lowestValue)
                                    {
                                                if   (failCountInRow)
                                                {
                                                            printf("RTC   fails in row: %u\r\n", failCountInRow);
                                                            failCountInRow   = 0;
                                                }
                                    }
                                    else if (nextValue   > lowestValue)
                                    {
                                                if   (failCountInRow)
                                                {
                                                            printf("RTC   fails in row: %u\r\n", failCountInRow);
                                                            failCountInRow   = 0;
                                                }
             
                        if (wdCount > 300)
                        {
                            wdog_refresh();
                            wdCount = 0;
                        }
                        wdCount++;
                       
                                                printf("RTC_TSR:   %u\r\n", nextValue);
                                                lowestValue   = nextValue;
                                    }
                        }
             
                        return 0;
            }
            
       针对第一个猜测,在查阅Errata文档后,大致可以排除;至于第二个猜测,我应对的方法是在每次读取RTC_TSR寄存器之前,添加一个延时函数,经过一段时间的测试后,发现出错的频率虽然没有原来那么多,但还是会出现,看来这是个治标不本的方法啊,只能另想方法啊。
 
       各位网友有没有好的想法,欢迎来讨论!
回复

使用道具 举报

该用户从未签到

5

主题

273

帖子

0

高级会员

Rank: 4

积分
718
最后登录
1970-1-1
发表于 2014-4-23 09:07:19 | 显示全部楼层

RE:【经验分享】RTC_TSR寄存器读出不正确,咋回事?

斑竹调皮啊,还是个互动贴啊!
思考中!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13126
    最后登录
    2019-1-27
    发表于 2014-4-23 10:05:52 | 显示全部楼层

    回复:【经验分享】RTC_TSR寄存器读出不正确,咋回事?

    回复第 2 楼 于2014-04-23 09:07:19发表:
    斑竹调皮啊,还是个互动贴啊!
    思考中!

     

    哈哈,积极思考
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
     楼主| 发表于 2014-4-23 11:25:37 | 显示全部楼层

    回复:【经验分享】RTC_TSR寄存器读出不正确,咋回事?

    回复第 3 楼 于2014-04-23 10:05:52发表:
    回复第 2 楼 于2014-04-23 09:07:19发表:
    斑竹调皮啊,还是个互动贴啊!
    思考中!

     

    哈哈,积极思考
    欢迎参与讨论!
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    124

    主题

    3600

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5781
    最后登录
    1970-1-1
     楼主| 发表于 2014-4-30 10:17:09 | 显示全部楼层

    回复:【经验分享】RTC_TSR寄存器读出不正确,咋回事?

              看来大家的讨论不积极啊,答案揭晓!
           在咨询过AE部门后,发现问题的根源是K60的参考没有给出读取RTCRTC_TSR需要注意的细节。而在K64的参考手册却有这么一段话(如下所示),而问题也就迎仍而解啊!
     
                
    Reading the time   counter (either seconds or prescaler) while is  incrementing may return invalid data due to   synchronization of the read data bus. If it is necessary for software to read   the prescaler or seconds counter when they could be incrementing, it is

                
    recommended that two   read accesses are performed and that software verifies that the same data was   returned for both reads.

                
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2014-5-4 14:28:12 | 显示全部楼层

    RE:【经验分享】RTC_TSR寄存器读出不正确,咋回事?

    有些参考手册的确是有纰漏,如果大家觉得有问题可以参考同类型芯片参考手册比较一下。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    351

    帖子

    0

    高级会员

    Rank: 4

    积分
    973
    最后登录
    1970-1-1
    发表于 2014-8-5 07:03:40 | 显示全部楼层

    回复:【经验分享】RTC_TSR寄存器读出不正确,咋回事?

    自从发现过手册有错误后,我一般也会比较同类型最新的参考手册,看是不是写的都一样。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 12:20 , Processed in 0.103020 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表