/*
 * AD5318.c
 *
 *  Created on: 2019. 7. 30.
 *      Author: parkyj
 */
 #include "ad5318.h"

extern void Pol_Delay_us(volatile uint32_t microseconds);
 void AD5318_Initialize(void){
    HAL_Delay(1);
    /* * * *DAC Setting* * * * */
    AD5318_Ctrl(0x800C);
    HAL_Delay(1);
    AD5318_Ctrl(0xA000);
    HAL_Delay(1);    
    /* * * *DAC OPERATE* * * * */
#if 0 // PYJ.2019.10.21_BEGIN -- 
    AD5318_Ctrl(0x0000);
    AD5318_Ctrl(0x1000);
    AD5318_Ctrl(0x2000);
    AD5318_Ctrl(0x3000);
    AD5318_Ctrl(0x4000);
    AD5318_Ctrl(0x5000);
    AD5318_Ctrl(0x6000);
    AD5318_Ctrl(0x7000);
    HAL_Delay(1);
#endif // PYJ.2019.10.21_END -- 
 }
void AD5318_Ctrl(uint16_t ShiftTarget) {
    char i; /* serial counter */
//    printf("ShiftTarget : %x \r\n",ShiftTarget);
#if 0 // PYJ.2019.11.14_BEGIN -- 
    if(ShiftTarget & 0x1000){
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
        for (i=0;i < 16;i++) { /* loop through all 16 data bits */
          HAL_GPIO_WritePin(DA_SCLK_GPIO_Port, DA_SCLK_Pin, GPIO_PIN_SET); /* rise clk line again */
          Pol_Delay_us(10);
          if (ShiftTarget & 0x8000) HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_SET);
          else HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_RESET); /* set data bit */
          Pol_Delay_us(10);
          HAL_GPIO_WritePin(DA_SCLK_GPIO_Port, DA_SCLK_Pin, GPIO_PIN_RESET); /* lower clock line */
          ShiftTarget <<= 1;
          Pol_Delay_us(10);
        }
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_SET);        
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_RESET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_SET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_RESET);
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_SET);            
        Pol_Delay_us(10);
        /* rise DAC SYNC line again */
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_RESET);            
        Pol_Delay_us(10);
    }
    else{
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
        for (i=0;i < 16;i++) { /* loop through all 16 data bits */
            HAL_GPIO_WritePin(DA_SCLK_GPIO_Port, DA_SCLK_Pin, GPIO_PIN_SET); /* rise clk line again */
            Pol_Delay_us(10);
            if (ShiftTarget & 0x8000) HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_SET);
            else HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_RESET); /* set data bit */
            Pol_Delay_us(10);
            HAL_GPIO_WritePin(DA_SCLK_GPIO_Port, DA_SCLK_Pin, GPIO_PIN_RESET); /* lower clock line */
            ShiftTarget <<= 1;
            Pol_Delay_us(10);
        }
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_SET);        
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_RESET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_SET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_RESET);
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_SET);            
        Pol_Delay_us(10);
        /* rise DAC SYNC line again */
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_RESET);            
        Pol_Delay_us(10);
      }
#else
    HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_SET); 
    if(ShiftTarget & 0x1000){
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
        for (i=0;i < 16;i++) { /* loop through all 16 data bits */
            if(i <= 2)
                HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_SET);    
            else
                HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
            
          HAL_GPIO_WritePin(DA_SCLK_GPIO_Port, DA_SCLK_Pin, GPIO_PIN_SET); /* rise clk line again */
          Pol_Delay_us(10);
          if (ShiftTarget & 0x8000) HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_SET);
          else HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_RESET); /* set data bit */
          Pol_Delay_us(10);
          HAL_GPIO_WritePin(DA_SCLK_GPIO_Port, DA_SCLK_Pin, GPIO_PIN_RESET); /* lower clock line */
          ShiftTarget <<= 1;
          Pol_Delay_us(10);
        }
       
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_RESET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_SET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_DIN_GPIO_Port, DA_DIN_Pin, GPIO_PIN_RESET);
        Pol_Delay_us(10);
        /* rise DAC SYNC line again */
        HAL_GPIO_WritePin(DA_SYNC_GPIO_Port, DA_SYNC_Pin, GPIO_PIN_RESET);    
        Pol_Delay_us(10);
        HAL_GPIO_WritePin(DA_LDAC_GPIO_Port, DA_LDAC_Pin, GPIO_PIN_SET);            
        Pol_Delay_us(10);
#endif // PYJ.2019.11.14_END -- 


    }
}


