Seiko instruments S35190

Committer:
king33jp
Date:
Thu Dec 24 14:14:56 2015 +0000
Revision:
2:e79b6e5900b9
Parent:
1:c9d54daf068f
fix

Who changed what in which revision?

UserRevisionLine numberNew 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 2:e79b6e5900b9 203 long RTC_S35190::getDaySerial2(char *rtc_today){
king33jp 2:e79b6e5900b9 204 long ddd,yyy,dd,mm;
king33jp 2:e79b6e5900b9 205 int mday[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
king33jp 2:e79b6e5900b9 206 yyy = 2000+RtcData2Dec(rtc_today[0]);
king33jp 2:e79b6e5900b9 207 mm = RtcData2Dec(rtc_today[1]);
king33jp 2:e79b6e5900b9 208 dd = RtcData2Dec(rtc_today[2]);
king33jp 2:e79b6e5900b9 209 ddd = (yyy) * 365;
king33jp 2:e79b6e5900b9 210 ddd += (yyy/4)-(yyy/100)+(yyy/400);
king33jp 2:e79b6e5900b9 211 for(int i=1;i<(mm-1);i++){
king33jp 2:e79b6e5900b9 212 ddd += mday[i];
king33jp 2:e79b6e5900b9 213 }
king33jp 2:e79b6e5900b9 214 ddd = ddd + dd;
king33jp 2:e79b6e5900b9 215 return ddd;
king33jp 2:e79b6e5900b9 216 }
king33jp 2:e79b6e5900b9 217
king33jp 1:c9d54daf068f 218 long RTC_S35190::getTimeSerial(char *rtc_today){
king33jp 1:c9d54daf068f 219 long ss;
king33jp 1:c9d54daf068f 220 ss = RtcData2Dec(rtc_today[4]&0xBF)*60*60;
king33jp 1:c9d54daf068f 221 ss += RtcData2Dec(rtc_today[5])*60;
king33jp 1:c9d54daf068f 222 ss += RtcData2Dec(rtc_today[6]);
king33jp 1:c9d54daf068f 223 return ss;
king33jp 1:c9d54daf068f 224 }