Boen_Shi 8be2866433 feat(base): 初始化 MSPM0 开发环境
- 添加头文件和配置文件支持
- 更新.gitignore忽略编译和IDE相关文件
- 添加基础的bsp代码
2026-07-16 14:45:26 +08:00

1330 lines
44 KiB
C

/*
* Copyright (c) 2020, Texas Instruments Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*!****************************************************************************
* @file dl_dac12.h
* @brief 12-bit DAC Driver Library
* @defgroup DAC12 Digital to Analog Converter (DAC12)
*
* @anchor ti_dl_dl_dac12_Overview
* # Overview
*
* The Digital to Analog Converter Driver Library allows full configuration of
* the MSPM0 DAC12 module. The DAC module is a 12-bit voltage-output
* digital-to-analog converter (DAC).
*
* <hr>
******************************************************************************
*/
/** @addtogroup DAC12
* @{
*/
#ifndef ti_dl_dl_dac12__include
#define ti_dl_dl_dac12__include
#include <stdbool.h>
#include <stdint.h>
#include <ti/devices/msp/msp.h>
#include <ti/driverlib/dl_common.h>
#ifdef __MSPM0_HAS_DAC12__
#ifdef __cplusplus
extern "C" {
#endif
/* clang-format off */
/** @enum DL_DAC12_OUTPUT */
typedef enum {
/*! DAC output is disconnected from output pin */
DL_DAC12_OUTPUT_DISABLED = DAC12_CTL1_OPS_NOC0,
/*! DAC output is available on output pin */
DL_DAC12_OUTPUT_ENABLED = DAC12_CTL1_OPS_OUT0,
} DL_DAC12_OUTPUT;
/** @enum DL_DAC12_REPRESENTATION */
typedef enum {
/*! Binary representation */
DL_DAC12_REPRESENTATION_BINARY = DAC12_CTL0_DFM_BINARY,
/*! Two's complement representation */
DL_DAC12_REPRESENTATION_TWOS_COMPLEMENT = DAC12_CTL0_DFM_TWOS_COMP,
} DL_DAC12_REPRESENTATION;
/** @enum DL_DAC12_RESOLUTION */
typedef enum {
/*! 12-bit input resolution */
DL_DAC12_RESOLUTION_12BIT = DAC12_CTL0_RES__12BITS,
/*! 8-bit input resolution */
DL_DAC12_RESOLUTION_8BIT = DAC12_CTL0_RES__8BITS,
} DL_DAC12_RESOLUTION;
/** @enum DL_DAC12_AMP */
typedef enum {
/*! Output amplifier off with high impedance tristate output */
DL_DAC12_AMP_OFF_TRISTATE = DAC12_CTL1_AMPHIZ_HIZ,
/*! Output amplifier off with output pulled to ground */
DL_DAC12_AMP_OFF_0V = DAC12_CTL1_AMPHIZ_PULLDOWN,
/*! Output amplifier enabled */
DL_DAC12_AMP_ON = DAC12_CTL1_AMPEN_ENABLE,
} DL_DAC12_AMP;
/** @enum DL_DAC12_VREF_SOURCE */
typedef enum {
/*! Positive reference is VDDA, negative reference is VeREF- */
DL_DAC12_VREF_SOURCE_VDDA_VEREFN = (DAC12_CTL1_REFSP_VDDA |
DAC12_CTL1_REFSN_VEREFN) ,
/*! Positive reference is VeREF+, negative reference is VeREF- */
DL_DAC12_VREF_SOURCE_VEREFP_VEREFN = (DAC12_CTL1_REFSP_VEREFP |
DAC12_CTL1_REFSN_VEREFN),
/*! Positive reference is VDDA, negative reference is VSSA */
DL_DAC12_VREF_SOURCE_VDDA_VSSA = (DAC12_CTL1_REFSP_VDDA |
DAC12_CTL1_REFSN_VSSA),
/*! Positive reference is VeREF+, negative reference is VSSA */
DL_DAC12_VREF_SOURCE_VEREFP_VSSA = (DAC12_CTL1_REFSP_VEREFP |
DAC12_CTL1_REFSN_VSSA),
} DL_DAC12_VREF_SOURCE;
/** @enum DL_DAC12_SAMPLETIMER */
typedef enum {
/*! DAC sample timer generator is disabled */
DL_DAC12_SAMPLETIMER_DISABLE = DAC12_CTL3_STIMEN_CLR,
/*! DAC sample timer generator is enabled */
DL_DAC12_SAMPLETIMER_ENABLE = DAC12_CTL3_STIMEN_SET,
} DL_DAC12_SAMPLETIMER;
/** @enum DL_DAC12_SAMPLES_PER_SECOND */
typedef enum {
/*! Sample Time Trigger rate of 500 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_500 = DAC12_CTL3_STIMCONFIG__500SPS,
/*! Sample Time Trigger rate of 1,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_1K = DAC12_CTL3_STIMCONFIG__1KSPS,
/*! Sample Time Trigger rate of 2,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_2K = DAC12_CTL3_STIMCONFIG__2KSPS,
/*! Sample Time Trigger rate of 4,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_4K = DAC12_CTL3_STIMCONFIG__4KSPS,
/*! Sample Time Trigger rate of 8,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_8K = DAC12_CTL3_STIMCONFIG__8KSPS,
/*! Sample Time Trigger rate of 16,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_16K = DAC12_CTL3_STIMCONFIG__16KSPS,
/*! Sample Time Trigger rate of 100,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_100K = DAC12_CTL3_STIMCONFIG__100KSPS,
/*! Sample Time Trigger rate of 200,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_200K = DAC12_CTL3_STIMCONFIG__200KSPS,
/*! Sample Time Trigger rate of 500,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_500K = DAC12_CTL3_STIMCONFIG__500KSPS,
/*! Sample Time Trigger rate of 1,000,000 Samples Per Second */
DL_DAC12_SAMPLES_PER_SECOND_1M = DAC12_CTL3_STIMCONFIG__1MSPS,
} DL_DAC12_SAMPLES_PER_SECOND;
/** @enum DL_DAC12_FIFO */
typedef enum {
/*! DAC FIFO is disabled */
DL_DAC12_FIFO_DISABLED = DAC12_CTL2_FIFOEN_CLR,
/*! DAC FIFO is enabled */
DL_DAC12_FIFO_ENABLED = DAC12_CTL2_FIFOEN_SET,
} DL_DAC12_FIFO;
/** @enum DL_DAC12_FIFO_THRESHOLD */
typedef enum {
/*! DAC FIFO threshold for DMA Trigger Generation where 1/4th of location are empty */
DL_DAC12_FIFO_THRESHOLD_ONE_QTR_EMPTY = DAC12_CTL2_FIFOTH_LOW,
/*! DAC FIFO threshold for DMA Trigger Generation where 2/4th of locations are empty */
DL_DAC12_FIFO_THRESHOLD_TWO_QTRS_EMPTY = DAC12_CTL2_FIFOTH_MED,
/*! DAC FIFO threshold for DMA Trigger Generation where 3/4th of locations are empty */
DL_DAC12_FIFO_THRESHOLD_THREE_QTRS_EMPTY = DAC12_CTL2_FIFOTH_HIGH,
} DL_DAC12_FIFO_THRESHOLD;
/** @enum DL_DAC12_FIFO_TRIGGER */
typedef enum {
/*! DAC FIFO read trigger sourced from the sample time generator */
DL_DAC12_FIFO_TRIGGER_SAMPLETIMER = DAC12_CTL2_FIFOTRIGSEL_STIM,
/*! DAC FIFO read trigger sourced from the hardware trigger 0 event fabric */
DL_DAC12_FIFO_TRIGGER_HWTRIG0 = DAC12_CTL2_FIFOTRIGSEL_TRIG0,
} DL_DAC12_FIFO_TRIGGER;
/** @enum DL_DAC12_DMA_TRIGGER */
typedef enum {
/*! DMA trigger mechanism for DAC is disabled */
DL_DAC12_DMA_TRIGGER_DISABLED = DAC12_CTL2_DMATRIGEN_CLR,
/*! DMA trigger mechanism for DAC is enabled */
DL_DAC12_DMA_TRIGGER_ENABLED = DAC12_CTL2_DMATRIGEN_SET,
} DL_DAC12_DMA_TRIGGER;
/** @enum DL_DAC12_CALIBRATION */
typedef enum {
/*! Factory Trim */
DL_DAC12_CALIBRATION_FACTORY = DAC12_CALCTL_CALSEL_FACTORYTRIM,
/*! Self Trim (last calibration result) */
DL_DAC12_CALIBRATION_SELF = DAC12_CALCTL_CALSEL_SELFCALIBRATIONTRIM,
} DL_DAC12_CALIBRATION;
/** @addtogroup DL_DAC12_INTERRUPT
* @{
*/
/*!
* @brief Interrupt raised when the module ready event has occurred
*/
#define DL_DAC12_INTERRUPT_MODULE_READY (DAC12_GEN_EVENT_IMASK_MODRDYIFG_SET)
/*!
* @brief Interrupt raised when the FIFO is empty
*/
#define DL_DAC12_INTERRUPT_FIFO_EMPTY (DAC12_GEN_EVENT_IMASK_FIFOEMPTYIFG_SET)
/*!
* @brief Interrupt raised when the FIFO is 3/4th empty
*/
#define DL_DAC12_INTERRUPT_FIFO_THREE_QTRS_EMPTY (DAC12_GEN_EVENT_IMASK_FIFO3B4IFG_SET)
/*!
* @brief Interrupt raised when the FIFO is 2/4ths empty
*/
#define DL_DAC12_INTERRUPT_FIFO_TWO_QTRS_EMPTY (DAC12_GEN_EVENT_IMASK_FIFO1B2IFG_SET)
/*!
* @brief Interrupt raised when the FIFO is 1/4th empty
*/
#define DL_DAC12_INTERRUPT_FIFO_ONE_QTR_EMPTY (DAC12_GEN_EVENT_IMASK_FIFO1B4IFG_SET)
/*!
* @brief Interrupt raised when the FIFO is full
*/
#define DL_DAC12_INTERRUPT_FIFO_FULL (DAC12_GEN_EVENT_IMASK_FIFOFULLIFG_SET)
/*!
* @brief Interrupt raised when the FIFO is underrun
* (tried to read from an empty FIFO)
*/
#define DL_DAC12_INTERRUPT_FIFO_UNDERRUN (DAC12_GEN_EVENT_IMASK_FIFOURUNIFG_SET)
/*!
* @brief Interrupt raised as an Acknowledgement to the DMA completing a
* transfer
*
* During DMA operation only, once the DMA has performed its desired number
* of transfers to the FIFO, the DMA will assert a DMA done event. The DMA will
* also send a status, which is 0 if there is more data to send. If there is a
* nonzero status, and the DMA is done sending information, the DMATrigger will
* be disabled and this interrupt will be asserted.
*/
#define DL_DAC12_INTERRUPT_DMA_DONE (DAC12_GEN_EVENT_IMASK_DMADONEIFG_SET)
/** @}*/
/** @addtogroup DL_DAC12_EVENT
* @{
*/
/*!
* @brief Event raised when the module ready event has occurred
*/
#define DL_DAC12_EVENT_MODULE_READY (DAC12_GEN_EVENT_IMASK_MODRDYIFG_SET)
/*!
* @brief Event raised when the FIFO is empty
*/
#define DL_DAC12_EVENT_FIFO_EMPTY (DAC12_GEN_EVENT_IMASK_FIFOEMPTYIFG_SET)
/*!
* @brief Event raised when the FIFO is 3/4th empty
*/
#define DL_DAC12_EVENT_FIFO_THREE_QTRS_EMPTY (DAC12_GEN_EVENT_IMASK_FIFO3B4IFG_SET)
/*!
* @brief Event raised when the FIFO is 2/4ths empty
*/
#define DL_DAC12_EVENT_FIFO_TWO_QTRS_EMPTY (DAC12_GEN_EVENT_IMASK_FIFO1B2IFG_SET)
/*!
* @brief Event raised when the FIFO is 1/4th empty
*/
#define DL_DAC12_EVENT_FIFO_ONE_QTR_EMPTY (DAC12_GEN_EVENT_IMASK_FIFO1B4IFG_SET)
/*!
* @brief Event raised when the FIFO is full
*/
#define DL_DAC12_EVENT_FIFO_FULL (DAC12_GEN_EVENT_IMASK_FIFOFULLIFG_SET)
/*!
* @brief Event raised when the FIFO is underrun
* (tried to read from an empty FIFO)
*/
#define DL_DAC12_EVENT_FIFO_UNDERRUN (DAC12_GEN_EVENT_IMASK_FIFOURUNIFG_SET)
/*!
* @brief Event raised as an Acknowledgement to the DMA completing a
* transfer
*
* During DMA operation only, once the DMA has performed its desired number
* of transfers to the FIFO, the DMA will assert a DMA done event. The DMA will
* also send a status, which is 0 if there is more data to send. If there is a
* nonzero status, and the DMA is done sending information, the DMATrigger will
* be disabled and this interrupt will be asserted.
*/
#define DL_DAC12_EVENT_DMA_DONE (DAC12_GEN_EVENT_IMASK_DMADONEIFG_SET)
/** @}*/
/* clang-format on */
/*! @enum DL_DAC12_IIDX */
typedef enum {
/*! DAC interrupt index for no interrupt pending */
DL_DAC12_IIDX_NO_INT = DAC12_CPU_INT_IIDX_STAT_NO_INTR,
/*! DAC interrupt index when module is ready */
DL_DAC12_IIDX_MODULE_READY = DAC12_CPU_INT_IIDX_STAT_MODRDYIFG,
/*! DAC interrupt index when FIFO is full */
DL_DAC12_IIDX_FIFO_FULL = DAC12_CPU_INT_IIDX_STAT_FIFOFULLIFG,
/*! DAC interrupt index when FIFO is 1/4 empty */
DL_DAC12_IIDX_FIFO_1_4_EMPTY = DAC12_CPU_INT_IIDX_STAT_FIFO1B4IFG,
/*! DAC interrupt index when FIFO is 1/2 empty */
DL_DAC12_IIDX_FIFO_1_2_EMPTY = DAC12_CPU_INT_IIDX_STAT_FIFO1B2IFG,
/*! DAC interrupt index when FIFO is 3/4 empty */
DL_DAC12_IIDX_FIFO_3_4_EMPTY = DAC12_CPU_INT_IIDX_STAT_FIFO3B4IFG,
/*! DAC interrupt index when FIFO is empty */
DL_DAC12_IIDX_FIFO_EMPTY = DAC12_CPU_INT_IIDX_STAT_FIFOEMPTYIFG,
/*! DAC interrupt index if there is FIFO underrun */
DL_DAC12_IIDX_FIFO_UNDERRUN = DAC12_CPU_INT_IIDX_STAT_FIFOURUNIFG,
/*! DAC interrupt index for DMA transfer done */
DL_DAC12_IIDX_DMA_DONE = DAC12_CPU_INT_IIDX_STAT_DMADONEIFG
} DL_DAC12_IIDX;
/*! @enum DL_DAC12_SUBSCRIBER_INDEX */
typedef enum {
/*! DAC12 Subscriber index 0 */
DL_DAC12_SUBSCRIBER_INDEX_0 = 0,
} DL_DAC12_SUBSCRIBER_INDEX;
/*! @enum DL_DAC12_EVENT_ROUTE */
typedef enum {
/*! DAC12 event route 1 */
DL_DAC12_EVENT_ROUTE_1 = 0,
} DL_DAC12_EVENT_ROUTE;
/**
* @brief Configuration struct for @ref DL_DAC12_init
*/
typedef struct {
/*! Enables the DAC output on the device OUT pin. One of @ref DL_DAC12_OUTPUT */
DL_DAC12_OUTPUT outputEnable;
/*! The bit resolution. One of @ref DL_DAC12_RESOLUTION */
DL_DAC12_RESOLUTION resolution;
/*! The input data representation. One of @ref DL_DAC12_REPRESENTATION */
DL_DAC12_REPRESENTATION representation;
/*! The voltage reference. One of @ref DL_DAC12_VREF_SOURCE */
DL_DAC12_VREF_SOURCE voltageReferenceSource;
/*! Output amplifier setting. One of @ref DL_DAC12_AMP */
DL_DAC12_AMP amplifierSetting;
/*! The FIFO enable. One of @ref DL_DAC12_FIFO */
DL_DAC12_FIFO fifoEnable;
/*! The Read Fifo Trigger source. One of @ref DL_DAC12_FIFO_TRIGGER */
DL_DAC12_FIFO_TRIGGER fifoTriggerSource;
/*! The bit to enable a DMA trigger source to use the DMA instead of
* the CPU to input data.
* One of @ref DL_DAC12_DMA_TRIGGER
*/
DL_DAC12_DMA_TRIGGER dmaTriggerEnable;
/*! The FIFO Threshold at which the DMA Trigger is asserted.
* One of @ref DL_DAC12_FIFO_THRESHOLD
*/
DL_DAC12_FIFO_THRESHOLD dmaTriggerThreshold;
/*! Enables the sample time generator as the FIFO trigger.
* One of @ref DL_DAC12_SAMPLETIMER
*/
DL_DAC12_SAMPLETIMER sampleTimeGeneratorEnable;
/*! Rate of the sample time generator. One of @ref
* DL_DAC12_SAMPLES_PER_SECOND
*/
DL_DAC12_SAMPLES_PER_SECOND sampleRate;
} DL_DAC12_Config;
/**
* @brief Initialize the DAC module
*
* Initializes all the common configurable options for the DAC module. Any
* other custom configuration can be done after this initialization.
* @post DAC is not enabled
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] config Configuration for DAC12 peripheral
*/
void DL_DAC12_init(DAC12_Regs *dac12, const DL_DAC12_Config *config);
/**
* @brief Enables the Peripheral Write Enable (PWREN) register for the DAC12
*
* Before any peripheral registers can be configured by software, the
* peripheral itself must be enabled by writing the ENABLE bit together with
* the appropriate KEY value to the peripheral's PWREN register.
*
* @note For power savings, please refer to @ref DL_DAC12_enable
*
* @param dac12 Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_DAC12_enablePower(DAC12_Regs *dac12)
{
dac12->GPRCM.PWREN =
(DAC12_PWREN_KEY_UNLOCK_W | DAC12_PWREN_ENABLE_ENABLE);
}
/**
* @brief Disables the Peripheral Write Enable (PWREN) register for the DAC12
*
* When the PWREN.ENABLE bit is cleared, the peripheral's registers are not
* accessible for read/write operations.
*
* @note This API does not provide large power savings. For power savings,
* please refer to @ref DL_DAC12_enable
*
* @param dac12 Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_DAC12_disablePower(DAC12_Regs *dac12)
{
dac12->GPRCM.PWREN =
(DAC12_PWREN_KEY_UNLOCK_W | DAC12_PWREN_ENABLE_DISABLE);
}
/**
* @brief Returns if the Peripheral Write Enable (PWREN) register for the DAC12
* is enabled
*
* Before any peripheral registers can be configured by software, the
* peripheral itself must be enabled by writing the ENABLE bit together with
* the appropriate KEY value to the peripheral's PWREN register.
*
* When the PWREN.ENABLE bit is cleared, the peripheral's registers are not
* accessible for read/write operations.
*
*
* @param dac12 Pointer to the register overlay for the peripheral
*
* @return true if peripheral register access is enabled
* @return false if peripheral register access is disabled
*/
__STATIC_INLINE bool DL_DAC12_isPowerEnabled(const DAC12_Regs *dac12)
{
return ((dac12->GPRCM.PWREN & DAC12_PWREN_ENABLE_MASK) ==
DAC12_PWREN_ENABLE_ENABLE);
}
/**
* @brief Resets dac12 peripheral
*
* @param dac12 Pointer to the register overlay for the peripheral
*/
__STATIC_INLINE void DL_DAC12_reset(DAC12_Regs *dac12)
{
dac12->GPRCM.RSTCTL =
(DAC12_RSTCTL_KEY_UNLOCK_W | DAC12_RSTCTL_RESETSTKYCLR_CLR |
DAC12_RSTCTL_RESETASSERT_ASSERT);
}
/**
* @brief Returns if dac12 peripheral was reset
*
* @param dac12 Pointer to the register overlay for the peripheral
*
* @return true if peripheral was reset
* @return false if peripheral wasn't reset
*
*/
__STATIC_INLINE bool DL_DAC12_isReset(const DAC12_Regs *dac12)
{
return ((dac12->GPRCM.STAT & DAC12_STAT_RESETSTKY_MASK) ==
DAC12_STAT_RESETSTKY_RESET);
}
/**
* @brief Enables the DAC module
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_enable(DAC12_Regs *dac12)
{
dac12->CTL0 |= DAC12_CTL0_ENABLE_SET;
}
/**
* @brief Disables the DAC Module
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_disable(DAC12_Regs *dac12)
{
dac12->CTL0 &= ~DAC12_CTL0_ENABLE_MASK;
}
/**
* @brief Checks the enable bit of the DAC
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Whether the DAC module is enabled
*
* @retval true Module enabled
* @retval false Module disabled
*/
__STATIC_INLINE bool DL_DAC12_isEnabled(const DAC12_Regs *dac12)
{
uint32_t t = (dac12->CTL0 & DAC12_CTL0_ENABLE_MASK);
return (t == DAC12_CTL0_ENABLE_SET);
}
/**
* @brief Sets all elements of the input data format at once
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] rep Data Representation. One of
* @ref DL_DAC12_REPRESENTATION
* @param[in] res Data Resolution. One of @ref DL_DAC12_RESOLUTION
*/
__STATIC_INLINE void DL_DAC12_configDataFormat(
DAC12_Regs *dac12, DL_DAC12_REPRESENTATION rep, DL_DAC12_RESOLUTION res)
{
DL_Common_updateReg(&dac12->CTL0, ((uint32_t) rep | (uint32_t) res),
DAC12_CTL0_RES_MASK | DAC12_CTL0_DFM_MASK);
}
/**
* @brief Gets the currently configured amplifier setting
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Currently configured amplifier setting
*
* @retval One of @ref DL_DAC12_AMP
*/
__STATIC_INLINE DL_DAC12_AMP DL_DAC12_getAmplifier(const DAC12_Regs *dac12)
{
uint32_t ampVal =
(dac12->CTL1 & (DAC12_CTL1_AMPEN_MASK | DAC12_CTL1_AMPHIZ_MASK));
return (DL_DAC12_AMP)(ampVal);
}
/**
* @brief Sets the DAC and output amplifer setting
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] ampVal amplifier configuration value. One of @ref DL_DAC12_AMP
*/
__STATIC_INLINE void DL_DAC12_setAmplifier(
DAC12_Regs *dac12, DL_DAC12_AMP ampVal)
{
DL_Common_updateReg(&dac12->CTL1, (uint32_t) ampVal,
(DAC12_CTL1_AMPEN_MASK | DAC12_CTL1_AMPHIZ_MASK));
}
/**
* @brief Gets the currently configured reference voltage source
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Currently configured reference voltage
*
* @retval Bitwise OR of @ref DL_DAC12_VREF_SOURCE
*/
__STATIC_INLINE DL_DAC12_VREF_SOURCE DL_DAC12_getReferenceVoltageSource(
const DAC12_Regs *dac12)
{
uint32_t refsVal =
(dac12->CTL1 & (DAC12_CTL1_REFSP_MASK | DAC12_CTL1_REFSN_MASK));
return (DL_DAC12_VREF_SOURCE)(refsVal);
}
/**
* @brief Set the reference voltage source of the DAC
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] refsVal reference voltage source. Bitwise OR of
* @ref DL_DAC12_VREF_SOURCE
*/
__STATIC_INLINE void DL_DAC12_setReferenceVoltageSource(
DAC12_Regs *dac12, DL_DAC12_VREF_SOURCE refsVal)
{
DL_Common_updateReg(&dac12->CTL1, (uint32_t) refsVal,
(DAC12_CTL1_REFSP_MASK | DAC12_CTL1_REFSN_MASK));
}
/**
* @brief Enables the DAC output by connecting it to the OUT0 pin
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_enableOutputPin(DAC12_Regs *dac12)
{
dac12->CTL1 |= DAC12_CTL1_OPS_OUT0;
}
/**
* @brief Disable the DAC output by disconnecting it from the OUT0 pin
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_disableOutputPin(DAC12_Regs *dac12)
{
dac12->CTL1 &= ~DAC12_CTL1_OPS_MASK;
}
/**
* @brief Checks to see whether the output is connected
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Status of output connection
*
* @retval true Output is connected
* @retval false Output is not connected
*/
__STATIC_INLINE bool DL_DAC12_isOutputPinEnabled(const DAC12_Regs *dac12)
{
return ((dac12->CTL1 & DAC12_CTL1_OPS_MASK) == DAC12_CTL1_OPS_OUT0);
}
/**
* @brief Enables the FIFO module
*
* Enables the FIFO and the FIFO hardware control state machine
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_enableFIFO(DAC12_Regs *dac12)
{
/* Insert value */
dac12->CTL2 |= DAC12_CTL2_FIFOEN_SET;
}
/**
* @brief Disables the FIFO
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @sa DL_DAC12_enableFIFO
*/
__STATIC_INLINE void DL_DAC12_disableFIFO(DAC12_Regs *dac12)
{
/* Clear out the bit */
dac12->CTL2 &= ~DAC12_CTL2_FIFOEN_MASK;
}
/**
* @brief Checks whether the FIFO is enabled
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Current status of the FIFO
*
* @retval true FIFO is enabled
* @retval false FIFO is not enabled
*/
__STATIC_INLINE bool DL_DAC12_isFIFOEnabled(const DAC12_Regs *dac12)
{
uint32_t t = (dac12->CTL2 & DAC12_CTL2_FIFOEN_MASK);
return (t == DAC12_CTL2_FIFOEN_SET);
}
/**
* @brief Gets the FIFO threshold
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Currently configured FIFO Threshold
*
* @retval One of @ref DL_DAC12_FIFO_THRESHOLD
*
* @sa DL_DAC12_setFIFOThreshold
*/
__STATIC_INLINE DL_DAC12_FIFO_THRESHOLD DL_DAC12_getFIFOThreshold(
const DAC12_Regs *dac12)
{
uint32_t fifoThreshold = (dac12->CTL2 & DAC12_CTL2_FIFOTH_MASK);
return (DL_DAC12_FIFO_THRESHOLD)(fifoThreshold);
}
/**
* @brief Sets the FIFO threshold
*
* Determines the FIFO threshold In case of DMA based operation,
* DAC generates new DMA trigger when the number of empty locations in FIFO
* match the selected FIFO threshold level.
* In the case of CPU based operation, the FIFO threshold bits are don't care
* and FIFO level is directly indicated through the respective bits in the
* RIS register
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] fifoThreshold Threshold value. One of @ref DL_DAC12_FIFO_THRESHOLD
*/
__STATIC_INLINE void DL_DAC12_setFIFOThreshold(
DAC12_Regs *dac12, DL_DAC12_FIFO_THRESHOLD fifoThreshold)
{
DL_Common_updateReg(
&dac12->CTL2, (uint32_t) fifoThreshold, DAC12_CTL2_FIFOTH_MASK);
}
/**
* @brief Gets the FIFO read trigger source
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Currently configured trigger source
*
* @retval One of @ref DL_DAC12_FIFO_TRIGGER
*
* @sa DL_DAC12_setFIFOTriggerSource
*/
__STATIC_INLINE DL_DAC12_FIFO_TRIGGER DL_DAC12_getFIFOTriggerSource(
const DAC12_Regs *dac12)
{
uint32_t fifoTrig = (dac12->CTL2 & DAC12_CTL2_FIFOTRIGSEL_MASK);
return (DL_DAC12_FIFO_TRIGGER)(fifoTrig);
}
/**
* @brief Sets the FIFO read trigger source
*
* Selects the source for FIFO read trigger by the DAC. When the selected FIFO
* read trigger is asserted, the data from FIFO (as indicated by read pointer)
* is moved into internal DAC data register
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] fifoTrig Read Trigger Source. One of
* @ref DL_DAC12_FIFO_TRIGGER
*/
__STATIC_INLINE void DL_DAC12_setFIFOTriggerSource(
DAC12_Regs *dac12, DL_DAC12_FIFO_TRIGGER fifoTrig)
{
DL_Common_updateReg(
&dac12->CTL2, (uint32_t) fifoTrig, DAC12_CTL2_FIFOTRIGSEL_MASK);
}
/**
* @brief Enables the DMA trigger generator
*
* When this is and the FIFO are enabled, the DMA trigger is generated based
* on the empty FIFO locations qualified by the selected FIFO Threshold
* settings. This bit is automatically cleared by hardware when the DMA done
* event is asserted with DMA status signal value being nonzero
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @sa DL_DAC12_enableFIFO
* @sa DL_DAC12_setFIFOThreshold
*/
__STATIC_INLINE void DL_DAC12_enableDMATrigger(DAC12_Regs *dac12)
{
/* Insert value */
dac12->CTL2 |= DAC12_CTL2_DMATRIGEN_SET;
}
/**
* @brief Disables the DMA trigger generator
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @sa DL_DAC12_enableDMATriggerGenerator
*/
__STATIC_INLINE void DL_DAC12_disableDMATrigger(DAC12_Regs *dac12)
{
/* Clear out the bit */
dac12->CTL2 &= ~DAC12_CTL2_DMATRIGEN_MASK;
}
/**
* @brief Checks whether the DMA trigger generator is enabled
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Current status of the DMA trigger generator
*
* @retval true DMA Trigger enabled
* @retval false DMA Trigger not enabled
*/
__STATIC_INLINE bool DL_DAC12_isDMATriggerEnabled(const DAC12_Regs *dac12)
{
uint32_t t = (dac12->CTL2 & DAC12_CTL2_DMATRIGEN_MASK);
return (t == DAC12_CTL2_DMATRIGEN_SET);
}
/**
* @brief Enables the sample time generator
*
* The sample time generator can be selected as the FIFO Trigger @ref
* DL_DAC12_setFIFOTriggerSource and control the rate at which the DAC will
* consume inputs from the FIFO
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_enableSampleTimeGenerator(DAC12_Regs *dac12)
{
/* Insert value */
dac12->CTL3 |= DAC12_CTL3_STIMEN_SET;
}
/**
* @brief Disables the sample time generator
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @sa DL_DAC12_enableSampleTimeGenerator
*/
__STATIC_INLINE void DL_DAC12_disableSampleTimeGenerator(DAC12_Regs *dac12)
{
/* Clear out the bit */
dac12->CTL3 &= ~DAC12_CTL3_STIMEN_MASK;
}
/**
* @brief Checks whether the sample time trigger generator is enabled
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Current status of the sample time generator
*
* @retval true Sample time generator is enabled
* @retval false Sample time generator is not enabled
*/
__STATIC_INLINE bool DL_DAC12_isSampleTimeGeneratorEnabled(
const DAC12_Regs *dac12)
{
uint32_t t = (dac12->CTL3 & DAC12_CTL3_STIMEN_MASK);
return (t == DAC12_CTL3_STIMEN_SET);
}
/**
* @brief Gets the sample trigger rate of the sample time generator
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Currently configured sample rate
*
* @retval One of @ref DL_DAC12_SAMPLES_PER_SECOND
*/
__STATIC_INLINE DL_DAC12_SAMPLES_PER_SECOND DL_DAC12_getSampleRate(
const DAC12_Regs *dac12)
{
uint32_t sampleRate = (dac12->CTL3 & DAC12_CTL3_STIMCONFIG_MASK);
return (DL_DAC12_SAMPLES_PER_SECOND)(sampleRate);
}
/**
* @brief Sets the sample triggering rate of the sample time generator
*
* Sets the sample trigger rate of the sample time generator.
* The sample time generator can be selected as the FIFO Trigger @ref
* DL_DAC12_setFIFOTriggerSource and control the rate at which the DAC will
* consume inputs from the FIFO
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] sampleRate Desired sample rate. One of
* @ref DL_DAC12_SAMPLES_PER_SECOND
*/
__STATIC_INLINE void DL_DAC12_setSampleRate(
DAC12_Regs *dac12, DL_DAC12_SAMPLES_PER_SECOND sampleRate)
{
DL_Common_updateReg(
&dac12->CTL3, (uint32_t) sampleRate, DAC12_CTL3_STIMCONFIG_MASK);
}
/**
* @brief Checks whether a calibration sequence is currently running
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Current status of an active calibration sequence
*
* @retval true Calibration Sequence is currently running
* @retval false Calibration Sequence is not running
*
* @sa DL_DAC12_startCalibration
*/
__STATIC_INLINE bool DL_DAC12_isCalibrationRunning(const DAC12_Regs *dac12)
{
uint32_t t = (dac12->CALCTL & DAC12_CALCTL_CALON_MASK);
return (t == DAC12_CALCTL_CALON_ACTIVE);
}
/**
* @brief Initiates the DAC offset error calibration sequence
*
* Initiates the DAC offset error calibration sequence and
* the CALON_ACTIVE bit is automatically reset when the offset error
* calibration completes. Upon completion, the correct calibration will be put
* into the CALDATA register. This sequence can be started either on the fly
* (once the module is ready) or during setup (where this is called directy
* after enabling the DAC).
*
* In order for the calibration to be successful, the AMP must already be
* configured and the LOCK bit must be cleared for the value to be written
* successfully. The output is also tri-stated during calibration.
*
* A negative offset will mean that low input values will have a output of 0.
* A positive offset will mean that an input of 0 will result in a non-zero
* output.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
__STATIC_INLINE void DL_DAC12_startCalibration(DAC12_Regs *dac12)
{
dac12->CALCTL =
(DAC12_CALCTL_CALON_ACTIVE | DAC12_CALCTL_CALSEL_SELFCALIBRATIONTRIM);
}
/**
* @brief Gets the DAC Calibration offset
*
* Reads of the CALDATA register should only be performed after the
* calibration sequence has completed. During calibration, this register is
* continuously written to, and inaccurate values could be obtained.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return Current error calibration offset
*
* @retval -64 to +63 in two's complement
*/
__STATIC_INLINE uint32_t DL_DAC12_getCalibrationData(const DAC12_Regs *dac12)
{
return (dac12->CALDATA & DAC12_CALDATA_DATA_MASK);
}
/**
* @brief Perform calibration sequence
*
* Enables writes, and then starts the calibration sequence. Should only be
* called after the DAC module is enabled. This will only return when the
* calibration sequence has completed.
*
* @pre Amplifier settings should be configured. @ref DL_DAC12_setAmplifier
* @post Calibration is complete, and CALDATA is locked to prevent writes.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*/
void DL_DAC12_performSelfCalibrationBlocking(DAC12_Regs *dac12);
/**
* @brief Outputs an 8-bit data value
*
* Using the CPU to control the DAC, this register can be written to if a
* fixed output voltage is desired (ex. DC Generation) with the FIFO disabled,
* or it can write with variable output (ex. AC Generation) by enabling the
* FIFO and writing to this register. The value will then be written to the
* FIFO internally. With FIFO enabled with @ref DL_DAC12_enableFIFO, the
* FIFO-specific interrupts will be generated inside the DAC.
*
* The DMA trigger generation mechanism must be kept disabled when CPU is used
* to load data into DAC
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] dataValue value to be written to the bit-field from 0x0 to
* 0xFF. It can be either binary or two's complement
*/
__STATIC_INLINE void DL_DAC12_output8(DAC12_Regs *dac12, uint8_t dataValue)
{
dac12->DATA0 = dataValue;
}
/**
* @brief Outputs a 12-bit Data Value
*
* Using the CPU to control the DAC, this register can be written to if a
* fixed output voltage is desired (ex. DC Generation) with the FIFO disabled,
* or it can write with variable output (ex. AC Generation) by enabling the
* FIFO and writing to this register. The value will then be written to the
* FIFO internally. With FIFO enabled with @ref DL_DAC12_enableFIFO, the
* FIFO-specific interrupts will be generated inside the DAC.
*
* The DMA trigger generation mechanism must be kept disabled when CPU is used
* to load data into DAC
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] dataValue value to be written to the bit-field from 0x0 to
* 0xFFF. It can be either binary or two's complement
*/
__STATIC_INLINE void DL_DAC12_output12(DAC12_Regs *dac12, uint32_t dataValue)
{
dac12->DATA0 = (dataValue & DAC12_DATA0_DATA_VALUE_MASK);
}
/**
* @brief Fills the DAC fifo with 8-bit data values from the buffer
*
* Writes as many values from the data buffer to the FIFO as possible,
* and then exits when either the count is matched or the FIFO is full.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] buffer array containing the data values (0x00 - 0xFF) to
* be written
* @param[in] count length of the buffer, or maximum desired transfer
*
* @return Count successfully transferred to the FIFO
*
* @retval 0 - max(number of empty fifo slots, count)
*/
uint32_t DL_DAC12_fillFIFO8(
DAC12_Regs *dac12, const uint8_t *buffer, uint32_t count);
/**
* @brief Fills the DAC fifo with 12-bit data values from the buffer
*
* Writes as many values from the data buffer to the FIFO as possible,
* and then exits when either the count is matched or the FIFO is full.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] buffer array containing the data values (0x00 - 0xFFF) to
* be written
* @param[in] count length of the buffer, or maximum desired transfer
*
* @return Count successfully transfered to the FIFO
*
* @retval 0 - max(number of empty fifo slots, count)
*/
uint32_t DL_DAC12_fillFIFO12(
DAC12_Regs *dac12, const uint16_t *buffer, uint32_t count);
/**
* @brief Blocking 8-bit output to the DAC FIFO
*
* Waits until the FIFO is not full, then writes a single value
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] data data value (0x00 - 0xFF) to be written
*/
void DL_DAC12_outputBlocking8(DAC12_Regs *dac12, uint8_t data);
/**
* @brief Blocking 12-bit output to the DAC FIFO
*
* Waits until the FIFO is not full, then writes a single value
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] data data value (0x000 - 0xFFF) to be written
*/
void DL_DAC12_outputBlocking12(DAC12_Regs *dac12, uint16_t data);
/**
* @brief Checks the raw interrupt status of one or more interrupts
*
* The raw interrupt status is independent of whether a specific interrupt is
* enabled.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] interruptMask the desired interrupt(s). One or more of
* @ref DL_DAC12_INTERRUPT
*
* @return currently asserted interrupts (whether enabled or not) bit-wise
* AND with the inputted interrupts
*
* @retval 0 no interrupts that were inputted are currently asserted
* @retval not 0 a bit-wise OR of the inputted @ref DL_DAC12_INTERRUPT
* registers that are currently asserted.
*/
__STATIC_INLINE uint32_t DL_DAC12_getInterruptStatus(
const DAC12_Regs *dac12, uint32_t interruptMask)
{
return (dac12->CPU_INT.RIS & interruptMask);
}
/**
* @brief Clears the interrupt status of one or more interrupts
*
* Accesses the write only interrupt clear (ICLR) register and writes a 1 to
* the bits specified. Any bit that has 1 written to it will clear that pending
* interrupt if it is currently pending.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] interruptMask the desired interrupt(s). One or more of
* @ref DL_DAC12_INTERRUPT
*/
__STATIC_INLINE void DL_DAC12_clearInterruptStatus(
DAC12_Regs *dac12, uint32_t interruptMask)
{
dac12->CPU_INT.ICLR = interruptMask;
}
/**
* @brief Enables one or more interrupts
*
* Access and write to the IMASK register to enable the interrupts specified.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] interruptMask the desired interrupt(s). One or more of
* @ref DL_DAC12_INTERRUPT
*/
__STATIC_INLINE void DL_DAC12_enableInterrupt(
DAC12_Regs *dac12, uint32_t interruptMask)
{
dac12->CPU_INT.IMASK |= interruptMask;
}
/**
* @brief Disables one or more interrupts
*
* Access and write to the IMASK register to disable the interrupts specified.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
* @param[in] interruptMask the desired interrupt(s). One or more of
* @ref DL_DAC12_INTERRUPT
*/
__STATIC_INLINE void DL_DAC12_disableInterrupt(
DAC12_Regs *dac12, uint32_t interruptMask)
{
dac12->CPU_INT.IMASK &= ~interruptMask;
}
/**
* @brief Gets the highest priority pending interrupt
*
* Accesses and reads the IIDX register to obtain the highest currently
* pending interrupt. Interrupts with lower offsets (and smaller values) are
* higher priority than interrupts with higher offsets (and larger values).
* In order for the interrupt to be pending, it must have been enabled and
* asserted. Clearing the interrupt should will un-pend the interrupt.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return highest priority pending interrupt
*
* @retval One of @ref DL_DAC12_IIDX
*/
__STATIC_INLINE DL_DAC12_IIDX DL_DAC12_getPendingInterrupt(
const DAC12_Regs *dac12)
{
return ((DL_DAC12_IIDX) dac12->CPU_INT.IIDX);
}
/**
* @brief Checks if the DAC FIFO is currently full
*
* Accesses the raw interrupt status (RIS) register in order to get the
* current state of the FIFOFull Interrupt flag.
*
* @param[in] dac12 pointer to the register overlay of the peripheral
*
* @return status of FIFO full interrupt flag
*
* @retval true FIFO is currently full
* @retval false FIFO is not full
*/
__STATIC_INLINE bool DL_DAC12_isFIFOFull(const DAC12_Regs *dac12)
{
uint32_t t =
DL_DAC12_getInterruptStatus(dac12, DL_DAC12_INTERRUPT_FIFO_FULL);
return (t == DL_DAC12_INTERRUPT_FIFO_FULL);
}
/**
* @brief Sets the event publisher channel id
*
* @param[in] dac12 Pointer to the register overlay for the
* peripheral
* @param[in] chanID Channel ID number. Valid range 0-15. If ChanID == 0
* publisher is disconnected.
*/
__STATIC_INLINE void DL_DAC12_setPublisherChanID(
DAC12_Regs *dac12, uint8_t chanID)
{
dac12->FPUB_1 = (chanID & DAC12_FPUB_1_CHANID_MAXIMUM);
}
/**
* @brief Gets the event publisher channel id
*
* @param[in] dac12 Pointer to the register overlay for the
* peripheral
* @return Event publisher channel ID
*
*/
__STATIC_INLINE uint8_t DL_DAC12_getPublisherChanID(const DAC12_Regs *dac12)
{
return ((uint8_t)((dac12->FPUB_1) & DAC12_FPUB_1_CHANID_MASK));
}
/**
* @brief Sets the event subscriber channel id
*
* @param[in] dac12 Pointer to the register overlay for the
* peripheral
* @param[in] index Specifies the register event index to be configured
* @param[in] chanID Channel ID number. Valid range 0-15. If ChanID == 0
* subscriber is disconnected.
*/
__STATIC_INLINE void DL_DAC12_setSubscriberChanID(
DAC12_Regs *dac12, DL_DAC12_SUBSCRIBER_INDEX index, uint8_t chanID)
{
volatile uint32_t *pReg = &dac12->FSUB_0;
*(pReg + (uint32_t) index) = (chanID & DAC12_FSUB_0_CHANID_MAXIMUM);
}
/**
* @brief Gets the event subscriber channel id
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] index Specifies the register event index to be configured
*
* @return Event subscriber channel ID
*
*/
__STATIC_INLINE uint8_t DL_DAC12_getSubscriberChanID(
DAC12_Regs *dac12, DL_DAC12_SUBSCRIBER_INDEX index)
{
volatile uint32_t *pReg = &dac12->FSUB_0;
return ((uint8_t)(*(pReg + (uint32_t) index) & DAC12_FSUB_0_CHANID_MASK));
}
/**
* @brief Enable DAC event
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] eventMask Bit mask of interrupts to enable. Bitwise OR of
* @ref DL_DAC12_EVENT.
*/
__STATIC_INLINE void DL_DAC12_enableEvent(
DAC12_Regs *dac12, uint32_t eventMask)
{
dac12->GEN_EVENT.IMASK |= (eventMask);
}
/**
* @brief Disable DAC event
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] eventMask Bit mask of interrupts to enable. Bitwise OR of
* @ref DL_DAC12_EVENT.
*/
__STATIC_INLINE void DL_DAC12_disableEvent(
DAC12_Regs *dac12, uint32_t eventMask)
{
dac12->GEN_EVENT.IMASK &= ~(eventMask);
}
/**
* @brief Check which DAC events are enabled
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of
* @ref DL_DAC12_EVENT.
*
* @return Which of the requested DAC interrupts are enabled
*
* @retval Bitwise OR of @ref DL_DAC12_EVENT values
*/
__STATIC_INLINE uint32_t DL_DAC12_getEnabledEvents(
const DAC12_Regs *dac12, uint32_t eventMask)
{
return ((dac12->GEN_EVENT.IMASK) & (eventMask));
}
/**
* @brief Check event flag of enabled DAC event
*
* Checks if any of the DAC events that were previously enabled are
* pending.
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of
* @ref DL_DAC12_EVENT.
*
* @return Which of the requested DAC interrupts are pending
*
* @retval Bitwise OR of @ref DL_DAC12_EVENT values
*
* @sa DL_DAC12_enableInterrupt
*/
__STATIC_INLINE uint32_t DL_DAC12_getEnabledEventStatus(
const DAC12_Regs *dac12, uint32_t eventMask)
{
return ((dac12->GEN_EVENT.MIS) & eventMask);
}
/**
* @brief Check interrupt flag of any DAC event
*
* Checks if any events are pending. Events do not have to
* be previously enabled.
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] eventMask Bit mask of interrupts to check. Bitwise OR of
* @ref DL_DAC12_EVENT.
*
* @return Which of the requested DAC interrupts are pending
*
* @retval Bitwise OR of @ref DL_DAC12_EVENT values
*/
__STATIC_INLINE uint32_t DL_DAC12_getRawEventsStatus(
const DAC12_Regs *dac12, uint32_t eventMask)
{
return ((dac12->GEN_EVENT.RIS) & eventMask);
}
/**
* @brief Clear pending DAC events
*
* @param[in] dac12 Pointer to the register overlay for the peripheral
* @param[in] eventMask Bit mask of interrupts to clear. Bitwise OR of
* @ref DL_DAC12_EVENT.
*/
__STATIC_INLINE void DL_DAC12_clearEventsStatus(
DAC12_Regs *dac12, uint32_t eventMask)
{
dac12->GEN_EVENT.ICLR |= (eventMask);
}
#ifdef __cplusplus
}
#endif
#endif /* __MSPM0_HAS_DAC12__ */
#endif /* ti_dl_dl_dac12__include */
/** @}*/