Seiko instruments S35190
RTC_S35190.cpp@1:c9d54daf068f, 2014-05-07 (annotated)
- Committer:
- king33jp
- Date:
- Wed May 07 15:36:17 2014 +0000
- Revision:
- 1:c9d54daf068f
- Parent:
- 0:0ea0bb4ae24f
- Child:
- 2:e79b6e5900b9
add function; 1)getDaySerial; 2)getTimeSerial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
king33jp | 0:0ea0bb4ae24f | 1 | #include "RTC_S35190.h" |
king33jp | 0:0ea0bb4ae24f | 2 | #include "mbed.h" |
king33jp | 0:0ea0bb4ae24f | 3 | |
king33jp | 0:0ea0bb4ae24f | 4 | RTC_S35190::RTC_S35190(PinName rtsio,PinName rtclk,PinName rtcs): _rtsio(rtsio),_rtclk(rtclk),_rtcs(rtcs){ |
king33jp | 0:0ea0bb4ae24f | 5 | _rtcs = 0; |
king33jp | 0:0ea0bb4ae24f | 6 | _rtclk = 1; |
king33jp | 0:0ea0bb4ae24f | 7 | } |
king33jp | 0:0ea0bb4ae24f | 8 | |
king33jp | 0:0ea0bb4ae24f | 9 | void RTC_S35190::portinit(){ |
king33jp | 0:0ea0bb4ae24f | 10 | _rtcs=0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 11 | _rtclk=1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 12 | } |
king33jp | 0:0ea0bb4ae24f | 13 | |
king33jp | 0:0ea0bb4ae24f | 14 | void RTC_S35190::send_cmd(char comm){ |
king33jp | 0:0ea0bb4ae24f | 15 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 16 | _rtsio.output(); // RTSIO=出力に変更 |
king33jp | 0:0ea0bb4ae24f | 17 | _rtcs = 1; // RTCS=1 CS Active データ入出力後に L にする。 |
king33jp | 0:0ea0bb4ae24f | 18 | // 必ずコマンドの後にデータがあるので。 |
king33jp | 0:0ea0bb4ae24f | 19 | for(c=7;c>=0;c--){ |
king33jp | 0:0ea0bb4ae24f | 20 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 21 | _rtsio = (comm>>c)&0x01; |
king33jp | 0:0ea0bb4ae24f | 22 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 23 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 24 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 25 | } |
king33jp | 0:0ea0bb4ae24f | 26 | } |
king33jp | 0:0ea0bb4ae24f | 27 | |
king33jp | 0:0ea0bb4ae24f | 28 | // Statusレジスタ1でPOC|BLDの値を返す |
king33jp | 0:0ea0bb4ae24f | 29 | char RTC_S35190::get_stat(){ |
king33jp | 0:0ea0bb4ae24f | 30 | char data,tmp; |
king33jp | 0:0ea0bb4ae24f | 31 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 32 | data = 0; |
king33jp | 0:0ea0bb4ae24f | 33 | send_cmd( RtcStat1 ); |
king33jp | 0:0ea0bb4ae24f | 34 | |
king33jp | 0:0ea0bb4ae24f | 35 | _rtsio.input();; // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 36 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 37 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 38 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 39 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 40 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 41 | tmp = _rtsio; // RTSIOはbit1データなので1回シフトしておく |
king33jp | 0:0ea0bb4ae24f | 42 | data |= tmp<<c; |
king33jp | 0:0ea0bb4ae24f | 43 | } |
king33jp | 0:0ea0bb4ae24f | 44 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 45 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 46 | data &= 0xC0; // 上位2bitのみ抽出 |
king33jp | 0:0ea0bb4ae24f | 47 | return data; |
king33jp | 0:0ea0bb4ae24f | 48 | } |
king33jp | 0:0ea0bb4ae24f | 49 | |
king33jp | 0:0ea0bb4ae24f | 50 | void RTC_S35190::reset(){ |
king33jp | 0:0ea0bb4ae24f | 51 | char data; |
king33jp | 0:0ea0bb4ae24f | 52 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 53 | |
king33jp | 0:0ea0bb4ae24f | 54 | send_cmd( RtcStat1 & Reg_W ); |
king33jp | 0:0ea0bb4ae24f | 55 | |
king33jp | 0:0ea0bb4ae24f | 56 | data = 0x03; // 24時間,RESET=1 |
king33jp | 0:0ea0bb4ae24f | 57 | _rtsio.output(); // 出力に変更 |
king33jp | 0:0ea0bb4ae24f | 58 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 59 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 60 | _rtsio = (data>>c)&0x01; |
king33jp | 0:0ea0bb4ae24f | 61 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 62 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 63 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 64 | } |
king33jp | 0:0ea0bb4ae24f | 65 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 66 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 67 | _rtsio.input(); // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 68 | } |
king33jp | 0:0ea0bb4ae24f | 69 | |
king33jp | 0:0ea0bb4ae24f | 70 | void RTC_S35190::wr_freereg(char data){ |
king33jp | 0:0ea0bb4ae24f | 71 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 72 | |
king33jp | 0:0ea0bb4ae24f | 73 | send_cmd( Free_Reg & Reg_W ); |
king33jp | 0:0ea0bb4ae24f | 74 | |
king33jp | 0:0ea0bb4ae24f | 75 | _rtsio.output(); // 出力に変更 |
king33jp | 0:0ea0bb4ae24f | 76 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 77 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 78 | _rtsio = (data>>c)&0x01; |
king33jp | 0:0ea0bb4ae24f | 79 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 80 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 81 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 82 | } |
king33jp | 0:0ea0bb4ae24f | 83 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 84 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 85 | _rtsio.input(); // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 86 | } |
king33jp | 0:0ea0bb4ae24f | 87 | |
king33jp | 0:0ea0bb4ae24f | 88 | char RTC_S35190::rd_freereg(){ |
king33jp | 0:0ea0bb4ae24f | 89 | char data; |
king33jp | 0:0ea0bb4ae24f | 90 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 91 | data = 0; |
king33jp | 0:0ea0bb4ae24f | 92 | |
king33jp | 0:0ea0bb4ae24f | 93 | send_cmd( Free_Reg ); |
king33jp | 0:0ea0bb4ae24f | 94 | |
king33jp | 0:0ea0bb4ae24f | 95 | _rtsio.input(); // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 96 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 97 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 98 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 99 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 100 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 101 | data |= (_rtsio<<c); |
king33jp | 0:0ea0bb4ae24f | 102 | } |
king33jp | 0:0ea0bb4ae24f | 103 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 104 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 105 | return data; |
king33jp | 0:0ea0bb4ae24f | 106 | } |
king33jp | 0:0ea0bb4ae24f | 107 | |
king33jp | 0:0ea0bb4ae24f | 108 | void RTC_S35190::rd_today(char *rtc_today){ |
king33jp | 0:0ea0bb4ae24f | 109 | char a; |
king33jp | 0:0ea0bb4ae24f | 110 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 111 | |
king33jp | 0:0ea0bb4ae24f | 112 | send_cmd( RtcRegAcc1 ); |
king33jp | 0:0ea0bb4ae24f | 113 | |
king33jp | 0:0ea0bb4ae24f | 114 | _rtsio.input(); // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 115 | for(a=0;a<7;a++){ |
king33jp | 0:0ea0bb4ae24f | 116 | rtc_today[a] = 0; // initialize |
king33jp | 0:0ea0bb4ae24f | 117 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 118 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 119 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 120 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 121 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 122 | rtc_today[a] |= _rtsio<<c; |
king33jp | 0:0ea0bb4ae24f | 123 | } |
king33jp | 0:0ea0bb4ae24f | 124 | } |
king33jp | 0:0ea0bb4ae24f | 125 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 126 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 127 | } |
king33jp | 0:0ea0bb4ae24f | 128 | |
king33jp | 0:0ea0bb4ae24f | 129 | void RTC_S35190::wr_today(char *rtc_today){ |
king33jp | 0:0ea0bb4ae24f | 130 | char a; |
king33jp | 0:0ea0bb4ae24f | 131 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 132 | |
king33jp | 0:0ea0bb4ae24f | 133 | send_cmd( RtcRegAcc1 & Reg_W ); |
king33jp | 0:0ea0bb4ae24f | 134 | |
king33jp | 0:0ea0bb4ae24f | 135 | _rtsio.output(); // 出力に変更 |
king33jp | 0:0ea0bb4ae24f | 136 | for(a=0;a<7;a++){ |
king33jp | 0:0ea0bb4ae24f | 137 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 138 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 139 | _rtsio = (rtc_today[a]>>c)&0x01; |
king33jp | 0:0ea0bb4ae24f | 140 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 141 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 142 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 143 | } |
king33jp | 0:0ea0bb4ae24f | 144 | } |
king33jp | 0:0ea0bb4ae24f | 145 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 146 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 147 | _rtsio.input(); // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 148 | } |
king33jp | 0:0ea0bb4ae24f | 149 | |
king33jp | 0:0ea0bb4ae24f | 150 | |
king33jp | 0:0ea0bb4ae24f | 151 | void RTC_S35190::rd_now(char *rtc_today){ |
king33jp | 0:0ea0bb4ae24f | 152 | char a,data; |
king33jp | 0:0ea0bb4ae24f | 153 | signed char c; |
king33jp | 0:0ea0bb4ae24f | 154 | |
king33jp | 0:0ea0bb4ae24f | 155 | data = 0; |
king33jp | 0:0ea0bb4ae24f | 156 | |
king33jp | 0:0ea0bb4ae24f | 157 | send_cmd( RtcRegAcc2 ); |
king33jp | 0:0ea0bb4ae24f | 158 | |
king33jp | 0:0ea0bb4ae24f | 159 | _rtsio.input(); // 入力に変更 |
king33jp | 0:0ea0bb4ae24f | 160 | for(a=4;a<7;a++){ |
king33jp | 0:0ea0bb4ae24f | 161 | data = 0; |
king33jp | 0:0ea0bb4ae24f | 162 | |
king33jp | 0:0ea0bb4ae24f | 163 | for(c=0;c<8;c++){ |
king33jp | 0:0ea0bb4ae24f | 164 | _rtclk = 0; // RTCLK = 0; |
king33jp | 0:0ea0bb4ae24f | 165 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 166 | _rtclk = 1; // RTCLK = 1; |
king33jp | 0:0ea0bb4ae24f | 167 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 168 | data |= _rtsio<<c; |
king33jp | 0:0ea0bb4ae24f | 169 | } |
king33jp | 0:0ea0bb4ae24f | 170 | rtc_today[a] = data; |
king33jp | 0:0ea0bb4ae24f | 171 | } |
king33jp | 0:0ea0bb4ae24f | 172 | _rtcs = 0; // RTCS = 0; |
king33jp | 0:0ea0bb4ae24f | 173 | wait_us(10); |
king33jp | 0:0ea0bb4ae24f | 174 | } |
king33jp | 0:0ea0bb4ae24f | 175 | |
king33jp | 0:0ea0bb4ae24f | 176 | char RTC_S35190::Dec2RtcData(char tmp){ |
king33jp | 0:0ea0bb4ae24f | 177 | return ((tmp/10)<<4) | ((tmp%10)&0x0F); |
king33jp | 0:0ea0bb4ae24f | 178 | } |
king33jp | 0:0ea0bb4ae24f | 179 | |
king33jp | 0:0ea0bb4ae24f | 180 | char RTC_S35190::RtcData2Dec(char tmp){ |
king33jp | 0:0ea0bb4ae24f | 181 | return (tmp&0x0F) + (tmp>>4)*10; |
king33jp | 0:0ea0bb4ae24f | 182 | } |
king33jp | 0:0ea0bb4ae24f | 183 | |
king33jp | 0:0ea0bb4ae24f | 184 | void RTC_S35190::getDateStr(char *data,char *rtc_today){ |
king33jp | 0:0ea0bb4ae24f | 185 | sprintf(data,"20%02d/%2d/%2d",RtcData2Dec(rtc_today[0]),RtcData2Dec(rtc_today[1]),RtcData2Dec(rtc_today[2])); |
king33jp | 0:0ea0bb4ae24f | 186 | } |
king33jp | 0:0ea0bb4ae24f | 187 | |
king33jp | 0:0ea0bb4ae24f | 188 | void RTC_S35190::getTimeStr(char *data,char *rtc_today){ |
king33jp | 0:0ea0bb4ae24f | 189 | sprintf(data,"%02d:%02d:%02d",(RtcData2Dec(rtc_today[4]&0xBF)),RtcData2Dec(rtc_today[5]),RtcData2Dec(rtc_today[6])); |
king33jp | 0:0ea0bb4ae24f | 190 | } |
king33jp | 1:c9d54daf068f | 191 | |
king33jp | 1:c9d54daf068f | 192 | long RTC_S35190::getDaySerial(char *rtc_today){ |
king33jp | 1:c9d54daf068f | 193 | long ddd,yyy,dd,mm; |
king33jp | 1:c9d54daf068f | 194 | yyy = 2000+RtcData2Dec(rtc_today[0]); |
king33jp | 1:c9d54daf068f | 195 | mm = RtcData2Dec(rtc_today[1]); |
king33jp | 1:c9d54daf068f | 196 | dd = RtcData2Dec(rtc_today[2]); |
king33jp | 1:c9d54daf068f | 197 | ddd = (yyy) * 365; |
king33jp | 1:c9d54daf068f | 198 | ddd += (yyy/4)-(yyy/100)+(yyy/400); |
king33jp | 1:c9d54daf068f | 199 | ddd += 30*mm + (mm+1)*3/5 + dd - 33; |
king33jp | 1:c9d54daf068f | 200 | return ddd; |
king33jp | 1:c9d54daf068f | 201 | } |
king33jp | 1:c9d54daf068f | 202 | |
king33jp | 1:c9d54daf068f | 203 | long RTC_S35190::getTimeSerial(char *rtc_today){ |
king33jp | 1:c9d54daf068f | 204 | long ss; |
king33jp | 1:c9d54daf068f | 205 | ss = RtcData2Dec(rtc_today[4]&0xBF)*60*60; |
king33jp | 1:c9d54daf068f | 206 | ss += RtcData2Dec(rtc_today[5])*60; |
king33jp | 1:c9d54daf068f | 207 | ss += RtcData2Dec(rtc_today[6]); |
king33jp | 1:c9d54daf068f | 208 | return ss; |
king33jp | 1:c9d54daf068f | 209 | } |