![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Add CRC16 library
Dependencies: CRC16 mbed-rtos mbed
Fork of S5info_APP4 by
main.cpp@8:177b2370528b, 2017-03-06 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |