Problematique

Dependencies:   mbed mbed-rtos

main.cpp

Committer:
joGenie
Date:
2014-02-09
Revision:
0:dc7095ab4963
Child:
1:261bb31628e8

File content as of revision 0:dc7095ab4963:

#include "mbed.h"

Serial pc(USBTX, USBRX);

//const bool preambule[8] = {false, true, false, true, false, true, false, true};
//const bool start_end[8] = {false, true, true, true, true, true, true, false};

bool Trame[16] = {false, true, false, true, true, true, true, false, false, false, true, false, false, true, true, true};

void readTrame()
{
    pc.printf("Duree impulsion : %d microsecondes.\n\r", LPC_TIM2->CR1/(SystemCoreClock/1000000));

    LPC_TIM2->IR = 0xFF;
}

void sendTrame(bool *trame)
{
    for (int a = 0; a < 16; a++)
    {
        if (trame[a])
        {
            LPC_PWM1->MR1 = 1;
            LPC_PWM1->MR2 = SystemCoreClock/2;
        }
        else
        {
            LPC_PWM1->MR1 = SystemCoreClock/2;
            LPC_PWM1->MR2 = 1;
        }
        
        pc.printf("trame: %d\n\r", trame[a]);
        
        while(LPC_PWM1->IR != 0x01);
        
        LPC_PWM1->IR = 0xFF;
    }
}

void initialize()
{
    // Set system control
    LPC_SC->PCONP |= (1 << 22) | (1 << 6); // Enable Timer2 et PWM
    LPC_SC->PCLKSEL0 |= (1 << 12); // PClk PWM = CCLK
    LPC_SC->PCLKSEL1 |= (1 << 12); // PClk Timer2 = CCLK

    // Set pin connection
    LPC_PINCON->PINSEL0 |= (3 << 10); // Pin 29 Capture
    LPC_PINCON->PINSEL4 |= (1 << 2);  // Pin 25 PWM

    //Initialize Timer2 for capture
    NVIC_SetVector(TIMER2_IRQn, uint32_t(readTrame));

    LPC_TIM2->TC = 0;           // Initialize Time Counter
    LPC_TIM2->PC = 0;           // Initialize Prescale Counter
    LPC_TIM2->PR = 0;           // Initialize Prescale Register
    LPC_TIM2->TCR |= (1 << 1);  // Reset Timer Control Register
    LPC_TIM2->IR = 0xFF;        // Reset Interrupt Register
    LPC_TIM2->CCR |= (1 << 5) | (1 << 4) | (1 << 3);      // Initialize Capture Control Register
    LPC_TIM2->CTCR |= (1 << 2) | (1 << 0);                // TC is incremented on rising edge

    LPC_TIM2->TCR = 0x01;       // Start Timer Control Register
    
    //Initialize PWM
    LPC_PWM1->MCR |= (1 << 1) | (1 << 0);   // Initialize Match Control Register Interrupt/Reset
    LPC_PWM1->PCR |= (1 << 10) | (1 << 2);  // Initialize PWM Control Register Output/Double-edge
    
    LPC_PWM1->MR0 = SystemCoreClock;        // Period
    LPC_PWM1->LER |= (1 << 2) | (1 << 1);   // Initialize Latch Enable Register
    LPC_PWM1->TCR |= (1 << 0);              // Enable counter
    
    LPC_PWM1->IR = 0xFF; // Reset Interrupt Register
}

int main()
{
    initialize();
    
    sendTrame(Trame);
    
    while(true);
}