S5info_H14
/
APP3
Problematique
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"); } }