请问是由于什么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读出来也不对,在编码器方向不改变时它也会改变。下面是我调试的截图,在这个过程中编码器的方向没有改变。
