123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- ////////////////////////////////////////////////////////////////////////////////
- /// @file hal_dac.c
- /// @author AE TEAM
- /// @brief THIS FILE PROVIDES ALL THE DAC FIRMWARE FUNCTIONS.
- ////////////////////////////////////////////////////////////////////////////////
- /// @attention
- ///
- /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
- /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
- /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
- /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
- /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
- /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
- ///
- /// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
- ////////////////////////////////////////////////////////////////////////////////
- // Define to prevent recursive inclusion
- #define _HAL_DAC_C_
- // Files includes
- #include "hal_dac.h"
- #include "hal_rcc.h"
- ////////////////////////////////////////////////////////////////////////////////
- /// @addtogroup MM32_Hardware_Abstract_Layer
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @addtogroup DAC_HAL
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @addtogroup DAC_Exported_Functions
- /// @{
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Deinitializes the DAC peripheral registers to their default reset values.
- /// @param None.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_DeInit(void)
- {
- exRCC_APB1PeriphReset(RCC_APB1ENR_DAC);
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Initializes the DAC peripheral according to the specified parameters in the DAC_InitStruct.
- /// @param channel: the selected DAC channel.
- /// @param DAC_InitStruct: pointer to a DAC_InitTypeDef structure that contains the configuration information for the specified
- /// DAC channel.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_Init(emDACCH_TypeDef channel, DAC_InitTypeDef* init_struct)
- {
- DAC->CR &= ~((DAC_CR_BOFF1 | DAC_CR_TEN1 | DAC_CR_TSEL1 | DAC_CR_WAVE1 | DAC_CR_MAMP1) << channel);
- DAC->CR |= (((u32)(init_struct->DAC_Trigger) | (u32)(init_struct->DAC_WaveGeneration) |
- (u32)(init_struct->DAC_LFSRUnmask_TriangleAmplitude) | (u32)(init_struct->DAC_OutputBuffer))
- << channel);
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Fills each DAC_InitStruct member with its default value.
- /// @param DAC_InitStruct : pointer to a DAC_InitTypeDef structure which will be initialized.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_StructInit(DAC_InitTypeDef* init_struct)
- {
- init_struct->DAC_Trigger = DAC_Trigger_None;
- init_struct->DAC_WaveGeneration = DAC_WaveGeneration_None;
- init_struct->DAC_LFSRUnmask_TriangleAmplitude = DAC_TriangleAmplitude_1;
- init_struct->DAC_OutputBuffer = DAC_OutputBuffer_Enable;
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Enables or disables the specified DAC channel.
- /// @param channel: the selected DAC channel.
- /// @param state: new state of the DAC channel.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_Cmd(emDACCH_TypeDef channel, FunctionalState state)
- {
- (state) ? (DAC->CR |= DAC_CR_EN1 << channel) : (DAC->CR &= ~(DAC_CR_EN1 << channel));
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Enables or disables the specified DAC channel DMA request.
- /// @param channel: the selected DAC channel.
- /// @param state: new state of the selected DAC channel DMA request.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_DMACmd(emDACCH_TypeDef channel, FunctionalState state)
- {
- (state) ? (DAC->CR |= DAC_CR_DMAEN1 << channel) : (DAC->CR &= ~(DAC_CR_DMAEN1 << channel));
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Enables or disables the selected DAC channel software trigger.
- /// @param channel: the selected DAC channel.
- /// @param state: new state of the selected DAC channel software trigger.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_SoftwareTriggerCmd(emDACCH_TypeDef channel, FunctionalState state)
- {
- (state) ? (DAC->SWTRIGR |= (DAC_SWTRIGR_SWTRIG1 << (channel >> 4)))
- : (DAC->SWTRIGR &= ~(DAC_SWTRIGR_SWTRIG1 << (channel >> 4)));
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Enables or disables simultaneously the two DAC channels software triggers.
- /// @param state: new state of the DAC channels software triggers.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_DualSoftwareTriggerCmd(FunctionalState state)
- {
- (state) ? (DAC->SWTRIGR |= (DAC_SWTRIGR_SWTRIG1 | DAC_SWTRIGR_SWTRIG2))
- : (DAC->SWTRIGR &= ~(DAC_SWTRIGR_SWTRIG1 | DAC_SWTRIGR_SWTRIG2));
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Enables or disables the selected DAC channel wave generation.
- /// @param channel: the selected DAC channel.
- /// @param wave: Specifies the wave type to enable or disable.
- /// @param state: new state of the selected DAC channel wave generation.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_WaveGenerationCmd(emDACCH_TypeDef channel, emDACWAVE_TypeDef wave, FunctionalState state)
- {
- (state) ? (DAC->CR |= wave << channel) : (DAC->CR &= ~(wave << channel));
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Set the specified data holding register value for DAC channel1.
- /// @param alignement: Specifies the data alignement for DAC channel1.
- /// @param data : data to be loaded in the selected data holding register.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_SetChannel1Data(emDACALIGN_TypeDef alignement, u16 data)
- {
- *((u32*)(DAC_BASE + DHR12R1_Offset + alignement)) = data;
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Set the specified data holding register value for DAC channel2.
- /// @param alignement: Specifies the data alignement for DAC channel2.
- /// @param data : data to be loaded in the selected data holding
- /// register.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_SetChannel2Data(emDACALIGN_TypeDef alignement, u16 data)
- {
- *((u32*)(DAC_BASE + DHR12R2_Offset + alignement)) = data;
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Set the specified data holding register value for dual channel DAC.
- /// @param alignement: Specifies the data alignement for dual channel DAC.
- /// @param data2: data for DAC Channel2 to be loaded in the selected data holding register.
- /// @param data1: data for DAC Channel1 to be loaded in the selected data holding register.
- /// @retval None.
- ////////////////////////////////////////////////////////////////////////////////
- void DAC_SetDualChannelData(emDACALIGN_TypeDef alignement, u16 data2, u16 data1)
- {
- u32 data = ((alignement == DAC_Align_8b_R) ? ((data2 << 8) | data1) : ((data2 << 16) | data1));
- *((u32*)(DAC_BASE + DHR12RD_Offset + alignement)) = data;
- }
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief Returns the last data output value of the selected DAC cahnnel.
- /// @param channel: the selected DAC channel.
- /// @retval The selected DAC channel data output value.
- ////////////////////////////////////////////////////////////////////////////////
- u16 DAC_GetDataOutputValue(emDACCH_TypeDef channel)
- {
- return (*(vu32*)(DAC_BASE + DOR_Offset + (channel >> 2)));
- }
- /// @}
- /// @}
- /// @}
|