Add CRC16 library

Dependencies:   CRC16 mbed-rtos mbed

Fork of S5info_APP4 by Éric Bisson

main.cpp

Committer:
ericbisson
Date:
2017-03-06
Revision:
7:5501dbea5650
Parent:
6:193013e37136
Child:
8:177b2370528b

File content as of revision 7:5501dbea5650:

#include "mbed.h"
#include "rtos.h"
#include <string>
#include "bit.h"
using std::string;

#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

Serial pc(USBTX, USBRX, 9600);
Serial uart(p13, p14, 9600);
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
InterruptIn read_pin(p14);
Thread* thread;

bool bIsHalfPeriod = false;
  
extern "C" void RIT_IRQHandler(void) {
    //clear flag
    LPC_RIT->RICTRL |= bit0; //write 1 to clear bit
    
    myled1 = !myled1;
    bIsHalfPeriod = !bIsHalfPeriod;
}

void p14_interrupt()
{    
    // 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();
};

void read()
{
    while(true) 
    {
        thread->signal_wait(1);
        
        // TODO: mettre ici le code pour la lecture de trame
        myled2 = !myled2;
        
        // Une fois fini, on réactive l'interrupt de lecture
        read_pin.enable_irq();
    }
};

void rit_init()
{
    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->RICTRL |= bit1;                            // clear timer when counter reaches value
    LPC_RIT->RICTRL |= bit3;                            // enable timer
     
    //enable interrupt
    NVIC_SetPriority(RIT_IRQn, 31);
    NVIC_EnableIRQ(RIT_IRQn);
};

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);
    
    while(true) {
        // TODO: Mettre ici le code pour l'input et l'envoie de message
        uart.putc(0);
        wait_ms(100);
    }
};