![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
app4
Dependencies: mbed-rtos mbed CRC16
Fork of S5info_APP2 by
Diff: main.cpp
- Revision:
- 8:5b87b1f9d91f
- Parent:
- 7:5501dbea5650
- Child:
- 10:8b066285c2e0
--- a/main.cpp Mon Mar 06 19:18:30 2017 +0000 +++ b/main.cpp Mon Mar 06 22:22:02 2017 +0000 @@ -1,22 +1,14 @@ #include "mbed.h" #include "rtos.h" -#include <string> #include "bit.h" -using std::string; +#include "uart.h" -#define PREAMBULE 0b01010101 -const char START = 0b01111110; -const char END = 0b01111110; -const char FLAGS = 0x00; -const char MAX_LENGTH = 80; -const float HALF_PERIOD = 0.0005; // secondes +const float HALF_PERIOD = 0.05; // secondes Serial pc(USBTX, USBRX, 9600); Serial uart(p13, p14, 9600); DigitalOut myled1(LED1); -DigitalOut myled2(LED2); -InterruptIn read_pin(p14); -Thread* thread; +Thread ThreadLecture; bool bIsHalfPeriod = false; @@ -30,24 +22,29 @@ void p14_interrupt() { + // On turn off les interrupts de lecture une fois qu'on a détecter un message + uart.attach(NULL, uart.RxIrq); + // On envoie le signal au thread de lecture - thread->signal_set(1); - - // On turn off les interrupts de lecture une fois qu'on a détecter un message - read_pin.disable_irq(); + ThreadLecture.signal_set(1); }; void read() { while(true) { - thread->signal_wait(1); + // Attente passive d'un message entrant + uart.attach(&p14_interrupt, uart.RxIrq); + ThreadLecture.signal_wait(1); - // TODO: mettre ici le code pour la lecture de trame - myled2 = !myled2; + // Lis le message. Retourne une exception si il y a une erreur + vector<char> message = uart_read(uart, pc); - // Une fois fini, on réactive l'interrupt de lecture - read_pin.enable_irq(); + if (!message.empty()) + { + // Affiche le message à l'écran + pc.printf(&message[0], message.size()); + } } }; @@ -56,7 +53,7 @@ LPC_SC->PCONP |= bit16; //Power Control for Peripherals register: power up RIT clock LPC_SC->PCLKSEL1 |= (bit26 && bit27); //Peripheral clock selection: divide clock by 8 (run RIT clock by 12.5MHz) LPC_RIT->RICOUNTER = 0; //set counter to zero - LPC_RIT->RICOMPVAL = 1000000000 * HALF_PERIOD; //interrupt tick every HALF_PERIOD + LPC_RIT->RICOMPVAL = 250000000 * HALF_PERIOD; //interrupt tick every HALF_PERIOD LPC_RIT->RICTRL |= bit1; // clear timer when counter reaches value LPC_RIT->RICTRL |= bit3; // enable timer @@ -67,16 +64,12 @@ int main() { rit_init(); - read_pin.fall(p14_interrupt); - read_pin.enable_irq(); - Thread ThreadLecture; // Thread pour pas avoir à rien faire dans l'interrupt - thread = &ThreadLecture; - thread->start(read); + ThreadLecture.start(read); while(true) { // TODO: Mettre ici le code pour l'input et l'envoie de message - uart.putc(0); + uart.printf("12345"); wait_ms(100); } }; \ No newline at end of file