00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "..\inc\includes.h"
00011 #include "..\os_core\os_includes.h"
00012
00013 #define cEventTimeYear 0
00014 #define cEventTimeMonth 1
00015 #define cEventTimeDate 2
00016 #define cEventTimeHour 3
00017 #define cEventTimeMinute 4
00018 #define cEventTimeSecond 5
00019 #define cEventTimeWeekDay 6
00020
00021 sbit RtcSclk=P2^0;
00022 sbit RtcData=P2^1;
00023 sbit RtcCe=P2^2;
00024
00025 #define RTC_COMMAND_MAX 7
00026 INT8U code second[7]={'s','e','c','o','n','d',0};
00027 INT8U code minute[7]={'m','i','n','u','t','e',0};
00028 INT8U code hour[5]={'h','o','u','r',0};
00029 INT8U code date[5]={'d','a','t','e',0};
00030 INT8U code month[6]={'m','o','n','t','h',0};
00031 INT8U code year[5]={'y','e','a','r',0};
00032 INT8U code day[4]={'d','a','y',0};
00033 INT8U code *RtcCommandList[RTC_COMMAND_MAX]={second,minute,hour,date,month,year,day};
00034
00035 struct RTC_CONTROL RtcCtrl;
00036 struct RTC_EVENT RtcEvent;
00037
00038 void F_RtcPowerOnInit(void) LargeReentrant;
00039 void F_RtcSvc(void) LargeReentrant;
00040 void F_RtcWrite(UCHAR,UCHAR) LargeReentrant;
00041 void F_RtcCurrentTimeSet(void) LargeReentrant;
00042 void F_RtcCurrentTimeShow(void) LargeReentrant;
00043 UCHAR F_RtcRead(UCHAR) LargeReentrant;
00044
00045 void F_RtcPowerOnInit(void) LargeReentrant{
00046 INT8U i;
00047
00048 RtcCe=0;
00049 _nop_();
00050 _nop_();
00051 _nop_();
00052 _nop_();
00053 _nop_();
00054 _nop_();
00055 RtcSclk=0;
00056 RtcData=0;
00057 RtcCtrl.Timer=0;
00058 RtcCtrl.State=RtcIdleState;
00059 RtcCtrl.Second=0x00;
00060 RtcCtrl.Minute=0x27;
00061 RtcCtrl.Hour=0x09;
00062 RtcCtrl.WeekDay=7;
00063 RtcCtrl.Date=0x11;
00064 RtcCtrl.Month=0x03;
00065 RtcCtrl.Year=0x07;
00066 RtcEvent.HasEvent=0;
00067 RtcEvent.EventType=0;
00068 RtcEvent.RwFlag=0;
00069 RtcEvent.Data=0;
00070 F_RtcWrite(RtcWriteWriteProtectCmd,0);
00071 F_RtcWrite(0x90,0xa6);
00072
00073
00074
00075 i=F_RtcRead(0x81);
00076 if((i&0x80)!=0) F_RtcWrite(RtcWriteSecondCmd,0x00);
00077 F_RtcCurrentTimeShow();
00078 }
00079 void F_RtcSvc(void) LargeReentrant{
00080
00081 if(RtcEvent.HasEvent==1){
00082 if(RtcEvent.RwFlag==0){
00083 if(RtcEvent.EventType==cEventTimeYear){
00084 RtcCtrl.Year=RtcEvent.Data;
00085 F_RtcWrite(RtcWriteYearCmd,RtcEvent.Data);
00086 F_RtcCurrentTimeShow();
00087 }
00088 else if(RtcEvent.EventType==cEventTimeMonth){
00089 RtcCtrl.Month=RtcEvent.Data;
00090 F_RtcWrite(RtcWriteMonthCmd,RtcEvent.Data);
00091 F_RtcCurrentTimeShow();
00092 }
00093 else if(RtcEvent.EventType==cEventTimeDate){
00094 RtcCtrl.Date=RtcEvent.Data;
00095 F_RtcWrite(RtcWriteDateCmd,RtcEvent.Data);
00096 F_RtcCurrentTimeShow();
00097 }
00098 else if(RtcEvent.EventType==cEventTimeHour){
00099 RtcCtrl.Hour=RtcEvent.Data;
00100 F_RtcWrite(RtcWriteHourCmd,RtcEvent.Data);
00101 F_RtcCurrentTimeShow();
00102 }
00103 else if(RtcEvent.EventType==cEventTimeMinute){
00104 RtcCtrl.Minute=RtcEvent.Data;
00105 F_RtcWrite(RtcWriteMinuteCmd,RtcEvent.Data);
00106 F_RtcCurrentTimeShow();
00107 }
00108 else if(RtcEvent.EventType==cEventTimeSecond){
00109 RtcCtrl.Second=RtcEvent.Data;
00110 F_RtcWrite(RtcWriteSecondCmd,RtcEvent.Data);
00111 F_RtcCurrentTimeShow();
00112 }
00113 else if(RtcEvent.EventType==cEventTimeWeekDay){
00114 RtcCtrl.WeekDay=RtcEvent.Data;
00115 F_RtcWrite(RtcWriteWeekDayCmd,RtcEvent.Data);
00116 F_RtcCurrentTimeShow();
00117 }
00118 }
00119 else{
00120 if(RtcEvent.EventType==cEventTimeYear) RtcEvent.Data=RtcCtrl.Year;
00121 else if(RtcEvent.EventType==cEventTimeMonth) RtcEvent.Data=RtcCtrl.Month;
00122 else if(RtcEvent.EventType==cEventTimeDate) RtcEvent.Data=RtcCtrl.Date;
00123 else if(RtcEvent.EventType==cEventTimeHour) RtcEvent.Data=RtcCtrl.Hour;
00124 else if(RtcEvent.EventType==cEventTimeMinute) RtcEvent.Data=RtcCtrl.Minute;
00125 else if(RtcEvent.EventType==cEventTimeSecond) RtcEvent.Data=RtcCtrl.Second;
00126 else if(RtcEvent.EventType==cEventTimeWeekDay) RtcEvent.Data=RtcCtrl.WeekDay;
00127 }
00128 RtcEvent.HasEvent=0;
00129 }
00130 switch(RtcCtrl.State){
00131 case RtcReadSecondState:
00132 RtcCtrl.Second=F_RtcRead(RtcReadSecondCmd);
00133 LcmChar[75]=((RtcCtrl.Second&0x70)>>4)+48;
00134 LcmChar[76]=(RtcCtrl.Second&0x0f)+48;
00135 RtcCtrl.Second=((RtcCtrl.Second&0x70)>>4)*10+(RtcCtrl.Second&0x0f);
00136 if(RtcCtrl.Second==0) RtcCtrl.State=RtcReadMinuteState;
00137 else RtcCtrl.State=RtcIdleState;
00138 break;
00139 case RtcReadMinuteState:
00140 RtcCtrl.Minute=F_RtcRead(RtcReadMinuteCmd);
00141 LcmChar[72]=((RtcCtrl.Minute&0x70)>>4)+48;
00142 LcmChar[73]=(RtcCtrl.Minute&0x0f)+48;
00143 RtcCtrl.Minute=((RtcCtrl.Minute&0x70)>>4)*10+(RtcCtrl.Minute&0x0f);
00144 if(RtcCtrl.Minute==0) RtcCtrl.State=RtcReadHourState;
00145 else RtcCtrl.State=RtcIdleState;
00146 break;
00147 case RtcReadHourState:
00148 RtcCtrl.Hour=F_RtcRead(RtcReadHourCmd);
00149 LcmChar[69]=((RtcCtrl.Hour&0x30)>>4)+48;
00150 LcmChar[70]=(RtcCtrl.Hour&0x0f)+48;
00151 RtcCtrl.Hour=((RtcCtrl.Hour&0x30)>>4)*10+(RtcCtrl.Hour&0x0f);
00152 if(RtcCtrl.Hour==0) RtcCtrl.State=RtcReadWeekdayState;
00153 else RtcCtrl.State=RtcIdleState;
00154 break;
00155 case RtcReadWeekdayState:
00156 RtcCtrl.WeekDay=F_RtcRead(RtcReadWeekDayCmd);
00157 LcmChar[78]=(RtcCtrl.WeekDay&0x07)+48;
00158 RtcCtrl.WeekDay=RtcCtrl.WeekDay&0x07;
00159 RtcCtrl.State=RtcReadDateState;
00160 break;
00161 case RtcReadDateState:
00162 RtcCtrl.Date=F_RtcRead(RtcReadDateCmd);
00163 LcmChar[66]=((RtcCtrl.Date&0x30)>>4)+48;
00164 LcmChar[67]=(RtcCtrl.Date&0x0f)+48;
00165 RtcCtrl.Date=((RtcCtrl.Date&0x30)>>4)*10+(RtcCtrl.Date&0x0f);
00166 if(RtcCtrl.Date==1) RtcCtrl.State=RtcReadMonthState;
00167 else RtcCtrl.State=RtcIdleState;
00168 break;
00169 case RtcReadMonthState:
00170 RtcCtrl.Month=F_RtcRead(RtcReadMonthCmd);
00171 LcmChar[63]=((RtcCtrl.Month&0x10)>>4)+48;
00172 LcmChar[64]=(RtcCtrl.Month&0x0f)+48;
00173 RtcCtrl.Month=((RtcCtrl.Month&0x10)>>4)*10+(RtcCtrl.Month&0x0f);
00174 if(RtcCtrl.Month==1) RtcCtrl.State=RtcReadYearState;
00175 else RtcCtrl.State=RtcIdleState;
00176 break;
00177 case RtcReadYearState:
00178 RtcCtrl.Year=F_RtcRead(RtcReadYearCmd);
00179 LcmChar[60]=((RtcCtrl.Year&0xf0)>>4)+48;
00180 LcmChar[61]=(RtcCtrl.Year&0x0f)+48;
00181 RtcCtrl.Year=((RtcCtrl.Year&0xf0)>>4)*10+(RtcCtrl.Year&0x0f);
00182 RtcCtrl.State=RtcIdleState;
00183 break;
00184 default:
00185 break;
00186 }
00187 }
00188 void F_RtcCurrentTimeSet() LargeReentrant{
00189 F_RtcWrite(RtcWriteYearCmd,RtcCtrl.Year);
00190 F_RtcWrite(RtcWriteWeekDayCmd,RtcCtrl.WeekDay);
00191 F_RtcWrite(RtcWriteMonthCmd,RtcCtrl.Month);
00192 F_RtcWrite(RtcWriteDateCmd,RtcCtrl.Date);
00193 F_RtcWrite(RtcWriteHourCmd,RtcCtrl.Hour);
00194 F_RtcWrite(RtcWriteMinuteCmd,RtcCtrl.Minute);
00195 F_RtcWrite(RtcWriteSecondCmd,RtcCtrl.Second);
00196 }
00197 void F_RtcCurrentTimeShow() LargeReentrant{
00198 RtcCtrl.Second=F_RtcRead(RtcReadSecondCmd);
00199 LcmChar[75]=((RtcCtrl.Second&0x70)>>4)+48;
00200 LcmChar[76]=(RtcCtrl.Second&0x0f)+48;
00201 RtcCtrl.Second=((RtcCtrl.Second&0x70)>>4)*10+(RtcCtrl.Second&0x0f);
00202 RtcCtrl.Minute=F_RtcRead(RtcReadMinuteCmd);
00203 LcmChar[72]=((RtcCtrl.Minute&0x70)>>4)+48;
00204 LcmChar[73]=(RtcCtrl.Minute&0x0f)+48;
00205 RtcCtrl.Minute=((RtcCtrl.Minute&0x70)>>4)*10+(RtcCtrl.Minute&0x0f);
00206 RtcCtrl.Hour=F_RtcRead(RtcReadHourCmd);
00207 LcmChar[69]=((RtcCtrl.Hour&0x30)>>4)+48;
00208 LcmChar[70]=(RtcCtrl.Hour&0x0f)+48;
00209 RtcCtrl.Hour=((RtcCtrl.Hour&0x30)>>4)*10+(RtcCtrl.Hour&0x0f);
00210 RtcCtrl.WeekDay=F_RtcRead(RtcReadWeekDayCmd);
00211 LcmChar[78]=(RtcCtrl.WeekDay&0x07)+48;
00212 RtcCtrl.WeekDay=RtcCtrl.WeekDay&0x07;
00213 RtcCtrl.Date=F_RtcRead(RtcReadDateCmd);
00214 LcmChar[66]=((RtcCtrl.Date&0x30)>>4)+48;
00215 LcmChar[67]=(RtcCtrl.Date&0x0f)+48;
00216 RtcCtrl.Date=((RtcCtrl.Date&0x30)>>4)*10+(RtcCtrl.Date&0x0f);
00217 RtcCtrl.Month=F_RtcRead(RtcReadMonthCmd);
00218 LcmChar[63]=((RtcCtrl.Month&0x10)>>4)+48;
00219 LcmChar[64]=(RtcCtrl.Month&0x0f)+48;
00220 RtcCtrl.Month=((RtcCtrl.Month&0x10)>>4)*10+(RtcCtrl.Month&0x0f);
00221 RtcCtrl.Year=F_RtcRead(RtcReadYearCmd);
00222 LcmChar[60]=((RtcCtrl.Year&0xf0)>>4)+48;
00223 LcmChar[61]=(RtcCtrl.Year&0x0f)+48;
00224 RtcCtrl.Year=F_RtcRead(RtcReadYearCmd);
00225 }
00226 INT8U F_RtcEventCheck(void) LargeReentrant{
00227 if(RtcEvent.HasEvent==1) return 1;
00228 else return 0;
00229 }
00230 void F_RtcYearSet(INT8U Year) LargeReentrant{
00231 OS_ENTER_CRITICAL();
00232 if(Year>0x99){
00233 OS_EXIT_CRITICAL();
00234 return;
00235 }
00236 RtcEvent.EventType=cEventTimeYear;
00237 RtcEvent.RwFlag=0;
00238 RtcEvent.Data=Year;
00239 RtcEvent.HasEvent=1;
00240 OS_EXIT_CRITICAL();
00241 }
00242 void F_RtcMonthSet(INT8U Month) LargeReentrant{
00243 OS_ENTER_CRITICAL();
00244 if((Month>0x12)||(Month==0)){
00245 OS_EXIT_CRITICAL();
00246 return;
00247 }
00248 RtcEvent.EventType=cEventTimeMonth;
00249 RtcEvent.RwFlag=0;
00250 RtcEvent.Data=Month;
00251 RtcEvent.HasEvent=1;
00252 OS_EXIT_CRITICAL();
00253 }
00254 void F_RtcDateSet(INT8U Date) LargeReentrant{
00255 OS_ENTER_CRITICAL();
00256 if((Date>0x31)||(Date==0)){
00257 OS_EXIT_CRITICAL();
00258 return;
00259 }
00260 RtcEvent.EventType=cEventTimeDate;
00261 RtcEvent.RwFlag=0;
00262 RtcEvent.Data=Date;
00263 RtcEvent.HasEvent=1;
00264 OS_EXIT_CRITICAL();
00265 }
00266 void F_RtcHourSet(INT8U Hour) LargeReentrant{
00267 OS_ENTER_CRITICAL();
00268 if((Hour>0x24)||(Hour==0)){
00269 OS_EXIT_CRITICAL();
00270 return;
00271 }
00272 RtcEvent.EventType=cEventTimeHour;
00273 RtcEvent.RwFlag=0;
00274 RtcEvent.Data=Hour;
00275 RtcEvent.HasEvent=1;
00276 OS_EXIT_CRITICAL();
00277 }
00278 void F_RtcMinuteSet(INT8U Minute) LargeReentrant{
00279 OS_ENTER_CRITICAL();
00280 if(Minute>0x59){
00281 OS_EXIT_CRITICAL();
00282 return;
00283 }
00284 RtcEvent.EventType=cEventTimeMinute;
00285 RtcEvent.RwFlag=0;
00286 RtcEvent.Data=Minute;
00287 RtcEvent.HasEvent=1;
00288 OS_EXIT_CRITICAL();
00289 }
00290 void F_RtcSecondSet(INT8U Second) LargeReentrant{
00291 OS_ENTER_CRITICAL();
00292 if(Second>0x59){
00293 OS_EXIT_CRITICAL();
00294 return;
00295 }
00296 RtcEvent.EventType=cEventTimeSecond;
00297 RtcEvent.RwFlag=0;
00298 RtcEvent.Data=Second;
00299 RtcEvent.HasEvent=1;
00300 OS_EXIT_CRITICAL();
00301 }
00302 void F_RtcWeekDaySet(INT8U WeekDay) LargeReentrant{
00303 OS_ENTER_CRITICAL();
00304 if(WeekDay>0x8){
00305 OS_EXIT_CRITICAL();
00306 return;
00307 }
00308 RtcEvent.EventType=cEventTimeWeekDay;
00309 RtcEvent.RwFlag=0;
00310 RtcEvent.Data=WeekDay;
00311 RtcEvent.HasEvent=1;
00312 OS_EXIT_CRITICAL();
00313 }
00314 void F_RtcYearRead() LargeReentrant{
00315 OS_ENTER_CRITICAL();
00316 RtcEvent.EventType=cEventTimeYear;
00317 RtcEvent.RwFlag=1;
00318 RtcEvent.Data=0;
00319 RtcEvent.HasEvent=1;
00320 OS_EXIT_CRITICAL();
00321 }
00322 void F_RtcMonthRead() LargeReentrant{
00323 OS_ENTER_CRITICAL();
00324 RtcEvent.EventType=cEventTimeMonth;
00325 RtcEvent.RwFlag=1;
00326 RtcEvent.Data=0;
00327 RtcEvent.HasEvent=1;
00328 OS_EXIT_CRITICAL();
00329 }
00330 void F_RtcDateRead() LargeReentrant{
00331 OS_ENTER_CRITICAL();
00332 RtcEvent.EventType=cEventTimeDate;
00333 RtcEvent.RwFlag=1;
00334 RtcEvent.Data=0;
00335 RtcEvent.HasEvent=1;
00336 OS_EXIT_CRITICAL();
00337 }
00338 void F_RtcHourRead() LargeReentrant{
00339 OS_ENTER_CRITICAL();
00340 RtcEvent.EventType=cEventTimeHour;
00341 RtcEvent.RwFlag=1;
00342 RtcEvent.Data=0;
00343 RtcEvent.HasEvent=1;
00344 OS_EXIT_CRITICAL();
00345 }
00346 void F_RtcMinuteRead() LargeReentrant{
00347 OS_ENTER_CRITICAL();
00348 RtcEvent.EventType=cEventTimeMinute;
00349 RtcEvent.RwFlag=1;
00350 RtcEvent.Data=0;
00351 RtcEvent.HasEvent=1;
00352 OS_EXIT_CRITICAL();
00353 }
00354 void F_RtcSecondRead() LargeReentrant{
00355 OS_ENTER_CRITICAL();
00356 RtcEvent.EventType=cEventTimeSecond;
00357 RtcEvent.RwFlag=1;
00358 RtcEvent.Data=0;
00359 RtcEvent.HasEvent=1;
00360 OS_EXIT_CRITICAL();
00361 }
00362 void F_RtcWeekDayRead() LargeReentrant{
00363 OS_ENTER_CRITICAL();
00364 RtcEvent.EventType=cEventTimeWeekDay;
00365 RtcEvent.RwFlag=1;
00366 RtcEvent.Data=0;
00367 RtcEvent.HasEvent=1;
00368 OS_EXIT_CRITICAL();
00369 }
00370 UCHAR F_RtcRead(UCHAR Command) LargeReentrant{
00371 UCHAR data Data;
00372
00373 RtcSclk=0;
00374 _nop_();
00375 _nop_();
00376 RtcCe=1;
00377 _nop_();
00378 _nop_();
00379 _nop_();
00380 _nop_();
00381 _nop_();
00382 _nop_();
00383
00384 if(Command&0x01) RtcData=1;
00385 else RtcData=0;
00386 _nop_();
00387 _nop_();
00388 RtcSclk=1;
00389 _nop_();
00390 _nop_();
00391 RtcSclk=0;
00392 _nop_();
00393 _nop_();
00394
00395 if(Command&0x02) RtcData=1;
00396 else RtcData=0;
00397 _nop_();
00398 _nop_();
00399 RtcSclk=1;
00400 _nop_();
00401 _nop_();
00402 RtcSclk=0;
00403 _nop_();
00404 _nop_();
00405
00406 if(Command&0x04) RtcData=1;
00407 else RtcData=0;
00408 _nop_();
00409 _nop_();
00410 RtcSclk=1;
00411 _nop_();
00412 _nop_();
00413 RtcSclk=0;
00414 _nop_();
00415 _nop_();
00416
00417 if(Command&0x08) RtcData=1;
00418 else RtcData=0;
00419 _nop_();
00420 _nop_();
00421 RtcSclk=1;
00422 _nop_();
00423 _nop_();
00424 RtcSclk=0;
00425 _nop_();
00426 _nop_();
00427
00428 if(Command&0x10) RtcData=1;
00429 else RtcData=0;
00430 _nop_();
00431 _nop_();
00432 RtcSclk=1;
00433 _nop_();
00434 _nop_();
00435 RtcSclk=0;
00436 _nop_();
00437 _nop_();
00438
00439 if(Command&0x20) RtcData=1;
00440 else RtcData=0;
00441 _nop_();
00442 _nop_();
00443 RtcSclk=1;
00444 _nop_();
00445 _nop_();
00446 RtcSclk=0;
00447 _nop_();
00448 _nop_();
00449
00450 if(Command&0x40) RtcData=1;
00451 else RtcData=0;
00452 _nop_();
00453 _nop_();
00454 RtcSclk=1;
00455 _nop_();
00456 _nop_();
00457 RtcSclk=0;
00458 _nop_();
00459 _nop_();
00460
00461 if(Command&0x80) RtcData=1;
00462 else RtcData=0;
00463 _nop_();
00464 _nop_();
00465 RtcSclk=1;
00466 _nop_();
00467 _nop_();
00468 RtcSclk=0;
00469 _nop_();
00470 _nop_();
00471
00472 if(RtcData==0);
00473 Data=0;
00474 if(RtcData==1) Data=Data|0x01;
00475
00476 RtcSclk=1;
00477 _nop_();
00478 _nop_();
00479 RtcSclk=0;
00480 _nop_();
00481 _nop_();
00482 if(RtcData==1) Data=Data|0x02;
00483
00484 RtcSclk=1;
00485 _nop_();
00486 _nop_();
00487 RtcSclk=0;
00488 _nop_();
00489 _nop_();
00490 if(RtcData==1) Data=Data|0x04;
00491
00492 RtcSclk=1;
00493 _nop_();
00494 _nop_();
00495 RtcSclk=0;
00496 _nop_();
00497 _nop_();
00498 if(RtcData==1) Data=Data|0x08;
00499
00500 RtcSclk=1;
00501 _nop_();
00502 _nop_();
00503 RtcSclk=0;
00504 _nop_();
00505 _nop_();
00506 if(RtcData==1) Data=Data|0x10;
00507
00508 RtcSclk=1;
00509 _nop_();
00510 _nop_();
00511 RtcSclk=0;
00512 _nop_();
00513 _nop_();
00514 if(RtcData==1) Data=Data|0x20;
00515
00516 RtcSclk=1;
00517 _nop_();
00518 _nop_();
00519 RtcSclk=0;
00520 _nop_();
00521 _nop_();
00522 if(RtcData==1) Data=Data|0x40;
00523
00524 RtcSclk=1;
00525 _nop_();
00526 _nop_();
00527 RtcSclk=0;
00528 _nop_();
00529 _nop_();
00530 if(RtcData==1) Data=Data|0x80;
00531
00532
00533
00534
00535
00536
00537 RtcCe=0;
00538 _nop_();
00539 _nop_();
00540 _nop_();
00541 _nop_();
00542 _nop_();
00543 _nop_();
00544 return Data;
00545 }
00546 void F_RtcWrite(UCHAR Command,UCHAR Data) LargeReentrant{
00547 RtcSclk=0;
00548 _nop_();
00549 _nop_();
00550 RtcCe=1;
00551 _nop_();
00552 _nop_();
00553 _nop_();
00554 _nop_();
00555 _nop_();
00556 _nop_();
00557
00558 if(Command&0x01) RtcData=1;
00559 else RtcData=0;
00560 _nop_();
00561 _nop_();
00562 RtcSclk=1;
00563 _nop_();
00564 _nop_();
00565 RtcSclk=0;
00566 _nop_();
00567 _nop_();
00568
00569 if(Command&0x02) RtcData=1;
00570 else RtcData=0;
00571 _nop_();
00572 _nop_();
00573 RtcSclk=1;
00574 _nop_();
00575 _nop_();
00576 RtcSclk=0;
00577 _nop_();
00578 _nop_();
00579
00580 if(Command&0x04) RtcData=1;
00581 else RtcData=0;
00582 _nop_();
00583 _nop_();
00584 RtcSclk=1;
00585 _nop_();
00586 _nop_();
00587 RtcSclk=0;
00588 _nop_();
00589 _nop_();
00590
00591 if(Command&0x08) RtcData=1;
00592 else RtcData=0;
00593 _nop_();
00594 _nop_();
00595 RtcSclk=1;
00596 _nop_();
00597 _nop_();
00598 RtcSclk=0;
00599 _nop_();
00600 _nop_();
00601
00602 if(Command&0x10) RtcData=1;
00603 else RtcData=0;
00604 _nop_();
00605 _nop_();
00606 RtcSclk=1;
00607 _nop_();
00608 _nop_();
00609 RtcSclk=0;
00610 _nop_();
00611 _nop_();
00612
00613 if(Command&0x20) RtcData=1;
00614 else RtcData=0;
00615 _nop_();
00616 _nop_();
00617 RtcSclk=1;
00618 _nop_();
00619 _nop_();
00620 RtcSclk=0;
00621 _nop_();
00622 _nop_();
00623
00624 if(Command&0x40) RtcData=1;
00625 else RtcData=0;
00626 _nop_();
00627 _nop_();
00628 RtcSclk=1;
00629 _nop_();
00630 _nop_();
00631 RtcSclk=0;
00632 _nop_();
00633 _nop_();
00634
00635 if(Command&0x80) RtcData=1;
00636 else RtcData=0;
00637 _nop_();
00638 _nop_();
00639 RtcSclk=1;
00640 _nop_();
00641 _nop_();
00642 RtcSclk=0;
00643 _nop_();
00644 _nop_();
00645
00646 if(Data&0x01) RtcData=1;
00647 else RtcData=0;
00648 _nop_();
00649 _nop_();
00650 RtcSclk=1;
00651 _nop_();
00652 _nop_();
00653 RtcSclk=0;
00654 _nop_();
00655 _nop_();
00656
00657 if(Data&0x02) RtcData=1;
00658 else RtcData=0;
00659 _nop_();
00660 _nop_();
00661 RtcSclk=1;
00662 _nop_();
00663 _nop_();
00664 RtcSclk=0;
00665 _nop_();
00666 _nop_();
00667
00668 if(Data&0x04) RtcData=1;
00669 else RtcData=0;
00670 _nop_();
00671 _nop_();
00672 RtcSclk=1;
00673 _nop_();
00674 _nop_();
00675 RtcSclk=0;
00676 _nop_();
00677 _nop_();
00678
00679 if(Data&0x08) RtcData=1;
00680 else RtcData=0;
00681 _nop_();
00682 _nop_();
00683 RtcSclk=1;
00684 _nop_();
00685 _nop_();
00686 RtcSclk=0;
00687 _nop_();
00688 _nop_();
00689
00690 if(Data&0x10) RtcData=1;
00691 else RtcData=0;
00692 _nop_();
00693 _nop_();
00694 RtcSclk=1;
00695 _nop_();
00696 _nop_();
00697 RtcSclk=0;
00698 _nop_();
00699 _nop_();
00700
00701 if(Data&0x20) RtcData=1;
00702 else RtcData=0;
00703 _nop_();
00704 _nop_();
00705 RtcSclk=1;
00706 _nop_();
00707 _nop_();
00708 RtcSclk=0;
00709 _nop_();
00710 _nop_();
00711
00712 if(Data&0x40) RtcData=1;
00713 else RtcData=0;
00714 _nop_();
00715 _nop_();
00716 RtcSclk=1;
00717 _nop_();
00718 _nop_();
00719 RtcSclk=0;
00720 _nop_();
00721 _nop_();
00722
00723 if(Data&0x80) RtcData=1;
00724 else RtcData=0;
00725 _nop_();
00726 _nop_();
00727 RtcSclk=1;
00728 _nop_();
00729 _nop_();
00730 RtcSclk=0;
00731 _nop_();
00732 _nop_();
00733
00734 RtcCe=0;
00735 _nop_();
00736 _nop_();
00737 _nop_();
00738 _nop_();
00739 _nop_();
00740 _nop_();
00741 }
00742 void F_RtcCommandSet(INT8U **pArgv,INT8U Argc) LargeReentrant{
00743 INT8U i,j,k;
00744 INT8U *pString;
00745
00746 if(Argc==0){
00747 printf("\n no command param");
00748 return;
00749 }
00750 else if(Argc==1){
00751 printf("\n command param is too few");
00752 return;
00753 }
00754 for(i=0;i<RTC_COMMAND_MAX;i++){
00755 if(strcmp(pArgv[0],RtcCommandList[i])==0) break;
00756 }
00757 if(i==RTC_COMMAND_MAX){
00758 printf("\n RTC command param invalid");
00759 return;
00760 }
00761 else{
00762 printf("\n RTC command '%s' ",RtcCommandList[i]);
00763 }
00764 j=strlen(pArgv[1]);
00765
00766 if(j>2){
00767 printf("\n RTC value param too long %x ",(INT16U)j);
00768 return;
00769 }
00770 else{
00771 pString=pArgv[1];
00772 if(j==2){
00773 if((pString[0]<0x30)||((pString[0]>0x39))){
00774 printf("\n value param invalid ");
00775 return;
00776 }
00777 if((pString[1]<0x30)||((pString[1]>0x39))){
00778 printf("\n value param invalid ");
00779 return;
00780 }
00781 k=(pString[0]-0x30)*16+(pString[1]-0x30);
00782 }
00783 else{
00784 if((pString[0]<0x30)||((pString[0]>0x39))){
00785 printf("\n value param invalid ");
00786 return;
00787 }
00788 k=pString[0]-0x30;
00789 }
00790 printf("\n input %s %x",pArgv[0],(INT16U)k);
00791 }
00792 switch(i){
00793 case 0:
00794 F_RtcSecondSet(k);
00795 break;
00796 case 1:
00797 F_RtcMinuteSet(k);
00798 break;
00799 case 2:
00800 F_RtcHourSet(k);
00801 break;
00802 case 3:
00803 F_RtcDateSet(k);
00804 break;
00805 case 4:
00806 F_RtcMonthSet(k);
00807 break;
00808 case 5:
00809 F_RtcYearSet(k);
00810 break;
00811 case 6:
00812 F_RtcWeekDaySet(k);
00813 break;
00814 }
00815 }
00816
00817
00818