3 Replies Latest reply on Mar 9, 2020 9:24 PM by ShipingW_81

    PSOC6  RTC重新配置时间无效的问题

    JeHa_3912621

      !参考CE218542的例程。 做利用RCT时钟唤醒Deepsleep的功能。

      void Cy_RTC_Alarm2Interrupt(void)

      如果我在这个中断里面更改RTC时间。 可以实现唤醒功能。 但是如果参考例程中的方法,在此中断中设置1个标志位,在主循环里面查询到标志位后调用RCT配置函数。 就再也无法唤醒Deepsleep。

       

      次函数参考void RtcStepAlarm(void)改写。 我希望在主循环里面重新配置RTC唤醒时间。 因为我发现在RTC中断中更改这个RTC时间,有的时候会让我的数据采集出问题,感觉有些时候这部分耗时可能会长一些,会倒是我数据采集的时候丢数据。

       

      我是在系统唤醒后第一时间就调用了rtc重新配置的函数。 希望能够帮忙解决一下此问题。 感谢!

        • 1. Re: PSOC6  RTC重新配置时间无效的问题
          ShipingW_81

          看上去比较奇怪,你有没有试过CE218542在你目前的硬件上功能是否正常?如果功能是正常的,再需要排查你的code跟CE218542的区别。

          比如,

          1. 中断设标志位的情况下,在main loop根据标志位是否置位调用RtcStepAlarmWakeup()时,RtcAlarmConfig()是否返回了success?时间是否真正配对?

          2. 不重新配置RTC是否能从DSM中正常唤醒?如果是,可以初步判断是调用RtcStepAlarmWakeup()时出了问题。

          • 2. Re: PSOC6  RTC重新配置时间无效的问题
            JeHa_3912621

            您好。 我试了。 我发现不是喂狗出了问题。 是我的rtc唤醒部分出了问题。 因为我的rtc唤醒有更改过唤醒时间。 初始化后按照1s唤醒1次。 我根据时钟后续会配置成5s唤醒1次。  我的rct部分是参考了CE218542的代码实现的。 利用Cy_RTC_Alarm2Interrupt()函数设置标志位。 在主循环里面识别到标志位后更新RTC时间。  

             

            我发现我必须在Cy_SysPm_DeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT); 这个函数后马上调用更新RTC函数。RCT才能配置成功。 如果我放到喂狗函数以后。 RCT就配置失败了。 不会在被唤醒。 所以导致喂狗失败而复位。

            • 3. Re: PSOC6  RTC重新配置时间无效的问题
              ShipingW_81

              “如果我放到喂狗函数以后。 RCT就配置失败了”,有没有具体研究如何失败的?本身API调用就返回失败,还是调用是成功的,但是实际执行出现问题?

              CE218542任意配置时间间隔,从DSM唤醒在你的硬件上运行有问题吗?

              另外根据CE218542,如果alarm间隔为1s,不需要重新配置(组件默认间隔),如果是大于1s,每次中断产生要重新配置step,也就是到下次alarm产生的step time.