Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 00003 Serial pc(USBTX, USBRX); // tx, rx 00004 Serial ss(p9, p10); //tx rx 00005 DigitalOut myled(LED3); 00006 DigitalOut rst1(p11); 00007 DigitalOut slaveOut(p23); 00008 00009 00010 void Timer0_init(void); 00011 void Timer0_IRQHandler(void); 00012 void slavesyn(void); 00013 void backtime(void); 00014 long long assembletime(long long t); 00015 00016 long counter = 0; 00017 int divider = 4; 00018 long long t1; 00019 long long t2, t3, t4, t5, t6; 00020 long long delay; 00021 long long offdri; 00022 char test; 00023 long long receive(void); 00024 00025 long long sne(void); 00026 00027 int main( ) 00028 { 00029 pc.printf("\nbegin\n"); 00030 Timer0_init( ); 00031 00032 while (1) 00033 { 00034 myled = 0; 00035 00036 if (ss.readable( )){ 00037 myled = 1; 00038 test = ss.getc(); 00039 pc.printf("%d\n", test-'S'); 00040 00041 if (test == 'S' ){ 00042 slavesyn(); 00043 } 00044 else{ 00045 if (test == 'T'){ 00046 backtime(); 00047 } 00048 else{ 00049 pc.printf("\nSystem Error--1!!\n"); 00050 } 00051 } 00052 } 00053 } 00054 } 00055 00056 void Timer0_init(void) 00057 { 00058 LPC_SC->PCLKSEL0 = 0x0066; 00059 LPC_TIM0->MR0 = 2880000000; // Match count for 100uS 00060 LPC_TIM0->MCR = 3; // Interrupt and Reset on Match 00061 LPC_TIM0->TCR = 1; // Enable Timer0 00062 NVIC_SetVector (TIMER0_IRQn, (uint32_t)&Timer0_IRQHandler); 00063 NVIC_EnableIRQ(TIMER0_IRQn); 00064 } 00065 00066 00067 00068 void Timer0_IRQHandler(void) 00069 { 00070 LPC_TIM0->IR = 1; 00071 LPC_TIM0->MR0 = 2880000000; // Match count for 100uS 00072 LPC_TIM0->TCR = 1; // Enable Timer0 00073 counter = counter + 1; 00074 } 00075 00076 void slavesyn(void) 00077 { 00078 pc.printf("in to fuc\n"); 00079 t2 = counter * 4294967296 + LPC_TIM0->TC; 00080 pc.printf("t2 = %llu\n",t2); 00081 00082 t1 = receive(); 00083 pc.printf("t1 = %llu\n",t1); 00084 00085 wait(2); 00086 t3 = counter * 4294967296 + LPC_TIM0->TC; 00087 ss.putc('S'); 00088 pc.printf("t3 = %llu\n", t3); 00089 00090 t4 = receive(); 00091 pc.printf("t4 = %llu\n",t4); 00092 00093 00094 t1 = assembletime(t1); 00095 t2 = assembletime(t2); 00096 t3 = assembletime(t3); 00097 t4 = assembletime(t4); 00098 00099 // pc.printf("t2-t1 = %ll\n t1-t2 = %ll \n", (lld)t2-t1,(lld)t1-t2); 00100 00101 /* 00102 offdri = (t2/4294967296 - t1/4294967296) *30*1000000000 + (t2%4294967296 - t1%4294967296); 00103 pc.printf("offderi = %llu\n",offdri); 00104 00105 delay = (t4/4294967296 - t3/4294967296) *4294967296 + (t4%4294967296 - t3%4294967296); 00106 pc.printf("delay = %llu\n",delay); 00107 */ 00108 //assume t2>t1 since slave reset first 00109 if(t3>t4){ 00110 if ((t2-t1)>(t3-t4)){ 00111 delay = ((t2-t1)-(t3-t4))/2; 00112 offdri = ((t2-t1)+(t3-t4))/2; 00113 } 00114 else{ 00115 delay = ((t3-t4)-(t2-t1))/2; 00116 offdri = ((t2-t1)+(t3-t4))/2; 00117 } 00118 } 00119 else{ //t4>t3 00120 if ((t2-t1)<(t4-t3)){ 00121 delay = ((t2-t1)+(t4-t3))/2; 00122 offdri = ((t4-t3)-(t2-t1))/2; 00123 } 00124 else{ 00125 delay = ((t2-t1)+(t4-t3))/2; 00126 offdri = ((t2-t1)-(t4-t3))/2; 00127 } 00128 } 00129 00130 pc.printf("Delay = %llu\n",delay); 00131 pc.printf("offderi = %llu\n",offdri); 00132 00133 00134 } 00135 00136 long long receive(void){ 00137 char x; 00138 long long y; 00139 00140 y=0; 00141 while(1){ 00142 if(ss.readable()){ 00143 x = ss.getc(); 00144 if(x == 'E'){ 00145 return y; 00146 } 00147 else{ 00148 y = y*10 + (int)(x-48); 00149 } 00150 } 00151 } 00152 } 00153 00154 long long assembletime(long long t){ 00155 long long temp; 00156 00157 temp = (t/4294967296)*30*1000000000 + t%4294967296*10; 00158 return temp; 00159 } 00160 00161 void backtime(){ 00162 long long t; 00163 long long temp; 00164 t = counter * 4294967296 + LPC_TIM0->TC; 00165 t = assembletime(t); 00166 t = t - offdri + delay; 00167 /* 00168 temp = t/30/1000000000; 00169 t = (t%30000000000)/10 + temp*4294967296; 00170 */ 00171 ss.printf("%llu",t); 00172 ss.putc('E'); 00173 } 00174 00175 void toggle(){ 00176 slaveOut = !slaveOut; 00177 } 00178 00179 long long sne(){ 00180 char temp; 00181 char incode[100]; 00182 int i=0; 00183 int j=0; 00184 long long sum = 0; 00185 while ((temp = pc.getc())!= 'E') { //getchar 00186 pc.printf("%c", temp); 00187 incode[i] = temp; //put the original char in incode 00188 i++; 00189 } 00190 pc.printf("E"); 00191 for (j=1;j<i;j++){ 00192 sum = (incode[j]-'0')+sum*10; 00193 } 00194 pc.printf("\n The time is %llu\n",sum); 00195 if (incode[0]=='S') 00196 return sum; 00197 else 00198 return 0; 00199 } 00200 00201
Generated on Fri Aug 5 2022 13:15:21 by
1.7.2