123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- /**
- ******************************************************************************
- * @brief DAC functions of the firmware library.
- ******************************************************************************
- */
- /* Includes ------------------------------------------------------------------*/
- #include "gd32f10x_dac.h"
- #include "gd32f10x_rcc.h"
- /** @addtogroup GD32F10x_Firmware
- * @{
- */
- /** @defgroup DAC
- * @brief DAC driver modules
- * @{
- */
- /** @defgroup DAC_Private_Defines
- * @{
- */
- /* CTLR register bits mask */
- #define CTLR_BITS_CLEAR ((uint32_t)0x00000FFE)
- /* DAC Dual Channels SWTRIG masks */
- #define DUAL_SWTRIG_SET ((uint32_t)0x00000003)
- /* DHR registers offsets */
- #define DHR12R1_OFFSET ((uint32_t)0x00000008)
- #define DHR12R2_OFFSET ((uint32_t)0x00000014)
- #define DHR12RD_OFFSET ((uint32_t)0x00000020)
- /* DOR register offset */
- #define DOR_OFFSET ((uint32_t)0x0000002C)
- /**
- * @}
- */
- /** @defgroup DAC_Private_Functions
- * @{
- */
- /**
- * @brief Deinitialize the DAC peripheral registers.
- * @param DAC_InitParaStruct: DAC_InitPara structure that contains the
- * configuration information for the selected DAC channel.
- * @retval None
- */
- void DAC_DeInit(DAC_InitPara *DAC_InitParaStruct)
- {
- /* Enable DAC reset state */
- RCC_APB1PeriphReset_Enable(RCC_APB1PERIPH_DACRST, ENABLE);
- /* Release DAC from reset state */
- RCC_APB1PeriphReset_Enable(RCC_APB1PERIPH_DACRST, DISABLE);
- /* Initialize the DAC_Trigger */
- DAC_InitParaStruct->DAC_Trigger = DAC_TRIGGER_NONE;
- /* Initialize the DAC_WaveGeneration */
- DAC_InitParaStruct->DAC_WaveType = DAC_WAVEGENE_NONE;
- /* Initialize the DAC_LFSRUnmask_TriangleAmplitude */
- DAC_InitParaStruct->DAC_LFSRNoise_AmplitudeTriangle = DAC_LFSR_BIT0;
- /* Initialize the DAC_OutputBuffer */
- DAC_InitParaStruct->DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
- }
- /**
- * @brief Initialize the DAC peripheral.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: select DAC Channel1
- * @arg DAC_Channel_2: select DAC Channel2
- * @param DAC_InitStruct: DAC_InitTypeDef structure .
- * @retval None
- */
- void DAC_Init(uint32_t DAC_Channel, DAC_InitPara *DAC_InitParaStruct)
- {
- uint32_t temp1 = 0, temp2 = 0;
- /* DAC CTLR Configuration */
- /* Get the DAC CTLR value */
- temp1 = DAC->CTLR;
- /* Clear BOFF, TEN, TSEL, WAVE and MAMP bits */
- temp1 &= ~(CTLR_BITS_CLEAR << DAC_Channel);
- /* Configure for the DAC channel: buffer output, trigger, wave generation,
- mask/amplitude for wave generation */
- /* Set TSEL and TEN bits according to DAC_Trigger */
- /* Set WAVE bits according to DAC_WaveType */
- /* Set MAMP bits according to DAC_LFSRNoise_AmplitudeTriangle */
- /* Set BOFF bit according to DAC_OutputBuffer */
- temp2 = (DAC_InitParaStruct->DAC_Trigger | DAC_InitParaStruct->DAC_OutputBuffer |
- DAC_InitParaStruct->DAC_WaveType | DAC_InitParaStruct->DAC_LFSRNoise_AmplitudeTriangle);
- /* Calculate CTLR register value */
- temp1 |= temp2 << DAC_Channel;
- /* Write to DAC CTLR */
- DAC->CTLR = temp1;
- }
- /**
- * @brief Enable or disable the DAC channel.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: select DAC Channel1.
- * @arg DAC_Channel_2: select DAC Channel2.
- * @param NewValue: New value of the DAC channel.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void DAC_Enable(uint32_t DAC_Channel, TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable the selected DAC channel */
- DAC->CTLR |= (DAC_CTLR_DEN1 << DAC_Channel) ;
- } else {
- /* Disable the selected DAC channel */
- DAC->CTLR &= ~(DAC_CTLR_DEN1 << DAC_Channel);
- }
- }
- /**
- * @brief Enable or disable the selected DAC channel software trigger.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: select DAC Channel1
- * @arg DAC_Channel_2: select DAC Channel2
- * @param NewValue: New value of the selected DAC channel software trigger.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void DAC_SoftwareTrigger_Enable(uint32_t DAC_Channel, TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable software trigger for DAC channel1 */
- DAC->SWTR |= (uint32_t)DAC_SWTR_SWTR1 << (DAC_Channel >> 4);
- } else {
- /* Disable software trigger for DAC channel1 */
- DAC->SWTR &= ~((uint32_t)DAC_SWTR_SWTR1 << (DAC_Channel >> 4));
- }
- }
- /**
- * @brief Enable or disable simultaneously the two DAC channels software
- * triggers.
- * @param NewValue: new value of the DAC channels software triggers.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void DAC_DualSoftwareTrigger_Enable(TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable software trigger */
- DAC->SWTR |= DUAL_SWTRIG_SET ;
- } else {
- /* Disable software trigger */
- DAC->SWTR &= ~DUAL_SWTRIG_SET;
- }
- }
- /**
- * @brief Enable or disable the selected DAC channel wave generation.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: select DAC Channel1
- * @arg DAC_Channel_2: select DAC Channel2
- * @param DAC_Wave: the wave type to enable or disable.
- * This parameter can be one of the following values:
- * @arg DAC_WAVE_NOISE: noise wave generation
- * @arg DAC_WAVE_TRIANGLE: triangle wave generation
- * @param NewValue: new value of the selected DAC channel wave generation.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void DAC_WaveGeneration_Enable(uint32_t DAC_Channel, uint32_t DAC_Wave, TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable the selected DAC channel wave generation */
- DAC->CTLR |= DAC_Wave << DAC_Channel;
- } else {
- /* Disable the selected DAC channel wave generation */
- DAC->CTLR &= ~(DAC_Wave << DAC_Channel);
- }
- }
- /**
- * @brief Set the specified data holding register value for DAC channel1.
- * @param DAC_Align: the data alignment for DAC channel1.
- * This parameter can be one of the following values:
- * @arg DAC_ALIGN_8B_R: select 8bit right data alignment
- * @arg DAC_ALIGN_12B_L: select 12bit left data alignment
- * @arg DAC_ALIGN_12B_R: select 12bit right data alignment
- * @param Data: Data to be loaded.
- * @retval None
- */
- void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data)
- {
- __IO uint32_t temp = 0;
- temp = (uint32_t)DAC_BASE;
- temp += DHR12R1_OFFSET + DAC_Align;
- /* Set the DAC channel1 */
- *(__IO uint32_t *) temp = Data;
- }
- /**
- * @brief Set the specified data holding register value for DAC channel2.
- * @param DAC_Align: the data alignment for DAC channel2.
- * This parameter can be one of the following values:
- * @arg DAC_ALIGN_8B_R: select 8bit right data alignment
- * @arg DAC_ALIGN_12B_L: select 12bit left data alignment
- * @arg DAC_ALIGN_12B_R: select 12bit right data alignment
- * @param Data: Data to be loaded.
- * @retval None
- */
- void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data)
- {
- __IO uint32_t temp = 0;
- temp = (uint32_t)DAC_BASE;
- temp += DHR12R2_OFFSET + DAC_Align;
- /* Set the DAC channel2 */
- *(__IO uint32_t *) temp = Data;
- }
- /**
- * @brief Set the specified data for dual channel
- * @param DAC_Align: the data alignment for dual channel DAC.
- * This parameter can be one of the following values:
- * @arg DAC_Align_8b_R: select 8bit right data alignment
- * @arg DAC_Align_12b_L: select 12bit left data alignment
- * @arg DAC_Align_12b_R: select 12bit right data alignment
- * @param Data2: Data for DAC Channel2.
- * @param Data1: Data for DAC Channel1.
- * @retval None
- */
- void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1)
- {
- uint32_t data = 0, temp = 0;
- /* set dual DAC data holding register value */
- if (DAC_Align == DAC_ALIGN_8B_R) {
- data = ((uint32_t)Data2 << 8) | Data1;
- } else {
- data = ((uint32_t)Data2 << 16) | Data1;
- }
- temp = (uint32_t)DAC_BASE;
- temp += DHR12RD_OFFSET + DAC_Align;
- /* Set the dual DAC selected data holding register */
- *(__IO uint32_t *)temp = data;
- }
- /**
- * @brief Return the last data output value.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: select DAC Channel1
- * @arg DAC_Channel_2: select DAC Channel2
- * @retval The DAC channel1 data output value.
- */
- uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel)
- {
- __IO uint32_t temp = 0;
- temp = (uint32_t) DAC_BASE;
- temp += DOR_OFFSET + ((uint32_t)DAC_Channel >> 2);
- /* Returns the DAC channel data */
- return (uint16_t)(*(__IO uint32_t *) temp);
- }
- /**
- * @brief Enable or disable DMA request.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: select DAC Channel1
- * @arg DAC_Channel_2: select DAC Channel2
- * @param NewValue: New value of the selected DAC channel DMA request.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void DAC_DMA_Enable(uint32_t DAC_Channel, TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable DMA request */
- DAC->CTLR |= (DAC_CTLR_DDMAEN1 << DAC_Channel);
- } else {
- /* Disable DMA request */
- DAC->CTLR &= ~(DAC_CTLR_DDMAEN1 << DAC_Channel);
- }
- }
- /**
- * @brief Enable or disable the specified DAC interrupts.
- * @param DAC_Channel: the selected DAC channel.
- * This parameter can be one of the following values:
- * @arg DAC_Channel_1: DAC Channel1 selected
- * @arg DAC_Channel_2: DAC Channel2 selected
- * @param NewValue: Alternative state of the specified DAC interrupts.
- * This parameter can be: ENABLE or DISABLE.
- * @retval None
- */
- void DAC_INTConfig(uint32_t DAC_Channel, TypeState NewValue)
- {
- if (NewValue != DISABLE) {
- /* Enable the DAC DMAUDR interrupts */
- DAC->CTLR |= (DAC_INT_DMAUDR << DAC_Channel);
- } else {
- /* Disable the DAC DMAUDR interrupts */
- DAC->CTLR &= (~(uint32_t)(DAC_INT_DMAUDR << DAC_Channel));
- }
- }
- /**
- * @}
- */
- /**
- * @}
- */
- /**
- * @}
- */
|