Jingyuan Dong / Mbed 2 deprecated Part1_runAtTrigger
Committer:
guruimage
Date:
Sat Dec 04 06:49:44 2010 +0000
Revision:
0:b3c7c9d52c61
HW3B_Part1_runAtTrigger

Who changed what in which revision?

UserRevisionLine numberNew contents of line
guruimage 0:b3c7c9d52c61 1 #include "mbed.h"
guruimage 0:b3c7c9d52c61 2
guruimage 0:b3c7c9d52c61 3 DigitalOut myled(LED1);
guruimage 0:b3c7c9d52c61 4 Serial pc(USBTX, USBRX);
guruimage 0:b3c7c9d52c61 5 DigitalOut out(p18);
guruimage 0:b3c7c9d52c61 6 struct timeval
guruimage 0:b3c7c9d52c61 7 {
guruimage 0:b3c7c9d52c61 8 unsigned long long tv_sec; /* Seconds. */
guruimage 0:b3c7c9d52c61 9 unsigned long long tv_usec; /* Microseconds. */
guruimage 0:b3c7c9d52c61 10 };
guruimage 0:b3c7c9d52c61 11 void Timer2_IRQHandler(void);
guruimage 0:b3c7c9d52c61 12 void setupTrigger(void);
guruimage 0:b3c7c9d52c61 13 void runAtTrigger(void(*trigFunc)(struct timeval *tv));
guruimage 0:b3c7c9d52c61 14 void (*mytrigFunc)(struct timeval *tv);
guruimage 0:b3c7c9d52c61 15 void trigFunc(struct timeval *tv);
guruimage 0:b3c7c9d52c61 16 void getTime(struct timeval *tv);
guruimage 0:b3c7c9d52c61 17 timeval globalTime;
guruimage 0:b3c7c9d52c61 18 int main() {
guruimage 0:b3c7c9d52c61 19
guruimage 0:b3c7c9d52c61 20 setupTrigger();
guruimage 0:b3c7c9d52c61 21 while(1){
guruimage 0:b3c7c9d52c61 22 wait(1);
guruimage 0:b3c7c9d52c61 23 out=!out;
guruimage 0:b3c7c9d52c61 24 myled=!myled;
guruimage 0:b3c7c9d52c61 25 }
guruimage 0:b3c7c9d52c61 26
guruimage 0:b3c7c9d52c61 27 }
guruimage 0:b3c7c9d52c61 28
guruimage 0:b3c7c9d52c61 29
guruimage 0:b3c7c9d52c61 30 void setupTrigger(void){
guruimage 0:b3c7c9d52c61 31 LPC_SC->PCONP |= 1 << 22; //power on timer 2;
guruimage 0:b3c7c9d52c61 32 LPC_PINCON->PINSEL0 |= 0x00000300;//use capture cap2.0 (pin 30)
guruimage 0:b3c7c9d52c61 33 LPC_PINCON->PINMODE0 |=0x00000100;//set pin mode of pin30(p0.04) as repeter
guruimage 0:b3c7c9d52c61 34 LPC_TIM2->TCR = 0x2; // Reset and set to timer mode
guruimage 0:b3c7c9d52c61 35 LPC_TIM2->CTCR = 0x00000003; //increment TC on rising and falling edge
guruimage 0:b3c7c9d52c61 36 LPC_TIM2->CCR = 0x00000007; //trigger interrupt on rising and falling edge
guruimage 0:b3c7c9d52c61 37 LPC_TIM2->TCR = 1; // Enable Timer
guruimage 0:b3c7c9d52c61 38
guruimage 0:b3c7c9d52c61 39 // Enable the ISR vector
guruimage 0:b3c7c9d52c61 40 NVIC_SetVector (TIMER2_IRQn, (uint32_t)&Timer2_IRQHandler);
guruimage 0:b3c7c9d52c61 41 NVIC_EnableIRQ(TIMER2_IRQn);
guruimage 0:b3c7c9d52c61 42 }
guruimage 0:b3c7c9d52c61 43 void Timer2_IRQHandler(void)
guruimage 0:b3c7c9d52c61 44 {
guruimage 0:b3c7c9d52c61 45 myled=!myled;
guruimage 0:b3c7c9d52c61 46 LPC_TIM2->IR = 63;
guruimage 0:b3c7c9d52c61 47 runAtTrigger(trigFunc);
guruimage 0:b3c7c9d52c61 48 }
guruimage 0:b3c7c9d52c61 49 void runAtTrigger(void (*trigFunc) (struct timeval *tv)){
guruimage 0:b3c7c9d52c61 50
guruimage 0:b3c7c9d52c61 51 (*trigFunc)(&globalTime);
guruimage 0:b3c7c9d52c61 52 }
guruimage 0:b3c7c9d52c61 53 void trigFunc(struct timeval *tv){
guruimage 0:b3c7c9d52c61 54 getTime(tv);
guruimage 0:b3c7c9d52c61 55 printf("time is %llu!\r\n",tv->tv_usec);
guruimage 0:b3c7c9d52c61 56 }
guruimage 0:b3c7c9d52c61 57 void getTime(struct timeval *tv){
guruimage 0:b3c7c9d52c61 58 tv->tv_sec =(unsigned long long int) 10;
guruimage 0:b3c7c9d52c61 59 tv->tv_usec=(unsigned long long int) 10000;
guruimage 0:b3c7c9d52c61 60 }