用的TM4C123BH6PM芯片,现在QEI0能读取速度,但是不能读取位置,QEI1完全正常,看了之前的帖子,怀疑是PD7的解锁问题,可是我的程序里是解锁了的,难道解的不对?另我用的Keil版本较低,不能选TM4C型号,所以随便选择了LM4F的型号,但是其他外设都好使,会不会和Keil有关?
程序初始化和配置代码如下:
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_QEI0);
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
MAP_GPIOPinConfigure(GPIO_PD3_IDX0);
MAP_GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_3);
//解锁PD7,这部分是软件自动生成的,不知配置的对不对。。。
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0x80;
MAP_GPIOPinConfigure(GPIO_PD7_PHB0);
MAP_GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_7);
MAP_GPIOPinConfigure(GPIO_PD6_PHA0);
MAP_GPIOPinTypeQEI(GPIO_PORTD_BASE, GPIO_PIN_6);
QEIConfigure(QEI0_BASE,(QEI_CONFIG_CAPTURE_A_B | QEI_CONFIG_RESET_IDX|QEI_CONFIG_QUADRATURE | QEI_CONFIG_NO_SWAP), 1999); /* 使用A,B通道共4个边沿计算速度,500线码盘*/
QEIVelocityConfigure(QEI0_BASE, QEI_VELDIV_1, v_t); /* 设置速度检测周期为 10ms=0.01秒,2.5MS */
QEIVelocityEnable(QEI0_BASE); /* 使能正交编码器的速度检测功能*/
QEIEnable(QEI0_BASE); /* 使能正交编码器 */
QEIIntEnable(QEI0_BASE,QEI_INTINDEX); /* 检测到索引脉冲时出发中断,用于找电机绝对位置*/
IntEnable(INT_QEI0);
IntMasterEnable();
Wellin Zhang:
Hi Jingqi
1. PD7的配置没有问题。
2. TM4C123BH6PM对应的LM4F型号为LM4F210H5QR,你可以选择该型号,另外将C/C++选项卡下的define预编译选项中中加入PART_LM4F210H5QR