rtcalarm.c
Upload User: mhstny
Upload Date: 2022-08-05
Package Size: 793k
Code Size: 3k
Development Platform:

Unix_Linux

  1. #include "2410lib.h"
  2. #include "2410addr.h"
  3. #include "def.h"
  4. char *week[8] = { "","SUN","MON", "TUES", "WED", "THURS","FRI", "SAT" } ;
  5. int year,month,date,weekday,hour,min,sec;
  6. int enable_beep = 1;
  7. extern void Buzzer_PWM_Run(void);
  8. void __irq IsrAlarm(void);
  9. void __irq Tick_Isr(void);
  10. //设置RTC ALARM 时间
  11. void setRTCalm(U8 almyear,U8 almmon,U8 almdate,
  12.                U8 almhour,U8 almmin,U8 almsec)//年、月、日、时、分、秒
  13. {   rRTCCON=0x0001;
  14. rALMYEAR = almyear;
  15. rALMMON  = almmon;
  16. rALMDATE = almdate;
  17. rALMHOUR = almhour;
  18. rALMMIN  = almmin;
  19. rALMSEC  = almsec;
  20. rRTCCON = 0; //disable RTC write
  21. }
  22. //置时钟定时时间
  23. void setRTCtime(U8 wRTCyear,U8 wRTCmon,U8 wRTCdate,
  24. U8 wRTCday,U8 wRTChour,U8 wRTCmin,U8 wRTCsec)//年、月、日、星期、时、分、秒
  25. {
  26. rRTCCON=0x01;
  27. rBCDYEAR = wRTCyear;
  28. rBCDMON  = wRTCmon;
  29. rBCDDATE = wRTCdate;
  30. rBCDDAY  = wRTCday;
  31. rBCDHOUR = wRTChour;
  32. rBCDMIN  = wRTCmon;
  33. rBCDSEC  = wRTCsec;
  34.     rRTCCON = 0x00; //disable RTC write
  35. }
  36. //open rtc
  37. void OpenRtc(void)
  38. {
  39.     pISR_TICK=(unsigned)Tick_Isr;
  40.     rTICNT=0xFF;//Tick time interrupt enable;Tick time count value=127
  41.     EnableIrq(BIT_TICK);//open RTC TICK INTERRUPT
  42. }
  43. //close  rtc
  44. void CloseRtc(void)
  45. {
  46.     rTICNT &= ~(1<<7);
  47.     DisableIrq(BIT_TICK);
  48. }
  49. //open rtc alarm
  50. void OpenAlarm()
  51. {
  52. pISR_RTC = (unsigned)IsrAlarm;
  53. ClearPending(BIT_RTC);
  54. rRTCALM = (0x7f); //enable alarm
  55. EnableIrq(BIT_RTC);
  56. }
  57. //close  rtc alarm
  58. void CloseAlarm(void)
  59. {
  60. rRTCALM = 0; //disable alarm
  61. DisableIrq(BIT_RTC);
  62. }
  63. // get rtc
  64. void Get_Rtc(void)
  65. {
  66.         rRTCCON = 0x01; //RTC读写使能,选择BCD时钟、计数器,无复位,1/32768
  67.     if (rBCDYEAR == 0x99)    
  68.     year = 0x1999;
  69.     else    
  70.     year = 0x2000 + rBCDYEAR;
  71.     month=rBCDMON;
  72.     date=rBCDDATE;
  73.     weekday=rBCDDAY;
  74.     hour=rBCDHOUR;
  75.     min=rBCDMIN;
  76.     sec=rBCDSEC;
  77.    
  78.         rRTCCON = 0x0;    //RTC读写禁止,选择BCD时钟、计数器,无复位,1/32768
  79. }
  80. /****************************************************/
  81. void xmain(void)
  82. {
  83.     ChangeClockDivider(1,1);
  84.     ChangeMPllValue(0xa1,0x3,0x1);   
  85.     Port_Init();
  86.     Uart_Select(0);
  87.     Uart_Init(0,115200);
  88. Uart_Printf("the main is runningn");
  89. setRTCalm(06,04,15,1,5,1);//年、月、日、时、分、秒
  90. setRTCtime(06,04,15,2,1,4,29);//年、月、日、星期、时、分、秒
  91.    
  92. OpenAlarm();
  93. OpenRtc();
  94. while(1);
  95. //    Buzzer_PWM_Run();
  96. }
  97. void __irq IsrAlarm(void)
  98. {
  99.     ClearPending(BIT_RTC);
  100.     Uart_Printf("s3c244A RTCALM  oucer n");
  101.     Buzzer_PWM_Run();
  102. }
  103. void __irq Tick_Isr(void)
  104. {
  105. Get_Rtc();
  106. Uart_Printf("RTC TIME : %4x-%02x-%02x - %s - %02x:%02x:%02xn",year,month,date,week[weekday],hour,min,sec);
  107. ClearPending(BIT_TICK);
  108. }