
Projet S5 Lecture de l'accelerometre avec interruption
Dependencies: mbed PowerControl
Fork of Projet_S5 by
main.cpp
- Committer:
- joGenie
- Date:
- 2014-03-27
- Revision:
- 2:d7784cc39c81
- Parent:
- 1:feae56685ab1
- Child:
- 3:17a4ceb30535
File content as of revision 2:d7784cc39c81:
#include "accelerometer.h" #include "interrupt.h" Serial pc(USBTX, USBRX); DigitalOut led1(LED1); DigitalOut out(p26); void *accelerometer = Accelerometer_C_new(); bool capture = false; bool first = true; bool ready = false; extern "C" void interruptCapture(void) { if ((LPC_TIM2->IR & 0x10) == 0x10) // Interrupt capture { ready = !ready; if (first) { capture = !capture; first = false; LPC_TIM2->TC = 0; // clear timer counter LPC_TIM2->PC = 0; // clear prescale counter LPC_TIM2->PR = 0; // clear prescale register LPC_TIM2->MCR |= 0x03; // interrupt and reset control } } else if ((LPC_TIM2->IR & 0x01) == 0x01) // Interrupt match { if (ready) { 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 } ready = false; first = true; LPC_TIM2->MCR = 0; } } LPC_TIM2->IR |= 0xFF; } extern "C" void interruptMatch(void) { unsigned short* values; values = Accelerometer_C_getAccelValue(accelerometer); for(int i = 0; i < 3; i++) pc.printf("%d; ", values[i]); pc.printf("\n"); LPC_TIM3->IR |= 0x01; // Reset timer } void initialize() { // Set system control LPC_SC->PCONP |= (3 << 22); // Enable Timer2 and Timer3 LPC_SC->PCLKSEL1 |= (1 << 12); // PClk Timer2 = CCLK LPC_SC->PCLKSEL1 |= (1 << 14); // PClk Timer3 = CCLK // Set pin connection LPC_PINCON->PINSEL0 |= (3 << 8) | (3 << 12) | (3 << 20); // Capture 2.0 and Match 2.0 and Match 3.0 // 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->TCR &= ~(1 << 1); // release reset LPC_TIM2->MR0 = SystemCoreClock / 10000; //LPC_TIM2->MCR |= 0x03; // interrupt and reset control LPC_TIM2->IR |= 0xFF; // Clear interrupt flag LPC_TIM2->CCR |= 0x07; // enable cap2.0 rising-edge capture and falling-edge; interrupt on cap2.0 // 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)); NVIC_EnableIRQ(TIMER2_IRQn); // enable timer2 interrupt LPC_TIM2->TCR = 0x01; // start Timer2 } int main() { initialize(); while(true) { } }