From 589d00fd4e05c5b45855935f6c646d4060ff42ea Mon Sep 17 00:00:00 2001 From: eddyem Date: Mon, 3 Aug 2015 17:36:47 +0300 Subject: [PATCH] Add GPS time synchronisation --- GPS/GPS.bin | Bin 8796 -> 9212 bytes GPS/GPS.c | 1 - GPS/hardware_ini.c | 2 +- GPS/main.c | 60 +++++++++++++++++++++++++++++++++++++++++---- GPS/main.h | 5 ++++ GPS/uart.c | 1 + 6 files changed, 62 insertions(+), 7 deletions(-) diff --git a/GPS/GPS.bin b/GPS/GPS.bin index f688aecfb3ef2fe068c4e9665158c38cebf02663..6f0e549cc597153805276b3a65ad50dad6a90750 100755 GIT binary patch delta 2696 zcmbtWeQXow8Gr8lb#|P@`NVcUca;E?RVC;jEwE~Y%v&?zC3I|pjZH*VI@YGDwM-(NsCpp61^b-a^Cr+r zFln1+>37fjJn!>$zxR1BnQqrQ60jA>i`BrrfEc_FaNm#mP*5|KC#?_0+@Ir~KKJi^ z6Au)<7x4ec?{UC&BK~uZt^bYF|KcNmi&;W#0*oAn;BfrL+vIYQ1Gon$BvQKhv zkzgTM?D=4fY3#d>uTj*THiUP=1v;%LN%_CI#b8 z2O9*A335pwjPl!@Q3%~!+2j@(td=j4e64kLts20v)&+Y41*HY^92$H`6yNi z@}O+gfd`p{pYs^7DwHWLx)~ijo`jb@lbUs4IrcsIx`DVtIxkH)+iICh0Ln`Xwm1>Vh&9S6f4oB^ z{hINN179bIF+)6X!${c}0*8#mG1o~0aJ|VABqJ$Tm{ul^FZ?KUdy*5J5-9x(CIP(e zUPB}`+ZzPsCu6;sX#yiJ-i@Z+*bsrFEp7_iFiY;VAL>D$VKOxv z2Dl+!8s zx+%W-crJjEZ{~tG*+x)a&-ud!B;JmlRBN?iMmeC7u&$ocXCxBdq!7c5n3|o(@IHJK zXouid?4nD4)_kPADaU;M_F2DKoq`%;`sDYq1*JA8ms(aZTjdtZnnX4WUUu8yyus5X zA`yg=(ZvG!t^vp+2)i&8GF>su^=%poIVQmiX~xS5M+szEzdV109A3qsl}QhGF-^~* z-rKR%0?iRf8YE+Q*ld~t<aq?Aw}L%r#*{o4J=0 z^H|i0OwK1k`CV35{W)FzJm-mfI*F*OksOKW>cIt24rOY>)$v9=(bu&)$u&}m_G4Nt z`Z#n;n2hLZxkgz$l;I`t{qss0?&oVbJL#MbBrfs>pf5DrUP>x@_35<54r-z^rW zX$znDheLT+*G2K_`}4#Su~_nBVZXq5-C`_})>U3#E3}dw{jUDdrY*O2i;!i=vHphG zgtJ7-8v*_sXiLB6Lpv+LF=n>pws}yZ?jw%teXupNHZje8+ zh7!~qNHz!!oi^*epS)m1`8KlnPX)Zux5obmNreeBgnqN|^2d}nRHuD+FB zkJ{h0$G_Z})+Dt5Y|;LqcKS>E6|Gzt!kr&yS7XE_ZBM;rnr6D7S?gJ8aXG$thX=Cx zSd{UxllfTmcm_48WWc_oG#QJg;MiGZR2dS;mT%;tcbSt`=e~T_xIIt}$c* zr!I|o=;(fqP!WNoDGXL!J)v9TOqk|-MKdXdfHSI7eW|sIP21(g6watIZ15Tyb=9Mr!p@PUpijqXx`57&6-8X>nM3tRMWImD8%SB2>pgVO zDSu%v^A0Z1wYXrqOGWn>jF({v7lKludq->Xx3kt-qykRFjP>$hA#b8u{ph=e%Nd)i z6u5(kTpWb#LEvYt7ZedyldHN+e{g7Rpr3tmyf=->?4+$m7jFauwWeBUa^B= zU*YAmm5-s(RkdZkC1;P@JK1#Cyz!eu9X}6cK7jGd*acv%MucJnLiGnRdZOw*w&5cF zp#osgo&M6O-CMhmC#w>6q{D`9UgU+UMP6JRHY{?r Mk_VuG;(QQouLMj0B~3`MfvCkmtcZ34 ziT=S*^NJY>B!);L_=k+y1e8)RK>Q?I!W0Be5dw>VoRe{Ez3chhKKKJn)Og9S&-*<0 zeEjbBzIW9ZTxyEL5+G6~2vvy62LKOTR*nTLY}pNthie|}G3LMb_qp+hhK?2dAG=%t zp&9YdJ(m2Nr2mpb7cp}RzN-S^D&j7ph|mw1gO2F{qy{mGHnSUqYdV((_0tUflC5@F z;aY^7{=q&UUy%ig^*CiA2a0kTeS)7+XC@)#cCvmD7{8DJ!ldL~5>NG~OijqZXNV^hFg^_@=9>2^7K;4ziS4aTpR-EFOL2b{143q@6NgPgv z3F`K&9TOxe?qLrl`<#AI7p3S;j+E}q%8?W9r)!u?BE5M~h& zmLl+w5kCXu00%-e;X*OGXt`}l{Fd=%!`&W1aYsNsW!Mz(ltsBl@VwV>O<(Q)-C)m4;sh6XmzKp)#%k?Dte120qn(`&BTC0auXKII1 z&cxz7#Y-*euIj`a5O62%=%^st!BLwTwVXi$dD4hz+A(_57Mg!c_hIF4y1$>T1@)R< zAK*~_T9s0IdKe9&;}k4?Kqy)QvhV%9+G8(Z_RU#usG3!!F-`kCW=cCol%=_cEq#8?K`ZM#fw9z62NH1H0|EUQo;R zlZP$B7m#q7eP*v5DYsAWEm8I~*yxR%sq8?877KMqs9AU?p2nd?sA4n$>iCSQJ!Y8N zZNnXMFC<}8YcWcKruJ$U)YF62feE2n+|j zhf9&b29s5sp0cojY8Ua0-;M8_H8af#K&)YIpmn(oaZ3naVwy5-p-3u_@P5M^b9?8X zpQ4nGw>*w3qcUhMAJkz&12;^bXDF<`S*sbo&!S_80n`!<}FxxcF2d3Z-*Qh z`D%#y*wjuBiAdxJ{p@vyWKpOP_OUi$1!4`tm#_uEVQTx#oDdVR`UMP|Iu1;2w`ut! zte#BLSbiBt@g+HgPmb2*- z1?9eCvoU6i&hv^2)58wG17%TDYtLF4k*sZ0fXdGy)rMWSBP;>dOI6$RUiV-^tK^W%(VVA4xslv5($GKrjp;#_$cbBjqN%V|+hWJ_$2nodg zqOPp_Czk1^7s{`&eO%Y^ij@qjOSEj_S`4;LT+AG$JriBkKKvr$pDme$IM3q&LjPfO ziB(6~N5Xix0r1;9e8tckTX*8x!Q(xaW#9}t-xGRUs%IMso#YA9R!;>z>~R;qiBuwYYRdk7LTm3XTvk(embkcqEXE6w;N8^=fZ=f8&0uBcI 20){ + ticks = ticksavr / N; + RVR0 = ticks / 1000 - 1; // main RVR value + STK_RVR = RVR0; + RVR1 = RVR0 + ticks % 1000 - 1; // last millisecond RVR value (with fine correction) + N = 0; + ticksavr = 0; + need_sync = 0; + } + }else{ + N = 0; + ticksavr = 0; + } } + theend: + last_corr_time = t; EXTI_PR = EXTI4; } } @@ -131,7 +180,7 @@ void set_time(uint8_t *buf){ inline uint8_t atou(uint8_t *b){ return (b[0]-'0')*10 + b[1]-'0'; } - uint8_t H = atou(buf) + 3; + uint8_t H = atou(buf) + TIMEZONE_GMT_PLUS; if(H > 23) H -= 24; current_time.H = H; current_time.M = atou(&buf[2]); @@ -156,6 +205,7 @@ void print_curtime(){ if(T < 10) usb_send('0'); print_int(T); if(GPS_status == GPS_NOT_VALID) P(" (not valid)"); + if(need_sync) P(" need synchronisation"); newline(); }else P("Waiting for satellites\n"); diff --git a/GPS/main.h b/GPS/main.h index eda190b..7767d51 100644 --- a/GPS/main.h +++ b/GPS/main.h @@ -49,6 +49,9 @@ extern void *memcpy(void *dest, const void *src, int n); #define U16(x) ((uint16_t) x) #define U32(x) ((uint32_t) x) +#define STK_RVR_DEFAULT_VAL (8999) +#define TIMEZONE_GMT_PLUS (3) + typedef struct{ uint8_t H; uint8_t M; @@ -59,6 +62,8 @@ extern curtime current_time; extern volatile uint32_t Timer; // global timer (milliseconds) extern volatile int clear_ST_on_connect; // flag for clearing Systick counter on next PPS +extern volatile int need_sync; + void Delay(uint16_t time); void set_time(uint8_t *buf); diff --git a/GPS/uart.c b/GPS/uart.c index 0a528d7..e1e3b34 100644 --- a/GPS/uart.c +++ b/GPS/uart.c @@ -258,6 +258,7 @@ void fill_uart_RXbuff(uint32_t UART, uint8_t byte){ } curbuff = &RX_buffer[bufidx]; if(curbuff->end == UART_BUF_DATA_SIZE){ // end of buffer - forget about data + curbuff->end = 0; return; } curbuff->buf[curbuff->end++] = byte; // put byte into buffer