diff options
Diffstat (limited to 'include/arch/rm46l8lp/halcogen/ecap.h')
-rw-r--r-- | include/arch/rm46l8lp/halcogen/ecap.h | 260 |
1 files changed, 260 insertions, 0 deletions
diff --git a/include/arch/rm46l8lp/halcogen/ecap.h b/include/arch/rm46l8lp/halcogen/ecap.h new file mode 100644 index 0000000..dd76b8c --- /dev/null +++ b/include/arch/rm46l8lp/halcogen/ecap.h @@ -0,0 +1,260 @@ +/** @file ecap.h +* @brief ECAP Driver Header File +* @date 11-Dec-2018 +* @version 04.07.01 +* +* This file contains: +* - Definitions +* - Types +* - Interface Prototypes +* . +* which are relevant for the ECAP driver. +*/ + +/* +* Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com +* +* +* 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. +* +*/ + + +#ifndef __ECAP_H__ +#define __ECAP_H__ + +#include "reg_ecap.h" + + + +#ifdef __cplusplus +extern "C" { +#endif + +/* USER CODE BEGIN (0) */ +/* USER CODE END */ +/** @brief Enumeration to define the capture (CAP) interrupts +*/ +typedef enum +{ + ecapInt_CTR_CMP = 0x0080U, /*< Denotes CTR = CMP interrupt */ + ecapInt_CTR_PRD = 0x0040U, /*< Denotes CTR = PRD interrupt */ + ecapInt_CTR_OVF = 0x0020U, /*< Denotes CTROVF interrupt */ + ecapInt_CEVT4 = 0x0010U, /*< Denotes CEVT4 interrupt */ + ecapInt_CEVT3 = 0x0008U, /*< Denotes CEVT3 interrupt */ + ecapInt_CEVT2 = 0x0004U, /*< Denotes CEVT2 interrupt */ + ecapInt_CEVT1 = 0x0002U, /*< Denotes CEVT1 interrupt */ + ecapInt_Global = 0x0001U, /*< Denotes Capture global interrupt */ + ecapInt_All = 0x00FFU /*< Denotes All interrupts */ +} ecapInterrupt_t; + +/** @brief Enumeration to define the capture (CAP) prescaler values +*/ +typedef enum +{ + ecapPrescale_By_1 = ((uint16)0U << 9U), /*< Divide by 1 */ + ecapPrescale_By_2 = ((uint16)1U << 9U), /*< Divide by 2 */ + ecapPrescale_By_4 = ((uint16)2U << 9U), /*< Divide by 4 */ + ecapPrescale_By_6 = ((uint16)3U << 9U), /*< Divide by 6 */ + ecapPrescale_By_8 = ((uint16)4U << 9U), /*< Divide by 8 */ + ecapPrescale_By_10 = ((uint16)5U << 9U), /*< Divide by 10 */ + ecapPrescale_By_12 = ((uint16)6U << 9U), /*< Divide by 12 */ + ecapPrescale_By_14 = ((uint16)7U << 9U), /*< Divide by 14 */ + ecapPrescale_By_16 = ((uint16)8U << 9U), /*< Divide by 16 */ + ecapPrescale_By_18 = ((uint16)9U << 9U), /*< Divide by 18 */ + ecapPrescale_By_20 = ((uint16)10U << 9U), /*< Divide by 20 */ + ecapPrescale_By_22 = ((uint16)11U << 9U), /*< Divide by 22 */ + ecapPrescale_By_24 = ((uint16)12U << 9U), /*< Divide by 24 */ + ecapPrescale_By_26 = ((uint16)13U << 9U), /*< Divide by 26 */ + ecapPrescale_By_28 = ((uint16)14U << 9U), /*< Divide by 28 */ + ecapPrescale_By_30 = ((uint16)15U << 9U), /*< Divide by 30 */ + ecapPrescale_By_32 = ((uint16)16U << 9U), /*< Divide by 32 */ + ecapPrescale_By_34 = ((uint16)17U << 9U), /*< Divide by 34 */ + ecapPrescale_By_36 = ((uint16)18U << 9U), /*< Divide by 36 */ + ecapPrescale_By_38 = ((uint16)19U << 9U), /*< Divide by 38 */ + ecapPrescale_By_40 = ((uint16)20U << 9U), /*< Divide by 40 */ + ecapPrescale_By_42 = ((uint16)21U << 9U), /*< Divide by 42 */ + ecapPrescale_By_44 = ((uint16)22U << 9U), /*< Divide by 44 */ + ecapPrescale_By_46 = ((uint16)23U << 9U), /*< Divide by 46 */ + ecapPrescale_By_48 = ((uint16)24U << 9U), /*< Divide by 48 */ + ecapPrescale_By_50 = ((uint16)25U << 9U), /*< Divide by 50 */ + ecapPrescale_By_52 = ((uint16)26U << 9U), /*< Divide by 52 */ + ecapPrescale_By_54 = ((uint16)27U << 9U), /*< Divide by 54 */ + ecapPrescale_By_56 = ((uint16)28U << 9U), /*< Divide by 56 */ + ecapPrescale_By_58 = ((uint16)29U << 9U), /*< Divide by 58 */ + ecapPrescale_By_60 = ((uint16)30U << 9U), /*< Divide by 60 */ + ecapPrescale_By_62 = ((uint16)31U << 9U) /*< Divide by 62 */ +} ecapPrescale_t; + +/** @brief Enumeration to define the Sync Out options +*/ +typedef enum +{ + SyncOut_SyncIn = ((uint16)0U << 6U), /*< Sync In used for Sync Out */ + SyncOut_CTRPRD = ((uint16)1U << 6U), /*< CTR = PRD used for Sync Out */ + SyncOut_None = ((uint16)2U << 6U) /*< Disables Sync Out */ +} ecapSyncOut_t; + +/** @brief Enumeration to define the Polarity +*/ +typedef enum +{ + RISING_EDGE = 0U, + FALLING_EDGE = 1U +}ecapEdgePolarity_t; + +typedef enum +{ + ACTIVE_HIGH = 0U, + ACTIVE_LOW = 1U +}ecapAPWMPolarity_t; + +/** @brief Enumeration to define the Mode of operation +*/ +typedef enum +{ + CONTINUOUS = 0U, + ONE_SHOT = 1U +}ecapMode_t; + +/** @brief Enumeration to define the capture events +*/ +typedef enum +{ + CAPTURE_EVENT1 = 0U, + CAPTURE_EVENT2 = 1U, + CAPTURE_EVENT3 = 2U, + CAPTURE_EVENT4 = 3U +}ecapEvent_t ; + +typedef enum +{ + RESET_ENABLE = 1U, + RESET_DISABLE = 0U +}ecapReset_t ; + +typedef struct ecap_config_reg + { + uint32 CONFIG_CTRPHS; + uint16 CONFIG_ECCTL1; + uint16 CONFIG_ECCTL2; + uint16 CONFIG_ECEINT; +}ecap_config_reg_t; + +#define ECAP1_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP1_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP1_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP1_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP2_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP2_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP2_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP2_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP3_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP3_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP3_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP3_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP4_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP4_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP4_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP4_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP5_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP5_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP5_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP5_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +#define ECAP6_CTRPHS_CONFIGVALUE 0x00000000U +#define ECAP6_ECCTL1_CONFIGVALUE ((uint16)((uint16)RISING_EDGE << 0U) | (uint16)((uint16)RESET_DISABLE << 1U) | (uint16)((uint16)RISING_EDGE << 2U) | (uint16)((uint16)RESET_DISABLE << 3U) | (uint16)((uint16)RISING_EDGE << 4U)| (uint16)((uint16)RESET_DISABLE << 5U) | (uint16)((uint16)RISING_EDGE << 6U) | (uint16)((uint16)RESET_DISABLE << 7U) | (uint16)((uint16)0U << 8U) | (uint16)((uint16)0U << 9U)) +#define ECAP6_ECCTL2_CONFIGVALUE ((uint16)((uint16)ONE_SHOT << 0U) | (uint16)((uint16)CAPTURE_EVENT1 << 1U) | (uint16)((uint16)0U << 9U) | (uint16)0x00000010U) +#define ECAP6_ECEINT_CONFIGVALUE (0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U | 0x0000U) + +/** + * @defgroup eCAP eCAP + * @brief Enhanced Capture Module. + * + * The enhanced Capture (eCAP) module is essential in systems where accurate timing of external events is + * important. This microcontroller implements 6 instances of the eCAP module. + * + * Related Files + * - reg_ecap.h + * - ecap.h + * - ecap.c + * @addtogroup eCAP + * @{ + */ +void ecapInit(void); +void ecapSetCounter(ecapBASE_t *ecap, uint32 value); +void ecapEnableCounterLoadOnSync(ecapBASE_t *ecap, uint32 phase); +void ecapDisableCounterLoadOnSync(ecapBASE_t *ecap); +void ecapSetEventPrescaler(ecapBASE_t *ecap, ecapPrescale_t prescale); +void ecapSetCaptureEvent1(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureEvent2(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureEvent3(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureEvent4(ecapBASE_t *ecap, ecapEdgePolarity_t edgePolarity, ecapReset_t resetenable); +void ecapSetCaptureMode(ecapBASE_t *ecap, ecapMode_t capMode, ecapEvent_t event); +void ecapEnableCapture(ecapBASE_t *ecap); +void ecapDisableCapture(ecapBASE_t *ecap); +void ecapStartCounter(ecapBASE_t *ecap); +void ecapStopCounter(ecapBASE_t *ecap); +void ecapSetSyncOut(ecapBASE_t *ecap, ecapSyncOut_t syncOutSrc); +void ecapEnableAPWMmode(ecapBASE_t *ecap, ecapAPWMPolarity_t pwmPolarity, uint32 period, uint32 duty); +void ecapDisableAPWMMode(ecapBASE_t *ecap); +void ecapEnableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts); +void ecapDisableInterrupt(ecapBASE_t *ecap, ecapInterrupt_t interrupts); +uint16 ecapGetEventStatus(ecapBASE_t *ecap, ecapInterrupt_t events); +void ecapClearFlag(ecapBASE_t *ecap, ecapInterrupt_t events); +uint32 ecapGetCAP1(ecapBASE_t *ecap); +uint32 ecapGetCAP2(ecapBASE_t *ecap); +uint32 ecapGetCAP3(ecapBASE_t *ecap); +uint32 ecapGetCAP4(ecapBASE_t *ecap); +void ecap1GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap2GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap3GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap4GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap5GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); +void ecap6GetConfigValue(ecap_config_reg_t *config_reg, config_value_type_t type); + +/** @brief Interrupt callback +* @param[in] ecap Handle to CAP object +* @param[in] flags Copy of interrupt flags +*/ +void ecapNotification(ecapBASE_t *ecap,uint16 flags); + +/**@}*/ + +#ifdef __cplusplus +} +#endif /*extern "C" */ + +/* USER CODE BEGIN (1) */ +/* USER CODE END */ +#endif /*end of _CAP_H_ definition */ |