RTC-8564N の制御 - So-net

RTC-8564N の制御
1.RTC の初期化
引数:なし
InitRTC( )
IIC2 初期化
iic2_init(0xA2)
aCtrReg={0x00, 0x11}
DefDate={13,1,1,12,0,0}
aAlmReg={0x80,0x80,0x80,0x80,0x00,0x02,0x01}
StaCnt=0x82
Seconds レジスタ読み込み
Read1_IIC(0x02, &byData)
byData 内の VL ビットをチェック
VL = 0
YES
制御レジスタ1,2設定
WriteP_IIC(0x00, 2, aCtrReg)
FALSE
YES
日時設定
RTC_TimeSet(DefDate)
FALSE
YES
アラーム・タイマ制御設定
WriteP_IIC(0x09, 7, aAlmReg)
FALSE
YES
タイマカウント開始
WriteP_IIC(0x0E, 1, &StaCnt)
FALSE
1秒フラグセット
bSecIntFlg = TRUE
YES
注:bSecIntFlg はグローバル
変数です。
IRQ0 割り込みイネーブル
FALSE で戻る
TRUE で戻る
1
2.IRQ0 割り込み処理
Int_IRQ0( )
IRR1.IRRI0 をチェック
IRR1.IRRI0 = 0
YES
IRR1.IRRI0 = 0
1秒フラグセット
bSecIntFlg = TRUE
戻る
3.RTC にバイナリで日時を設定する
引数:pbyDtime = YYMMDD-hhmmss の順
(各バイナリ)
RTC_TimeSet(pbyDtime)
pbyDtime の日時を BCD に変換して並び替
える
abyBuff[ ] = ssmmhhDDwwMMYY の順
ダミーの曜日セット
abyBuff[4] =ダミー曜日
byStop =0x20
byStart=0x00
時計カウント停止
Write1_IIC(0x00, &byStop)
日付・時刻設定
WriteP_IIC(0x02, 7, abyBuff)
時計カウント開始
Write1_IIC(0x00, &byStart)
戻る
2
4.RTC から日時を読み出す
引数:pbyDtime = 日時を格納するアドレス
WW-YYMMDD-hhmmss の順に格納(各 BCD)
※WW は無効値
RTC_TimeRead(pbyDtime)
日時読み出し
ReadP_IIC(0x02, 7, abyBuff)
FALSE
YES
abyBuff の日時を逆順に並び替える
(pbyDtime)=wwYYMMDDhhmmss の順
TRUE で戻る
FALSE で戻る
5.現在日時を得る
引数:pDtime = 日時格納アドレス
WW-YYMMDD-hhmmss の順に格納(各バイナリ)
※WW は無効値
GetDtime(pDtime)
RTC から日時読み込み
RTC_TimeRead(abyDtime)
FALSE
YES
(abyDtime)をバイナリに変換する
(pDTime) = バイナリ日時
戻る
6.アラーム設定「時分」を読み出す
引数:pbyHour =アラーム設定「時分」を格納するアドレス
GetAlarmTime(pbyHour)
アラーム設定読み出し
ReadP_IIC(0x09, 4, abyBuff)
FALSE
YES
(abyBuff)の時分をバイナリに変換する
(pbyHour)
= バイナリの時
(pbyHour+1) = バイナリの分
戻る
3
7.アラーム設定「時分」を設定する
引数:bEnable = TRUE でアラーム割り込みを許可
pbyHour = アラーム設定「時分」のアドレス
※「時分」はバイナリ.
PutAlarmTime(bEnable, pbyHour)
(abyBuff)に'時分を BCD でセットする
abyBuff[0] = (pbyHour+1)を BCD に
変換(分)
abyBuff[1] = (pbyHour)を BCD に
変換(時)
abyBuff[2] = 0x80(日は不問)
abyBuff[3] = 0x80(曜は不問)
コントロールレジスタ2を読み込む
Read1_IIC(0x01, &byCTR2)
FALSE
YES
アラーム設定書き込み
WriteP_IIC(0x09, 4, abyBuff)
byCTR2 の AF ビットを'0'にする
byCTR2 = byCTR2 & 0xF7
bEnable=FALSE
YES
byCTR2 の AIE ビットを'1'にする
byCTR2 = byCTR2 | 0x02
コントロールレジスタ2を書き込む
Write1_IIC(0x01, &byCTR2)
戻る
4
8.アラーム割り込みの許可・禁止状態を読み込む
引数:なし
GetAlarmInt( )
コントロールレジスタ2を読み込む
Read1_IIC(0x01, &byCTR2)
FALSE
YES
(byCTR2 & 0x02) = 0 か
=0
YES
TRUE で戻る
FALSE で戻る
許可状態
禁止状態
9.アラーム割り込みの許可・禁止を書き込み
引数:bEnable =TRUE でアラーム割り込み許可
SetAlarmInt(bEnable)
コントロールレジスタ2を読み込む
Read1_IIC(0x01, &byCTR2)
FALSE
bEnable=TRUE
YES
YES
byCTR2 = byCTR2 & 0xFD
byCTR2 = byCTR2 | 0x02
コントロールレジスタ2を書き込む
Write1_IIC(0x01, &byCTR2)
FALSE
YES
TRUE で戻る
FALSE で戻る
5
10.割り込み発生フラグを読み込む
引数:なし
GetRTCIntFlag( )
コントロールレジスタ2を読み込む
Read1_IIC(0x01, &byCTR2)
FALSE
YES
AF,TF ビットを'0'にする
byWrk = byCTR2 & 0xF3
コントロールレジスタ2を書き込む
Write1_IIC(0x01, &byWrk)
byCTR2 = byCTR2 & 0x0F
0x00 で戻る
byCTR2 で戻る
戻値:b0=TIE(周期割り込み有効)
b1=AIE(アラーム割り込み有効)
b2= TF(周期割り込みあり)
b3= AF(アラーム割り込みあり)
11.1秒フラグを読み込む
ChkSecIntFlg( )
引数:なし
割り込みマスク
1秒フラグ読み込み
bFlag = bSecIntFlg
1秒フラグクリア
bSecIntFlg = FALSE
割り込みマスク復帰
bFlag で戻る
6