我用的是2407 DSP
把T2设置成定向增/减计数模式
我物体不动,但是程序结果显示物体老是往同一个方向漂移!!
不知咋回事?
感谢高手指点!
QEP初始化程序如下
void QepInit()
{
T2PR=0xFFFF;// 通用定时器2的周期寄存器为0XFFFF
T2CON=0x1870;// 通用定时器2为定向增减计数模式, 并且以正交编码脉冲
// 电路作为时钟源
T2CNT=0x7FFF; // 计数器初始值为65536/2=0x7FFF
WSGR=0x0000; / 不使能所有的等待状态
EVAIMRB=0x000C; //只使能定时器的上溢和下溢中断!
CAPCONA=0x0E00; // 使能EVA的QEP电路
}
其他程序
main()
{
int i;
SystemInit(); //系统初始化
QepInit(); //正交编码脉冲初始化
MCRC=MCRC & 0x0000; //IOPE0-7 IOPF0-7 设为I-O口模式
PEDATDIR=0xFF00; //所有IOPE0-7=0,
PFDATDIR=0xFF00; //所有IOPF0-7=0,
SCI_Init();
Timer1Init(); /*定时器1初始化*/
// Timer2Init(); /*定时器2初始化*/
asm(" CLRC INTM "); /* 开总中断 */
T1CON=T1CON|0x0040; // 启动定时器 T1使能
T2CON=T2CON|0x0040; // 启动定时器 T2使能
PEDATDIR=PEDATDIR ^ 0x0001; //IOPE0取反
PEDATDIR=PEDATDIR ^ 0x0001; //IOPE0取反
PFDATDIR=PFDATDIR ^ 0x0001; //IOPF0取反
PFDATDIR=PFDATDIR ^ 0x0001; //IOPF0取反
//转动方向控制
if(MyOrder==0x01 | MyOrder==0x03)
{ PEDATDIR=PEDATDIR | 0x0001;} //IOPE0取1 电机正转
if(MyOrder==0x02 | MyOrder==0x04)
{ PEDATDIR=PEDATDIR & 0xFFF0;} //IOPE0取0 电机反转
//模拟QEP脉冲,暂时IOPF0取1,IOPE0取1
// PEDATDIR=PEDATDIR | 0x0001;
// PFDATDIR=PFDATDIR | 0x0001;
while(1) //等待中断
{
//模拟QEP 正交编码脉冲
/* PEDATDIR=PEDATDIR ^ 0x0001; //IOPE0取反
for(kkk=0;kkk<300;kkk++){;}
PFDATDIR=PFDATDIR ^ 0x0001; //IOPF0取反
for(kkk=0;kkk<300;kkk++){;}
PEDATDIR=PEDATDIR ^ 0x0001; //IOPE0取反
for(kkk=0;kkk<300;kkk++){;}
PFDATDIR=PFDATDIR ^ 0x0001; //IOPF0取反
for(kkk=0;kkk<300;kkk++){;} */
}
}
void SystemInit()
{
asm(" SETC INTM "); /* 关闭总中断 */
asm(" CLRC SXM "); /* 禁止符号位扩展 */
asm(" CLRC CNF "); /* B0块映射为 on-chip DARAM*/
asm(" CLRC OVM "); /* 累加器结果正常溢出*/
SCSR1=0x83FE; /* 系统时钟CLKOUT=20*2=40M */
/* 打开ADC,EVA,EVB,CAN和SCI的时钟*/
WDCR=0x006F; /* 禁止看门狗,看门狗时钟64分频 */
KickDog(); /* 初始化看门狗 */
IFR=0xFFFF; /* 清除中断标志 */
IMR=0x0007; /* 打开中断INT 1 2 3*/
} |