A fork of AR8000

Dependents:   Sumo_v2 Sumo_v2_Unstable Sumo_v2_RG13

AR8000.h

Committer:
BlazeX
Date:
2012-03-23
Revision:
0:b08668430838
Child:
1:a5bfae540999

File content as of revision 0:b08668430838:

//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();
};