00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00016 #include <msp430xG461x.h>
00017 #include <signal.h>
00018 #include "time.h"
00019 #include "diskio.h"
00020
00021 volatile uint32_t jiffies = 0;
00022
00028 void RTC_init (void)
00029 {
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 RTCCTL = RTCMODE_3 | RTCTEV_0 | RTCIE | RTCHOLD;
00042
00043 RTCYEARH = TIME_DEFAULT_YEAR >> 8;
00044 RTCYEARL = TIME_DEFAULT_YEAR & 0xFF;
00045 RTCMON = TIME_DEFAULT_MONTH;
00046 RTCDAY = TIME_DEFAULT_DAY;
00047 RTCHOUR = TIME_DEFAULT_HOUR;
00048 RTCMIN = TIME_DEFAULT_MIN;
00049 RTCSEC = TIME_DEFAULT_SEC;
00050
00051 RTCCTL &= ~RTCHOLD;
00052 }
00053
00054 #define DISK_TIMERPROC_CNT 10
00055
00056
00061 interrupt (WDT_VECTOR) wakeup watchdog_isr (void)
00062 {
00063 static uint8_t cnt = DISK_TIMERPROC_CNT;
00064
00065 jiffies++;
00066
00067 cnt--;
00068 if (cnt == 0)
00069 {
00070 cnt = DISK_TIMERPROC_CNT;
00071
00072 disk_timerproc ();
00073 }
00074
00075 }
00076
00077 void TIME_init ()
00078 {
00079 RTC_init ();
00080
00081
00082
00083
00084 WDTCTL = WDTPW | WDTTMSEL | WDTCNTCL | WDTIS0;
00085 IE1 |= WDTIE;
00086
00087 _EINT ();
00088 }
00089
00090 void TIME_getDate (TIME_date_t *const date)
00091 {
00092
00093 date->year = RTCYEARH << 8 | RTCYEARL;
00094 date->month = RTCMON;
00095 date->day = RTCDAY;
00096 date->hour = RTCHOUR;
00097 date->min = RTCMIN;
00098 date->sec = RTCSEC;
00099
00100 }
00101
00102 void TIME_setDate (const TIME_date_t *date)
00103 {
00104 RTCCTL |= RTCHOLD;
00105 RTCYEARH = date->year >> 8;
00106 RTCYEARL = date->year & 0xFF;
00107 RTCMON = date->month;
00108 RTCDAY = date->day;
00109 RTCHOUR = date->hour;
00110 RTCMIN = date->min;
00111 RTCSEC = date->sec;
00112 RTCCTL &= ~RTCHOLD;
00113 }
00114
00115 void mdelay (uint32_t milliseconds)
00116 {
00117 uint32_t j = jiffies;
00118 while (jiffies - j < milliseconds);
00119 }
00120
00121 void delay (uint32_t seconds)
00122 {
00123 uint32_t j = jiffies;
00124 uint32_t ms = seconds * 1000;
00125 while (jiffies - j < ms);
00126 }
00127