Jingyuan Dong / Mbed 2 deprecated Part1_sync_with_getTime_Master

Dependencies:   mbed

Committer:
guruimage
Date:
Sat Dec 04 06:52:35 2010 +0000
Revision:
0:c16269a9525f
HW3B getTime with synchronization on master

Who changed what in which revision?

UserRevisionLine numberNew contents of line
guruimage 0:c16269a9525f 1 #include "mbed.h"
guruimage 0:c16269a9525f 2
guruimage 0:c16269a9525f 3 void SetupTimer1(void);
guruimage 0:c16269a9525f 4 void getTime(struct timeval *tv) ;
guruimage 0:c16269a9525f 5 void itoa( unsigned long long int value, char *str);
guruimage 0:c16269a9525f 6 void sync(void);
guruimage 0:c16269a9525f 7 void Timer1_IRQHandler(void);
guruimage 0:c16269a9525f 8 Serial device(p9,p10);
guruimage 0:c16269a9525f 9 Serial pc(USBTX, USBRX); // tx, rx
guruimage 0:c16269a9525f 10 DigitalOut myled1(LED1);
guruimage 0:c16269a9525f 11 DigitalOut myled2(LED2);
guruimage 0:c16269a9525f 12 DigitalOut myled3(LED3);
guruimage 0:c16269a9525f 13 DigitalOut myled4(LED4);
guruimage 0:c16269a9525f 14 int timeNum = 0;
guruimage 0:c16269a9525f 15 unsigned long long t2=0;
guruimage 0:c16269a9525f 16 unsigned long long t3=0;
guruimage 0:c16269a9525f 17 int secCom = 0;
guruimage 0:c16269a9525f 18 int usecCom = 0;
guruimage 0:c16269a9525f 19 int usecT1=0;
guruimage 0:c16269a9525f 20 int usecT4=0;
guruimage 0:c16269a9525f 21 long long tc;
guruimage 0:c16269a9525f 22 int x=0;
guruimage 0:c16269a9525f 23 char buffTx2[40];
guruimage 0:c16269a9525f 24 char buffTx1[40];
guruimage 0:c16269a9525f 25 struct timeval
guruimage 0:c16269a9525f 26 {
guruimage 0:c16269a9525f 27 unsigned long long tv_sec; /* Seconds. */
guruimage 0:c16269a9525f 28 unsigned long long tv_usec; /* Microseconds. */
guruimage 0:c16269a9525f 29 };
guruimage 0:c16269a9525f 30 int main() {
guruimage 0:c16269a9525f 31 wait(0.001);
guruimage 0:c16269a9525f 32 for(int i =0;i<40;i++){
guruimage 0:c16269a9525f 33 buffTx1[i]=NULL;
guruimage 0:c16269a9525f 34 buffTx2[i]=NULL;
guruimage 0:c16269a9525f 35 }
guruimage 0:c16269a9525f 36 SetupTimer1();
guruimage 0:c16269a9525f 37 device.attach(&sync);
guruimage 0:c16269a9525f 38 }
guruimage 0:c16269a9525f 39
guruimage 0:c16269a9525f 40 void sync(void){
guruimage 0:c16269a9525f 41
guruimage 0:c16269a9525f 42 if(device.getc()=='s'){
guruimage 0:c16269a9525f 43 t2=(unsigned long long int) (LPC_TIM1->TC+4294967296*timeNum);
guruimage 0:c16269a9525f 44 pc.printf("s receviced!\r\n");
guruimage 0:c16269a9525f 45 device.putc('d');
guruimage 0:c16269a9525f 46 t3=(unsigned long long int) (LPC_TIM1->TC+4294967296*timeNum);
guruimage 0:c16269a9525f 47 device.putc('m');
guruimage 0:c16269a9525f 48 itoa(t2,buffTx1);
guruimage 0:c16269a9525f 49 pc.printf("\r\nt2 %ul\r\n",t2);
guruimage 0:c16269a9525f 50 for(int i = 0; buffTx1[i]!=NULL;i++){
guruimage 0:c16269a9525f 51 device.putc(buffTx1[i]);
guruimage 0:c16269a9525f 52 pc.printf("%c",buffTx1[i]);
guruimage 0:c16269a9525f 53 // buffTx1[i]=NULL;
guruimage 0:c16269a9525f 54
guruimage 0:c16269a9525f 55 }
guruimage 0:c16269a9525f 56 device.putc('f');
guruimage 0:c16269a9525f 57 itoa(t3,buffTx2);
guruimage 0:c16269a9525f 58 pc.printf("\r\nt3 %ul timeNum %u\r\n",t3,timeNum);
guruimage 0:c16269a9525f 59 for(int i = 0; buffTx2[i]!=NULL;i++){
guruimage 0:c16269a9525f 60 device.putc(buffTx2[i]);
guruimage 0:c16269a9525f 61 pc.printf("%c",buffTx2[i]);
guruimage 0:c16269a9525f 62
guruimage 0:c16269a9525f 63
guruimage 0:c16269a9525f 64 }
guruimage 0:c16269a9525f 65 device.putc('n');
guruimage 0:c16269a9525f 66 myled4=!myled4;
guruimage 0:c16269a9525f 67 }
guruimage 0:c16269a9525f 68
guruimage 0:c16269a9525f 69 }
guruimage 0:c16269a9525f 70
guruimage 0:c16269a9525f 71 void SetupTimer1(void)
guruimage 0:c16269a9525f 72 {
guruimage 0:c16269a9525f 73 LPC_SC->PCONP |= 1 << 2; // Power on Timer`
guruimage 0:c16269a9525f 74 LPC_SC->PCLKSEL0 |= 1 << 4;
guruimage 0:c16269a9525f 75 LPC_TIM1->TCR = 0x2; // Reset and set to timer mode
guruimage 0:c16269a9525f 76 LPC_TIM1->CTCR = 0x0;
guruimage 0:c16269a9525f 77 LPC_TIM1->PR = 0; // No prescale
guruimage 0:c16269a9525f 78 LPC_TIM1->MR0 = 0xFFFFFFFF; // Match count for 100mS
guruimage 0:c16269a9525f 79 LPC_TIM1->MCR = 3; // Interrupt and Reset on Match
guruimage 0:c16269a9525f 80 LPC_TIM1->TCR = 1; // Enable Timer
guruimage 0:c16269a9525f 81
guruimage 0:c16269a9525f 82 // Enable the ISR vector
guruimage 0:c16269a9525f 83 NVIC_SetVector (TIMER1_IRQn, (uint32_t)&Timer1_IRQHandler);
guruimage 0:c16269a9525f 84 NVIC_EnableIRQ(TIMER1_IRQn);
guruimage 0:c16269a9525f 85 }
guruimage 0:c16269a9525f 86 void Timer1_IRQHandler(void)
guruimage 0:c16269a9525f 87 {
guruimage 0:c16269a9525f 88 timeNum++;
guruimage 0:c16269a9525f 89 SetupTimer1();
guruimage 0:c16269a9525f 90 LPC_TIM1->IR = 1;
guruimage 0:c16269a9525f 91 }
guruimage 0:c16269a9525f 92
guruimage 0:c16269a9525f 93 void getTime(struct timeval *tv) {
guruimage 0:c16269a9525f 94 tv->tv_sec=(unsigned long long)((LPC_TIM1->TC+4294967296*timeNum)/96000000);
guruimage 0:c16269a9525f 95 tv->tv_usec=(unsigned long long)((LPC_TIM1->TC+4294967296*timeNum)/96000);
guruimage 0:c16269a9525f 96 }
guruimage 0:c16269a9525f 97
guruimage 0:c16269a9525f 98
guruimage 0:c16269a9525f 99 void itoa( unsigned long long int value, char *str)
guruimage 0:c16269a9525f 100 {
guruimage 0:c16269a9525f 101
guruimage 0:c16269a9525f 102 int i,j;
guruimage 0:c16269a9525f 103 char temp[30];
guruimage 0:c16269a9525f 104 for(i=0; value > 0; i++){
guruimage 0:c16269a9525f 105
guruimage 0:c16269a9525f 106 str[i] = value%10+'0';
guruimage 0:c16269a9525f 107 value=value/10;
guruimage 0:c16269a9525f 108 }
guruimage 0:c16269a9525f 109 for(j=0;i>=0;j++,i--){
guruimage 0:c16269a9525f 110 temp[j]=str[i-1];
guruimage 0:c16269a9525f 111 }
guruimage 0:c16269a9525f 112 for(i=0;i<j;i++){
guruimage 0:c16269a9525f 113 str[i]=temp[i];
guruimage 0:c16269a9525f 114 }
guruimage 0:c16269a9525f 115
guruimage 0:c16269a9525f 116
guruimage 0:c16269a9525f 117 }