社区导航

 

搜索
查看: 427|回复: 0

[原创] 【 XMC4800 Relax EtherCAT Kit测评】+上手DAVE,RTC模块应用及问题

[复制链接]

297

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-1-30 21:07 | 显示全部楼层 |阅读模式
实时时钟在XMC4800kit上有设置,这里分享给给大家,一般来说RTC使用比较简单,设置好时间及中断后就可以了。但是本人在使用RTC时,发现只能进入Alarm中断1次,后面就无法再进入了,参考的程序主要也是APP help文档里的例程,不知道是不是程序设计的bug。。
好了。进入主题前,首先看看图纸里的RTC设置。如下图,使用标准的32.768K晶振。
image001.jpg
硬件配置中默认使用的是内部的时钟,要是使用外部时钟,需要再CLOCK模块中进行配置,具体如下图:
image002.jpg
一、     添加相应的RTC模块和IO模块,这里添加2个IO模块,分别指向2个LED灯,分别用于对 秒事件和设置的报警事件进行翻转指示。 image003.png
二、     对RTC_0模块进行配置,具体如下:这里时间使用的是默认时间,在报警时间设置上,设置了1分钟,表明1分钟以后就会报警。
image004.png
在中断设置上,选择周期时间为秒,对应的每秒都会触发Time_Handler中断处理函数,在Alarm时间设置中,使能报警中断,并选择NMI(不可屏蔽中断),会在alarm时间相应时,执行NMI_Handler。
image005.png
三、     对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,希望可以反馈给英飞凌的技术人员,确认一下问题。
七、     具体运行图片如下:
image006.jpg

image007.jpg

此帖出自工控电子论坛


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-5-23 15:26 , Processed in 0.087360 second(s), 20 queries , Gzip On, MemCache On.

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