//*****************************************************************************
//
//    LEDdriver.c - Knihovna pro ovladani laserove diody (prahovy a modulacni proud)
// 
//*****************************************************************************

#include <common.h>

#include <LEDdriver.h>
#include <DACdriver.h>

#define PORTD_PIN0 GPIO_PORTD_AHB_BASE + GPIO_O_DATA + (GPIO_PIN_0 << 2)        //Laser diode


//Inicializace pinu pro rizeni LD----------------------------------------------
void LEDInit()
{ 
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);                                // Konfigurace pinu pro rizeni LD
    SysCtlGPIOAHBEnable(SYSCTL_PERIPH_GPIOD);
    GPIOPinTypeGPIOOutput(GPIO_PORTD_AHB_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2); //Nastaveni vystupnich pinu (rizeni modulacniho a prahoveho proudu, pin pro vybijeni integr.kond.

    LEDPowerOff();                                                              //Pri inicializaci vypnut proud LD (prahovy i modulacni)
}

//Nastaveni velikosti proudu LD a sepnuti prahoveho proudu---------------------
void LEDSetBias(unsigned short value)                                           //parametr value je hodnota odesilana do D/A prevodniku
{
   DACSet(DAC_CHANNEL_A,value);                                                 // Odeslani hodnoty do D/A prevodniku na kanal 1 / otevreni tranzistoru ve vetvi s LD
   GPIOPinWrite(GPIO_PORTD_AHB_BASE, GPIO_PIN_1, 0);                            // Sepnuti prahoveho proudu laserovou diodou => pin1=0
   
   //tests
   //DACSet(DAC_CHANNEL_B,0x07ff);
}

//Vypnuti laserove diody (prahovy i modulacni proud)---------------------------
void LEDPowerOff()
{
  //GPIOPinWrite(GPIO_PORTD_AHB_BASE, GPIO_PIN_0 | GPIO_PIN_1, 0);              //Pro puvodni tranzistory / vypinani log.1
    GPIOPinWrite(GPIO_PORTD_AHB_BASE, GPIO_PIN_0 | GPIO_PIN_1, GPIO_PIN_0 | GPIO_PIN_1);    // Modulacni proud VYP  => pin0=1 
                                                                                // Prahovy proud VYP    => pin1=1
}

//Generovani pulzu Laserovou diodou--------------------------------------------
void LEDPulse(unsigned short time)
{
   
    HWREG(PORTD_PIN0) =  0;                                                     // Sepnuti proudu Laserovou diodou - modulacni proud ZAP => pin0=0
    
     SysCtlDelay(1);                                                            // Zpozdeni / The loop takes 3 cycles/loop.   
    //__no_operation();                                                         // 1 instruction cycle = 62.5 ns
    
    HWREG(PORTD_PIN0) = GPIO_PIN_0;                                             // Rozepnuti proudu Laserovou diodou - modulacni proud VYP => pin0=1
}
