Projet S5 Lecture de l'accelerometre avec interruption

Dependencies:   mbed PowerControl

Fork of Projet_S5 by Jonathan Tousignant

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]);
+    }
+}