1040 lines
44 KiB
C
1040 lines
44 KiB
C
/**
|
|
* @file xmc_posif.h
|
|
* @date 2017-06-24
|
|
*
|
|
* @cond
|
|
*********************************************************************************************************************
|
|
* XMClib v2.1.16 - XMC Peripheral Driver Library
|
|
*
|
|
* Copyright (c) 2015-2017, Infineon Technologies AG
|
|
* 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 the copyright holders 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 HOLDER 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.
|
|
*
|
|
* To improve the quality of the software, users are encouraged to share modifications, enhancements or bug fixes with
|
|
* Infineon Technologies AG dave@infineon.com).
|
|
*********************************************************************************************************************
|
|
*
|
|
* Change History
|
|
* --------------
|
|
*
|
|
* 2015-02-18:
|
|
* - Initial version
|
|
*
|
|
* 2015-02-20:
|
|
* - Driver description added <BR>
|
|
*
|
|
* 2015-06-19:
|
|
* - Removed version macros and declaration of GetDriverVersion API <BR>
|
|
*
|
|
* 2015-07-02:
|
|
* - Updated XMC_POSIF_QD_GetDirection API
|
|
*
|
|
* 2016-03-09:
|
|
* - Optimization of write only registers
|
|
*
|
|
* 2017-06-24
|
|
* - Added posif map connectivity file<br>
|
|
*
|
|
* @endcond
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef XMC_POSIF_H
|
|
#define XMC_POSIF_H
|
|
|
|
/*********************************************************************************************************************
|
|
* HEADER FILES
|
|
********************************************************************************************************************/
|
|
#include <xmc_common.h>
|
|
|
|
#if defined(POSIF0)
|
|
#include <xmc_scu.h>
|
|
#include "xmc_posif_map.h"
|
|
|
|
/**
|
|
* @addtogroup XMClib XMC Peripheral Library
|
|
* @{
|
|
*/
|
|
|
|
/**
|
|
* @addtogroup POSIF
|
|
* @brief Position Interface Unit (POSIF) driver for the XMC microcontroller family <br>
|
|
*
|
|
* The POSIF unit is a flexible and powerful component for motor control systems that use
|
|
* rotary encoders or hall sensors as feedback loop. It provides interface for motor position and velocity measurement.
|
|
* POSIF unit works with CCU4 and CCU8 to enable position and velocity measurement and to control PWM outputs using multi channel pattern.<br>
|
|
*
|
|
* Driver is divided in three POSIF functional blocks - Hall Sensor Control (POSIF_HSC), Quadrature Decoder (POSIF_QD) and
|
|
* MultiChannel Mode (POSIF_MCM). <br>
|
|
*
|
|
* POSIF driver features:
|
|
* -# Configuration structure XMC_POSIF_CONFIG_t and initialization function XMC_POSIF_Init() to configure global settings
|
|
* -# Allows to change the operating mode using XMC_POSIF_SetMode()
|
|
* -# Allows the selection of one of the four inputs (A, B, C or D) using XMC_POSIF_SelectInputSource(). In hall sensor control, inputs are
|
|
* hall0, hall1 and hall2 signals. For quadrature decoder mode, inputs are phase A, phase B and index signals.
|
|
* -# Hall Sensor Control (APIs prefixed with XMC_POSIF_HSC_) <br>
|
|
* - Configuration structure XMC_POSIF_HSC_CONFIG_t and initialization function XMC_POSIF_HSC_Init()
|
|
* - Update current and expected hall pattern in shadow register using XMC_POSIF_HSC_SetHallPatterns()
|
|
* - Allows immediate shadow transfer using XMC_POSIF_HSC_UpdateHallPattern()
|
|
* -# Quadrature Decoder (APIs prefixed with XMC_POSIF_QD_) <br>
|
|
* - Configuration structure XMC_POSIF_QD_CONFIG_t and initialization function XMC_POSIF_QD_Init()
|
|
* - Get direction of rotation using XMC_POSIF_QD_GetDirection()
|
|
* -# MultiChannel Mode (APIs prefixed with XMC_POSIF_MCM_) <br>
|
|
* - Configuration structure XMC_POSIF_MCM_CONFIG_t and initialization function XMC_POSIF_MCM_Init()
|
|
* - Update multichannel pattern in shadow register using XMC_POSIF_MCM_SetMultiChannelPattern()
|
|
* - Allows immediate shadow transfer using XMC_POSIF_MCM_UpdateMultiChannelPattern()
|
|
* -# User need to call respective init functions to configure POSIF operating mode. e.g to configure POSIF in hall sensor control with multichannel mode
|
|
* call both XMC_POSIF_HSC_Init() and XMC_POSIF_MCM_Init().
|
|
* -# Allows to enable and disable interrupt sources and assign to service request node using XMC_POSIF_EnableEvent(), XMC_POSIF_DisableEvent() and XMC_POSIF_SetInterruptNode()
|
|
*
|
|
* @note POSIF is not available on XMC11 and XMC12 devices
|
|
*
|
|
* @{
|
|
*/
|
|
|
|
/*********************************************************************************************************************
|
|
* MACROS
|
|
********************************************************************************************************************/
|
|
#if ((UC_SERIES == XMC45) || (UC_SERIES == XMC44) || (UC_SERIES == XMC47) || (UC_SERIES == XMC48) || (UC_SERIES == XMC14))
|
|
#define XMC_POSIF_CHECK_MODULE_PTR(PTR) ( ((PTR)== POSIF0) || ((PTR)== POSIF1) ) /*< Check for valid module pointer */
|
|
#else
|
|
#define XMC_POSIF_CHECK_MODULE_PTR(PTR) ( ((PTR)== POSIF0)) /*< Check for valid module pointer */
|
|
#endif
|
|
|
|
/*********************************************************************************************************************
|
|
* ENUMS
|
|
********************************************************************************************************************/
|
|
/**
|
|
* Defines the return status, to verify the POSIF related API calls. Use type @ref XMC_POSIF_STATUS_t for this enum.
|
|
*/
|
|
typedef enum XMC_POSIF_STATUS
|
|
{
|
|
XMC_POSIF_STATUS_OK = 0U, /**< API fulfills request */
|
|
XMC_POSIF_STATUS_ERROR /**< API cannot fulfill request */
|
|
} XMC_POSIF_STATUS_t;
|
|
|
|
/**
|
|
* Defines POSIF configurable modes.Use type @ref XMC_POSIF_MODE_t for this enum.
|
|
* The members defines the function selector(FSEL) bitfields of \a PCONF register.
|
|
*/
|
|
typedef enum XMC_POSIF_MODE
|
|
{
|
|
XMC_POSIF_MODE_HALL_SENSOR = 0U, /**< Hall sensor mode */
|
|
XMC_POSIF_MODE_QD , /**< Quadrature Decoder mode */
|
|
XMC_POSIF_MODE_MCM , /**< Standalone Multichannel mode */
|
|
XMC_POSIF_MODE_MCM_QD /**< Quadrature Decoder + Standalone Multichannel mode */
|
|
} XMC_POSIF_MODE_t;
|
|
|
|
/**
|
|
* Defines POSIF configurable input ports.Use type @ref XMC_POSIF_INPUT_PORT_t for this enum.
|
|
* The member defines the respective input selector(INSELX) bitfields of \a PCONF register.
|
|
* It selects, which input is used for the phase or Hall input function (depending on the module is set for
|
|
* Quadrature Decoder or Hall Sensor Mode). Same enum can be used to configure pattern update signal select by configuring
|
|
* \a PCONF register's \a MSETS bit field.
|
|
*/
|
|
typedef enum XMC_POSIF_INPUT_PORT
|
|
{
|
|
XMC_POSIF_INPUT_PORT_A = 0U, /**< INPUT-A */
|
|
XMC_POSIF_INPUT_PORT_B , /**< INPUT-B */
|
|
XMC_POSIF_INPUT_PORT_C , /**< INPUT-C */
|
|
XMC_POSIF_INPUT_PORT_D , /**< INPUT-D */
|
|
XMC_POSIF_INPUT_PORT_E , /**< INPUT-E */
|
|
XMC_POSIF_INPUT_PORT_F , /**< INPUT-F */
|
|
XMC_POSIF_INPUT_PORT_G , /**< INPUT-G */
|
|
XMC_POSIF_INPUT_PORT_H /**< INPUT-H */
|
|
} XMC_POSIF_INPUT_PORT_t;
|
|
|
|
/**
|
|
* Defines active level of an input signal.Use type @ref XMC_POSIF_INPUT_ACTIVE_LEVEL_t for this enum.
|
|
*/
|
|
typedef enum XMC_POSIF_INPUT_ACTIVE_LEVEL
|
|
{
|
|
XMC_POSIF_INPUT_ACTIVE_LEVEL_HIGH = 0U, /**< Input - Active High */
|
|
XMC_POSIF_INPUT_ACTIVE_LEVEL_LOW /**< Input - Active Low */
|
|
} XMC_POSIF_INPUT_ACTIVE_LEVEL_t;
|
|
|
|
/**
|
|
* Defines POSIF input debounce filter configuration.POSIF inputs are connected to low pass filter and
|
|
* this enum is used to configure low pass filters cut off frequency.
|
|
* Use type @ref XMC_POSIF_FILTER_t for this enum.
|
|
* The member defines the low pass filter configuration(LPC) bitfield of \a PCONF register.
|
|
*/
|
|
typedef enum XMC_POSIF_FILTER
|
|
{
|
|
XMC_POSIF_FILTER_DISABLED = 0U, /**< No filtering */
|
|
XMC_POSIF_FILTER_1_CLOCK_CYCLE , /**< Filter of 1 Clock Cycle */
|
|
XMC_POSIF_FILTER_2_CLOCK_CYCLE , /**< Filter of 2 Clock Cycles */
|
|
XMC_POSIF_FILTER_4_CLOCK_CYCLE , /**< Filter of 4 Clock Cycles */
|
|
XMC_POSIF_FILTER_8_CLOCK_CYCLE , /**< Filter of 8 Clock Cycles */
|
|
XMC_POSIF_FILTER_16_CLOCK_CYCLE , /**< Filter of 16 Clock Cycles */
|
|
XMC_POSIF_FILTER_32_CLOCK_CYCLE , /**< Filter of 32 Clock Cycles */
|
|
XMC_POSIF_FILTER_64_CLOCK_CYCLE /**< Filter of 64 Clock Cycles */
|
|
} XMC_POSIF_FILTER_t;
|
|
|
|
/**
|
|
* Defines POSIF events.Use type @ref XMC_POSIF_IRQ_EVENT_t for this enum.
|
|
* The member defines available event sources.It is used to configure which event to be used for
|
|
* interrupt generation using \a PFLGE register. [ PFLG,SPFLG,RPFLG]
|
|
*/
|
|
typedef enum XMC_POSIF_IRQ_EVENT
|
|
{
|
|
XMC_POSIF_IRQ_EVENT_CHE = 0U, /**< Hall Mode : Correct Hall Event */
|
|
XMC_POSIF_IRQ_EVENT_WHE = 1U, /**< Hall Mode : Wrong Hall Event */
|
|
XMC_POSIF_IRQ_EVENT_HALL_INPUT = 2U, /**< Hall Mode : Hall Input update */
|
|
XMC_POSIF_IRQ_EVENT_MCP_SHADOW_TRANSFER = 4U, /**< Hall Mode + MCM Mode : MC Pattern shadow transfer */
|
|
XMC_POSIF_IRQ_EVENT_INDX = 8U, /**< Quadrature Mode : Index event detection */
|
|
XMC_POSIF_IRQ_EVENT_ERR = 9U, /**< Quadrature Mode : Quadrature Phase Error */
|
|
XMC_POSIF_IRQ_EVENT_CNT = 10U, /**< Quadrature Mode : Quadrature Clock event */
|
|
XMC_POSIF_IRQ_EVENT_DIR = 11U, /**< Quadrature Mode : Quadrature Direction change event */
|
|
XMC_POSIF_IRQ_EVENT_PCLK = 12U /**< Quadrature Mode : Quadrature period clock generation event */
|
|
} XMC_POSIF_IRQ_EVENT_t;
|
|
|
|
/**
|
|
* Defines POSIF service request lines.Use type @ref XMC_POSIF_SR_ID_t for this enum.
|
|
* It used to connect POSIF event to required service request line.
|
|
* in \a PFLGE register for interrupt generation.
|
|
*/
|
|
typedef enum XMC_POSIF_SR_ID
|
|
{
|
|
XMC_POSIF_SR_ID_0 = 0U, /**< SR-0 */
|
|
XMC_POSIF_SR_ID_1 /**< SR-1 */
|
|
} XMC_POSIF_SR_ID_t;
|
|
|
|
/**
|
|
* Defines position decoder mode selection.Use type @ref XMC_POSIF_QD_MODE_t for this enum.
|
|
* The member defines configuration for the operation of the quadrature decoder mode.
|
|
* It used to configure \a QDC register.
|
|
*/
|
|
typedef enum XMC_POSIF_QD_MODE
|
|
{
|
|
XMC_POSIF_QD_MODE_QUADRATURE = 0U, /**< Standard Quadrature Mode */
|
|
XMC_POSIF_QD_MODE_DIRECTION_COUNT /**< Direction Count Mode */
|
|
} XMC_POSIF_QD_MODE_t;
|
|
|
|
/**
|
|
* Defines motor rotation direction.Use type @ref XMC_POSIF_QD_DIR_t for this enum.
|
|
* The member defines the direction in quadrature mode.
|
|
*/
|
|
typedef enum XMC_POSIF_QD_DIR
|
|
{
|
|
XMC_POSIF_QD_DIR_COUNTERCLOCKWISE = 0U, /**< Counter Clockwise */
|
|
XMC_POSIF_QD_DIR_CLOCKWISE /**< Clockwise */
|
|
} XMC_POSIF_QD_DIR_t;
|
|
|
|
/**
|
|
* Defines frequency of index signal generation.Use type @ref XMC_POSIF_QD_INDEX_GENERATION_t for this enum.
|
|
* Member represents available configuration for index marker generation using \a ICM bit field in \a QDC register.
|
|
*/
|
|
typedef enum XMC_POSIF_QD_INDEX_GENERATION
|
|
{
|
|
XMC_POSIF_QD_INDEX_GENERATION_NEVER = 0U, /**< Never generate the index marker signal */
|
|
XMC_POSIF_QD_INDEX_GENERATION_ONCE , /**< Generate only once after the first revolution */
|
|
XMC_POSIF_QD_INDEX_GENERATION_ALWAYS /**< Index marker generated upon every revolution */
|
|
} XMC_POSIF_QD_INDEX_GENERATION_t;
|
|
|
|
/**
|
|
* Defines trigger edge in hall sensor mode.Use type @ref XMC_POSIF_HSC_TRIGGER_EDGE_t for this enum.
|
|
* It can be used to configure \a PCONF register's \a SPES and \a MSES bit fields.
|
|
*/
|
|
typedef enum XMC_POSIF_HSC_TRIGGER_EDGE
|
|
{
|
|
XMC_POSIF_HSC_TRIGGER_EDGE_RISING = 0U, /**< Rising edge */
|
|
XMC_POSIF_HSC_TRIGGER_EDGE_FALLING /**< Falling edge */
|
|
} XMC_POSIF_HSC_TRIGGER_EDGE_t;
|
|
|
|
/*********************************************************************************************************************
|
|
* DATA STRUCTURES
|
|
********************************************************************************************************************/
|
|
|
|
/*Anonymous structure/union guard start*/
|
|
#if defined(__CC_ARM)
|
|
#pragma push
|
|
#pragma anon_unions
|
|
#elif defined(__TASKING__)
|
|
#pragma warning 586
|
|
#endif
|
|
|
|
/**
|
|
*
|
|
* Defines POSIF peripheral register structure.Use type @ref XMC_POSIF_t for this data structure.
|
|
*/
|
|
typedef POSIF_GLOBAL_TypeDef XMC_POSIF_t;
|
|
|
|
/**
|
|
* Defines POSIF quadrature decoder initialization data structure.
|
|
* Use type @ref XMC_POSIF_QD_CONFIG_t for this data structure.
|
|
* It used to configure Quadrature mode using \a QDC register.
|
|
*/
|
|
typedef struct XMC_POSIF_QD_CONFIG
|
|
{
|
|
XMC_POSIF_QD_MODE_t mode; /**< Operational Mode of the quadrature encoder and decoder */
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
uint32_t phase_a: 1; /**< Phase-A active level configuration */
|
|
uint32_t phase_b: 1; /**< Phase-B active level configuration */
|
|
uint32_t phase_leader: 1; /**< Which of the two phase signals[Phase A or Phase B] leads the other? */
|
|
uint32_t : 1;
|
|
uint32_t index: 2; /**< Index signal generation control. Use @ref XMC_POSIF_QD_INDEX_GENERATION_t to configure this field.*/
|
|
uint32_t : 26;
|
|
};
|
|
uint32_t qdc;
|
|
};
|
|
} XMC_POSIF_QD_CONFIG_t;
|
|
|
|
/**
|
|
* Defines POSIF hall sensor control initialization data structure.
|
|
* Use type @ref XMC_POSIF_HSC_CONFIG_t for this data structure.
|
|
* It used to initialize hall sensor mode configuration using \a PCONF register.
|
|
*/
|
|
typedef struct XMC_POSIF_HSC_CONFIG
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
uint32_t : 4;
|
|
uint32_t disable_idle_signal: 1; /**< Should idle signal be disabled upon wrong hall event? */
|
|
uint32_t : 11;
|
|
uint32_t sampling_trigger: 1; /**< Of HSDA and HSDB, which one is to be used to trigger POSIF to sample hall pattern? */
|
|
uint32_t sampling_trigger_edge: 1; /**< Which edge of the sampling trigger signal is to be considered? */
|
|
uint32_t : 6;
|
|
uint32_t external_error_port: 2; /**< Of the 4 external error ports, which one is to be considered? */
|
|
uint32_t external_error_enable: 1; /**< Should external errors lead to Wrong Hall event? */
|
|
uint32_t external_error_level: 1; /**< What should be the active level of external error signal? */
|
|
uint32_t: 4;
|
|
};
|
|
uint32_t hall_config;
|
|
};
|
|
} XMC_POSIF_HSC_CONFIG_t;
|
|
|
|
/**
|
|
* Defines POSIF multi-channel mode initialization data structure.
|
|
* Use type @ref XMC_POSIF_MCM_CONFIG_t for this data structure.
|
|
* It used to initialize multi channel mode configuration using \a PCONF register.
|
|
*/
|
|
typedef struct XMC_POSIF_MCM_CONFIG
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
uint32_t : 5;
|
|
uint32_t pattern_sw_update: 1; /**< should multi channel pattern updated by SW ? */
|
|
uint32_t : 12;
|
|
uint32_t pattern_update_trigger: 3; /**< Of the 8 update triggers, which one is to be considered? */
|
|
uint32_t pattern_trigger_edge: 1; /**< Which edge of the pattern update trigger is to be considered? */
|
|
uint32_t pwm_sync: 2; /**< Of the 4 pwm sync inputs, which one is to be considered? */
|
|
uint32_t : 8;
|
|
};
|
|
uint32_t mcm_config;
|
|
};
|
|
}XMC_POSIF_MCM_CONFIG_t;
|
|
|
|
/**
|
|
* Defines POSIF module initialization data structure.
|
|
* Use type @ref XMC_POSIF_CONFIG_t for this data structure.
|
|
* It is used to initialize POSIF module using \a PCONF register.
|
|
*/
|
|
typedef struct XMC_POSIF_CONFIG
|
|
{
|
|
union
|
|
{
|
|
struct
|
|
{
|
|
uint32_t mode: 2; /**< POSIF Operational mode. Use @ref XMC_POSIF_MODE_t to configure */
|
|
uint32_t :6;
|
|
uint32_t input0: 2; /**< Choice of input for Input-1 */
|
|
uint32_t input1: 2; /**< Choice of input for Input-2 */
|
|
uint32_t input2: 2; /**< Choice of input for Input-3 */
|
|
uint32_t :14;
|
|
uint32_t filter: 3; /**< Input filter configuration */
|
|
uint32_t: 1;
|
|
};
|
|
uint32_t pconf;
|
|
};
|
|
} XMC_POSIF_CONFIG_t;
|
|
|
|
/*Anonymous structure/union guard end*/
|
|
#if defined(__CC_ARM)
|
|
#pragma pop
|
|
#elif defined(__TASKING__)
|
|
#pragma warning restore
|
|
#endif
|
|
|
|
/*********************************************************************************************************************
|
|
* API Prototypes
|
|
********************************************************************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module of type @ref XMC_POSIF_t
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* De-asserts the POSIF module from reset and enables the clock.\n
|
|
* Configures \a PRCLR0 register's \a POSIF0RS or \a POSIF1RS bit field depends upon \a peripheral.
|
|
* If running on other than XMC45 device then it will ungate the peripheral clock.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is the first API which application must invoke to configure POSIF.
|
|
* It is internally called by XMC_POSIF_Init().
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Disable(),XMC_POSIF_Init() \n\n\n
|
|
*/
|
|
void XMC_POSIF_Enable(XMC_POSIF_t *const peripheral);
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module of type @ref XMC_POSIF_t
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Asserts the POSIF module into reset and disables the clock.\n
|
|
* If running on other than XMC45 device then in addition it will gate the peripheral clock.
|
|
* Configures \a PRCLR0 register's \a POSIF0RS or \a POSIF1RS bitfield depends upon \a peripheral.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Enable()\n\n\n
|
|
*/
|
|
void XMC_POSIF_Disable(XMC_POSIF_t *const peripheral);
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module of type @ref XMC_POSIF_t
|
|
* @param config Pointer to POSIF configuration data(operation mode,input selection and filter configuration)
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Initialize POSIF module with \a config.\n
|
|
* Configures POSIF global registers.This is the first API which application must invoke to configure POSIF.
|
|
* It sets up parameters common to all the POSIF modes - hall sensor,quadrature decoder and multi-channel modes of operation.
|
|
* Configures \a PCONF register with mode of operation,input selection and filter configuration.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_Init(),XMC_POSIF_QD_Init(),XMC_POSIF_MCM_Init() \n\n\n
|
|
*/
|
|
void XMC_POSIF_Init(XMC_POSIF_t *const peripheral, const XMC_POSIF_CONFIG_t * const config);
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param config Pointer to hall sensor control initialization data of type @ref XMC_POSIF_HSC_CONFIG_t
|
|
* @retval XMC_POSIF_STATUS_t Returns @ref XMC_POSIF_STATUS_OK if configured in Hall Sensor Mode
|
|
* else return @ref XMC_POSIF_STATUS_ERROR.
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Initializes hall sensor control mode.\n
|
|
* Configures \a PCONF register with which POSIF input trigger to be used for
|
|
* sampling hall pattern.Configures \a PCONF register for idle signal generation for wrong hall event.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* It is necessary to have called XMC_POSIF_Init first with Hall sensor mode before invocation of this API.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Init() \n\n\n
|
|
*/
|
|
XMC_POSIF_STATUS_t XMC_POSIF_HSC_Init(XMC_POSIF_t *const peripheral, const XMC_POSIF_HSC_CONFIG_t * const config);
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param config Pointer to quadrature decoder initialization data
|
|
* @retval XMC_POSIF_STATUS_t Returns quadrature mode initialization status of type @ref XMC_POSIF_STATUS_t
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Initializes quadrature decoder control mode.\n
|
|
* Configures \a PCONF register with quadrature mode using @ref XMC_POSIF_QD_MODE_t data structure.
|
|
* Initializes \a QDC register with quadrature mode configuration using @ref XMC_POSIF_QD_CONFIG_t structure.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* It is necessary to have called XMC_POSIF_Init first with Quadrature decoder mode before invocation of this API.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Init() \n\n\n
|
|
*/
|
|
XMC_POSIF_STATUS_t XMC_POSIF_QD_Init(XMC_POSIF_t *const peripheral, const XMC_POSIF_QD_CONFIG_t * const config);
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param config Pointer to quadrature decoder initialization data
|
|
* @retval XMC_POSIF_STATUS_t Returns multi channel pattern initialization status of type @ref XMC_POSIF_STATUS_t
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Initializes multi channel mode in Hall mode, standalone multi-channel mode and quadrature with multi-channel mode.\n
|
|
* Configures \a PCONF register with multi channel mode using @ref XMC_POSIF_MCM_CONFIG_t data structure.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* It is necessary to call XMC_POSIF_Init first before invocation of this API.
|
|
* For XMC_POSIF_MODE_HALL_SENSOR, it is necessary to have called XMC_POSIF_HSC_Init before invocation of this API.
|
|
* For XMC_POSIF_MODE_MCM_QD, it is necessary to have called XMC_POSIF_QD_Init before invocation of this API.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Init(),XMC_POSIF_HSC_Init(),XMC_POSIF_QD_Init() \n\n\n
|
|
*/
|
|
XMC_POSIF_STATUS_t XMC_POSIF_MCM_Init(XMC_POSIF_t *const peripheral, const XMC_POSIF_MCM_CONFIG_t * const config);
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param mode POSIF operating mode of type @ref XMC_POSIF_MODE_t
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures POSIF module for \a mode.\n
|
|
* Configures \a PCONF register's a\ FSEL bitfield with \a mode.
|
|
* Refer @ref XMC_POSIF_MODE_t for available options.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* POSIF module should be in stopped state while changing the operating mode.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Stop() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_SetMode(XMC_POSIF_t *const peripheral, const XMC_POSIF_MODE_t mode)
|
|
{
|
|
peripheral->PCONF = ((peripheral->PCONF & ~(uint32_t)(POSIF_PCONF_FSEL_Msk)) |
|
|
(((uint32_t)mode << POSIF_PCONF_FSEL_Pos) & (uint32_t)POSIF_PCONF_FSEL_Msk));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param input0 Choice of input for input 0 [0-3]
|
|
* @param input1 Choice of input for input 1 [0-3]
|
|
* @param input2 Choice of input for input 2 [0-3]
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures which input to be connected to POSIF module. \n
|
|
* Configures \a PCONF register's INSEL0,INSEL1,INSEL2 bit fields with source for the input connection for \a input0
|
|
* \a input1, \a input2 respectively.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* Configures which input is used for the Phase X or Hall input X function depending upon the module is
|
|
* set for Quadrature Decoder or Hall Sensor Mode.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Init() \n\n\n
|
|
*/
|
|
void XMC_POSIF_SelectInputSource(XMC_POSIF_t *const peripheral, const XMC_POSIF_INPUT_PORT_t input0,
|
|
const XMC_POSIF_INPUT_PORT_t input1, const XMC_POSIF_INPUT_PORT_t input2);
|
|
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Starts POSIF \a peripheral functional state machine.\n
|
|
* Starts POSIF state machine for \a peripheral.Configures \a PRUNS register's \a SRB bit field with 1.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* Global properties of POSIF along with mode specific properties should have been initialized before starting of POSIF
|
|
* FSM.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Stop(),XMC_POSIF_IsRunning() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_Start(XMC_POSIF_t *const peripheral)
|
|
{
|
|
peripheral->PRUNS = (uint32_t)POSIF_PRUNS_SRB_Msk;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Stops POSIF \a peripheral functional state machine.\n
|
|
* Stop POSIF functional state machine and clears current internal status of the \a peripheral.
|
|
* Configures \a PRUNC register's \a CRB bit field with 1.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Start(),XMC_POSIF_IsRunning() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_Stop(XMC_POSIF_t *const peripheral)
|
|
{
|
|
peripheral->PRUNC = (uint32_t)(POSIF_PRUNC_CRB_Msk | POSIF_PRUNC_CSM_Msk);
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval bool Returns false: IDLE, true:RUNNING
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns the status of POSIF module - Running or IDLE.\n
|
|
* Retrieves the status from \a PRUN register's \a SRB bit.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_Start(),XMC_POSIF_Stop() \n\n\n
|
|
*/
|
|
__STATIC_INLINE bool XMC_POSIF_IsRunning(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((bool)peripheral->PRUN);
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint8_t Returns last sampled hall sensor pattern. Range : [0-7]
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns last sampled hall sensor pattern of \a peripheral.\n
|
|
* Retrieves the last sampled hall sensor pattern from \a PDBG register's \a HSP bit field of \a peripheral.
|
|
* Applications can at any point in time retrieve the last sampled hall sensor pattern by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the hall sensor mode of operation.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_GetCurrentPattern(),XMC_POSIF_HSC_GetExpectedPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_HSC_GetLastSampledPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint8_t)((peripheral->PDBG) & POSIF_PDBG_HSP_Msk) >> POSIF_PDBG_HSP_Pos);
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint8_t Returns current hall sensor pattern. Range : [0-7]
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns current sampled hall sensor pattern of \a peripheral.\n
|
|
* Retrieves the current hall sensor pattern from \a HALP register's \a HCP bit field of \a peripheral.
|
|
* Applications can at any point in time retrieve the current hall sensor pattern by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the hall sensor mode of operation.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_GetLastSampledPattern(),XMC_POSIF_HSC_GetExpectedPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_HSC_GetCurrentPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint8_t)((peripheral->HALP & POSIF_HALP_HCP_Msk) >> POSIF_HALP_HCP_Pos));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint8_t Returns expected hall sensor pattern. Range : [0-7]
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns expected hall sensor pattern of \a peripheral.\n
|
|
* Retrieves the expected hall sensor pattern from \a HALP register's \a HEP bit field of \a peripheral.
|
|
* Applications can at any point in time retrieve the expected hall sensor pattern by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the hall sensor mode of operation.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_GetLastSampledPattern(),XMC_POSIF_HSC_GetCurrentPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_HSC_GetExpectedPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint8_t)((peripheral->HALP & POSIF_HALP_HEP_Msk) >> POSIF_HALP_HEP_Pos));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param pattern The hall sensor pattern to be programmed into current pattern [0-7]
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures current Hall sensor \a pattern of \a peripheral.\n
|
|
* Configures the Current hall sensor pattern on \a HALPS shadow register's \a HCPS bit field of \a peripheral.
|
|
* Applications can set at any point in time program the current hall sensor pattern by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the hall sensor mode of operation. It may be noted that the pattern is merely
|
|
* written to the shadow register. Transfer from the shadow register is based on a hardware transfer trigger
|
|
* or software trigger through API @ref XMC_POSIF_HSC_UpdateHallPattern().
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_GetCurrentPattern(),XMC_POSIF_HSC_SetExpectedPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_HSC_SetCurrentPattern(XMC_POSIF_t *const peripheral, const uint8_t pattern)
|
|
{
|
|
peripheral->HALPS = ((peripheral->HALPS & ~(uint32_t)(POSIF_HALPS_HCPS_Msk)) |
|
|
(((uint32_t)pattern << POSIF_HALPS_HCPS_Pos) & (uint32_t)POSIF_HALPS_HCPS_Msk));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param pattern The hall sensor pattern to be programmed into expected pattern [0-7]
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures the expected hall sensor \a pattern of \a peripheral.\n
|
|
* Applications can set at any point in time program the hall sensor expected patterns by invoking this API.
|
|
* Configures the expected hall sensor pattern on \a HALPS shadow register's \a HEPS bit field of \a peripheral.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the hall sensor mode of operation.It may be noted that the pattern is merely
|
|
* written to the shadow register. Transfer from the shadow register is based on a hardware transfer trigger
|
|
* or software trigger through API @ref XMC_POSIF_HSC_UpdateHallPattern().
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_GetExpectedPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_HSC_SetExpectedPattern(XMC_POSIF_t *const peripheral, const uint8_t pattern)
|
|
{
|
|
peripheral->HALPS = ((peripheral->HALPS & ~(uint32_t)(POSIF_HALPS_HEPS_Msk)) |
|
|
(((uint32_t)pattern << POSIF_HALPS_HEPS_Pos) & (uint32_t)POSIF_HALPS_HEPS_Msk));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param pattern_mask The hall sensor pattern mask [0-63] Format of mask: (expected_pattern << 3) | (current_pattern)
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures current and expected hall pattern of \a peripheral. \n
|
|
* Configures \a HALPS register with the Current and Expected hall sensor patterns in one operation.
|
|
* Applications can at any point in time program the current and expected hall sensor pattern by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the hall sensor mode of operation. It may be noted that the pattern is merely
|
|
* written to the shadow register. Transfer from the shadow register is based on a hardware transfer trigger
|
|
* or software trigger through API @ref XMC_POSIF_HSC_UpdateHallPattern().
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_SetExpectedPattern(),XMC_POSIF_HSC_SetCurrentPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_HSC_SetHallPatterns(XMC_POSIF_t *const peripheral, const uint8_t pattern_mask)
|
|
{
|
|
peripheral->HALPS = (uint32_t)(pattern_mask & (POSIF_HALPS_HCPS_Msk | POSIF_HALPS_HEPS_Msk));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Manually performs shadow transfer of hall sensor patterns.\n
|
|
* Configures \a MCMS register's \a STHR bit field with 1.
|
|
* Setting this bit to 1 leads to an immediate update of the fields \a HALP.HCP(Current pattern) and \a HALP.HEP(Expected pattern).
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* The transfer of hall sensor pattern shadow registers content to the sensor pattern register happens under two
|
|
* conditions. A hardware trigger starts the shadow transfer. Alternatively, the shadow transfer can be initiated
|
|
* by application software by means of invocation of this API.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_HSC_SetHallPatterns() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_HSC_UpdateHallPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
peripheral->MCMS = (uint32_t)POSIF_MCMS_STHR_Msk;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param pattern The 16b multi-channel pattern [0-65535]
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures \a MCSM register with Multi-Channel Pattern.\n
|
|
* This 16b multi-channel pattern which controls the 16 outputs of all slices of a CCU8 module.
|
|
* Transfer from the shadow register is based on a hardware transfer trigger
|
|
* or software trigger through API @ref XMC_POSIF_MCM_UpdateMultiChannelPattern().
|
|
* Every time that a Multi-Channel pattern transfer is triggered, this value is passed into the field \a MCM.MCMP of \a peripheral
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* It may be noted that the pattern is merely written to the shadow register.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_MCM_GetMultiChannelPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_MCM_SetMultiChannelPattern(XMC_POSIF_t *const peripheral, const uint16_t pattern)
|
|
{
|
|
peripheral->MCSM = pattern;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint16_t Returns configured multi channel pattern
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns configured multi channel pattern of \a peripheral. \n
|
|
* Retrieves the Multi-Channel Pattern from \a MCM register's MCMP bit field of \a peripheral
|
|
* Applications can at any point in time retrieve the multi-channel pattern by invoking this API.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_MCM_SetMultiChannelPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint16_t XMC_POSIF_MCM_GetMultiChannelPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint16_t)(peripheral->MCM & (uint32_t)POSIF_MCM_MCMP_Msk));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint16_t Returns configured multi channel pattern present in shadow transfer register
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns configured multi channel pattern in shadow register of \a peripheral. \n
|
|
* Retrieves the Multi-Channel Pattern from \a MCSM shadow register's \a MCMPS bit field.
|
|
* Applications can at any point in time retrieve the multi-channel pattern by invoking this API.
|
|
*
|
|
* It can be used when MCM is enabled.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_MCM_SetMultiChannelPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint16_t XMC_POSIF_MCM_GetShadowMultiChannelPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint16_t)(peripheral->MCSM & (uint32_t)POSIF_MCSM_MCMPS_Msk));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Performs shadow transfer of the Multi-Channel Pattern register by configuring \a MCMS register's \a STMR bit field.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* Transfer multi-channel pattern shadow registers content to the actual pattern register of \a peripheral. \n
|
|
* The transfer of multi-channel pattern shadow registers content to the actual pattern register happens under two
|
|
* conditions. A hardware trigger starts the shadow transfer. Alternatively, the shadow transfer can be initiated
|
|
* by application software by means of invocation of this API.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_MCM_SetMultiChannelPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_MCM_UpdateMultiChannelPattern(XMC_POSIF_t *const peripheral)
|
|
{
|
|
peripheral->MCMS |= (uint32_t)POSIF_MCMS_STMR_Msk;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Enables update of the Multi-Channel Pattern by software in standalone multi-channel mode.\n
|
|
* Enabling update of multi-channel pattern happens under two conditions. A hardware trigger enables this update.
|
|
* Alternatively, this can be enabled by software by means of invocation of this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* The update is not done immediately due to the fact that the trigger that synchronizes the update with the PWM is
|
|
* still needed.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_MCM_UpdateMultiChannelPattern() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_MCM_EnableMultiChannelPatternUpdate(XMC_POSIF_t *const peripheral)
|
|
{
|
|
peripheral->MCMS |= (uint32_t)POSIF_MCMS_MNPS_Msk;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval XMC_POSIF_QD_DIR_t Return direction of revolution of the motor of type @ref XMC_POSIF_QD_DIR_t
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns the direction of revolution of the motor.\n
|
|
* Retrieves direction from \a QDC register's \a DVAL bit field in quadrature mode.
|
|
* Applications can at any point in time retrieve the direction of rotation by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the quadrature decoder mode of operation.
|
|
*
|
|
*/
|
|
__STATIC_INLINE XMC_POSIF_QD_DIR_t XMC_POSIF_QD_GetDirection(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((XMC_POSIF_QD_DIR_t)((peripheral->QDC & POSIF_QDC_DVAL_Msk) >> POSIF_QDC_DVAL_Pos));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint8_t Returns current state of quadrature decoder[Phase B,Phase A]
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns the current state of phase signals in quadrature decoder mode of \a peripheral. \n
|
|
* Retrieves current state of the quadrature decoder from \a PDBG register's \a QCSV bit fields.
|
|
* Applications can at any point in time retrieve the current state of Phase A and Phase B signals
|
|
* by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the quadrature decoder mode of operation.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_QD_GetPreviousState() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_QD_GetCurrentState(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint8_t)((peripheral->PDBG & POSIF_PDBG_QCSV_Msk) >> POSIF_PDBG_QCSV_Pos));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint8_t Returns previous state of quadrature decoder[Phase B,Phase A]
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns the previous state of phase signals in quadrature decoder mode of \a peripheral. \n
|
|
* Retrieves previous state of the quadrature decoder from \a PDBG register's \a QPSV bit fields.
|
|
* Applications can at any point in time retrieve the previous state of Phase A and Phase B signals
|
|
* by invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the quadrature decoder mode of operation.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_QD_GetCurrentState() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_QD_GetPreviousState(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint8_t)((peripheral->PDBG & POSIF_PDBG_QPSV_Msk) >> POSIF_PDBG_QPSV_Pos));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @retval uint8_t Returns the index value.[1 - New rotation started, 0 - In-between]
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns the current index value in quadrature decoder mode of \a peripheral. \n
|
|
* Retrieves current index signal value of the quadrature decoder from \a PDBG register's \a IVAL bit field.
|
|
* Applications can at any point in time retrieve the current index signal value of the quadrature decoder by
|
|
* invoking this API.
|
|
*
|
|
* \par<b>Note</b><br>
|
|
* This is applicable only to the quadrature decoder mode of operation.
|
|
*
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_QD_GetCurrentIndexValue(XMC_POSIF_t *const peripheral)
|
|
{
|
|
return ((uint8_t)((peripheral->PDBG & POSIF_PDBG_IVAL_Msk) >> POSIF_PDBG_IVAL_Pos));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param event Event to be enabled
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Enables \a event generation of \a peripheral. \n
|
|
* Enables an IRQ generation capable \a event by configuring 1 to \a PFLGE register's \a event bit field.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_DisableEvent() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_EnableEvent(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event)
|
|
{
|
|
peripheral->PFLGE |= (uint32_t)1 << (uint8_t)event;
|
|
}
|
|
|
|
/**
|
|
* @brief Disables an IRQ generation capable event
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param event Event to be disabled
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Disables \a event generation of \a peripheral.\n
|
|
* Disables an IRQ generation capable \a event by configuring 0 to \a PFLGE register's \a event bit field.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_EnableEvent() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_DisableEvent(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event)
|
|
{
|
|
peripheral->PFLGE &= ~((uint32_t)1 << (uint8_t)event);
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param event Event to be manually asserted
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Manually generates \a event of \a peripheral. \n
|
|
* Manually asserts an IRQ generation capable event by configuring 1 to \a SPFLG register's \a event bit field.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_ClearEvent() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_SetEvent(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event)
|
|
{
|
|
peripheral->SPFLG = (uint32_t)1 << (uint8_t)event;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param event Event to be acknowledged
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Clears \a event by acknowledgment of \a peripheral. \n
|
|
* Acknowledges an IRQ event by configuring 1 to \a RPFLG register's \a event bit field.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_SetEvent() \n\n\n
|
|
*/
|
|
__STATIC_INLINE void XMC_POSIF_ClearEvent(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event)
|
|
{
|
|
peripheral->RPFLG = (uint32_t)1 << (uint8_t)event;
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param event Event ID to be checked for status
|
|
* @retval uint8_t Returns event status
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Returns \a event status of \a peripheral. \n
|
|
* Determines if IRQ event is asserted by retrieving data from \a PFLG register's \a event bit field.
|
|
*
|
|
* \par<b>Related APIs:</b><BR>
|
|
* XMC_POSIF_SetEvent(),XMC_POSIF_ClearEvent() \n\n\n
|
|
*/
|
|
__STATIC_INLINE uint8_t XMC_POSIF_GetEventStatus(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event)
|
|
{
|
|
return ((uint8_t)((peripheral->PFLG >> (uint8_t)event) & 1U));
|
|
}
|
|
|
|
/**
|
|
* @param peripheral Pointer to an instance of POSIF module
|
|
* @param event Event to be acknowledged of type @ref XMC_POSIF_IRQ_EVENT_t
|
|
* @param sr Service request line of type @ref XMC_POSIF_SR_ID_t
|
|
* @retval None
|
|
*
|
|
* \par<b>Description</b><br>
|
|
* Configures \a event to generate \a sr (service request) of \a peripheral. \n
|
|
* Binds an IRQ event to a service request line by configuring \a PFLGE register's \a event bit field.
|
|
*/
|
|
void XMC_POSIF_SetInterruptNode(XMC_POSIF_t *const peripheral, const XMC_POSIF_IRQ_EVENT_t event, const XMC_POSIF_SR_ID_t sr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* #if defined(POSIF0) */
|
|
|
|
#endif /* XMC_POSIF_H */
|