Test

Dependencies:   mbed-dev-OS5_10_4

MySources/AdGlobals.cpp

Committer:
kevman
Date:
2020-08-07
Revision:
0:014fad4dfb9d

File content as of revision 0:014fad4dfb9d:

/*-------------------------------------------------------------------------------
Programm Name: AdGlobals.cpp
Version:       1.0
Sprache:       C++
Compiler:      mbed
Autor:         PS
Copyright:     PS
         

Funktion:      Globale Variablen für den A/D Wandlerzugriff

30.06.2017: 

-------------------------------------------------------------------------------*/
#include "Headers.h"


// I/O's für den A/D Wandler
DigitalOut AdcSck(PTC10);
DigitalIn AdcMiso(PTC11);
DigitalOut AdcMosi(PTB11);

InterruptIn AdcRdy0(PTB10);
InterruptIn AdcRdy1(PTC9);

DigitalOut Adc0Cs(PTB3);
DigitalOut Adc1Cs(PTC8);

DigitalIn AdcReset(PTB2);


// Globale Variablen
//-------------------------------------
uint8_t g_TempDelay;
uint8_t g_AReadTemp;
uint8_t g_nAdResultCount;


bool g_fAdConversion; 
bool g_fRdy0, g_fRdy1;


AD_VAL *AdVal;

UINT8 g_fARead[8];
uint8_t g_nAdSetPos, g_nAdGetPos;
int g_nAdCount;
UINT32 m_AdTemp[8];


/*-------------------------------------------------------------------------------
Schreibt die Inits auf beide AD Wandler
-------------------------------------------------------------------------------*/
void Ad7739CommonWrite(uint8_t b)
{
  uint8_t mask = 0x80;
  AdSckUp();
  Ad0CsDown();
  Ad1CsDown();
  short_delay(2);
  do
  {
      AdSckDown();
      short_delay(2);  // min. 50ns SCK low
      (b & mask) ? (AdMosiUp()) : (AdMosiDown());
      short_delay(2);  // min. 30ns bevor die Flanke hochgeht
       AdSckUp();
      short_delay(2);  // min. 50ns SCK high
  }
  while(mask >>= 1);
//  AdMosiUp();
  Ad0CsUp();
  Ad1CsUp();
}
/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
void Ad7739OutWrite(uint8_t b, int Wandler)
{
    uint8_t mask = 0x80;
    AdSckUp();
    if(Wandler == 0)
        Ad0CsDown();
    else
        Ad1CsDown();
    short_delay(2);  // min. 50ns SCK low
    do
    {
        AdSckDown();
        short_delay(2);  // min. 50ns SCK low
        (b & mask) ? (AdMosiUp()) : (AdMosiDown());
        short_delay(2);  // min. 30ns bevor die Flanke hochgeht
        AdSckUp();
        short_delay(2);  // min. 50ns SCK high
    }
    while(mask >>= 1);
    Ad0CsUp();
    Ad1CsUp();
    AdMosiDown();
}
/*-------------------------------------------------------------------------------
Startet einen einzelnen A/D Wandler. Wenn Mode = 0, dann single Mode, wenn Mode 
= 1, dann continous Mode. 
-------------------------------------------------------------------------------*/
void Ad7739Start(uint8_t Chn, uint8_t Wandler, uint8_t Mode)
{
    
    if(Mode == 0)   // Single Mode
    {
        Ad7739OutWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE, Chn)), Wandler);
        Ad7739OutWrite(0x42, Wandler);   // 0x26 ist continous mode
    }
    else // continuous
    {
        Ad7739OutWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE, Chn)), Wandler);
        Ad7739OutWrite(0x2E, Wandler);   // 0x26 ist continous mode0x08=Dump Mode, 0x04: Continous Read
        Ad7739OutWrite(0x48, Wandler);   // the first write of 48 start the continous read mode
//        g_nIRead = 0;
        AdMosiDown(); // muss unten sein, da sonst der Continous Mode gestoppt werden kann

    }
    __enable_irq();             // 2017-05-31

}
/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
void Ad7739CommonStart(uint8_t Chn, uint8_t Mode)
{
    if(Mode == 0)   // Single Mode
    {
        Ad7739CommonWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE,Chn)));
        Ad7739CommonWrite(0x42);   // 0x26 ist continous mode
    }
    else // continuous
    {
        Ad7739CommonWrite(AD7739_WRITE_OP(AD7739_CHANNEL(AD7739_ADDR_MODE, Chn)));
        Ad7739CommonWrite(0x2E);   // 0x26 ist continous mode
        Ad7739CommonWrite(0x48);   // 0x26 ist continous mode
    }
    
    g_fAdConversion = true;    // 2017-05-31
    __enable_irq();             // 2017-05-31

}

/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
void Ad7739Stop(void)
{
    // single
    /* return; */

    // continous
    Ad7739CommonWrite(AD7739_WRITE_OP(AD7739_ADDR_MODE));
    Ad7739CommonWrite(0x02);
    
    g_fAdConversion = false;    // 2017-05-31
    __enable_irq();             // 2017-05-31
}