Luiz Fernando Nobre / RadioIn

Dependents:   Sumo_v2 Sumo_v2_Unstable Sumo_v2_RG13

Files at this revision

API Documentation at this revision

Comitter:
BlazeX
Date:
Fri Mar 23 14:45:07 2012 +0000
Child:
1:a5bfae540999
Commit message:

Changed in this revision

AR8000.cpp Show annotated file Show diff for this revision Revisions of this file
AR8000.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AR8000.cpp	Fri Mar 23 14:45:07 2012 +0000
@@ -0,0 +1,51 @@
+#include "mbed.h"
+#include "AR8000.h"
+
+
+//Initialisieren
+AR8000::AR8000(InterruptIn & ChInt0_,
+               InterruptIn & ChInt1_,
+               InterruptIn & ChInt2_,
+               InterruptIn & ChInt3_,
+               InterruptIn & ChInt4_,
+               InterruptIn & ChInt5_,
+               InterruptIn & ChInt6_,
+               InterruptIn & ChInt7_)
+    : ChInt0(ChInt0_),
+      ChInt1(ChInt1_),
+      ChInt2(ChInt2_),
+      ChInt3(ChInt3_),
+      ChInt4(ChInt4_),
+      ChInt5(ChInt5_),
+      ChInt6(ChInt6_),
+      ChInt7(ChInt7_)
+{}
+               
+void AR8000::Init()
+{
+    Time.start();
+    
+    for(int i= 0; i < 8; i++)
+    {
+        LastRise[i]= 0;
+        dTime[i]= 1500;
+    }
+    
+    ChInt0.mode(PullDown);   ChInt0.rise<AR8000>(this, &AR8000::Rise0);     ChInt0.fall<AR8000>(this, &AR8000::Fall0);
+    ChInt1.mode(PullDown);   ChInt1.rise<AR8000>(this, &AR8000::Rise1);     ChInt1.fall<AR8000>(this, &AR8000::Fall1);
+    ChInt2.mode(PullDown);   ChInt2.rise<AR8000>(this, &AR8000::Rise2);     ChInt2.fall<AR8000>(this, &AR8000::Fall2);
+    ChInt3.mode(PullDown);   ChInt3.rise<AR8000>(this, &AR8000::Rise3);     ChInt3.fall<AR8000>(this, &AR8000::Fall3);
+    ChInt4.mode(PullDown);   ChInt4.rise<AR8000>(this, &AR8000::Rise4);     ChInt4.fall<AR8000>(this, &AR8000::Fall4);
+    ChInt5.mode(PullDown);   ChInt5.rise<AR8000>(this, &AR8000::Rise5);     ChInt5.fall<AR8000>(this, &AR8000::Fall5);
+    ChInt6.mode(PullDown);   ChInt6.rise<AR8000>(this, &AR8000::Rise6);     ChInt6.fall<AR8000>(this, &AR8000::Fall6);
+    ChInt7.mode(PullDown);   ChInt7.rise<AR8000>(this, &AR8000::Rise7);     ChInt7.fall<AR8000>(this, &AR8000::Fall7);
+    
+    Update();
+}
+
+//Update-Methode
+void AR8000::Update()
+{
+    for(int i= 0; i < 8; i++)
+        Pos[i]= dTime[i]-1000;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AR8000.h	Fri Mar 23 14:45:07 2012 +0000
@@ -0,0 +1,63 @@
+//TODO:
+//- Ein Timer reicht. Mit read_us() kann zu jeder Zeit die Zeit festgestellt werden
+
+#pragma once
+
+//Interrupt-Callback Vorlage
+#define AR8000_RISE_FALL(Ch)\
+void Rise##Ch()\
+{\
+    LastRise[Ch]= Time.read_us();\
+}\
+void Fall##Ch()\
+{\
+    int dT= Time.read_us() - LastRise[Ch];\
+    if(dT > 900 && dT < 2200)\
+         dTime[Ch]= dT;\
+}
+
+
+class AR8000
+{
+private:
+    InterruptIn & ChInt0;           //Interrupt-Handler fuer jeden Pin
+    InterruptIn & ChInt1;
+    InterruptIn & ChInt2;
+    InterruptIn & ChInt3;
+    InterruptIn & ChInt4;
+    InterruptIn & ChInt5;
+    InterruptIn & ChInt6;
+    InterruptIn & ChInt7;
+    
+    Timer Time;                     //Timer for all 8 Channels
+    volatile int LastRise[8];       //Zeitpunkt der letzten steigende Flanke  
+    volatile int dTime[8];          //Pulsdauer in us [1000...2000]
+    
+public:
+    //Das Ergebnis [0...1000], kann nach dem Update "gelesen werden"
+    int Pos[8];
+    
+    //Initialisieren
+    AR8000(InterruptIn & ChInt0_,
+           InterruptIn & ChInt1_,
+           InterruptIn & ChInt2_,
+           InterruptIn & ChInt3_,
+           InterruptIn & ChInt4_,
+           InterruptIn & ChInt5_,
+           InterruptIn & ChInt6_,
+           InterruptIn & ChInt7_);
+    void Init();
+    
+    //Interrupt-Callbacks definieren
+    AR8000_RISE_FALL(0);
+    AR8000_RISE_FALL(1);
+    AR8000_RISE_FALL(2);
+    AR8000_RISE_FALL(3);
+    AR8000_RISE_FALL(4);
+    AR8000_RISE_FALL(5);
+    AR8000_RISE_FALL(6);
+    AR8000_RISE_FALL(7);
+    
+    //Update-Methode
+    void Update();
+};
\ No newline at end of file