LM4F232的QEI的position不正常,而Velocity正常



 

请问是由于什么bug引起的吗。代码如下。

int main()

{

  unsigned long pos,v;

  int d;

 // system clock 16MHz

 SysCtlClockSet( SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |

                  SYSCTL_XTAL_16MHZ);

 // Enable QEI Peripheral

 SysCtlPeripheralEnable(SYSCTL_PERIPH2_QEI0);

 // Enable GPIO F

 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

 QEIDisable(QEI0_BASE);

 SysCtlDelay(200);

 //

 GPIOPinTypeQEI(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_1);

 // Set F 0 and 1 to alternative use

 GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_0, GPIO_DIR_MODE_HW);//GPIO_DIR_MODE_HW

 GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_1, GPIO_DIR_MODE_HW);

 // config pins as QEI use

 GPIOPinConfigure(GPIO_PF0_PHA0);

 GPIOPinConfigure(GPIO_PF1_PHB0);

 QEIConfigure(QEI0_BASE,

              (QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_NO_RESET |

               QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP | QEI_CTL_FILTEN),

              10000000);

 QEIVelocityConfigure(QEI0_BASE,

                      QEI_VELDIV_1,

                      SysCtlClockGet()/5 );

 QEIEnable(QEI0_BASE);

 QEIVelocityEnable(QEI0_BASE);

 SysCtlDelay(200);

 while(1)

 {

   //Delay 0.2s

   SysCtlDelay(SysCtlClockGet()/15);

   pos= QEIPositionGet(QEI0_BASE);

   v = QEIVelocityGet(QEI0_BASE);

   d = QEIDirectionGet(QEI0_BASE);

   printf("The POS is %d .Velocity is %d.Direction is %d.\n",pos,v,d);

 }

 return 0;

}

ps:所谓的position不正常是,如果我设定maxpos为1000时,position读取出来是0或者1000.Direction读出来也不对,在编码器方向不改变时它也会改变。下面是我调试的截图,在这个过程中编码器的方向没有改变。