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:d5c7badbe8ad, 2010-12-04 (annotated)
- Committer:
- guruimage
- Date:
- Sat Dec 04 06:55:01 2010 +0000
- Revision:
- 0:d5c7badbe8ad
HW3B part2 master
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
guruimage | 0:d5c7badbe8ad | 1 | #include "mbed.h" |
guruimage | 0:d5c7badbe8ad | 2 | LocalFileSystem local("local"); |
guruimage | 0:d5c7badbe8ad | 3 | void SetupTimer1(void); |
guruimage | 0:d5c7badbe8ad | 4 | void getTime(struct timeval *tv) ; |
guruimage | 0:d5c7badbe8ad | 5 | void itoa( unsigned long long int value, char *str); |
guruimage | 0:d5c7badbe8ad | 6 | void sync(void); |
guruimage | 0:d5c7badbe8ad | 7 | void Timer1_IRQHandler(void); |
guruimage | 0:d5c7badbe8ad | 8 | void Timer2_IRQHandler(void); |
guruimage | 0:d5c7badbe8ad | 9 | void setupTrigger(void); |
guruimage | 0:d5c7badbe8ad | 10 | void runAtTrigger(void(*trigFunc)(struct timeval *tv)); |
guruimage | 0:d5c7badbe8ad | 11 | //void (*mytrigFunc)(struct timeval *tv); |
guruimage | 0:d5c7badbe8ad | 12 | void trigFunc(struct timeval *tv); |
guruimage | 0:d5c7badbe8ad | 13 | void pinToggle(void); |
guruimage | 0:d5c7badbe8ad | 14 | void reportToggle(unsigned long long int time); |
guruimage | 0:d5c7badbe8ad | 15 | DigitalOut toggle(p18); |
guruimage | 0:d5c7badbe8ad | 16 | |
guruimage | 0:d5c7badbe8ad | 17 | Serial device(p9,p10); |
guruimage | 0:d5c7badbe8ad | 18 | Serial command(p13,p14); |
guruimage | 0:d5c7badbe8ad | 19 | Serial pc(USBTX, USBRX); // tx, rx |
guruimage | 0:d5c7badbe8ad | 20 | DigitalOut myled1(LED1); |
guruimage | 0:d5c7badbe8ad | 21 | DigitalOut myled2(LED2); |
guruimage | 0:d5c7badbe8ad | 22 | DigitalOut myled3(LED3); |
guruimage | 0:d5c7badbe8ad | 23 | DigitalOut myled4(LED4); |
guruimage | 0:d5c7badbe8ad | 24 | int timeNum = 0; |
guruimage | 0:d5c7badbe8ad | 25 | unsigned long long int t2=0; |
guruimage | 0:d5c7badbe8ad | 26 | unsigned long long int t3=0; |
guruimage | 0:d5c7badbe8ad | 27 | int secCom = 0; |
guruimage | 0:d5c7badbe8ad | 28 | int usecCom = 0; |
guruimage | 0:d5c7badbe8ad | 29 | int usecT1=0; |
guruimage | 0:d5c7badbe8ad | 30 | int usecT4=0; |
guruimage | 0:d5c7badbe8ad | 31 | long long int tc; |
guruimage | 0:d5c7badbe8ad | 32 | int x=0; |
guruimage | 0:d5c7badbe8ad | 33 | char buffTx2[40]; |
guruimage | 0:d5c7badbe8ad | 34 | char buffTx1[40]; |
guruimage | 0:d5c7badbe8ad | 35 | struct timeval |
guruimage | 0:d5c7badbe8ad | 36 | { |
guruimage | 0:d5c7badbe8ad | 37 | unsigned long long int tv_sec; /* Seconds. */ |
guruimage | 0:d5c7badbe8ad | 38 | unsigned long long int tv_usec; /* Microseconds. */ |
guruimage | 0:d5c7badbe8ad | 39 | }; |
guruimage | 0:d5c7badbe8ad | 40 | timeval globalTime; |
guruimage | 0:d5c7badbe8ad | 41 | |
guruimage | 0:d5c7badbe8ad | 42 | |
guruimage | 0:d5c7badbe8ad | 43 | int main() { |
guruimage | 0:d5c7badbe8ad | 44 | wait(0.001); |
guruimage | 0:d5c7badbe8ad | 45 | for(int i =0;i<40;i++){ |
guruimage | 0:d5c7badbe8ad | 46 | buffTx1[i]=NULL; |
guruimage | 0:d5c7badbe8ad | 47 | buffTx2[i]=NULL; |
guruimage | 0:d5c7badbe8ad | 48 | } |
guruimage | 0:d5c7badbe8ad | 49 | SetupTimer1(); |
guruimage | 0:d5c7badbe8ad | 50 | setupTrigger(); |
guruimage | 0:d5c7badbe8ad | 51 | device.attach(&sync,Serial::RxIrq); |
guruimage | 0:d5c7badbe8ad | 52 | |
guruimage | 0:d5c7badbe8ad | 53 | for(int j=0;j<4;j++){ |
guruimage | 0:d5c7badbe8ad | 54 | command.putc('8'); |
guruimage | 0:d5c7badbe8ad | 55 | } |
guruimage | 0:d5c7badbe8ad | 56 | } |
guruimage | 0:d5c7badbe8ad | 57 | |
guruimage | 0:d5c7badbe8ad | 58 | void sync(void){ |
guruimage | 0:d5c7badbe8ad | 59 | |
guruimage | 0:d5c7badbe8ad | 60 | if(device.getc()=='s'){ |
guruimage | 0:d5c7badbe8ad | 61 | t2=(unsigned long long int) (LPC_TIM1->TC+4294967296*timeNum); |
guruimage | 0:d5c7badbe8ad | 62 | |
guruimage | 0:d5c7badbe8ad | 63 | |
guruimage | 0:d5c7badbe8ad | 64 | |
guruimage | 0:d5c7badbe8ad | 65 | device.putc('d'); |
guruimage | 0:d5c7badbe8ad | 66 | t3=(unsigned long long int) (LPC_TIM1->TC+4294967296*timeNum); |
guruimage | 0:d5c7badbe8ad | 67 | device.putc('m'); |
guruimage | 0:d5c7badbe8ad | 68 | itoa(t2,buffTx1); |
guruimage | 0:d5c7badbe8ad | 69 | pc.printf("\r\nt2 %ul\r\n",t2); |
guruimage | 0:d5c7badbe8ad | 70 | |
guruimage | 0:d5c7badbe8ad | 71 | for(int i = 0; (buffTx1[i]!=NULL);i++){ |
guruimage | 0:d5c7badbe8ad | 72 | device.putc(buffTx1[i]); |
guruimage | 0:d5c7badbe8ad | 73 | myled1=!myled1; |
guruimage | 0:d5c7badbe8ad | 74 | pc.printf("%c",buffTx1[i]); |
guruimage | 0:d5c7badbe8ad | 75 | |
guruimage | 0:d5c7badbe8ad | 76 | } |
guruimage | 0:d5c7badbe8ad | 77 | device.putc('f'); |
guruimage | 0:d5c7badbe8ad | 78 | itoa(t3,buffTx2); |
guruimage | 0:d5c7badbe8ad | 79 | pc.printf("\r\nt3 %ul timeNum %u\r\n",t3,timeNum); |
guruimage | 0:d5c7badbe8ad | 80 | |
guruimage | 0:d5c7badbe8ad | 81 | for(int i = 0; (buffTx2[i]!=NULL);i++){ |
guruimage | 0:d5c7badbe8ad | 82 | device.putc(buffTx2[i]); |
guruimage | 0:d5c7badbe8ad | 83 | myled2=!myled2; |
guruimage | 0:d5c7badbe8ad | 84 | pc.printf("%c",buffTx2[i]); |
guruimage | 0:d5c7badbe8ad | 85 | |
guruimage | 0:d5c7badbe8ad | 86 | |
guruimage | 0:d5c7badbe8ad | 87 | } |
guruimage | 0:d5c7badbe8ad | 88 | device.putc('n'); |
guruimage | 0:d5c7badbe8ad | 89 | myled4=!myled4; |
guruimage | 0:d5c7badbe8ad | 90 | |
guruimage | 0:d5c7badbe8ad | 91 | } |
guruimage | 0:d5c7badbe8ad | 92 | |
guruimage | 0:d5c7badbe8ad | 93 | } |
guruimage | 0:d5c7badbe8ad | 94 | |
guruimage | 0:d5c7badbe8ad | 95 | void SetupTimer1(void) |
guruimage | 0:d5c7badbe8ad | 96 | { |
guruimage | 0:d5c7badbe8ad | 97 | LPC_SC->PCONP |= 1 << 2; // Power on Timer` |
guruimage | 0:d5c7badbe8ad | 98 | LPC_SC->PCLKSEL0 |= 1 << 4; |
guruimage | 0:d5c7badbe8ad | 99 | LPC_TIM1->TCR = 0x2; // Reset and set to timer mode |
guruimage | 0:d5c7badbe8ad | 100 | LPC_TIM1->CTCR = 0x0; |
guruimage | 0:d5c7badbe8ad | 101 | LPC_TIM1->PR = 0; // No prescale |
guruimage | 0:d5c7badbe8ad | 102 | LPC_TIM1->MR0 = 0xFFFFFFFF; // Match count for 100mS |
guruimage | 0:d5c7badbe8ad | 103 | LPC_TIM1->MCR = 3; // Interrupt and Reset on Match |
guruimage | 0:d5c7badbe8ad | 104 | LPC_TIM1->TCR = 1; // Enable Timer |
guruimage | 0:d5c7badbe8ad | 105 | |
guruimage | 0:d5c7badbe8ad | 106 | // Enable the ISR vector |
guruimage | 0:d5c7badbe8ad | 107 | NVIC_SetVector (TIMER1_IRQn, (uint32_t)&Timer1_IRQHandler); |
guruimage | 0:d5c7badbe8ad | 108 | NVIC_EnableIRQ(TIMER1_IRQn); |
guruimage | 0:d5c7badbe8ad | 109 | } |
guruimage | 0:d5c7badbe8ad | 110 | void Timer1_IRQHandler(void) |
guruimage | 0:d5c7badbe8ad | 111 | { |
guruimage | 0:d5c7badbe8ad | 112 | timeNum++; |
guruimage | 0:d5c7badbe8ad | 113 | SetupTimer1(); |
guruimage | 0:d5c7badbe8ad | 114 | LPC_TIM1->IR = 1; |
guruimage | 0:d5c7badbe8ad | 115 | } |
guruimage | 0:d5c7badbe8ad | 116 | |
guruimage | 0:d5c7badbe8ad | 117 | void getTime(struct timeval *tv) { |
guruimage | 0:d5c7badbe8ad | 118 | tv->tv_sec=(unsigned long long)((LPC_TIM1->TC+4294967296*timeNum)/96000000); |
guruimage | 0:d5c7badbe8ad | 119 | tv->tv_usec=(unsigned long long)((LPC_TIM1->TC+4294967296*timeNum)/96000); |
guruimage | 0:d5c7badbe8ad | 120 | } |
guruimage | 0:d5c7badbe8ad | 121 | void setupTrigger(void){ |
guruimage | 0:d5c7badbe8ad | 122 | LPC_SC->PCONP |= 1 << 22; //power on timer 2; |
guruimage | 0:d5c7badbe8ad | 123 | LPC_PINCON->PINSEL0 |= 0x00000300;//use capture cap2.0 (pin 30) |
guruimage | 0:d5c7badbe8ad | 124 | LPC_PINCON->PINMODE0 |=0x00000100;//set pin mode of pin30(p0.04) as repeter |
guruimage | 0:d5c7badbe8ad | 125 | LPC_TIM2->TCR = 0x2; // Reset and set to timer mode |
guruimage | 0:d5c7badbe8ad | 126 | LPC_TIM2->CTCR = 0x00000003; //increment TC on rising and falling edge |
guruimage | 0:d5c7badbe8ad | 127 | LPC_TIM2->CCR = 0x00000007; //trigger interrupt on rising and falling edge |
guruimage | 0:d5c7badbe8ad | 128 | LPC_TIM2->TCR = 1; // Enable Timer |
guruimage | 0:d5c7badbe8ad | 129 | |
guruimage | 0:d5c7badbe8ad | 130 | // Enable the ISR vector |
guruimage | 0:d5c7badbe8ad | 131 | NVIC_SetVector (TIMER2_IRQn, (uint32_t)&Timer2_IRQHandler); |
guruimage | 0:d5c7badbe8ad | 132 | NVIC_EnableIRQ(TIMER2_IRQn); |
guruimage | 0:d5c7badbe8ad | 133 | } |
guruimage | 0:d5c7badbe8ad | 134 | void Timer2_IRQHandler(void) |
guruimage | 0:d5c7badbe8ad | 135 | { |
guruimage | 0:d5c7badbe8ad | 136 | //myled2=!myled2; |
guruimage | 0:d5c7badbe8ad | 137 | LPC_TIM2->IR = 63; |
guruimage | 0:d5c7badbe8ad | 138 | runAtTrigger(trigFunc); |
guruimage | 0:d5c7badbe8ad | 139 | } |
guruimage | 0:d5c7badbe8ad | 140 | void runAtTrigger(void (*trigFunc) (struct timeval *tv)){ |
guruimage | 0:d5c7badbe8ad | 141 | |
guruimage | 0:d5c7badbe8ad | 142 | (*trigFunc)(&globalTime); |
guruimage | 0:d5c7badbe8ad | 143 | } |
guruimage | 0:d5c7badbe8ad | 144 | void trigFunc(struct timeval *tv){ |
guruimage | 0:d5c7badbe8ad | 145 | getTime(tv); |
guruimage | 0:d5c7badbe8ad | 146 | myled3=!myled3; |
guruimage | 0:d5c7badbe8ad | 147 | reportToggle(tv->tv_usec); |
guruimage | 0:d5c7badbe8ad | 148 | printf("time is %llu!\r\n",tv->tv_usec); |
guruimage | 0:d5c7badbe8ad | 149 | |
guruimage | 0:d5c7badbe8ad | 150 | } |
guruimage | 0:d5c7badbe8ad | 151 | |
guruimage | 0:d5c7badbe8ad | 152 | void itoa( unsigned long long int value, char *str) |
guruimage | 0:d5c7badbe8ad | 153 | { |
guruimage | 0:d5c7badbe8ad | 154 | int i,j; |
guruimage | 0:d5c7badbe8ad | 155 | char temp[30]; |
guruimage | 0:d5c7badbe8ad | 156 | for(i=0; value > 0; i++){ |
guruimage | 0:d5c7badbe8ad | 157 | str[i] = value%10+'0'; |
guruimage | 0:d5c7badbe8ad | 158 | value=value/10; |
guruimage | 0:d5c7badbe8ad | 159 | } |
guruimage | 0:d5c7badbe8ad | 160 | for(j=0;i>=0;j++,i--){ |
guruimage | 0:d5c7badbe8ad | 161 | temp[j]=str[i-1]; |
guruimage | 0:d5c7badbe8ad | 162 | } |
guruimage | 0:d5c7badbe8ad | 163 | for(i=0;i<j;i++){ |
guruimage | 0:d5c7badbe8ad | 164 | str[i]=temp[i]; |
guruimage | 0:d5c7badbe8ad | 165 | } |
guruimage | 0:d5c7badbe8ad | 166 | } |
guruimage | 0:d5c7badbe8ad | 167 | void pinToggle(void){ |
guruimage | 0:d5c7badbe8ad | 168 | toggle=!toggle; |
guruimage | 0:d5c7badbe8ad | 169 | } |
guruimage | 0:d5c7badbe8ad | 170 | |
guruimage | 0:d5c7badbe8ad | 171 | void reportToggle(unsigned long long int time){ |
guruimage | 0:d5c7badbe8ad | 172 | FILE *fp = fopen("/local/reportToggle.txt", "w"); |
guruimage | 0:d5c7badbe8ad | 173 | fprintf(fp,"%llu\r\n", time); |
guruimage | 0:d5c7badbe8ad | 174 | fclose(fp); |
guruimage | 0:d5c7badbe8ad | 175 | } |