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@0:c16269a9525f, 2010-12-04 (annotated)
- 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?
User | Revision | Line number | New 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 | } |