APP 4

Dependencies:   mbed CRC16 mbed-rtos

Committer:
manl2003
Date:
Sun Feb 21 21:42:36 2016 +0000
Revision:
10:51ee22e230c7
Parent:
8:60499583959f
Child:
11:097ae746d8ac
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
manl2003 2:1250280a511b 1 #include "APP.h"
vinbel93 3:3ffa14e75b8a 2 #include "Manchester.h"
vinbel93 0:ac5e42371639 3
vinbel93 0:ac5e42371639 4 Serial pc(USBTX, USBRX);
vinbel93 6:3181f546e812 5 DigitalIn in(p9);
vinbel93 0:ac5e42371639 6
vinbel93 6:3181f546e812 7 bool clockTick = false;
vinbel93 6:3181f546e812 8 bitset<FRAMESIZE> message(string("1000111011110101011100000000000111011010101001111111011110011010"));
vinbel93 3:3ffa14e75b8a 9 int counter = 0;
manl2003 10:51ee22e230c7 10 bitset<8> inputBuffer;
manl2003 10:51ee22e230c7 11 int preableCounter;
vinbel93 0:ac5e42371639 12
vinbel93 1:f212b6676849 13 int benchmark(void (*function) (void))
vinbel93 0:ac5e42371639 14 {
vinbel93 3:3ffa14e75b8a 15 int count = LPC_TIM2->TC;
vinbel93 0:ac5e42371639 16 function();
vinbel93 3:3ffa14e75b8a 17 return LPC_TIM2->TC - count;
vinbel93 0:ac5e42371639 18 }
vinbel93 0:ac5e42371639 19
vinbel93 1:f212b6676849 20 extern "C" void TIMER2_IRQHandler()
vinbel93 0:ac5e42371639 21 {
vinbel93 0:ac5e42371639 22 if ((LPC_TIM2->IR & 0x01) == 0x01) // if MR0 interrupt, proceed
vinbel93 0:ac5e42371639 23 {
vinbel93 3:3ffa14e75b8a 24 LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag
vinbel93 6:3181f546e812 25 clockTick = !clockTick;
vinbel93 6:3181f546e812 26 LPC_TIM2->EMR = encode(message[counter], clockTick);
vinbel93 6:3181f546e812 27
vinbel93 6:3181f546e812 28 if (clockTick)
vinbel93 0:ac5e42371639 29 {
vinbel93 6:3181f546e812 30 counter++;
vinbel93 0:ac5e42371639 31 }
vinbel93 6:3181f546e812 32
vinbel93 6:3181f546e812 33 if (counter >= FRAMESIZE)
vinbel93 0:ac5e42371639 34 {
vinbel93 6:3181f546e812 35 counter = 0;
vinbel93 0:ac5e42371639 36 }
vinbel93 0:ac5e42371639 37 }
vinbel93 0:ac5e42371639 38 }
manl2003 10:51ee22e230c7 39 /*
manl2003 10:51ee22e230c7 40 extern "C" void TIMER1_IRQHandler()
manl2003 10:51ee22e230c7 41 {
manl2003 10:51ee22e230c7 42 if ((LPC_TIM2->IR & 0x01) == 0x01) // if MR0 interrupt, proceed
manl2003 10:51ee22e230c7 43 {
manl2003 10:51ee22e230c7 44 LPC_TIM2->IR |= 1 << 0; // Clear MR0 interrupt flag
manl2003 10:51ee22e230c7 45 clockTick = !clockTick;
manl2003 10:51ee22e230c7 46 LPC_TIM2->EMR = encode(message[counter], clockTick);
manl2003 10:51ee22e230c7 47
manl2003 10:51ee22e230c7 48 if (clockTick)
manl2003 10:51ee22e230c7 49 {
manl2003 10:51ee22e230c7 50 counter++;
manl2003 10:51ee22e230c7 51 }
manl2003 10:51ee22e230c7 52
manl2003 10:51ee22e230c7 53 if (counter >= FRAMESIZE)
manl2003 10:51ee22e230c7 54 {
manl2003 10:51ee22e230c7 55 counter = 0;
manl2003 10:51ee22e230c7 56 }
manl2003 10:51ee22e230c7 57 }
manl2003 10:51ee22e230c7 58 }*/
manl2003 10:51ee22e230c7 59
vinbel93 0:ac5e42371639 60
manl2003 7:733d500dbe5c 61 void initTimers()
vinbel93 0:ac5e42371639 62 {
manl2003 7:733d500dbe5c 63 //Timer 2 (match)
manl2003 10:51ee22e230c7 64 LPC_SC->PCLKSEL1 |= (1 << 12); // pclk = cclk timer2
manl2003 10:51ee22e230c7 65 LPC_SC->PCONP |= (1 << 22); // timer2 power on
manl2003 10:51ee22e230c7 66 LPC_TIM2->MR0 = CLOCKS_TO_SECOND / 10; // 100 ms
manl2003 10:51ee22e230c7 67 LPC_TIM2->MCR = 3; // interrupt and reset control
manl2003 10:51ee22e230c7 68 // Interrupt & reset timer2 on match
manl2003 10:51ee22e230c7 69 LPC_TIM2->EMR = (2 << 4); // toggle
manl2003 10:51ee22e230c7 70 NVIC_EnableIRQ(TIMER2_IRQn); // enable timer2 interrupt
manl2003 10:51ee22e230c7 71 LPC_TIM2->TCR = 1; // enable Timer2
manl2003 10:51ee22e230c7 72 /*
manl2003 7:733d500dbe5c 73 //Timer 1 (cap)
manl2003 10:51ee22e230c7 74 LPC_SC->PCLKSEL0 |= (1 << 4); // pclk = cclk timer2
manl2003 10:51ee22e230c7 75 LPC_SC->PCONP |= (1 << 2); // timer1 power on
manl2003 10:51ee22e230c7 76 LPC_TIM1->MR0 = CLOCKS_TO_SECOND / 10; // 100 ms
manl2003 10:51ee22e230c7 77 LPC_TIM1->MCR = 3; // interrupt and reset control
manl2003 10:51ee22e230c7 78 // Interrupt & reset timer1 on match
manl2003 10:51ee22e230c7 79 NVIC_EnableIRQ(TIMER1_IRQn); // enable timer1 interrupt
manl2003 10:51ee22e230c7 80 LPC_TIM1->TCR = 1; // enable Timer1
manl2003 10:51ee22e230c7 81 */
vinbel93 0:ac5e42371639 82 }
vinbel93 0:ac5e42371639 83
vinbel93 1:f212b6676849 84 int main()
vinbel93 0:ac5e42371639 85 {
vinbel93 0:ac5e42371639 86 LPC_PINCON->PINSEL0 |= (3 << 12); // P0.6 = MAT2.0
manl2003 8:60499583959f 87 initTimers();
vinbel93 3:3ffa14e75b8a 88
vinbel93 3:3ffa14e75b8a 89 while (true)
vinbel93 0:ac5e42371639 90 {
vinbel93 6:3181f546e812 91 pc.printf("%i", decode(in.read(), clockTick));
vinbel93 6:3181f546e812 92 wait(0.2);
vinbel93 0:ac5e42371639 93 }
vinbel93 0:ac5e42371639 94 }