
Projet S5 Lecture de l'accelerometre avec interruption
Dependencies: mbed PowerControl
Fork of Projet_S5 by
Diff: main.cpp
- Revision:
- 0:d80295a0bcc2
- Child:
- 1:feae56685ab1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Mar 26 16:13:42 2014 +0000 @@ -0,0 +1,87 @@ +#include "accelerometer.h" +#include "interrupt.h" + +Serial pc(USBTX, USBRX); +void *accelerometer = Accelerometer_C_new(); +bool capture = false; + +extern "C" void interruptCapture() +{ + capture = !capture; + + if (capture) + { + LPC_TIM3->TC = 0; // clear timer counter + LPC_TIM3->PC = 0; // clear prescale counter + LPC_TIM3->PR = 0; // clear prescale register + LPC_TIM3->IR |= 0xFF; + + NVIC_EnableIRQ(TIMER3_IRQn); // Enable timer3 interrupt + + } + else + { + NVIC_DisableIRQ(TIMER3_IRQn); // Disable timer3 interrupt + } +} + +extern "C" void interruptMatch() +{ + unsigned short* values; + + values = Accelerometer_C_getAccelValue(accelerometer); + + for(int i = 0; i < 3; i++) + pc.printf("%d/n/r", values[i]); + + + LPC_TIM3->IR |= 0x01; // Reset timer +} + +void initialize() +{ + // Set system control + LPC_SC->PCONP |= (3 << 22); // Enable Timer2 + LPC_SC->PCLKSEL1 |= (1 << 12); // PClk Timer2 = CCLK + + // Set pin connection + LPC_PINCON->PINSEL0 |= (3 << 8) | (3<<20); // Pin 30 Capture and Pin X Match + + // Set timer 2 for capture + LPC_TIM2->TC = 0; // clear timer counter + LPC_TIM2->PC = 0; // clear prescale counter + LPC_TIM2->PR = 0; // clear prescale register + LPC_TIM2->TCR = (1 << 1); // reset timer + LPC_TIM2->IR |= 0xFF; // Clear MR0 interrupt flag + LPC_TIM2->CCR |= (7 << 0); // enable cap2.0 rising-edge capture and falling-edge; interrupt on cap2.0 + LPC_TIM2->TCR = 1; // start Timer2 + + NVIC_EnableIRQ(TIMER2_IRQn); //enable timer2 interrupt + + // Set timer 3 for match + LPC_TIM3->MR0 = SystemCoreClock / 20; + LPC_TIM3->MCR |= 0x03; //interrupt and reset control + LPC_TIM3->TC = 0; // clear timer counter + LPC_TIM3->PC = 0; // clear prescale counter + LPC_TIM3->PR = 0; // clear prescale register + LPC_TIM3->TCR = 0x1; // enable timer3 + LPC_TIM3->IR |= 1 << 0; // Clear MR0 interrupt flag + + // Set call function + NVIC_SetVector(TIMER2_IRQn, uint32_t(interruptCapture)); + NVIC_SetVector(TIMER3_IRQn, uint32_t(interruptMatch)); +} + +int main() +{ + Accelerometer accel; + while(1) + { + unsigned short* values; + wait(0.1); + values = accel.getAccelValue(); + + for(int i = 0; i < 3; i++) + pc.printf("%d/n/r", values[i]); + } +}