RTC_Sample_03.c


1
//******************************************************************************
2
//
3
//           MSP430F5418
4
//         -----------------
5
//    /|\ |              XIN|-
6
//     |  |                 | 32kHz
7
//     ---|RST          XOUT|-
8
//        |                 |
9
//        |             P6.1|-->LED
10
//
11
//   Built with IAR Embedded Workbench Version: 4.20
12
//******************************************************************************
13
#include <msp430x54x.h>
14
15
extern int SetRTCYEAR(int year);   
16
extern int SetRTCMON(int month);
17
extern int SetRTCDAY(int day);
18
extern int SetRTCHOUR(int hour);
19
extern int SetRTCMIN(int min);
20
extern int SetRTCSEC(int sec);
21
                       
22
extern int SetAlarmRTCMIN(int min);
23
24
extern void Clr_AE(void);
25
26
void main(void)
27
{
28
  WDTCTL = WDTPW + WDTHOLD;                 // Stop Watchdog Timer
29
  
30
  UCSCTL6 &= ~0x000D;                   // turn XT1 on, load caps off
31
  UCSCTL6 |= XCAP_3;                    // internal load caps to 12pF
32
33
  P6DIR = 0xFF;
34
  P6OUT = 0;
35
  
36
  RTCCTL01 |= RTCHOLD + RTCMODE;  // Stoppt RTC und geht in den "calendermode"
37
  
38
  SetRTCYEAR(2009);
39
  SetRTCMON(1);
40
  SetRTCDAY(2);
41
  SetRTCHOUR(1);
42
  SetRTCMIN(4);
43
  SetRTCSEC(31);
44
  
45
  RTCCTL01 &= ~RTCTEVIE;        // Deaktivieren aller Interrupts
46
  RTCCTL01 &= ~RTCTEVIFG;
47
  RTCCTL01 &= ~RTCAIE;
48
  RTCCTL01 &= ~RTCAIFG;
49
  RTCCTL01 &= ~RTCRDYIE;
50
  RTCCTL01 &= ~RTCRDYIFG;
51
  
52
  RTCCTL01 &= ~RTCAIFG;         // Alarm Interrupt Flag löschen
53
  
54
  Clr_AE();                     // alle Alarm Register löschen
55
56
  SetAlarmRTCMIN(0x85);
57
  
58
  RTCCTL01 |= RTCAIE;           // Alarm Interrupt aktivieren
59
  
60
  RTCCTL01 &= ~RTCHOLD;         // Startet RTC
61
  
62
  __no_operation();                         // For debugger
63
  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, enable interrupts
64
  
65
}
66
67
#pragma vector=RTC_VECTOR
68
__interrupt void rtc_ISR(void)
69
{
70
  if(RTCCTL01 & RTCAIFG)    // alarm flag
71
  {
72
   RTCCTL0 &= ~RTCAIFG;
73
   P6OUT ^= BIT1;
74
  }
75
}