• メインページ
  • データ構造
  • ファイル
  • ファイル一覧
  • グローバル

OpenSSM/librtc.c

説明を見る。
00001 /**************************************************************************************************
00002     Title           : Virtual Real Time Clock Driver
00003     Programmer      : Yosuke FURUSAWA
00004     Copyright       : Copyright (C) 2008-2010 Yosuke FURUSAWA.
00005     License         : 4-clause BSD License
00006     Since           : 2008/11/12
00007 
00008     Filename        : librtc.c
00009     Last up date    : 2010/08/13
00010     Kanji-Code      : Shift-JIS
00011     TAB Space       : 4
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 タイマー1 割り込み
00038 **************************************************************************************************/
00039 void __attribute__((interrupt, auto_psv)) _T1Interrupt(void)
00040 {
00041     IFS0bits.T1IF = 0;
00042 
00043     /* tick is 0.1ms */
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 RTC初期化
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 tickの長さを得る
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 }

OpenSSMに対してThu Sep 9 2010 00:03:04に生成されました。  doxygen 1.7.1