7062|1

280

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【 XMC4800 Relax EtherCAT Kit测评】+上手DAVE,RTC模块应用及问题 [复制链接]

实时时钟在XMC4800kit上有设置,这里分享给给大家,一般来说RTC使用比较简单,设置好时间及中断后就可以了。但是本人在使用RTC时,发现只能进入Alarm中断1次,后面就无法再进入了,参考的程序主要也是APP help文档里的例程,不知道是不是程序设计的bug。。
好了。进入主题前,首先看看图纸里的RTC设置。如下图,使用标准的32.768K晶振。
硬件配置中默认使用的是内部的时钟,要是使用外部时钟,需要再CLOCK模块中进行配置,具体如下图:
一、     添加相应的RTC模块和IO模块,这里添加2个IO模块,分别指向2个LED灯,分别用于对 秒事件和设置的报警事件进行翻转指示。
二、     对RTC_0模块进行配置,具体如下:这里时间使用的是默认时间,在报警时间设置上,设置了1分钟,表明1分钟以后就会报警。
在中断设置上,选择周期时间为秒,对应的每秒都会触发Time_Handler中断处理函数,在Alarm时间设置中,使能报警中断,并选择NMI(不可屏蔽中断),会在alarm时间相应时,执行NMI_Handler。
三、     对IO模块的设置可以参见之前发帖,这里不再赘述。
四、     然后点击产生代码即可,在main函数中添加2个中断函数,在Time_Handler中我们翻转1个led灯,在NMI_Handler,我们读取报警设置时间,并重新设置时间,同时翻转另外一个led灯。
五、     具体代码如下:
  1. /*
  2. * main.c
  3. *
  4. *  Created on: 2019 Jan 30 13:16:39
  5. *  Author: ????
  6. */

  7. #include <DAVE.h>                 //Declarations from DAVE Code Generation (includes SFR declaration)

  8. /**

  9. * [url=home.php?mod=space&uid=159083]@brief[/url] main() - Application entry point
  10. *
  11. * <b>Details of function</b><br>
  12. * This routine is the application entry point. It is invoked by the device startup code. It is responsible for
  13. * invoking the APP initialization dispatcher routine - DAVE_Init() and hosting the place-holder for user application
  14. * code.
  15. */



  16. void Time_Handler(){

  17.        
  18. DIGITAL_IO_ToggleOutput(&LED_0);

  19. }


  20. void NMI_Handler(){

  21.        
  22. XMC_RTC_ALARM_t alarm_time;

  23.        
  24. DIGITAL_IO_ToggleOutput(&LED_1);

  25.        
  26. XMC_SCU_INTERRUPT_ClearEventStatus((XMC_SCU_INTERRUPT_EVENT_t)XMC_SCU_INTERRUPT_EVENT_RTC_ALARM);

  27.        
  28. RTC_GetAlarmTime(&alarm_time);

  29.        
  30. if(++alarm_time.minutes>59)
  31. {

  32.                
  33. alarm_time.minutes=0;
  34.                
  35. alarm_time.hours++;

  36.         }

  37.        
  38. RTC_Stop();
  39.        
  40. RTC_SetAlarmTime(&alarm_time);
  41.        
  42. RTC_Start();


  43. }


  44. int main(void)
  45. {
  46.   RTC_Stop();

  47.   DAVE_STATUS_t status;

  48.   status = DAVE_Init();           /* Initialization of DAVE APPs  */

  49.   if(status != DAVE_STATUS_SUCCESS)
  50.   {
  51.     /* Placeholder for error handler code. The while loop below can be replaced with an user error handler. */
  52.     XMC_DEBUG("DAVE APPs initialization failed\n");

  53.     while(1U)
  54.     {

  55.     }
  56.   }
  57.   /* Placeholder for user application code. The while loop below can be replaced with user application code. */
  58.   while(1U)
  59.   {

  60.   }
  61. }
复制代码


六、     编译后下载运行,可以看到1个led灯会每秒翻转1次,而另1个LED灯会在1分钟时翻转1次,而后每分钟都会翻转,但是我没有发现该LED灯再次翻转,因此怀疑有bug,希望可以反馈给英飞凌的技术人员,确认一下问题。
七、     具体运行图片如下:


最新回复

请问楼主现在问题解决了吗?     详情 回复 发表于 2020-12-5 14:48
点赞 关注(1)
 

回复
举报

5

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

请问楼主现在问题解决了吗?

 

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表