Projet S5 Lecture de l'accelerometre avec interruption

Dependencies:   mbed PowerControl

Fork of Projet_S5 by Jonathan Tousignant

main.cpp

Committer:
joGenie
Date:
2014-03-26
Revision:
0:d80295a0bcc2
Child:
1:feae56685ab1

File content as of revision 0:d80295a0bcc2:

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