stm32:dac: new api for waveform characteristics
Old API required users to manually construct bit maps frm opaquely named defines, with little help. It also was a pure OR operation, with no way to ever clear bits. Signed-off-by: Karl Palsson <karlp@tweak.net.au>
This commit is contained in:
parent
da9db7f1f5
commit
8295d248e0
|
@ -100,7 +100,7 @@ specific memorymap.h header before including this header file.*/
|
|||
/** DMAEN2: DAC channel2 DMA enable */
|
||||
#define DAC_CR_DMAEN2 (1 << 28)
|
||||
|
||||
/** MAMP2[3:0]: DAC channel2 mask/amplitude selector */
|
||||
/** MAMP2[3:0]: DAC channel2 mask/amplitude selector field position */
|
||||
#define DAC_CR_MAMP2_SHIFT 24
|
||||
|
||||
/** WAVE2[1:0]: DAC channel2 noise/triangle wave generation enable */
|
||||
|
@ -118,8 +118,10 @@ specific memorymap.h header before including this header file.*/
|
|||
/** DMAEN1: DAC channel1 DMA enable */
|
||||
#define DAC_CR_DMAEN1 (1 << 12)
|
||||
|
||||
/** MAMP1[3:0]: DAC channel1 mask/amplitude selector */
|
||||
/** MAMP1[3:0]: DAC channel1 mask/amplitude selector field position */
|
||||
#define DAC_CR_MAMP1_SHIFT 8
|
||||
/** MAMP Mask/Amplitude selector field size */
|
||||
#define DAC_CR_MAMPx_MASK 0xf
|
||||
|
||||
/** WAVEn[1:0]: DAC channel1 noise/triangle wave generation enable */
|
||||
#define DAC_CR_WAVE1_SHIFT 6
|
||||
|
@ -257,7 +259,7 @@ void dac_trigger_disable(uint32_t dac, int channel);
|
|||
void dac_set_trigger_source(uint32_t dac, uint32_t source);
|
||||
void dac_set_waveform_generation(uint32_t dac, enum dac_wave wave);
|
||||
void dac_disable_waveform_generation(uint32_t dac, int channel);
|
||||
void dac_set_waveform_characteristics(uint32_t dac, uint8_t mamp);
|
||||
void dac_set_waveform_characteristics(uint32_t dac, int channel, int mamp);
|
||||
void dac_load_data_buffer_single(uint32_t dac, uint16_t data,
|
||||
enum dac_align align, int channel);
|
||||
void dac_load_data_buffer_dual(uint32_t dac, uint16_t data1, uint16_t data2,
|
||||
|
|
|
@ -347,12 +347,31 @@ become read-only.
|
|||
@note The DAC trigger must be enabled for this to work.
|
||||
|
||||
@param[in] dac the base address of the DAC. @ref dac_reg_base
|
||||
@param[in] mamp uint8_t. Taken from @ref dac_mamp2 or @ref dac_mamp1 or a
|
||||
logical OR of one of each of these to set both channels simultaneously.
|
||||
@param[in] channel one or both, select from @ref dac_channel_id
|
||||
@param[in] mamp amplitude of mixed waveform, bit width @ref DAC_CR_MAMPx_MASK
|
||||
*/
|
||||
void dac_set_waveform_characteristics(uint32_t dac, uint8_t mamp)
|
||||
void dac_set_waveform_characteristics(uint32_t dac, int channel, int mamp)
|
||||
{
|
||||
DAC_CR(dac) |= mamp;
|
||||
uint32_t reg = DAC_CR(dac);
|
||||
switch(channel) {
|
||||
case DAC_CHANNEL1:
|
||||
reg &= ~(DAC_CR_MAMPx_MASK << DAC_CR_MAMP1_SHIFT);
|
||||
reg |= mamp << DAC_CR_MAMP1_SHIFT;
|
||||
break;
|
||||
case DAC_CHANNEL2:
|
||||
reg &= ~(DAC_CR_MAMPx_MASK << DAC_CR_MAMP2_SHIFT);
|
||||
reg |= mamp << DAC_CR_MAMP2_SHIFT;
|
||||
break;
|
||||
case DAC_CHANNEL_BOTH:
|
||||
reg &= ~(DAC_CR_MAMPx_MASK << DAC_CR_MAMP1_SHIFT)
|
||||
| ~(DAC_CR_MAMPx_MASK << DAC_CR_MAMP2_SHIFT);
|
||||
reg |= mamp << DAC_CR_MAMP1_SHIFT;
|
||||
reg |= mamp << DAC_CR_MAMP2_SHIFT;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
DAC_CR(dac) = reg;
|
||||
}
|
||||
|
||||
/** @brief Load DAC Data Register.
|
||||
|
|
Loading…
Reference in New Issue