git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7938 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
0b7c0f050c
commit
b2431579e4
|
@ -239,6 +239,12 @@ extern "C" {
|
||||||
void dacObjectInit(DACDriver *dacp);
|
void dacObjectInit(DACDriver *dacp);
|
||||||
void dacStart(DACDriver *dacp, const DACConfig *config);
|
void dacStart(DACDriver *dacp, const DACConfig *config);
|
||||||
void dacStop(DACDriver *dacp);
|
void dacStop(DACDriver *dacp);
|
||||||
|
void dacPutChannel(DACDriver *dacp,
|
||||||
|
dacchannel_t channel,
|
||||||
|
dacsample_t sample);
|
||||||
|
void dacPutChannelI(DACDriver *dacp,
|
||||||
|
dacchannel_t channel,
|
||||||
|
dacsample_t sample);
|
||||||
void dacStartConversion(DACDriver *dacp, const DACConversionGroup *grpp,
|
void dacStartConversion(DACDriver *dacp, const DACConversionGroup *grpp,
|
||||||
const dacsample_t *samples, size_t depth);
|
const dacsample_t *samples, size_t depth);
|
||||||
void dacStartConversionI(DACDriver *dacp, const DACConversionGroup *grpp,
|
void dacStartConversionI(DACDriver *dacp, const DACConversionGroup *grpp,
|
||||||
|
|
|
@ -81,7 +81,9 @@ DACDriver DACD4;
|
||||||
/* Driver local variables. */
|
/* Driver local variables. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
static const DACConfig default_config = {0};
|
static const DACConfig default_config = {
|
||||||
|
datamode: DAC_DHRM_12BIT_RIGHT
|
||||||
|
};
|
||||||
|
|
||||||
#if STM32_DAC_USE_DAC1_CH1 == TRUE
|
#if STM32_DAC_USE_DAC1_CH1 == TRUE
|
||||||
static const dacparams_t dma1_ch1_params = {
|
static const dacparams_t dma1_ch1_params = {
|
||||||
|
@ -310,6 +312,24 @@ void dac_lld_stop(DACDriver *dacp) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Outputs a value directly on a DAC channel.
|
||||||
|
*
|
||||||
|
* @param[in] dacp pointer to the @p DACDriver object
|
||||||
|
* @param[in] channel DAC channel number
|
||||||
|
* @param[in] sample value to be output
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
void dac_lld_put_channel(DACDriver *dacp,
|
||||||
|
dacchannel_t channel,
|
||||||
|
dacsample_t sample) {
|
||||||
|
|
||||||
|
(void)dacp;
|
||||||
|
(void)channel;
|
||||||
|
(void)sample;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Starts a DAC conversion.
|
* @brief Starts a DAC conversion.
|
||||||
* @details Starts an asynchronous conversion operation.
|
* @details Starts an asynchronous conversion operation.
|
||||||
|
@ -322,7 +342,7 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
||||||
uint32_t cr, dmamode;
|
uint32_t cr, dmamode;
|
||||||
|
|
||||||
#if STM32_DAC_DUAL_MODE == FALSE
|
#if STM32_DAC_DUAL_MODE == FALSE
|
||||||
switch (dacp->grpp->datamode) {
|
switch (dacp->config->datamode) {
|
||||||
/* Sets the DAC data register */
|
/* Sets the DAC data register */
|
||||||
case DAC_DHRM_12BIT_RIGHT:
|
case DAC_DHRM_12BIT_RIGHT:
|
||||||
dmaStreamSetPeripheral(dacp->params->dma, &dacp->params->dac->DHR12R1 +
|
dmaStreamSetPeripheral(dacp->params->dma, &dacp->params->dac->DHR12R1 +
|
||||||
|
|
|
@ -226,10 +226,24 @@
|
||||||
#define STM32_DMA_REQUIRED
|
#define STM32_DMA_REQUIRED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Max DAC channels.
|
||||||
|
*/
|
||||||
|
#if STM32_DAC_DUAL_MODE == FALSE
|
||||||
|
#define DAC_MAX_CHANNELS 1
|
||||||
|
#else
|
||||||
|
#define DAC_MAX_CHANNELS 2
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver data structures and types. */
|
/* Driver data structures and types. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Type of a DAC channel index.
|
||||||
|
*/
|
||||||
|
typedef uint32_t dacchannel_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief DAC channel parameters type.
|
* @brief DAC channel parameters type.
|
||||||
*/
|
*/
|
||||||
|
@ -336,10 +350,6 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
dacerrorcallback_t error_cb;
|
dacerrorcallback_t error_cb;
|
||||||
/* End of the mandatory fields.*/
|
/* End of the mandatory fields.*/
|
||||||
/**
|
|
||||||
* @brief DAC data holding register mode.
|
|
||||||
*/
|
|
||||||
dacdhrmode_t datamode;
|
|
||||||
/**
|
/**
|
||||||
* @brief DAC initialization data.
|
* @brief DAC initialization data.
|
||||||
* @note This field contains the (not shifted) value to be put into the
|
* @note This field contains the (not shifted) value to be put into the
|
||||||
|
@ -354,7 +364,10 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* End of the mandatory fields.*/
|
/* End of the mandatory fields.*/
|
||||||
uint32_t dummy;
|
/**
|
||||||
|
* @brief DAC data holding register mode.
|
||||||
|
*/
|
||||||
|
dacdhrmode_t datamode;
|
||||||
} DACConfig;
|
} DACConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -433,6 +446,9 @@ extern "C" {
|
||||||
void dac_lld_init(void);
|
void dac_lld_init(void);
|
||||||
void dac_lld_start(DACDriver *dacp);
|
void dac_lld_start(DACDriver *dacp);
|
||||||
void dac_lld_stop(DACDriver *dacp);
|
void dac_lld_stop(DACDriver *dacp);
|
||||||
|
void dac_lld_put_channel(DACDriver *dacp,
|
||||||
|
dacchannel_t channel,
|
||||||
|
dacsample_t sample);
|
||||||
void dac_lld_start_conversion(DACDriver *dacp);
|
void dac_lld_start_conversion(DACDriver *dacp);
|
||||||
void dac_lld_stop_conversion(DACDriver *dacp);
|
void dac_lld_stop_conversion(DACDriver *dacp);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -130,6 +130,40 @@ void dacStop(DACDriver *dacp) {
|
||||||
osalSysUnlock();
|
osalSysUnlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Outputs a value directly on a DAC channel.
|
||||||
|
*
|
||||||
|
* @param[in] dacp pointer to the @p DACDriver object
|
||||||
|
* @param[in] channel DAC channel number
|
||||||
|
* @param[in] sample value to be output
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
void dacPutChannel(DACDriver *dacp, dacchannel_t channel, dacsample_t sample) {
|
||||||
|
|
||||||
|
osalSysLock();
|
||||||
|
dacPutChannelI(dacp, channel, sample);
|
||||||
|
osalSysUnlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Outputs a value directly on a DAC channel.
|
||||||
|
*
|
||||||
|
* @param[in] dacp pointer to the @p DACDriver object
|
||||||
|
* @param[in] channel DAC channel number
|
||||||
|
* @param[in] sample value to be output
|
||||||
|
*
|
||||||
|
* @iclass
|
||||||
|
*/
|
||||||
|
void dacPutChannelI(DACDriver *dacp, dacchannel_t channel, dacsample_t sample) {
|
||||||
|
|
||||||
|
osalDbgCheckClassI();
|
||||||
|
osalDbgCheck(channel < DAC_MAX_CHANNELS);
|
||||||
|
osalDbgAssert(dacp->state == DAC_READY, "invalid state");
|
||||||
|
|
||||||
|
dac_lld_put_channel(dacp, channel, sample);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Starts a DAC conversion.
|
* @brief Starts a DAC conversion.
|
||||||
* @details Starts an asynchronous conversion operation.
|
* @details Starts an asynchronous conversion operation.
|
||||||
|
|
|
@ -58,17 +58,22 @@ static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = {
|
||||||
/*
|
/*
|
||||||
* DAC streaming callback.
|
* DAC streaming callback.
|
||||||
*/
|
*/
|
||||||
size_t nx = 0, ny = 0;
|
size_t nx = 0, ny = 0, nz = 0;
|
||||||
static void end_cb1(DACDriver *dacp, const dacsample_t *buffer, size_t n) {
|
static void end_cb1(DACDriver *dacp, const dacsample_t *buffer, size_t n) {
|
||||||
|
|
||||||
(void)dacp;
|
(void)dacp;
|
||||||
|
|
||||||
|
nz++;
|
||||||
if (dac_buffer == buffer) {
|
if (dac_buffer == buffer) {
|
||||||
nx += n;
|
nx += n;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ny += n;
|
ny += n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((nz % 1000) == 0) {
|
||||||
|
palTogglePad(GPIOD, GPIOD_LED3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -82,14 +87,16 @@ static void error_cb1(DACDriver *dacp, dacerror_t err) {
|
||||||
chSysHalt("DAC failure");
|
chSysHalt("DAC failure");
|
||||||
}
|
}
|
||||||
|
|
||||||
static const DACConversionGroup daccfg1 = {
|
static const DACConfig dac1cfg1 = {
|
||||||
num_channels: 1,
|
datamode: DAC_DHRM_12BIT_RIGHT
|
||||||
end_cb: end_cb1,
|
|
||||||
error_cb: error_cb1,
|
|
||||||
datamode: DAC_DHRM_12BIT_RIGHT,
|
|
||||||
trigger: DAC_TRG(0)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const DACConversionGroup dacgrpcfg1 = {
|
||||||
|
num_channels: 1U,
|
||||||
|
end_cb: end_cb1,
|
||||||
|
error_cb: error_cb1,
|
||||||
|
trigger: DAC_TRG(0)
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT2 configuration.
|
* GPT2 configuration.
|
||||||
|
@ -121,7 +128,7 @@ int main(void) {
|
||||||
* by the Reference Manual.
|
* by the Reference Manual.
|
||||||
*/
|
*/
|
||||||
palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
|
palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
|
||||||
dacStart(&DACD1, NULL);
|
dacStart(&DACD1, &dac1cfg1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Starting GPT6 driver, it is used for triggering the DAC.
|
* Starting GPT6 driver, it is used for triggering the DAC.
|
||||||
|
@ -131,7 +138,7 @@ int main(void) {
|
||||||
/*
|
/*
|
||||||
* Starting a continuous conversion.
|
* Starting a continuous conversion.
|
||||||
*/
|
*/
|
||||||
dacStartConversion(&DACD1, &daccfg1, dac_buffer, DAC_BUFFER_SIZE);
|
dacStartConversion(&DACD1, &dacgrpcfg1, dac_buffer, DAC_BUFFER_SIZE);
|
||||||
gptStartContinuous(&GPTD6, 2U);
|
gptStartContinuous(&GPTD6, 2U);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue