Problematique

Dependencies:   mbed mbed-rtos

Committer:
RufflesAllD
Date:
Tue Feb 11 21:58:34 2014 +0000
Revision:
3:65845faafbb1
Parent:
2:db7c8378b324
Child:
4:2af360b178d2
hg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joGenie 0:dc7095ab4963 1 #include "mbed.h"
RufflesAllD 1:261bb31628e8 2 #include "rtos.h"
RufflesAllD 2:db7c8378b324 3 #include "trame.hpp"
joGenie 0:dc7095ab4963 4
joGenie 0:dc7095ab4963 5 Serial pc(USBTX, USBRX);
joGenie 0:dc7095ab4963 6
RufflesAllD 3:65845faafbb1 7 DigitalOut led1(LED1);
RufflesAllD 3:65845faafbb1 8 DigitalOut led2(LED2);
RufflesAllD 3:65845faafbb1 9 DigitalOut led3(LED3);
RufflesAllD 3:65845faafbb1 10 DigitalOut led4(LED4);
RufflesAllD 3:65845faafbb1 11
RufflesAllD 3:65845faafbb1 12 const int tickPerPeriod = 960000;
RufflesAllD 3:65845faafbb1 13
RufflesAllD 3:65845faafbb1 14 struct message_t
RufflesAllD 3:65845faafbb1 15 {
RufflesAllD 3:65845faafbb1 16 char msg[696];
RufflesAllD 3:65845faafbb1 17
RufflesAllD 3:65845faafbb1 18 /*message_t (char bla[696])
RufflesAllD 3:65845faafbb1 19 {
RufflesAllD 3:65845faafbb1 20 strcpy(msg, bla);
RufflesAllD 3:65845faafbb1 21 }*/
RufflesAllD 3:65845faafbb1 22 };
RufflesAllD 2:db7c8378b324 23
RufflesAllD 2:db7c8378b324 24 Queue<string, 16> textToSend;
RufflesAllD 2:db7c8378b324 25 Mail<trame, 16> trameToSend;
RufflesAllD 2:db7c8378b324 26
RufflesAllD 3:65845faafbb1 27 Queue<message_t, 16> messagesQueue;
RufflesAllD 2:db7c8378b324 28 Mail<trame, 16> trameToDecode;
RufflesAllD 2:db7c8378b324 29 Queue<string, 16> textToPrint;
RufflesAllD 2:db7c8378b324 30
RufflesAllD 3:65845faafbb1 31 unsigned long tc_periods[8] = {0};
RufflesAllD 3:65845faafbb1 32 unsigned long period = 0;
RufflesAllD 3:65845faafbb1 33 bool type_bit = false;
RufflesAllD 3:65845faafbb1 34 int synchrone = 0;
RufflesAllD 3:65845faafbb1 35 int count = 0;
RufflesAllD 3:65845faafbb1 36 const char end[8] = {0, 1, 1, 1, 1, 1, 1, 0};
RufflesAllD 3:65845faafbb1 37
RufflesAllD 3:65845faafbb1 38 bool good = true;
RufflesAllD 3:65845faafbb1 39
RufflesAllD 3:65845faafbb1 40 char messages[696] = {0};
RufflesAllD 3:65845faafbb1 41 message_t msgs;
RufflesAllD 3:65845faafbb1 42 const unsigned long offset = 5000;
RufflesAllD 3:65845faafbb1 43
RufflesAllD 2:db7c8378b324 44 void getText(void const *args)
RufflesAllD 2:db7c8378b324 45 {
RufflesAllD 2:db7c8378b324 46 int compteur = 0;
RufflesAllD 2:db7c8378b324 47 char c;
RufflesAllD 2:db7c8378b324 48 string message = "";
RufflesAllD 2:db7c8378b324 49
RufflesAllD 2:db7c8378b324 50 while (true)
RufflesAllD 2:db7c8378b324 51 {
RufflesAllD 2:db7c8378b324 52 c = pc.getc();
RufflesAllD 2:db7c8378b324 53
RufflesAllD 2:db7c8378b324 54 if (c == 0xD)
RufflesAllD 2:db7c8378b324 55 {
RufflesAllD 2:db7c8378b324 56 if (!message.empty())
RufflesAllD 2:db7c8378b324 57 {
RufflesAllD 2:db7c8378b324 58 pc.putc(0xA);
RufflesAllD 2:db7c8378b324 59 pc.putc(0xD);
RufflesAllD 2:db7c8378b324 60 textToSend.put(new string(message));
RufflesAllD 2:db7c8378b324 61 message = "";
RufflesAllD 2:db7c8378b324 62 compteur = 0;
RufflesAllD 2:db7c8378b324 63 }
RufflesAllD 2:db7c8378b324 64 }
RufflesAllD 2:db7c8378b324 65 else if (c == 0x8)
RufflesAllD 2:db7c8378b324 66 {
RufflesAllD 2:db7c8378b324 67 pc.putc(c);
RufflesAllD 2:db7c8378b324 68 pc.putc(0x20);
RufflesAllD 2:db7c8378b324 69 pc.putc(c);
RufflesAllD 2:db7c8378b324 70 message = message.substr(0, message.length() - 1);
RufflesAllD 2:db7c8378b324 71 compteur--;
RufflesAllD 2:db7c8378b324 72 }
RufflesAllD 2:db7c8378b324 73 else
RufflesAllD 2:db7c8378b324 74 {
RufflesAllD 2:db7c8378b324 75 if (compteur < 80)
RufflesAllD 2:db7c8378b324 76 {
RufflesAllD 2:db7c8378b324 77 pc.putc(c);
RufflesAllD 2:db7c8378b324 78 message += c;
RufflesAllD 2:db7c8378b324 79 compteur++;
RufflesAllD 2:db7c8378b324 80 }
RufflesAllD 2:db7c8378b324 81 }
RufflesAllD 2:db7c8378b324 82 }
RufflesAllD 2:db7c8378b324 83 }
RufflesAllD 2:db7c8378b324 84
RufflesAllD 2:db7c8378b324 85 void leTrameur(void const *args)
RufflesAllD 2:db7c8378b324 86 {
RufflesAllD 2:db7c8378b324 87 while (true)
RufflesAllD 2:db7c8378b324 88 {
RufflesAllD 2:db7c8378b324 89 osEvent evt = textToSend.get();
RufflesAllD 2:db7c8378b324 90
RufflesAllD 2:db7c8378b324 91 if (evt.status == osEventMessage) {
RufflesAllD 2:db7c8378b324 92 string *msg = (string*)evt.value.p;
RufflesAllD 2:db7c8378b324 93
RufflesAllD 2:db7c8378b324 94 //pc.printf("message envoye :\n\r%s\n\r", msg->c_str());
RufflesAllD 2:db7c8378b324 95 trameToSend.put(new trame(*msg));
RufflesAllD 2:db7c8378b324 96
RufflesAllD 2:db7c8378b324 97 delete msg;
RufflesAllD 2:db7c8378b324 98 }
RufflesAllD 2:db7c8378b324 99 }
RufflesAllD 2:db7c8378b324 100 }
joGenie 0:dc7095ab4963 101
RufflesAllD 2:db7c8378b324 102 void setPwmMatch(bitset<8> bitst)
RufflesAllD 2:db7c8378b324 103 {
RufflesAllD 2:db7c8378b324 104 for (int a = 0; a < 8; a++)
RufflesAllD 2:db7c8378b324 105 {
RufflesAllD 2:db7c8378b324 106 if (bitst.test(a))
RufflesAllD 2:db7c8378b324 107 {
RufflesAllD 2:db7c8378b324 108 LPC_PWM1->MR1 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 109 LPC_PWM1->MR2 = 1;
RufflesAllD 2:db7c8378b324 110 }
RufflesAllD 2:db7c8378b324 111 else
RufflesAllD 2:db7c8378b324 112 {
RufflesAllD 2:db7c8378b324 113 LPC_PWM1->MR1 = 1;
RufflesAllD 2:db7c8378b324 114 LPC_PWM1->MR2 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 115 }
RufflesAllD 2:db7c8378b324 116
RufflesAllD 2:db7c8378b324 117 while(LPC_PWM1->IR != 0x01);
RufflesAllD 2:db7c8378b324 118 LPC_PWM1->IR = 0xFF;
RufflesAllD 2:db7c8378b324 119 }
RufflesAllD 2:db7c8378b324 120 }
RufflesAllD 2:db7c8378b324 121
RufflesAllD 2:db7c8378b324 122 void sendTrame(trame *trm)
RufflesAllD 2:db7c8378b324 123 {
RufflesAllD 3:65845faafbb1 124 LPC_TIM2->TC = 0;
RufflesAllD 2:db7c8378b324 125 LPC_PWM1->TCR |= (1 << 0); // Enable counter
RufflesAllD 2:db7c8378b324 126
RufflesAllD 2:db7c8378b324 127 setPwmMatch(trm->preambule);
RufflesAllD 2:db7c8378b324 128 setPwmMatch(trm->start_end);
RufflesAllD 2:db7c8378b324 129 setPwmMatch(trm->type_flag);
RufflesAllD 2:db7c8378b324 130 setPwmMatch(trm->charge_utile);
RufflesAllD 2:db7c8378b324 131
RufflesAllD 2:db7c8378b324 132 for (int a = 0; a < trm->length; a++)
RufflesAllD 2:db7c8378b324 133 {
RufflesAllD 2:db7c8378b324 134 if (trm->message.test(a))
RufflesAllD 2:db7c8378b324 135 {
RufflesAllD 2:db7c8378b324 136 LPC_PWM1->MR1 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 137 LPC_PWM1->MR2 = 1;
RufflesAllD 2:db7c8378b324 138 }
RufflesAllD 2:db7c8378b324 139 else
RufflesAllD 2:db7c8378b324 140 {
RufflesAllD 2:db7c8378b324 141 LPC_PWM1->MR1 = 1;
RufflesAllD 2:db7c8378b324 142 LPC_PWM1->MR2 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 143 }
RufflesAllD 2:db7c8378b324 144
RufflesAllD 2:db7c8378b324 145 while(LPC_PWM1->IR != 0x01);
RufflesAllD 2:db7c8378b324 146 LPC_PWM1->IR = 0xFF;
RufflesAllD 2:db7c8378b324 147 }
RufflesAllD 2:db7c8378b324 148
RufflesAllD 2:db7c8378b324 149 for (int a = 0; a < 16; a++)
RufflesAllD 2:db7c8378b324 150 {
RufflesAllD 2:db7c8378b324 151 if (trm->crc16.test(a))
RufflesAllD 2:db7c8378b324 152 {
RufflesAllD 2:db7c8378b324 153 LPC_PWM1->MR1 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 154 LPC_PWM1->MR2 = 1;
RufflesAllD 2:db7c8378b324 155 }
RufflesAllD 2:db7c8378b324 156 else
RufflesAllD 2:db7c8378b324 157 {
RufflesAllD 2:db7c8378b324 158 LPC_PWM1->MR1 = 1;
RufflesAllD 2:db7c8378b324 159 LPC_PWM1->MR2 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 160 }
RufflesAllD 2:db7c8378b324 161
RufflesAllD 2:db7c8378b324 162 while(LPC_PWM1->IR != 0x01);
RufflesAllD 2:db7c8378b324 163 LPC_PWM1->IR = 0xFF;
RufflesAllD 2:db7c8378b324 164 }
RufflesAllD 2:db7c8378b324 165
RufflesAllD 2:db7c8378b324 166 setPwmMatch(trm->start_end);
RufflesAllD 2:db7c8378b324 167
RufflesAllD 2:db7c8378b324 168 LPC_PWM1->TCR = 0x0; // Disable counter
RufflesAllD 2:db7c8378b324 169 }
RufflesAllD 2:db7c8378b324 170
RufflesAllD 2:db7c8378b324 171 void sender(void const *args)
RufflesAllD 2:db7c8378b324 172 {
RufflesAllD 2:db7c8378b324 173 while (true)
RufflesAllD 2:db7c8378b324 174 {
RufflesAllD 2:db7c8378b324 175 osEvent evt = trameToSend.get();
RufflesAllD 2:db7c8378b324 176
RufflesAllD 2:db7c8378b324 177 if (evt.status == osEventMail) {
RufflesAllD 2:db7c8378b324 178 trame *trm = (trame*)evt.value.p;
RufflesAllD 2:db7c8378b324 179
RufflesAllD 2:db7c8378b324 180 pc.printf("trame shooter :\n\r%s", trm->trameToString().c_str());
RufflesAllD 2:db7c8378b324 181 sendTrame(trm);
RufflesAllD 2:db7c8378b324 182
RufflesAllD 2:db7c8378b324 183 trameToSend.free(trm);
RufflesAllD 2:db7c8378b324 184 }
RufflesAllD 2:db7c8378b324 185 }
RufflesAllD 2:db7c8378b324 186 }
joGenie 0:dc7095ab4963 187
RufflesAllD 3:65845faafbb1 188 void pushTrame(void const *args)
RufflesAllD 2:db7c8378b324 189 {
RufflesAllD 3:65845faafbb1 190 while (true)
RufflesAllD 2:db7c8378b324 191 {
RufflesAllD 3:65845faafbb1 192 osEvent evt = messagesQueue.get();
RufflesAllD 3:65845faafbb1 193
RufflesAllD 3:65845faafbb1 194 if (evt.status == osEventMessage) {
RufflesAllD 3:65845faafbb1 195 message_t *msg = (message_t*)evt.value.p;
RufflesAllD 3:65845faafbb1 196
RufflesAllD 3:65845faafbb1 197 bitset<696> bit(string(const_cast<const char*>(msg->msg)));
RufflesAllD 3:65845faafbb1 198 trame *trm = new trame(bit);
RufflesAllD 3:65845faafbb1 199
RufflesAllD 3:65845faafbb1 200 pc.printf("trame recu :\n\r%s\n\r", trm->trameToString().c_str());
RufflesAllD 3:65845faafbb1 201 if (trm->checkCRC16())
RufflesAllD 3:65845faafbb1 202 {
RufflesAllD 3:65845faafbb1 203 trameToDecode.put(trm);
RufflesAllD 3:65845faafbb1 204 }
RufflesAllD 3:65845faafbb1 205 else
RufflesAllD 3:65845faafbb1 206 {
RufflesAllD 3:65845faafbb1 207 for (int a=0;a < 8; a++)
RufflesAllD 3:65845faafbb1 208 {
RufflesAllD 3:65845faafbb1 209 pc.printf("tc_periods: %d\n\r", tc_periods[a]);
RufflesAllD 3:65845faafbb1 210 }
RufflesAllD 3:65845faafbb1 211 pc.printf("period: %d\n\r", period);
RufflesAllD 3:65845faafbb1 212 pc.printf("Mauvais CRC16\n\r");
RufflesAllD 3:65845faafbb1 213 }
RufflesAllD 3:65845faafbb1 214 }
RufflesAllD 2:db7c8378b324 215 }
RufflesAllD 2:db7c8378b324 216 }
RufflesAllD 2:db7c8378b324 217
RufflesAllD 3:65845faafbb1 218 void readTrame()
RufflesAllD 2:db7c8378b324 219 {
RufflesAllD 3:65845faafbb1 220 if (synchrone < 8)
RufflesAllD 3:65845faafbb1 221 {
RufflesAllD 3:65845faafbb1 222 tc_periods[synchrone] = LPC_TIM2->CR1;
RufflesAllD 3:65845faafbb1 223 synchrone++;
RufflesAllD 3:65845faafbb1 224
RufflesAllD 3:65845faafbb1 225 if (synchrone == 8)
RufflesAllD 3:65845faafbb1 226 {
RufflesAllD 3:65845faafbb1 227 for (int i = 0; i < 8; i++)
RufflesAllD 3:65845faafbb1 228 {
RufflesAllD 3:65845faafbb1 229 period += tc_periods[i];
RufflesAllD 3:65845faafbb1 230 }
RufflesAllD 3:65845faafbb1 231
RufflesAllD 3:65845faafbb1 232 period = period/8;
RufflesAllD 3:65845faafbb1 233 }
RufflesAllD 3:65845faafbb1 234 }
RufflesAllD 3:65845faafbb1 235 else
RufflesAllD 3:65845faafbb1 236 {
RufflesAllD 3:65845faafbb1 237 unsigned long tc_count = LPC_TIM2->CR1;
RufflesAllD 3:65845faafbb1 238 if (tc_count > (period*2 - offset) && tc_count < (period*2 + offset))
RufflesAllD 3:65845faafbb1 239 {
RufflesAllD 3:65845faafbb1 240 type_bit = !type_bit;
RufflesAllD 3:65845faafbb1 241 good = true;
RufflesAllD 3:65845faafbb1 242
RufflesAllD 3:65845faafbb1 243 if (type_bit)
RufflesAllD 3:65845faafbb1 244 {
RufflesAllD 3:65845faafbb1 245 messages[count] = '1';
RufflesAllD 3:65845faafbb1 246 led1 = 1;
RufflesAllD 3:65845faafbb1 247 led2 = 0;
RufflesAllD 3:65845faafbb1 248 }
RufflesAllD 3:65845faafbb1 249 else
RufflesAllD 3:65845faafbb1 250 {
RufflesAllD 3:65845faafbb1 251 messages[count] = '0';
RufflesAllD 3:65845faafbb1 252 led1 = 0;
RufflesAllD 3:65845faafbb1 253 led2 = 1;
RufflesAllD 3:65845faafbb1 254 }
RufflesAllD 3:65845faafbb1 255
RufflesAllD 3:65845faafbb1 256 count++;
RufflesAllD 3:65845faafbb1 257 }
RufflesAllD 3:65845faafbb1 258
RufflesAllD 3:65845faafbb1 259 good = !good;
RufflesAllD 3:65845faafbb1 260 if (good)
RufflesAllD 3:65845faafbb1 261 {
RufflesAllD 3:65845faafbb1 262 if (type_bit)
RufflesAllD 3:65845faafbb1 263 {
RufflesAllD 3:65845faafbb1 264 messages[count] = '1';
RufflesAllD 3:65845faafbb1 265 led1 = 1;
RufflesAllD 3:65845faafbb1 266 led2 = 0;
RufflesAllD 3:65845faafbb1 267 }
RufflesAllD 3:65845faafbb1 268 else
RufflesAllD 3:65845faafbb1 269 {
RufflesAllD 3:65845faafbb1 270 messages[count] = '0';
RufflesAllD 3:65845faafbb1 271 led1 = 0;
RufflesAllD 3:65845faafbb1 272 led2 = 1;
RufflesAllD 3:65845faafbb1 273 }
RufflesAllD 3:65845faafbb1 274
RufflesAllD 3:65845faafbb1 275 count++;
RufflesAllD 3:65845faafbb1 276 }
RufflesAllD 3:65845faafbb1 277 }
RufflesAllD 3:65845faafbb1 278
RufflesAllD 3:65845faafbb1 279 if (count >= 48)
RufflesAllD 3:65845faafbb1 280 {
RufflesAllD 3:65845faafbb1 281 char temp[8] = {0};
RufflesAllD 3:65845faafbb1 282 for (int a = 0; a < 8; a++)
RufflesAllD 3:65845faafbb1 283 {
RufflesAllD 3:65845faafbb1 284 temp[a] = messages[count-a];
RufflesAllD 3:65845faafbb1 285 }
RufflesAllD 3:65845faafbb1 286
RufflesAllD 3:65845faafbb1 287 if (strcmp(temp, end) == 0)
RufflesAllD 3:65845faafbb1 288 {
RufflesAllD 3:65845faafbb1 289 count = 0;
RufflesAllD 3:65845faafbb1 290 synchrone = 0;
RufflesAllD 3:65845faafbb1 291 good = true;
RufflesAllD 3:65845faafbb1 292 strcpy(msgs.msg, messages);
RufflesAllD 3:65845faafbb1 293 fill(messages, messages+696, 0);
RufflesAllD 3:65845faafbb1 294 messagesQueue.put(&msgs);
RufflesAllD 3:65845faafbb1 295 LPC_TIM2->TCR |= (1 << 1); // Reset Timer Control Register
RufflesAllD 3:65845faafbb1 296 LPC_TIM2->TCR = 0x01;
RufflesAllD 3:65845faafbb1 297 led3 = 1;
RufflesAllD 3:65845faafbb1 298 }
RufflesAllD 3:65845faafbb1 299 }
RufflesAllD 3:65845faafbb1 300
RufflesAllD 3:65845faafbb1 301 LPC_TIM2->TC = 0;
RufflesAllD 3:65845faafbb1 302 LPC_TIM2->IR = 0xFF;
RufflesAllD 3:65845faafbb1 303 led4 = 1;
joGenie 0:dc7095ab4963 304 }
joGenie 0:dc7095ab4963 305
RufflesAllD 2:db7c8378b324 306 void decoder(void const *args)
joGenie 0:dc7095ab4963 307 {
RufflesAllD 2:db7c8378b324 308 while(true)
joGenie 0:dc7095ab4963 309 {
RufflesAllD 2:db7c8378b324 310 osEvent evt = trameToDecode.get();
RufflesAllD 2:db7c8378b324 311
RufflesAllD 2:db7c8378b324 312 if (evt.status == osEventMail) {
RufflesAllD 2:db7c8378b324 313 trame *trm = (trame*)evt.value.p;
RufflesAllD 2:db7c8378b324 314
RufflesAllD 2:db7c8378b324 315 textToPrint.put(new string(trm->text));
RufflesAllD 2:db7c8378b324 316
RufflesAllD 3:65845faafbb1 317 trameToDecode.free(trm);
joGenie 0:dc7095ab4963 318 }
joGenie 0:dc7095ab4963 319 }
RufflesAllD 1:261bb31628e8 320 }
RufflesAllD 1:261bb31628e8 321
RufflesAllD 2:db7c8378b324 322 void printer(void const *args)
RufflesAllD 2:db7c8378b324 323 {
RufflesAllD 2:db7c8378b324 324 while (true)
RufflesAllD 2:db7c8378b324 325 {
RufflesAllD 2:db7c8378b324 326 osEvent evt = textToPrint.get();
RufflesAllD 2:db7c8378b324 327
RufflesAllD 2:db7c8378b324 328 if (evt.status == osEventMessage) {
RufflesAllD 2:db7c8378b324 329 string *msg = (string*)evt.value.p;
RufflesAllD 2:db7c8378b324 330
RufflesAllD 2:db7c8378b324 331 pc.printf("Sender says :\n\r%s\n\r", msg->c_str());
RufflesAllD 2:db7c8378b324 332
RufflesAllD 2:db7c8378b324 333 delete msg;
RufflesAllD 2:db7c8378b324 334 }
RufflesAllD 2:db7c8378b324 335 }
joGenie 0:dc7095ab4963 336 }
joGenie 0:dc7095ab4963 337
joGenie 0:dc7095ab4963 338 void initialize()
joGenie 0:dc7095ab4963 339 {
joGenie 0:dc7095ab4963 340 // Set system control
joGenie 0:dc7095ab4963 341 LPC_SC->PCONP |= (1 << 22) | (1 << 6); // Enable Timer2 et PWM
joGenie 0:dc7095ab4963 342 LPC_SC->PCLKSEL0 |= (1 << 12); // PClk PWM = CCLK
joGenie 0:dc7095ab4963 343 LPC_SC->PCLKSEL1 |= (1 << 12); // PClk Timer2 = CCLK
joGenie 0:dc7095ab4963 344
joGenie 0:dc7095ab4963 345 // Set pin connection
joGenie 0:dc7095ab4963 346 LPC_PINCON->PINSEL0 |= (3 << 10); // Pin 29 Capture
joGenie 0:dc7095ab4963 347 LPC_PINCON->PINSEL4 |= (1 << 2); // Pin 25 PWM
joGenie 0:dc7095ab4963 348
joGenie 0:dc7095ab4963 349 //Initialize Timer2 for capture
RufflesAllD 1:261bb31628e8 350 NVIC_SetVector(TIMER2_IRQn, (uint32_t)&readTrame);
RufflesAllD 3:65845faafbb1 351 NVIC_SetPriority(TIMER2_IRQn, 255);
RufflesAllD 1:261bb31628e8 352 NVIC_EnableIRQ(TIMER2_IRQn);
joGenie 0:dc7095ab4963 353
joGenie 0:dc7095ab4963 354 LPC_TIM2->TC = 0; // Initialize Time Counter
joGenie 0:dc7095ab4963 355 LPC_TIM2->PC = 0; // Initialize Prescale Counter
joGenie 0:dc7095ab4963 356 LPC_TIM2->PR = 0; // Initialize Prescale Register
joGenie 0:dc7095ab4963 357 LPC_TIM2->TCR |= (1 << 1); // Reset Timer Control Register
joGenie 0:dc7095ab4963 358 LPC_TIM2->IR = 0xFF; // Reset Interrupt Register
RufflesAllD 1:261bb31628e8 359 LPC_TIM2->CCR |= (1 << 5) | (1 << 4) | (1 << 3); // Initialize Capture Control Register
RufflesAllD 3:65845faafbb1 360 LPC_TIM2->CTCR = 0x0;
joGenie 0:dc7095ab4963 361
joGenie 0:dc7095ab4963 362 LPC_TIM2->TCR = 0x01; // Start Timer Control Register
joGenie 0:dc7095ab4963 363
joGenie 0:dc7095ab4963 364 //Initialize PWM
joGenie 0:dc7095ab4963 365 LPC_PWM1->MCR |= (1 << 1) | (1 << 0); // Initialize Match Control Register Interrupt/Reset
joGenie 0:dc7095ab4963 366 LPC_PWM1->PCR |= (1 << 10) | (1 << 2); // Initialize PWM Control Register Output/Double-edge
joGenie 0:dc7095ab4963 367
RufflesAllD 2:db7c8378b324 368 LPC_PWM1->MR0 = tickPerPeriod; // Period
joGenie 0:dc7095ab4963 369 LPC_PWM1->LER |= (1 << 2) | (1 << 1); // Initialize Latch Enable Register
joGenie 0:dc7095ab4963 370
RufflesAllD 1:261bb31628e8 371 LPC_PWM1->IR = 0xFF; // Reset Interrupt Registe
joGenie 0:dc7095ab4963 372 }
joGenie 0:dc7095ab4963 373
joGenie 0:dc7095ab4963 374 int main()
joGenie 0:dc7095ab4963 375 {
joGenie 0:dc7095ab4963 376 initialize();
joGenie 0:dc7095ab4963 377
RufflesAllD 2:db7c8378b324 378 Thread thread1(getText);
RufflesAllD 2:db7c8378b324 379 //thread1.set_priority(osPriorityAboveNormal);
RufflesAllD 2:db7c8378b324 380 Thread thread2(leTrameur);
RufflesAllD 2:db7c8378b324 381 thread2.set_priority(osPriorityAboveNormal);
RufflesAllD 2:db7c8378b324 382 Thread thread3(sender);
RufflesAllD 2:db7c8378b324 383 thread3.set_priority(osPriorityHigh);
RufflesAllD 3:65845faafbb1 384
RufflesAllD 3:65845faafbb1 385 Thread thread(pushTrame);
RufflesAllD 3:65845faafbb1 386 thread.set_priority(osPriorityRealtime);
RufflesAllD 3:65845faafbb1 387
RufflesAllD 3:65845faafbb1 388 Thread thread4(decoder);
RufflesAllD 3:65845faafbb1 389 thread4.set_priority(osPriorityHigh);
RufflesAllD 3:65845faafbb1 390 Thread thread5(printer);
RufflesAllD 3:65845faafbb1 391 thread5.set_priority(osPriorityAboveNormal);
joGenie 0:dc7095ab4963 392
RufflesAllD 2:db7c8378b324 393 while(true);
joGenie 0:dc7095ab4963 394 }