Subversion Repositories ScreenTimer

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f0xx_ll_dac.c
  4.   * @author  MCD Application Team
  5.   * @brief   DAC LL module driver
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */
  19. #if defined(USE_FULL_LL_DRIVER)
  20.  
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "stm32f0xx_ll_dac.h"
  23. #include "stm32f0xx_ll_bus.h"
  24.  
  25. #ifdef USE_FULL_ASSERT
  26.   #include "stm32_assert.h"
  27. #else
  28.   #define assert_param(expr) ((void)0U)
  29. #endif
  30.  
  31. /** @addtogroup STM32F0xx_LL_Driver
  32.   * @{
  33.   */
  34.  
  35. #if defined (DAC1)
  36.  
  37. /** @addtogroup DAC_LL DAC
  38.   * @{
  39.   */
  40.  
  41. /* Private types -------------------------------------------------------------*/
  42. /* Private variables ---------------------------------------------------------*/
  43. /* Private constants ---------------------------------------------------------*/
  44. /* Private macros ------------------------------------------------------------*/
  45.  
  46. /** @addtogroup DAC_LL_Private_Macros
  47.   * @{
  48.   */
  49.  
  50. #if defined(DAC_CHANNEL2_SUPPORT)
  51. #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                           \
  52.   (                                                                            \
  53.       ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                  \
  54.    || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2)                                  \
  55.   )
  56. #else
  57. #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                           \
  58.   (                                                                            \
  59.    ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                     \
  60.   )
  61. #endif /* DAC_CHANNEL2_SUPPORT */
  62.  
  63. #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__)                           \
  64.   (   ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                           \
  65.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                      \
  66.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO)                      \
  67.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                      \
  68.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                      \
  69.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                      \
  70.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO)                     \
  71.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9)                     \
  72.   )
  73.  
  74. #if defined(DAC_CR_WAVE1)
  75. #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__)           \
  76.   (   ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE)     \
  77.    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE)    \
  78.    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
  79.   )
  80.  
  81. #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_CONFIG__)      \
  82.   (   ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0)     \
  83.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0)  \
  84.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0)  \
  85.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0)  \
  86.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0)  \
  87.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0)  \
  88.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0)  \
  89.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0)  \
  90.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0)  \
  91.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0)  \
  92.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \
  93.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0) \
  94.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1)       \
  95.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3)       \
  96.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7)       \
  97.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15)      \
  98.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31)      \
  99.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63)      \
  100.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127)     \
  101.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255)     \
  102.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511)     \
  103.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023)    \
  104.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047)    \
  105.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)    \
  106.   )
  107. #endif
  108.  
  109. #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__)                             \
  110.   (   ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE)                     \
  111.    || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE)                    \
  112.   )
  113.  
  114. /**
  115.   * @}
  116.   */
  117.  
  118.  
  119. /* Private function prototypes -----------------------------------------------*/
  120.  
  121. /* Exported functions --------------------------------------------------------*/
  122. /** @addtogroup DAC_LL_Exported_Functions
  123.   * @{
  124.   */
  125.  
  126. /** @addtogroup DAC_LL_EF_Init
  127.   * @{
  128.   */
  129.  
  130. /**
  131.   * @brief  De-initialize registers of the selected DAC instance
  132.   *         to their default reset values.
  133.   * @param  DACx DAC instance
  134.   * @retval An ErrorStatus enumeration value:
  135.   *          - SUCCESS: DAC registers are de-initialized
  136.   *          - ERROR: not applicable
  137.   */
  138. ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx)
  139. {
  140.   /* Check the parameters */
  141.   assert_param(IS_DAC_ALL_INSTANCE(DACx));
  142.  
  143.   /* Force reset of DAC clock */
  144.   LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1);
  145.  
  146.   /* Release reset of DAC clock */
  147.   LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1);
  148.  
  149.   return SUCCESS;
  150. }
  151.  
  152. /**
  153.   * @brief  Initialize some features of DAC instance.
  154.   * @note   The setting of these parameters by function @ref LL_DAC_Init()
  155.   *         is conditioned to DAC state:
  156.   *         DAC instance must be disabled.
  157.   * @param  DACx DAC instance
  158.   * @param  DAC_Channel This parameter can be one of the following values:
  159.   *         @arg @ref LL_DAC_CHANNEL_1
  160.   *         @arg @ref LL_DAC_CHANNEL_2 (1)
  161.   *        
  162.   *         (1) On this STM32 serie, parameter not available on all devices.
  163.   *             Refer to device datasheet for channels availability.
  164.   * @param  DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure
  165.   * @retval An ErrorStatus enumeration value:
  166.   *          - SUCCESS: DAC registers are initialized
  167.   *          - ERROR: DAC registers are not initialized
  168.   */
  169. ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct)
  170. {
  171.   ErrorStatus status = SUCCESS;
  172.  
  173.   /* Check the parameters */
  174.   assert_param(IS_DAC_ALL_INSTANCE(DACx));
  175.   assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel));
  176.   assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource));
  177.   assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
  178. #if defined(DAC_CR_WAVE1)
  179.   assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
  180.   if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
  181.   {
  182.     assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGenerationConfig));
  183.   }
  184. #endif
  185.  
  186.   /* Note: Hardware constraint (refer to description of this function)        */
  187.   /*       DAC instance must be disabled.                                     */
  188.   if(LL_DAC_IsEnabled(DACx, DAC_Channel) == 0U)
  189.   {
  190.     /* Configuration of DAC channel:                                          */
  191.     /*  - TriggerSource                                                       */
  192. #if defined(DAC_CR_WAVE1)
  193.     /*  - WaveAutoGeneration                                                  */
  194. #endif
  195.     /*  - OutputBuffer                                                        */
  196. #if defined(DAC_CR_WAVE1)
  197.     if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
  198.     {
  199.       MODIFY_REG(DACx->CR,
  200.                  (  DAC_CR_TSEL1
  201.                   | DAC_CR_WAVE1
  202.                   | DAC_CR_MAMP1
  203.                   | DAC_CR_BOFF1
  204.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  205.                 ,
  206.                  (  DAC_InitStruct->TriggerSource
  207.                   | DAC_InitStruct->WaveAutoGeneration
  208.                   | DAC_InitStruct->WaveAutoGenerationConfig
  209.                   | DAC_InitStruct->OutputBuffer
  210.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  211.                 );
  212.     }
  213.     else
  214.     {
  215.       MODIFY_REG(DACx->CR,
  216.                  (  DAC_CR_TSEL1
  217.                   | DAC_CR_WAVE1
  218.                   | DAC_CR_BOFF1
  219.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  220.                 ,
  221.                  (  DAC_InitStruct->TriggerSource
  222.                   | LL_DAC_WAVE_AUTO_GENERATION_NONE
  223.                   | DAC_InitStruct->OutputBuffer
  224.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  225.                 );
  226.     }
  227. #endif
  228.   }
  229.   else
  230.   {
  231.     /* Initialization error: DAC instance is not disabled.                    */
  232.     status = ERROR;
  233.   }
  234.   return status;
  235. }
  236.  
  237. /**
  238.   * @brief Set each @ref LL_DAC_InitTypeDef field to default value.
  239.   * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure
  240.   *                       whose fields will be set to default values.
  241.   * @retval None
  242.   */
  243. void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
  244. {
  245.   /* Set DAC_InitStruct fields to default values */
  246.   DAC_InitStruct->TriggerSource            = LL_DAC_TRIG_SOFTWARE;
  247. #if defined(DAC_CR_WAVE1)
  248.   DAC_InitStruct->WaveAutoGeneration       = LL_DAC_WAVE_AUTO_GENERATION_NONE;
  249.   /* Note: Parameter discarded if wave auto generation is disabled,           */
  250.   /*       set anyway to its default value.                                   */
  251.   DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
  252. #endif
  253.   DAC_InitStruct->OutputBuffer             = LL_DAC_OUTPUT_BUFFER_ENABLE;
  254. }
  255.  
  256. /**
  257.   * @}
  258.   */
  259.  
  260. /**
  261.   * @}
  262.   */
  263.  
  264. /**
  265.   * @}
  266.   */
  267.  
  268. #endif /* DAC1 */
  269.  
  270. /**
  271.   * @}
  272.   */
  273.  
  274. #endif /* USE_FULL_LL_DRIVER */
  275.  
  276. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  277.