added ad5303 driver
This commit is contained in:
81
app/drivers/ad5303/ad5303.c
Normal file
81
app/drivers/ad5303/ad5303.c
Normal file
@@ -0,0 +1,81 @@
|
||||
#include "ad5303.h"
|
||||
|
||||
void ad5303_init(ad5303_handle_t *hdac, SPI_HandleTypeDef *hspi, cs_handle_t *hcs, ad5303_res_t res)
|
||||
{
|
||||
hdac->hspi = hspi;
|
||||
hdac->hcs = hcs;
|
||||
hdac->res = res;
|
||||
|
||||
ad5303_gain(hdac, AD_GAIN_X1);
|
||||
ad5303_mode(hdac, AD_NORAMAL);
|
||||
ad5303_set_value(hdac, 0, AD_DAC1);
|
||||
ad5303_set_value(hdac, 0, AD_DAC2);
|
||||
}
|
||||
|
||||
void ad5303_set_value(ad5303_handle_t *hdac, uint16_t value, ad5303_dac_t dac)
|
||||
{
|
||||
uint16_t data;
|
||||
uint8_t data8;
|
||||
switch (dac)
|
||||
{
|
||||
case AD_DAC1:
|
||||
hdac->_regCtl &= ~(1 << 15);
|
||||
break;
|
||||
case AD_DAC2:
|
||||
hdac->_regCtl |= (1 << 15);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
data = hdac->_regCtl | (value << hdac->res);
|
||||
|
||||
hdac->hcs->cs_on(hdac->hcs);
|
||||
|
||||
data8 = (uint8_t)((data >> 8) & 0x00FF);
|
||||
HAL_SPI_Transmit(hdac->hspi, &data8, 1, HAL_MAX_DELAY);
|
||||
data8 = (uint8_t)(data & 0x00FF);
|
||||
HAL_SPI_Transmit(hdac->hspi, &data8, 1, HAL_MAX_DELAY);
|
||||
|
||||
hdac->hcs->cs_off(hdac->hcs);
|
||||
}
|
||||
|
||||
void ad5303_mode(ad5303_handle_t *hdac, ad5303_mode_t mode)
|
||||
{
|
||||
switch (mode)
|
||||
{
|
||||
case AD_NORAMAL:
|
||||
hdac->_regCtl &= ~(11 << 12);
|
||||
break;
|
||||
case AD_LOWZ:
|
||||
hdac->_regCtl |= (1 << 12);
|
||||
hdac->_regCtl &= ~(1 << 13);
|
||||
break;
|
||||
case AD_HIGHZ:
|
||||
hdac->_regCtl &= ~(1 << 12);
|
||||
hdac->_regCtl |= (1 << 13);
|
||||
break;
|
||||
case AD_OFF:
|
||||
hdac->_regCtl |= (11 << 12);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ad5303_gain(ad5303_handle_t *hdac, ad5303_gain_t gain)
|
||||
{
|
||||
switch (gain)
|
||||
{
|
||||
case AD_GAIN_X1:
|
||||
hdac->_regCtl &= ~(1 << 14);
|
||||
break;
|
||||
case AD_GAIN_X2:
|
||||
hdac->_regCtl |= (1 << 14);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
44
app/drivers/ad5303/ad5303.h
Normal file
44
app/drivers/ad5303/ad5303.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
#include "inttypes.h"
|
||||
#include "spi_cs_if.h"
|
||||
#include "spi.h"
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AD_8BIT = 4,
|
||||
AD_10BIT = 2,
|
||||
AD_12BIT = 0,
|
||||
} ad5303_res_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AD_DAC1,
|
||||
AD_DAC2,
|
||||
} ad5303_dac_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AD_GAIN_X1,
|
||||
AD_GAIN_X2,
|
||||
} ad5303_gain_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
AD_NORAMAL,
|
||||
AD_LOWZ,
|
||||
AD_HIGHZ,
|
||||
AD_OFF
|
||||
} ad5303_mode_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16_t _regCtl;
|
||||
SPI_HandleTypeDef *hspi;
|
||||
cs_handle_t *hcs;
|
||||
ad5303_res_t res;
|
||||
} ad5303_handle_t;
|
||||
|
||||
void ad5303_init(ad5303_handle_t *hdac, SPI_HandleTypeDef *hspi, cs_handle_t *hcs, ad5303_res_t res);
|
||||
void ad5303_set_value(ad5303_handle_t *hdac, uint16_t value, ad5303_dac_t dac);
|
||||
void ad5303_mode(ad5303_handle_t *hdac, ad5303_mode_t mode);
|
||||
void ad5303_gain(ad5303_handle_t *hdac, ad5303_gain_t gain);
|
||||
Reference in New Issue
Block a user