Problematique

Dependencies:   mbed mbed-rtos

main.cpp

Committer:
RufflesAllD
Date:
2014-02-10
Revision:
1:261bb31628e8
Parent:
0:dc7095ab4963
Child:
2:db7c8378b324

File content as of revision 1:261bb31628e8:

#include "mbed.h"
#include "rtos.h"
#include <bitset>

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 < 5; 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;
    }
    
    LPC_PWM1->TCR = 0x0;
}

void send(void const *args) {
    sendTrame(Trame);
}

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);
    NVIC_EnableIRQ(TIMER2_IRQn);

    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 << 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 Registe
}

int main()
{
    initialize();
    
    Thread thread1(send);
    //thread1.set_priority(osPriorityHigh);
    
    while(true) {
        while (LPC_TIM2->IR != 0x0);
        pc.printf("borne 1\n\r");
        
        LPC_TIM2->IR = 0xFF;
        pc.printf("borne 2\n\r");
        NVIC_EnableIRQ(TIMER2_IRQn);
        pc.printf("borne 3\n\r");
        NVIC_DisableIRQ(TIMER2_IRQn);
        pc.printf("borne 4\n\r");
        //NVIC_DisableIRQ(TIMER2_IRQn);
        
        pc.printf("borne 5\n\r");
    }
}