Add CRC16 library

Dependencies:   CRC16 mbed-rtos mbed

Fork of S5info_APP4 by Éric Bisson

Committer:
JoeyDionne
Date:
Mon Mar 06 20:06:54 2017 +0000
Revision:
8:177b2370528b
Parent:
7:5501dbea5650
Child:
9:edf45585032a
Add lib CRC16

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ericbisson 7:5501dbea5650 1 #include "mbed.h"
ericbisson 0:c637467eeb8f 2 #include "rtos.h"
ericbisson 7:5501dbea5650 3 #include <string>
ericbisson 7:5501dbea5650 4 #include "bit.h"
JoeyDionne 8:177b2370528b 5 #include "CRC16.h"
ericbisson 7:5501dbea5650 6 using std::string;
ericbisson 1:b3ae0d9f02ad 7
ericbisson 7:5501dbea5650 8 #define PREAMBULE 0b01010101
ericbisson 7:5501dbea5650 9 const char START = 0b01111110;
ericbisson 7:5501dbea5650 10 const char END = 0b01111110;
ericbisson 7:5501dbea5650 11 const char FLAGS = 0x00;
ericbisson 7:5501dbea5650 12 const char MAX_LENGTH = 80;
ericbisson 7:5501dbea5650 13 const float HALF_PERIOD = 0.0005; // secondes
ericbisson 2:c6465d4e82d2 14
ericbisson 7:5501dbea5650 15 Serial pc(USBTX, USBRX, 9600);
ericbisson 7:5501dbea5650 16 Serial uart(p13, p14, 9600);
ericbisson 7:5501dbea5650 17 DigitalOut myled1(LED1);
ericbisson 7:5501dbea5650 18 DigitalOut myled2(LED2);
ericbisson 7:5501dbea5650 19 InterruptIn read_pin(p14);
ericbisson 7:5501dbea5650 20 Thread* thread;
ericbisson 2:c6465d4e82d2 21
ericbisson 7:5501dbea5650 22 bool bIsHalfPeriod = false;
ericbisson 7:5501dbea5650 23
ericbisson 7:5501dbea5650 24 extern "C" void RIT_IRQHandler(void) {
ericbisson 7:5501dbea5650 25 //clear flag
ericbisson 7:5501dbea5650 26 LPC_RIT->RICTRL |= bit0; //write 1 to clear bit
ericbisson 5:e878d87782ce 27
ericbisson 7:5501dbea5650 28 myled1 = !myled1;
ericbisson 7:5501dbea5650 29 bIsHalfPeriod = !bIsHalfPeriod;
ericbisson 1:b3ae0d9f02ad 30 }
ericbisson 1:b3ae0d9f02ad 31
ericbisson 7:5501dbea5650 32 void p14_interrupt()
ericbisson 7:5501dbea5650 33 {
ericbisson 7:5501dbea5650 34 // On envoie le signal au thread de lecture
ericbisson 7:5501dbea5650 35 thread->signal_set(1);
ericbisson 2:c6465d4e82d2 36
ericbisson 7:5501dbea5650 37 // On turn off les interrupts de lecture une fois qu'on a détecter un message
ericbisson 7:5501dbea5650 38 read_pin.disable_irq();
ericbisson 7:5501dbea5650 39 };
ericbisson 1:b3ae0d9f02ad 40
ericbisson 7:5501dbea5650 41 void read()
ericbisson 7:5501dbea5650 42 {
ericbisson 7:5501dbea5650 43 while(true)
ericbisson 7:5501dbea5650 44 {
ericbisson 7:5501dbea5650 45 thread->signal_wait(1);
ericbisson 2:c6465d4e82d2 46
ericbisson 7:5501dbea5650 47 // TODO: mettre ici le code pour la lecture de trame
ericbisson 7:5501dbea5650 48 myled2 = !myled2;
ericbisson 2:c6465d4e82d2 49
ericbisson 7:5501dbea5650 50 // Une fois fini, on réactive l'interrupt de lecture
ericbisson 7:5501dbea5650 51 read_pin.enable_irq();
ericbisson 1:b3ae0d9f02ad 52 }
ericbisson 7:5501dbea5650 53 };
ericbisson 3:3ecbcc05bc85 54
ericbisson 7:5501dbea5650 55 void rit_init()
ericbisson 4:87e9b434bb4d 56 {
ericbisson 7:5501dbea5650 57 LPC_SC->PCONP |= bit16; //Power Control for Peripherals register: power up RIT clock
ericbisson 7:5501dbea5650 58 LPC_SC->PCLKSEL1 |= (bit26 && bit27); //Peripheral clock selection: divide clock by 8 (run RIT clock by 12.5MHz)
ericbisson 7:5501dbea5650 59 LPC_RIT->RICOUNTER = 0; //set counter to zero
ericbisson 7:5501dbea5650 60 LPC_RIT->RICOMPVAL = 1000000000 * HALF_PERIOD; //interrupt tick every HALF_PERIOD
ericbisson 7:5501dbea5650 61 LPC_RIT->RICTRL |= bit1; // clear timer when counter reaches value
ericbisson 7:5501dbea5650 62 LPC_RIT->RICTRL |= bit3; // enable timer
ericbisson 7:5501dbea5650 63
ericbisson 7:5501dbea5650 64 //enable interrupt
ericbisson 7:5501dbea5650 65 NVIC_SetPriority(RIT_IRQn, 31);
ericbisson 7:5501dbea5650 66 NVIC_EnableIRQ(RIT_IRQn);
ericbisson 7:5501dbea5650 67 };
ericbisson 4:87e9b434bb4d 68
ericbisson 2:c6465d4e82d2 69 int main() {
ericbisson 7:5501dbea5650 70 rit_init();
ericbisson 7:5501dbea5650 71 read_pin.fall(p14_interrupt);
ericbisson 7:5501dbea5650 72 read_pin.enable_irq();
ericbisson 0:c637467eeb8f 73
ericbisson 7:5501dbea5650 74 Thread ThreadLecture; // Thread pour pas avoir à rien faire dans l'interrupt
ericbisson 7:5501dbea5650 75 thread = &ThreadLecture;
ericbisson 7:5501dbea5650 76 thread->start(read);
ericbisson 0:c637467eeb8f 77
ericbisson 3:3ecbcc05bc85 78 while(true) {
ericbisson 7:5501dbea5650 79 // TODO: Mettre ici le code pour l'input et l'envoie de message
ericbisson 7:5501dbea5650 80 uart.putc(0);
ericbisson 7:5501dbea5650 81 wait_ms(100);
ericbisson 0:c637467eeb8f 82 }
ericbisson 7:5501dbea5650 83 };