Jingyuan Dong / Mbed 2 deprecated Part2_Master
Committer:
guruimage
Date:
Sat Dec 04 06:55:01 2010 +0000
Revision:
0:d5c7badbe8ad
HW3B part2 master

Who changed what in which revision?

UserRevisionLine numberNew 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 }