Projet S5 Lecture de l'accelerometre avec interruption

Dependencies:   mbed PowerControl

Fork of Projet_S5 by Jonathan Tousignant

main.cpp

Committer:
joGenie
Date:
2014-04-03
Revision:
6:ef8bfca9e69b
Parent:
5:6313ddd0dfdd
Child:
7:89be89aeed5a

File content as of revision 6:ef8bfca9e69b:

#include "accelerometer.h"
#include "analyzer.h"
#include "interrupt.h"

Serial pc(USBTX, USBRX);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led4(LED4);
DigitalIn button(p30);

void *accelerometer = Accelerometer_C_new();
void *analyzer = Analyzer_C_new();
bool rebound = true;
bool appuyer = false;

extern "C" void interruptCapture(void)
{
    if(rebound && !appuyer)
    {
        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
        LPC_TIM2->CCR = 0;  //no capture interupt
        rebound = false;
    }
    else if(!rebound && !appuyer)
    {
        led1 = 1;
        LPC_TIM2->MCR = 0;
        LPC_TIM2->CCR = (0x06 << 0);  //falling edge
        
        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;
        LPC_TIM3->TCR = 0x01;   //enable timer 3
    
        appuyer = true;
        NVIC_EnableIRQ(TIMER3_IRQn); // Enable timer3 interrupt
    }
    else
    {
        led1 = 0;
        LPC_TIM2->CCR = (0x05 << 0);  //rising edge
        
        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;
        LPC_TIM3->TCR = 0;      //disable timer 3
        
        appuyer = false;
        rebound = true;
        NVIC_DisableIRQ(TIMER3_IRQn); // Disable timer3 interrupt
    }
    
    
    LPC_TIM2->IR |= 0xFF;
}

extern "C" void interruptMatch(void)
{
    if(button)
    {
        led4 = !led4;
        signed char* values;
    
        values = Accelerometer_C_getAccelValue(accelerometer);
    
        pc.printf("\n\r x: %i, y: %i, z: %i; ", values[0],values[1],values[2]);
        
        // Analyze data
        Analyzer_C_setMinMax(values, analyzer);
        
        delete values;
    }
    
    LPC_TIM3->IR |= 0xFF; // Reset timer  
}

void initialize()
{

    //  CAPTURE 
    //  Enable the pins on the device to use TIMER CAP2.0 on pin 30
    LPC_PINCON->PINSEL0 |= 3 << 8;     //set pin 30 capture 2.0
    LPC_SC->PCONP |= (1 << 22);        // Timer2 power on
    
      //LPC_TIM2->MCR |= 3;             //interrupt and reset control
    LPC_TIM2->TC = 0;                   // clear timer counter
    LPC_TIM2->PC = 0;                   // clear prescale counter
    LPC_TIM2->PR = 0;                   // clear prescale register
    LPC_TIM2->MR0 = SystemCoreClock / 100; //match pour rebound
    
    LPC_TIM2->IR |= 0xFF;               // Clear CR0 interrupt flag
    LPC_TIM2->CCR = (5 << 0);           // enable cap2.0 rising-edge capture; interrupt on cap2.0 p.496
    LPC_TIM2->TCR = (1 << 1);           // reset timer
    LPC_TIM2->TCR = 1;                  // enable timer
    
    NVIC_EnableIRQ(TIMER2_IRQn);        // Enable timer2 interrupt
    NVIC_SetVector(TIMER2_IRQn, uint32_t(interruptCapture));
    
    //  TIMER 3
    LPC_SC->PCONP |= 1 << 23;           // Timer3 power on
        
    LPC_TIM3->MCR |= 3;                 // 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->MR0 = SystemCoreClock / 20;
        
    LPC_TIM3->IR |= 0xFF;               // Clear MR0 interrupt flag
    LPC_TIM3->TCR = (1 << 1);           // Reset Timer3
    LPC_TIM3->TCR = 0;                  // Disable timer
    
    //NVIC_EnableIRQ(TIMER3_IRQn);      // Enable timer3 interrupt
    NVIC_SetVector(TIMER3_IRQn, uint32_t(interruptMatch));
}

int main()
{
    
    Analyzer analyzer;
    initialize();
    
    while(true)
    {
    }
}