Problematique

Dependencies:   mbed mbed-rtos

Committer:
joGenie
Date:
Wed Feb 12 21:50:47 2014 +0000
Revision:
4:2af360b178d2
Parent:
3:65845faafbb1
ss;

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
joGenie 4:2af360b178d2 12 DigitalOut out(p26);
joGenie 4:2af360b178d2 13
RufflesAllD 3:65845faafbb1 14 const int tickPerPeriod = 960000;
RufflesAllD 3:65845faafbb1 15
RufflesAllD 3:65845faafbb1 16 struct message_t
RufflesAllD 3:65845faafbb1 17 {
RufflesAllD 3:65845faafbb1 18 char msg[696];
RufflesAllD 3:65845faafbb1 19 };
RufflesAllD 2:db7c8378b324 20
RufflesAllD 2:db7c8378b324 21 Queue<string, 16> textToSend;
RufflesAllD 2:db7c8378b324 22 Mail<trame, 16> trameToSend;
RufflesAllD 2:db7c8378b324 23
RufflesAllD 3:65845faafbb1 24 Queue<message_t, 16> messagesQueue;
RufflesAllD 2:db7c8378b324 25 Mail<trame, 16> trameToDecode;
RufflesAllD 2:db7c8378b324 26 Queue<string, 16> textToPrint;
RufflesAllD 2:db7c8378b324 27
RufflesAllD 3:65845faafbb1 28 unsigned long tc_periods[8] = {0};
RufflesAllD 3:65845faafbb1 29 unsigned long period = 0;
RufflesAllD 3:65845faafbb1 30 bool type_bit = false;
RufflesAllD 3:65845faafbb1 31 int synchrone = 0;
RufflesAllD 3:65845faafbb1 32 int count = 0;
RufflesAllD 3:65845faafbb1 33 const char end[8] = {0, 1, 1, 1, 1, 1, 1, 0};
RufflesAllD 3:65845faafbb1 34
RufflesAllD 3:65845faafbb1 35 bool good = true;
RufflesAllD 3:65845faafbb1 36
RufflesAllD 3:65845faafbb1 37 char messages[696] = {0};
RufflesAllD 3:65845faafbb1 38 message_t msgs;
joGenie 4:2af360b178d2 39 const unsigned long offset = 200;
RufflesAllD 3:65845faafbb1 40
RufflesAllD 2:db7c8378b324 41 void getText(void const *args)
RufflesAllD 2:db7c8378b324 42 {
RufflesAllD 2:db7c8378b324 43 int compteur = 0;
RufflesAllD 2:db7c8378b324 44 char c;
RufflesAllD 2:db7c8378b324 45 string message = "";
RufflesAllD 2:db7c8378b324 46
RufflesAllD 2:db7c8378b324 47 while (true)
RufflesAllD 2:db7c8378b324 48 {
RufflesAllD 2:db7c8378b324 49 c = pc.getc();
RufflesAllD 2:db7c8378b324 50
RufflesAllD 2:db7c8378b324 51 if (c == 0xD)
RufflesAllD 2:db7c8378b324 52 {
RufflesAllD 2:db7c8378b324 53 if (!message.empty())
RufflesAllD 2:db7c8378b324 54 {
RufflesAllD 2:db7c8378b324 55 pc.putc(0xA);
RufflesAllD 2:db7c8378b324 56 pc.putc(0xD);
RufflesAllD 2:db7c8378b324 57 textToSend.put(new string(message));
RufflesAllD 2:db7c8378b324 58 message = "";
RufflesAllD 2:db7c8378b324 59 compteur = 0;
RufflesAllD 2:db7c8378b324 60 }
RufflesAllD 2:db7c8378b324 61 }
RufflesAllD 2:db7c8378b324 62 else if (c == 0x8)
RufflesAllD 2:db7c8378b324 63 {
RufflesAllD 2:db7c8378b324 64 pc.putc(c);
RufflesAllD 2:db7c8378b324 65 pc.putc(0x20);
RufflesAllD 2:db7c8378b324 66 pc.putc(c);
RufflesAllD 2:db7c8378b324 67 message = message.substr(0, message.length() - 1);
RufflesAllD 2:db7c8378b324 68 compteur--;
RufflesAllD 2:db7c8378b324 69 }
RufflesAllD 2:db7c8378b324 70 else
RufflesAllD 2:db7c8378b324 71 {
RufflesAllD 2:db7c8378b324 72 if (compteur < 80)
RufflesAllD 2:db7c8378b324 73 {
RufflesAllD 2:db7c8378b324 74 pc.putc(c);
RufflesAllD 2:db7c8378b324 75 message += c;
RufflesAllD 2:db7c8378b324 76 compteur++;
RufflesAllD 2:db7c8378b324 77 }
RufflesAllD 2:db7c8378b324 78 }
RufflesAllD 2:db7c8378b324 79 }
RufflesAllD 2:db7c8378b324 80 }
RufflesAllD 2:db7c8378b324 81
RufflesAllD 2:db7c8378b324 82 void leTrameur(void const *args)
RufflesAllD 2:db7c8378b324 83 {
RufflesAllD 2:db7c8378b324 84 while (true)
RufflesAllD 2:db7c8378b324 85 {
RufflesAllD 2:db7c8378b324 86 osEvent evt = textToSend.get();
RufflesAllD 2:db7c8378b324 87
RufflesAllD 2:db7c8378b324 88 if (evt.status == osEventMessage) {
RufflesAllD 2:db7c8378b324 89 string *msg = (string*)evt.value.p;
RufflesAllD 2:db7c8378b324 90
RufflesAllD 2:db7c8378b324 91 //pc.printf("message envoye :\n\r%s\n\r", msg->c_str());
RufflesAllD 2:db7c8378b324 92 trameToSend.put(new trame(*msg));
RufflesAllD 2:db7c8378b324 93
RufflesAllD 2:db7c8378b324 94 delete msg;
RufflesAllD 2:db7c8378b324 95 }
RufflesAllD 2:db7c8378b324 96 }
RufflesAllD 2:db7c8378b324 97 }
joGenie 0:dc7095ab4963 98
RufflesAllD 2:db7c8378b324 99 void setPwmMatch(bitset<8> bitst)
RufflesAllD 2:db7c8378b324 100 {
RufflesAllD 2:db7c8378b324 101 for (int a = 0; a < 8; a++)
RufflesAllD 2:db7c8378b324 102 {
joGenie 4:2af360b178d2 103 out = !out;
RufflesAllD 2:db7c8378b324 104 if (bitst.test(a))
RufflesAllD 2:db7c8378b324 105 {
RufflesAllD 2:db7c8378b324 106 LPC_PWM1->MR1 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 107 LPC_PWM1->MR2 = 1;
RufflesAllD 2:db7c8378b324 108 }
RufflesAllD 2:db7c8378b324 109 else
RufflesAllD 2:db7c8378b324 110 {
RufflesAllD 2:db7c8378b324 111 LPC_PWM1->MR1 = 1;
RufflesAllD 2:db7c8378b324 112 LPC_PWM1->MR2 = tickPerPeriod/2;
RufflesAllD 2:db7c8378b324 113 }
RufflesAllD 2:db7c8378b324 114
RufflesAllD 2:db7c8378b324 115 while(LPC_PWM1->IR != 0x01);
RufflesAllD 2:db7c8378b324 116 LPC_PWM1->IR = 0xFF;
joGenie 4:2af360b178d2 117
joGenie 4:2af360b178d2 118 out = !out;
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 led3 = 1;
RufflesAllD 3:65845faafbb1 296 }
RufflesAllD 3:65845faafbb1 297 }
RufflesAllD 3:65845faafbb1 298
RufflesAllD 3:65845faafbb1 299 LPC_TIM2->TC = 0;
RufflesAllD 3:65845faafbb1 300 LPC_TIM2->IR = 0xFF;
RufflesAllD 3:65845faafbb1 301 led4 = 1;
joGenie 0:dc7095ab4963 302 }
joGenie 0:dc7095ab4963 303
RufflesAllD 2:db7c8378b324 304 void decoder(void const *args)
joGenie 0:dc7095ab4963 305 {
RufflesAllD 2:db7c8378b324 306 while(true)
joGenie 0:dc7095ab4963 307 {
RufflesAllD 2:db7c8378b324 308 osEvent evt = trameToDecode.get();
RufflesAllD 2:db7c8378b324 309
RufflesAllD 2:db7c8378b324 310 if (evt.status == osEventMail) {
RufflesAllD 2:db7c8378b324 311 trame *trm = (trame*)evt.value.p;
RufflesAllD 2:db7c8378b324 312
RufflesAllD 2:db7c8378b324 313 textToPrint.put(new string(trm->text));
RufflesAllD 2:db7c8378b324 314
RufflesAllD 3:65845faafbb1 315 trameToDecode.free(trm);
joGenie 0:dc7095ab4963 316 }
joGenie 0:dc7095ab4963 317 }
RufflesAllD 1:261bb31628e8 318 }
RufflesAllD 1:261bb31628e8 319
RufflesAllD 2:db7c8378b324 320 void printer(void const *args)
RufflesAllD 2:db7c8378b324 321 {
RufflesAllD 2:db7c8378b324 322 while (true)
RufflesAllD 2:db7c8378b324 323 {
RufflesAllD 2:db7c8378b324 324 osEvent evt = textToPrint.get();
RufflesAllD 2:db7c8378b324 325
RufflesAllD 2:db7c8378b324 326 if (evt.status == osEventMessage) {
RufflesAllD 2:db7c8378b324 327 string *msg = (string*)evt.value.p;
RufflesAllD 2:db7c8378b324 328
RufflesAllD 2:db7c8378b324 329 pc.printf("Sender says :\n\r%s\n\r", msg->c_str());
RufflesAllD 2:db7c8378b324 330
RufflesAllD 2:db7c8378b324 331 delete msg;
RufflesAllD 2:db7c8378b324 332 }
RufflesAllD 2:db7c8378b324 333 }
joGenie 0:dc7095ab4963 334 }
joGenie 0:dc7095ab4963 335
joGenie 0:dc7095ab4963 336 void initialize()
joGenie 0:dc7095ab4963 337 {
joGenie 0:dc7095ab4963 338 // Set system control
joGenie 0:dc7095ab4963 339 LPC_SC->PCONP |= (1 << 22) | (1 << 6); // Enable Timer2 et PWM
joGenie 0:dc7095ab4963 340 LPC_SC->PCLKSEL0 |= (1 << 12); // PClk PWM = CCLK
joGenie 0:dc7095ab4963 341 LPC_SC->PCLKSEL1 |= (1 << 12); // PClk Timer2 = CCLK
joGenie 0:dc7095ab4963 342
joGenie 0:dc7095ab4963 343 // Set pin connection
joGenie 0:dc7095ab4963 344 LPC_PINCON->PINSEL0 |= (3 << 10); // Pin 29 Capture
joGenie 0:dc7095ab4963 345 LPC_PINCON->PINSEL4 |= (1 << 2); // Pin 25 PWM
joGenie 0:dc7095ab4963 346
joGenie 0:dc7095ab4963 347 //Initialize Timer2 for capture
RufflesAllD 1:261bb31628e8 348 NVIC_SetVector(TIMER2_IRQn, (uint32_t)&readTrame);
RufflesAllD 1:261bb31628e8 349 NVIC_EnableIRQ(TIMER2_IRQn);
joGenie 0:dc7095ab4963 350
joGenie 0:dc7095ab4963 351 LPC_TIM2->TC = 0; // Initialize Time Counter
joGenie 0:dc7095ab4963 352 LPC_TIM2->PC = 0; // Initialize Prescale Counter
joGenie 0:dc7095ab4963 353 LPC_TIM2->PR = 0; // Initialize Prescale Register
joGenie 0:dc7095ab4963 354 LPC_TIM2->TCR |= (1 << 1); // Reset Timer Control Register
joGenie 0:dc7095ab4963 355 LPC_TIM2->IR = 0xFF; // Reset Interrupt Register
RufflesAllD 1:261bb31628e8 356 LPC_TIM2->CCR |= (1 << 5) | (1 << 4) | (1 << 3); // Initialize Capture Control Register
RufflesAllD 3:65845faafbb1 357 LPC_TIM2->CTCR = 0x0;
joGenie 0:dc7095ab4963 358
joGenie 0:dc7095ab4963 359 LPC_TIM2->TCR = 0x01; // Start Timer Control Register
joGenie 0:dc7095ab4963 360
joGenie 0:dc7095ab4963 361 //Initialize PWM
joGenie 0:dc7095ab4963 362 LPC_PWM1->MCR |= (1 << 1) | (1 << 0); // Initialize Match Control Register Interrupt/Reset
joGenie 0:dc7095ab4963 363 LPC_PWM1->PCR |= (1 << 10) | (1 << 2); // Initialize PWM Control Register Output/Double-edge
joGenie 0:dc7095ab4963 364
RufflesAllD 2:db7c8378b324 365 LPC_PWM1->MR0 = tickPerPeriod; // Period
joGenie 0:dc7095ab4963 366 LPC_PWM1->LER |= (1 << 2) | (1 << 1); // Initialize Latch Enable Register
joGenie 0:dc7095ab4963 367
RufflesAllD 1:261bb31628e8 368 LPC_PWM1->IR = 0xFF; // Reset Interrupt Registe
joGenie 0:dc7095ab4963 369 }
joGenie 0:dc7095ab4963 370
joGenie 0:dc7095ab4963 371 int main()
joGenie 0:dc7095ab4963 372 {
joGenie 4:2af360b178d2 373 out = 0; // Pour analyse de performance
joGenie 4:2af360b178d2 374
joGenie 0:dc7095ab4963 375 initialize();
joGenie 0:dc7095ab4963 376
joGenie 4:2af360b178d2 377 // Permet de concevoir le message a envoyer
joGenie 4:2af360b178d2 378 // Ajoute le message dans le queue du trameur
RufflesAllD 2:db7c8378b324 379 Thread thread1(getText);
joGenie 4:2af360b178d2 380
joGenie 4:2af360b178d2 381 // Vide la queue du trameur
joGenie 4:2af360b178d2 382 // Creer un message a binaire
joGenie 4:2af360b178d2 383 // Ajoute se message dans le mail box du sender
RufflesAllD 2:db7c8378b324 384 Thread thread2(leTrameur);
RufflesAllD 2:db7c8378b324 385 thread2.set_priority(osPriorityAboveNormal);
joGenie 4:2af360b178d2 386
joGenie 4:2af360b178d2 387 // Vide la mailbox du sender
joGenie 4:2af360b178d2 388 // Creer le signal du modulateur a l'aide du LPC_PM1
RufflesAllD 2:db7c8378b324 389 Thread thread3(sender);
RufflesAllD 2:db7c8378b324 390 thread3.set_priority(osPriorityHigh);
RufflesAllD 3:65845faafbb1 391
joGenie 4:2af360b178d2 392 // Creer un message en binaire et check pour le CRC16
joGenie 4:2af360b178d2 393 // Ajoute ce message dans la mailbox du decoder
RufflesAllD 3:65845faafbb1 394 Thread thread(pushTrame);
RufflesAllD 3:65845faafbb1 395 thread.set_priority(osPriorityRealtime);
RufflesAllD 3:65845faafbb1 396
joGenie 4:2af360b178d2 397 // Vide la mailbox du decoder
joGenie 4:2af360b178d2 398 // Creer un message en lettre
joGenie 4:2af360b178d2 399 // Ajoute ce message dans la queue du printer
RufflesAllD 3:65845faafbb1 400 Thread thread4(decoder);
RufflesAllD 3:65845faafbb1 401 thread4.set_priority(osPriorityHigh);
joGenie 4:2af360b178d2 402
joGenie 4:2af360b178d2 403 // Vide la queue du printer
joGenie 4:2af360b178d2 404 // Affiche le message a l'ecran
RufflesAllD 3:65845faafbb1 405 Thread thread5(printer);
RufflesAllD 3:65845faafbb1 406 thread5.set_priority(osPriorityAboveNormal);
joGenie 0:dc7095ab4963 407
RufflesAllD 2:db7c8378b324 408 while(true);
joGenie 0:dc7095ab4963 409 }