HardwareDriver/nuvoton/m451/stepper/interrupt.c

89 lines
1.8 KiB
C

#include "M451Series.h"
#include "global.h"
/**
* @brief PWM0 IRQ Handler
*
* @param None
*
* @return None
*
* @details ISR to handle PWM0 interrupt event
*/
uint32_t cnt = 0;
uint32_t out = 0;
uint32_t X_AxisStep = 0;
void PWM0P0_IRQHandler(void)
{
static uint32_t lastStep = 0;
if (X_AxisStep > 0){
X_AxisStep--;
}
if((X_AxisStep > 0) && (lastStep <= 0)){
PWM_EnableOutput(PWM0, PWM_CH_0_MASK | PWM_CH_1_MASK | PWM_CH_2_MASK | PWM_CH_3_MASK);
}else if((X_AxisStep <= 0) && (lastStep > 0)){
PWM_DisableOutput(PWM0, PWM_CH_0_MASK | PWM_CH_1_MASK | PWM_CH_2_MASK | PWM_CH_3_MASK);
}
lastStep = X_AxisStep;
// Clear channel 0 period interrupt flag
PWM_ClearPeriodIntFlag(PWM0, 0);
}
/**
* @brief GPIO PB IRQ
*
* @param None
*
* @return None
*
* @details The PB default IRQ, declared in startup_M451Series.s.
*/
void GPB_IRQHandler(void)
{
/* To check if PB.2 interrupt occurred */
if(GPIO_GET_INT_FLAG(PB, BIT2))
{
X_AxisStep = 200;
GPIO_CLR_INT_FLAG(PB, BIT2);
printf("PB.2 INT occurred.\n");
}
else
{
/* Un-expected interrupt. Just clear all PB interrupts */
PB->INTSRC = PB->INTSRC;
printf("Un-expected interrupts.\n");
}
}
/**
* @brief GPIO PC IRQ
*
* @param None
*
* @return None
*
* @details The PC default IRQ, declared in startup_M451Series.s.
*/
void GPC_IRQHandler(void)
{
/* To check if PC.5 interrupt occurred */
if(GPIO_GET_INT_FLAG(PC, BIT5))
{
X_AxisStep = 200;
GPIO_CLR_INT_FLAG(PC, BIT5);
printf("PC.5 INT occurred.\n");
}
else
{
/* Un-expected interrupt. Just clear all PC interrupts */
PC->INTSRC = PC->INTSRC;
printf("Un-expected interrupts.\n");
}
}