#include "ti_msp_dl_config.h"
int32_t EncoderCnt = 0;//编码器计数值
volatile bool EncoderCnt_Flag_A = 1;//四倍频QEA触发切换标志位
volatile bool EncoderCnt_Flag_B = 1;//四倍频QEB触发切换标志位
int main(void)
{
SYSCFG_DL_init();
/* Enable Interrupt for both GPIOA ports */
NVIC_EnableIRQ(GPIO_Encoder_INT_IRQN);//使能GPIOA中断
while (1) {
}
}
void GROUP1_IRQHandler(void)//编码器四倍频
{
uint32_t gpioA = DL_GPIO_getEnabledInterruptStatus(GPIO_Encoder_PORT, GPIO_Encoder_PIN_A_PIN | GPIO_Encoder_PIN_B_PIN);
if ((gpioA & GPIO_Encoder_PIN_A_PIN) == GPIO_Encoder_PIN_A_PIN) {//其他写法(gpioA & GPIO_Encoder_PIN_A_PIN) != 0 或 gpioA & GPIO_Encoder_PIN_A_PIN
if(EncoderCnt_Flag_A){
if(DL_GPIO_readPins(GPIO_Encoder_PORT, GPIO_Encoder_PIN_B_PIN)){
EncoderCnt--;
}else{
EncoderCnt++;
}
EncoderCnt_Flag_A = 0;
DL_GPIO_setLowerPinsPolarity(GPIO_Encoder_PORT, DL_GPIO_PIN_4_EDGE_FALL);
}else {
if(DL_GPIO_readPins(GPIO_Encoder_PORT, GPIO_Encoder_PIN_B_PIN)){
EncoderCnt++;
}else{
EncoderCnt--;
}
EncoderCnt_Flag_A = 1;
DL_GPIO_setLowerPinsPolarity(GPIO_Encoder_PORT, DL_GPIO_PIN_4_EDGE_RISE);
}
DL_GPIO_clearInterruptStatus(GPIO_Encoder_PORT, GPIO_Encoder_PIN_A_PIN);
}
if ((gpioA & GPIO_Encoder_PIN_B_PIN) == GPIO_Encoder_PIN_B_PIN) {
if(EncoderCnt_Flag_B){
if(DL_GPIO_readPins(GPIO_Encoder_PORT, GPIO_Encoder_PIN_A_PIN)){
EncoderCnt++;
}else{
EncoderCnt--;
}
EncoderCnt_Flag_B = 0;
DL_GPIO_setLowerPinsPolarity(GPIO_Encoder_PORT, DL_GPIO_PIN_5_EDGE_FALL);
}else{
if(DL_GPIO_readPins(GPIO_Encoder_PORT, GPIO_Encoder_PIN_A_PIN)){
EncoderCnt--;
}else{
EncoderCnt++;
}
EncoderCnt_Flag_B = 1;
DL_GPIO_setLowerPinsPolarity(GPIO_Encoder_PORT, DL_GPIO_PIN_5_EDGE_RISE);
}
DL_GPIO_clearInterruptStatus(GPIO_Encoder_PORT, GPIO_Encoder_PIN_B_PIN);
}
}
学习记录 / MSPM0