POSIF moudle as cuadrature decoder

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
User12776
Level 1
Level 1
Hi all,

im using the posif module and an incremental encoder to do an ap with XMC1300 boot kit

i want to do generate an interrupt with the index signal. These are the signals of my encoder:
2560.attach

i think that i forget something because yhe interrupt is not working. can someone help?

this is my code:

#include
#include
#include
#include

#define A_POSIF P1_2
#define B_POSIF P1_1
#define I0_POSIF P1_0

XMC_SCU_CLOCK_CONFIG_t clock_config;
XMC_GPIO_CONFIG_t led1_config;

XMC_POSIF_CONFIG_t posif_config =
{
.mode = XMC_POSIF_MODE_QD, /**< POSIF Operational mode */
.input0 = XMC_POSIF_INPUT_PORT_A, /**< Choice of input for Input-1 */
.input1 = XMC_POSIF_INPUT_PORT_A, /**< Choice of input for Input-2 */
.input2 = XMC_POSIF_INPUT_PORT_A, /**< Choice of input for Input-3 */
.filter = XMC_POSIF_FILTER_DISABLED, /**< Input filter configuration */
};

/* Defines POSIF quadrature decoder initialization data structure. */
XMC_POSIF_QD_CONFIG_t posif_qd_config =
{
.mode = (XMC_POSIF_QD_MODE_t)XMC_POSIF_QD_MODE_QUADRATURE,
.phase_a = 0U, /* Phase A is active High */
.phase_b = 0U, /* Phase B is active High */
.phase_leader = 0U, /* Phase A is the leading signal for clockwise rotation */
.index = 0U /* No index marker generation on POSIF0.OUT3 */
};

/* GPIO Init handle for input Pin */
/* Port 14 digital pad input is disabled by default, this is to enable the digital pad input */
XMC_GPIO_CONFIG_t posif_encoder_inputport_config =
{
.mode = XMC_GPIO_MODE_INPUT_PULL_UP,
.output_level = XMC_GPIO_OUTPUT_LEVEL_HIGH,
};



void POSIF0_0_IRQHandler (void){
XMC_POSIF_ClearEvent(POSIF0, XMC_POSIF_IRQ_EVENT_INDX);

XMC_GPIO_ToggleOutput(XMC_GPIO_PORT0,6);
}


int main(void)
{
/* Configure Clock */
clock_config.pclk_src = XMC_SCU_CLOCK_PCLKSRC_MCLK; /*PCLK = MCLK*/
clock_config.fdiv = 0; /**< Fractional divider */
clock_config.idiv = 0; /**MCLK = 32MHz */

XMC_SCU_CLOCK_Init(&clock_config);

/* Configure LED1 */
led1_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL;
led1_config.output_level = XMC_GPIO_OUTPUT_LEVEL_LOW;
XMC_GPIO_Init(XMC_GPIO_PORT0,6, &led1_config);

/* POSIF Initialization */
XMC_POSIF_Init(POSIF0, &posif_config);
XMC_POSIF_QD_Init(POSIF0, &posif_qd_config);

/* GPIO initialization to enable digital pad input */
XMC_GPIO_Init(A_POSIF, &posif_encoder_inputport_config); /* A */
XMC_GPIO_Init(B_POSIF, &posif_encoder_inputport_config); /* B */
XMC_GPIO_Init(I0_POSIF, &posif_encoder_inputport_config); /* index */

/* IRQ config */
XMC_POSIF_SetInterruptNode(POSIF0, XMC_POSIF_IRQ_EVENT_INDX, XMC_POSIF_SR_ID_0);
XMC_POSIF_EnableEvent(POSIF0, XMC_POSIF_IRQ_EVENT_INDX);

NVIC_EnableIRQ(POSIF0_0_IRQn);
NVIC_SetPriority(POSIF0_0_IRQn, 3U);

XMC_POSIF_Start(POSIF0);

while(1U)
{

}
}


thanks for all.
0 Likes
0 Replies