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 Serial ss_sne(p13, p14); //tx rx 00006 00007 DigitalOut myled1(LED1); 00008 DigitalOut myled2(LED2); 00009 00010 DigitalOut masterOut(p23); 00011 InterruptIn masterIn(p22); 00012 InterruptIn slaveIn(p21); 00013 00014 unsigned long counter = 0; 00015 int divider = 1; 00016 int pro_flag = 0; 00017 int task_flag = 0; 00018 unsigned long long t1, t2, t3, t4; 00019 typedef struct timeval { 00020 unsigned long tv_sec; 00021 unsigned long tv_usec; 00022 } timeval; 00023 00024 void Timer0_init(void); 00025 void Timer0_IRQHandler(void); 00026 void Sync_protocol(void); 00027 void getTime(struct timeval *tv); 00028 int runAtTime (void (*fptr)(void), struct timeval tv); 00029 void toggle(void); 00030 void runAtTrigger( ); 00031 void reportToggle(struct timeval *tv); 00032 long long sne(void); 00033 00034 int main( ) 00035 { 00036 struct timeval t_run; 00037 long long t_run_m; 00038 t_run.tv_sec = 1000; 00039 t_run.tv_usec = 0; 00040 wait(1); 00041 // masterIn.rise(&runAtTrigger); 00042 // masterIn.fall(&runAtTrigger); 00043 // slaveIn.rise(&runAtTrigger); 00044 // slaveIn.fall(&runAtTrigger); 00045 Timer0_init( ); 00046 while (1) 00047 { /* 00048 if (pc.readable( )){ 00049 t_run_m = sne( ); 00050 t_run.tv_sec = t_run_m/1000000; 00051 t_run.tv_usec = t_run_m%1000000; 00052 pc.printf("%lu\n",t_run.tv_sec); 00053 pc.printf("%lu\n",t_run.tv_usec); 00054 } */ 00055 // if (!task_flag) 00056 // task_flag = runAtTime (&toggle, t_run); 00057 if (pro_flag == 1){ 00058 Sync_protocol( ); 00059 pro_flag = 0; 00060 } 00061 } 00062 } 00063 00064 void Timer0_init(void) 00065 { 00066 LPC_SC->PCLKSEL0 = 0x0066; 00067 LPC_SC->PCONP |= 1<<1; // Timer0 Power On 00068 LPC_TIM0->MR0 = 2880000000; // Match count for 30S 00069 LPC_TIM0->MCR = 3; // Interrupt and Reset on Match 00070 LPC_TIM0->TCR = 1; // Enable Timer0 00071 NVIC_SetVector (TIMER0_IRQn, (uint32_t)&Timer0_IRQHandler); 00072 NVIC_EnableIRQ(TIMER0_IRQn); 00073 } 00074 00075 void Timer0_IRQHandler(void) 00076 { 00077 LPC_TIM0->IR = 1; 00078 LPC_TIM0->MR0 = 2880000000; // Match count for 30S 00079 LPC_TIM0->TCR = 1; // Enable Timer0 00080 counter = counter + 1; 00081 if ( counter % divider ==0 ) 00082 pro_flag = 1; 00083 } 00084 00085 void Sync_protocol(void) 00086 { 00087 char x; 00088 t1 = counter * 4294967296 + LPC_TIM0->TC; 00089 ss.putc('S'); 00090 pc.printf("t1 = %llu\n", t1); 00091 ss.printf("%llu", t1); 00092 ss.putc('E'); 00093 while (1){ 00094 if (ss.readable( )){ 00095 x = ss.getc( ); 00096 t4 = counter * 4294967296 + LPC_TIM0->TC; 00097 ss.printf("%llu", t4); 00098 ss.putc('E'); 00099 pc.printf("%c\n", x); 00100 pc.printf("t4 = %llu\n", t4); 00101 break; 00102 } 00103 } 00104 } 00105 00106 void getTime(struct timeval *tv){ 00107 unsigned long ns, hs; 00108 ns = LPC_TIM0->TC; 00109 hs = counter; 00110 tv->tv_sec = hs*30 + ns/100000000; 00111 tv->tv_usec = (ns%100000000)/100; 00112 } 00113 /* 00114 int runAtTime (void (*fptr)(void), struct timeval tv){ 00115 struct timeval current_t; 00116 getTime(¤t_t); 00117 if (tv.tv_sec <= current_t.tv_sec && tv.tv_usec <= current_t.tv_usec){ 00118 (*fptr) ( ); 00119 return 1; 00120 } 00121 else 00122 return 0; 00123 } 00124 00125 void toggle(void){ 00126 masterOut = !masterOut; 00127 } 00128 00129 void runAtTrigger(void){ 00130 struct timeval response_t; 00131 reportToggle(&response_t); 00132 } 00133 00134 void reportToggle(struct timeval *tv) 00135 { 00136 getTime(tv); 00137 pc.printf("%u\n", tv->tv_sec); 00138 pc.printf("%u\n", tv->tv_usec); 00139 myled2 = !myled2; 00140 } 00141 00142 long long sne( ){ 00143 char temp; 00144 char incode[100]; 00145 int i=0; 00146 int j=0; 00147 long long sum = 0; 00148 while ((temp = pc.getc())!= 'E') { //getchar 00149 incode[i] = temp; //put the original char in incode 00150 i++; 00151 } 00152 for (j=1;j<i;j++){ 00153 sum = (incode[j]-'0')+sum*10; 00154 } 00155 if (incode[0]=='S'){ 00156 ss_sne.printf("%llu", sum); 00157 ss_sne.putc('E'); 00158 return sum; 00159 } 00160 else 00161 return 0; 00162 } 00163 */
Generated on Fri Jul 29 2022 09:34:35 by
1.7.2