app4

Dependencies:   mbed-rtos mbed CRC16

Fork of S5info_APP2 by Éric Bisson

Revision:
23:9c4e4898b741
Parent:
22:7244c3391bac
Child:
24:2034362db66f
--- a/main.cpp	Tue Mar 07 05:45:26 2017 +0000
+++ b/main.cpp	Tue Mar 07 06:09:06 2017 +0000
@@ -16,18 +16,19 @@
 uint8_t byte_sent_pos,      //position de l'octet dans le tableau d'envoi
         trame_length;       //longueur de la trame complete
         
-signed char bit_sent;           //position du bit de l'octet en cours d'envoi (du MSB au LSB) 7..0
+signed char bit_sent;       //position du bit de l'octet en cours d'envoi (du MSB au LSB) 7..0
+bool bTimer1 = false;
 
 void initTimers()
 {
     //Timer 1 (match)
     LPC_SC->PCLKSEL0 |= (1 << 4);           // pclk = cclk timer1
     LPC_SC->PCONP |= (1 << 2);              // timer1 power on
-    LPC_TIM1->MR0 = 960000;                 // 10 ms
+    LPC_TIM1->MR0 = 960000 / 2;             // 10/2 ms 
     LPC_TIM1->MCR = 3;                      // interrupt and reset control
     LPC_TIM1->EMR = (3 << 4);               // Interrupt & reset timer on match
     NVIC_EnableIRQ(TIMER1_IRQn);            // enable timer interrupt
-    LPC_TIM1->TCR = 1;                      // enable Timer
+    LPC_TIM1->TCR = 0;                      // disable Timer
  
     //Timer 2 (cap)
     LPC_SC->PCLKSEL1 |= (1 << 12);          // pclk = cclk timer2
@@ -43,7 +44,34 @@
     LPC_TIM2->TCR = 1;                      // start Timer
 }
 
-bool bTimer1 = false;
+//encodage manchester
+bool codeManchester(bool bit, bool clock)
+{
+    return (bit == clock);
+}
+
+//Envoie de données bit par bit
+void send_data()
+{
+    out = codeManchester(((trame_sent[byte_sent_pos] >> bit_sent) & 0x01), bTimer1);
+    if(bTimer1)
+    {
+        bit_sent--;
+    }
+    bTimer1 = !bTimer1;     //varier entre la 1ere et 2eme partie de demi-periode
+    if (bit_sent < 0)       //Si l'octet a ete envoye
+    {     
+        bit_sent = 7;       //remettre la position initiale pour le prochain octet
+        byte_sent_pos++;    //incrementer l'octet
+        if (byte_sent_pos >= trame_length) //Si la trame a ete envoyee
+        {  
+            byte_sent_pos = 0;
+            bTimer1 = false;
+            LPC_TIM1->TCR = 0;  // disable Timer
+        }
+    }
+}
+
 extern "C" void TIMER1_IRQHandler()
 {
     if ((LPC_TIM1->IR & 0x01) == 0x01)
@@ -87,29 +115,6 @@
     LPC_TIM2->IR |= 0xFFFFFFFF; // clear
 }
 
-bool codeManchester(bool bit, bool clock)
-{
-    return (bit == clock);
-}
-
-void send_data()
-{
-    out = codeManchester(((trame_sent[byte_sent_pos] >> bit_sent) & 0x01), bTimer1);  // Encodage Manchester
-    if(bTimer1)
-    {
-        bit_sent--;
-    }
-    bTimer1 = !bTimer1;       //varier entre la 1ere et 2eme partie de demi-periode
-    if (bit_sent < 0) {     //Si l'octet a ete envoye
-        bit_sent = 7;       //remettre la position initiale pour le prochain octet
-        byte_sent_pos++;    //incrementer l'octet
-        if (byte_sent_pos >= trame_length) {  //Si la trame a ete envoyee
-            byte_sent_pos = 0;
-            bTimer1 = false;
-        }
-    }
-}
-
 //création de la trame
 void create_trame(char message[],unsigned char taille)
 {
@@ -140,6 +145,7 @@
     byte_sent_pos = 0;
     bit_sent = 7;
     bTimer1 = false;
+    LPC_TIM1->TCR = 3; // enable and reset Timer
     //TODO start interrupt timer 1 
     //LPC_RIT->MCR = 1;                      //Permettre les interruption du MAT
     //LPC_RIT->MR0 = LPC_RIT->TC + HALF_PERIOD;  //Faire une interruption a la prochaine demi-periode