説明を見る。00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include <p24FJ64GA002.h>
00019
00020 #include "table.h"
00021 #include "librtc.h"
00022
00023
00024
00025
00026
00027 #define RTC_init_timer() PR1 = cpu_fcy[ OSCTUN ] / 10000
00028
00029
00030
00031
00032
00033 RTC_T rtc;
00034
00035
00036
00037
00038
00039 void __attribute__((interrupt, auto_psv)) _T1Interrupt(void)
00040 {
00041 IFS0bits.T1IF = 0;
00042
00043
00044 rtc.tick++;
00045 if(rtc.tick % 10 != 0) return;
00046
00047
00048 rtc.msec++;
00049 rtc.msec = rtc.msec % 1000;
00050 if(rtc.msec != 0) return;
00051
00052
00053 #ifndef RTC_LOWMEM
00054 rtc.secmeter++;
00055 #endif
00056 rtc.sec++;
00057 rtc.sec = rtc.sec % 60;
00058 if(rtc.sec != 0) return;
00059
00060
00061 #ifndef RTC_LOWMEM
00062 rtc.minmeter++;
00063 #endif
00064 rtc.min++;
00065 rtc.min = rtc.min % 60;
00066 if(rtc.min != 0) return;
00067
00068
00069 #ifndef RTC_LOWMEM
00070 rtc.hourmeter++;
00071 #endif
00072 rtc.hour++;
00073 rtc.hour = rtc.hour % 24;
00074 if(rtc.hour != 0) return;
00075
00076
00077 rtc.day++;
00078
00079 return;
00080 }
00081
00082
00083
00084
00085
00086 void RTC_init(void)
00087 {
00088 rtc.msec = 0;
00089 rtc.sec = 0;
00090 rtc.min = 0;
00091 rtc.hour = 0;
00092 rtc.day = 0;
00093 rtc.tick = 0;
00094
00095 #ifndef RTC_LOWMEM
00096 rtc.secmeter = 0;
00097 rtc.minmeter = 0;
00098 rtc.hourmeter = 0;
00099 #endif
00100
00101 RTC_init_timer();
00102
00103 T1CON = 0b1000000000000000;
00104 IPC0bits.T1IP = 5;
00105 IFS0bits.T1IF = 0;
00106 IEC0bits.T1IE = 1;
00107 return;
00108 }
00109
00110
00111
00112
00113
00114 unsigned int RTC_get_ticks(unsigned int start, unsigned int end)
00115 {
00116 if(start <= end){
00117 return(end - start);
00118 } else {
00119 return(end + (0xffff - start) + 1);
00120 }
00121
00122
00123 return(0);
00124 }