Subversion Repositories LedShow

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /**
  2.   ******************************************************************************
  3.   * @file    stm32f1xx_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</center></h2>
  10.   *
  11.   * Redistribution and use in source and binary forms, with or without modification,
  12.   * are permitted provided that the following conditions are met:
  13.   *   1. Redistributions of source code must retain the above copyright notice,
  14.   *      this list of conditions and the following disclaimer.
  15.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  16.   *      this list of conditions and the following disclaimer in the documentation
  17.   *      and/or other materials provided with the distribution.
  18.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  19.   *      may be used to endorse or promote products derived from this software
  20.   *      without specific prior written permission.
  21.   *
  22.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  23.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  25.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  26.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  28.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  29.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  30.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32.   *
  33.   ******************************************************************************
  34.   */
  35. #if defined(USE_FULL_LL_DRIVER)
  36.  
  37. /* Includes ------------------------------------------------------------------*/
  38. #include "stm32f1xx_ll_dac.h"
  39. #include "stm32f1xx_ll_bus.h"
  40.  
  41. #ifdef USE_FULL_ASSERT
  42.   #include "stm32_assert.h"
  43. #else
  44.   #define assert_param(expr) ((void)0U)
  45. #endif
  46.  
  47. /** @addtogroup STM32F1xx_LL_Driver
  48.   * @{
  49.   */
  50.  
  51. #if defined (DAC)
  52.  
  53. /** @addtogroup DAC_LL DAC
  54.   * @{
  55.   */
  56.  
  57. /* Private types -------------------------------------------------------------*/
  58. /* Private variables ---------------------------------------------------------*/
  59. /* Private constants ---------------------------------------------------------*/
  60. /* Private macros ------------------------------------------------------------*/
  61.  
  62. /** @addtogroup DAC_LL_Private_Macros
  63.   * @{
  64.   */
  65.  
  66. #define IS_LL_DAC_CHANNEL(__DACX__, __DAC_CHANNEL__)                           \
  67.   (                                                                            \
  68.       ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_1)                                  \
  69.    || ((__DAC_CHANNEL__) == LL_DAC_CHANNEL_2)                                  \
  70.   )
  71.  
  72. #define IS_LL_DAC_TRIGGER_SOURCE(__TRIGGER_SOURCE__)                           \
  73.   (   ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_SOFTWARE)                           \
  74.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM3_TRGO)                      \
  75.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM15_TRGO)                     \
  76.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM2_TRGO)                      \
  77.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM4_TRGO)                      \
  78.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM5_TRGO)                      \
  79.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM6_TRGO)                      \
  80.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM7_TRGO)                      \
  81.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_TIM8_TRGO)                      \
  82.    || ((__TRIGGER_SOURCE__) == LL_DAC_TRIG_EXT_EXTI_LINE9)                     \
  83.   )
  84. #define IS_LL_DAC_WAVE_AUTO_GENER_MODE(__WAVE_AUTO_GENERATION_MODE__)           \
  85.   (   ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NONE)     \
  86.    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_NOISE)    \
  87.    || ((__WAVE_AUTO_GENERATION_MODE__) == LL_DAC_WAVE_AUTO_GENERATION_TRIANGLE) \
  88.   )
  89.  
  90. #define IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(__WAVE_AUTO_GENERATION_CONFIG__)      \
  91.   (   ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BIT0)     \
  92.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS1_0)  \
  93.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS2_0)  \
  94.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS3_0)  \
  95.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS4_0)  \
  96.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS5_0)  \
  97.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS6_0)  \
  98.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS7_0)  \
  99.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS8_0)  \
  100.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS9_0)  \
  101.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS10_0) \
  102.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_NOISE_LFSR_UNMASK_BITS11_0) \
  103.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1)       \
  104.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_3)       \
  105.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_7)       \
  106.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_15)      \
  107.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_31)      \
  108.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_63)      \
  109.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_127)     \
  110.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_255)     \
  111.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_511)     \
  112.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_1023)    \
  113.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_2047)    \
  114.    || ((__WAVE_AUTO_GENERATION_CONFIG__) == LL_DAC_TRIANGLE_AMPLITUDE_4095)    \
  115.   )
  116.  
  117. #define IS_LL_DAC_OUTPUT_BUFFER(__OUTPUT_BUFFER__)                             \
  118.   (   ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_ENABLE)                     \
  119.    || ((__OUTPUT_BUFFER__) == LL_DAC_OUTPUT_BUFFER_DISABLE)                    \
  120.   )
  121.  
  122. /**
  123.   * @}
  124.   */
  125.  
  126.  
  127. /* Private function prototypes -----------------------------------------------*/
  128.  
  129. /* Exported functions --------------------------------------------------------*/
  130. /** @addtogroup DAC_LL_Exported_Functions
  131.   * @{
  132.   */
  133.  
  134. /** @addtogroup DAC_LL_EF_Init
  135.   * @{
  136.   */
  137.  
  138. /**
  139.   * @brief  De-initialize registers of the selected DAC instance
  140.   *         to their default reset values.
  141.   * @param  DACx DAC instance
  142.   * @retval An ErrorStatus enumeration value:
  143.   *          - SUCCESS: DAC registers are de-initialized
  144.   *          - ERROR: not applicable
  145.   */
  146. ErrorStatus LL_DAC_DeInit(DAC_TypeDef *DACx)
  147. {
  148.   /* Check the parameters */
  149.   assert_param(IS_DAC_ALL_INSTANCE(DACx));
  150.  
  151.   /* Force reset of DAC1 clock */
  152.   LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_DAC1);
  153.  
  154.   /* Release reset of DAC1 clock */
  155.   LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_DAC1);
  156.   return SUCCESS;
  157. }
  158.  
  159. /**
  160.   * @brief  Initialize some features of DAC instance.
  161.   * @note   The setting of these parameters by function @ref LL_DAC_Init()
  162.   *         is conditioned to DAC state:
  163.   *         DAC instance must be disabled.
  164.   * @param  DACx DAC instance
  165.   * @param  DAC_Channel This parameter can be one of the following values:
  166.   *         @arg @ref LL_DAC_CHANNEL_1
  167.   *         @arg @ref LL_DAC_CHANNEL_2
  168.   * @param  DAC_InitStruct Pointer to a @ref LL_DAC_InitTypeDef structure
  169.   * @retval An ErrorStatus enumeration value:
  170.   *          - SUCCESS: DAC registers are initialized
  171.   *          - ERROR: DAC registers are not initialized
  172.   */
  173. ErrorStatus LL_DAC_Init(DAC_TypeDef *DACx, uint32_t DAC_Channel, LL_DAC_InitTypeDef *DAC_InitStruct)
  174. {
  175.   ErrorStatus status = SUCCESS;
  176.  
  177.   /* Check the parameters */
  178.   assert_param(IS_DAC_ALL_INSTANCE(DACx));
  179.   assert_param(IS_LL_DAC_CHANNEL(DACx, DAC_Channel));
  180.   assert_param(IS_LL_DAC_TRIGGER_SOURCE(DAC_InitStruct->TriggerSource));
  181.   assert_param(IS_LL_DAC_OUTPUT_BUFFER(DAC_InitStruct->OutputBuffer));
  182.   assert_param(IS_LL_DAC_WAVE_AUTO_GENER_MODE(DAC_InitStruct->WaveAutoGeneration));
  183.   if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
  184.   {
  185.     assert_param(IS_LL_DAC_WAVE_AUTO_GENER_CONFIG(DAC_InitStruct->WaveAutoGenerationConfig));
  186.   }
  187.  
  188.   /* Note: Hardware constraint (refer to description of this function)        */
  189.   /*       DAC instance must be disabled.                                     */
  190.   if(LL_DAC_IsEnabled(DACx, DAC_Channel) == 0U)
  191.   {
  192.     /* Configuration of DAC channel:                                          */
  193.     /*  - TriggerSource                                                       */
  194.     /*  - WaveAutoGeneration                                                  */
  195.     /*  - OutputBuffer                                                        */
  196.     if (DAC_InitStruct->WaveAutoGeneration != LL_DAC_WAVE_AUTO_GENERATION_NONE)
  197.     {
  198.       MODIFY_REG(DACx->CR,
  199.                  (  DAC_CR_TSEL1
  200.                   | DAC_CR_WAVE1
  201.                   | DAC_CR_MAMP1
  202.                   | DAC_CR_BOFF1
  203.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  204.                 ,
  205.                  (  DAC_InitStruct->TriggerSource
  206.                   | DAC_InitStruct->WaveAutoGeneration
  207.                   | DAC_InitStruct->WaveAutoGenerationConfig
  208.                   | DAC_InitStruct->OutputBuffer
  209.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  210.                 );
  211.     }
  212.     else
  213.     {
  214.       MODIFY_REG(DACx->CR,
  215.                  (  DAC_CR_TSEL1
  216.                   | DAC_CR_WAVE1
  217.                   | DAC_CR_BOFF1
  218.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  219.                 ,
  220.                  (  DAC_InitStruct->TriggerSource
  221.                   | LL_DAC_WAVE_AUTO_GENERATION_NONE
  222.                   | DAC_InitStruct->OutputBuffer
  223.                  ) << (DAC_Channel & DAC_CR_CHX_BITOFFSET_MASK)
  224.                 );
  225.     }
  226.   }
  227.   else
  228.   {
  229.     /* Initialization error: DAC instance is not disabled.                    */
  230.     status = ERROR;
  231.   }
  232.   return status;
  233. }
  234.  
  235. /**
  236.   * @brief Set each @ref LL_DAC_InitTypeDef field to default value.
  237.   * @param DAC_InitStruct pointer to a @ref LL_DAC_InitTypeDef structure
  238.   *                       whose fields will be set to default values.
  239.   * @retval None
  240.   */
  241. void LL_DAC_StructInit(LL_DAC_InitTypeDef *DAC_InitStruct)
  242. {
  243.   /* Set DAC_InitStruct fields to default values */
  244.   DAC_InitStruct->TriggerSource            = LL_DAC_TRIG_SOFTWARE;
  245.   DAC_InitStruct->WaveAutoGeneration       = LL_DAC_WAVE_AUTO_GENERATION_NONE;
  246.   /* Note: Parameter discarded if wave auto generation is disabled,           */
  247.   /*       set anyway to its default value.                                   */
  248.   DAC_InitStruct->WaveAutoGenerationConfig = LL_DAC_NOISE_LFSR_UNMASK_BIT0;
  249.   DAC_InitStruct->OutputBuffer             = LL_DAC_OUTPUT_BUFFER_ENABLE;
  250. }
  251.  
  252. /**
  253.   * @}
  254.   */
  255.  
  256. /**
  257.   * @}
  258.   */
  259.  
  260. /**
  261.   * @}
  262.   */
  263.  
  264. #endif /* DAC */
  265.  
  266. /**
  267.   * @}
  268.   */
  269.  
  270. #endif /* USE_FULL_LL_DRIVER */
  271.  
  272. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  273.