求一个开关按下开始 进入定时器中断 ,执行定时器中断程序让电机旋转, 按另一个按键停止程序,停止电机旋转。
ZHE wang4:
void main(void){ InitSysCtrl();//初始化系统控制
DINT;//禁止CPU中断
InitPieCtrl();//初始化PIE控制
IER = 0x0000;// IFR = 0x0000;//禁止CPU中断和清除CPU中断标志
InitPieVectTable();//初始化PIE向量表
EALLOW;//将定时器和函数写入中断向量表 PieVectTable.TINT0 = &cpu_timer0_isr; EDIS;
InitCpuTimers();//初始化定时器
ConfigCpuTimer(&CpuTimer0, 150, 10 );// 发生中断时间为100us
IER |= M_INT1;//CPU级中断使能位
InitECap();//初始化捕获引脚
InitEPwm();//初始化EPWM
EPwmSetup();
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;// 第一组 第7位 是timer0
EINT; //使能全局中断 ERTM; //允许实时中断
for(;;) { Key_Scan(); switch(KeyRec) { case 1: CpuTimer0Regs.TCR.all = 0x4001; //0100 0000 0000 0001 使用只写指令设置TSS = 0 将CPU定时器使能 并重启定时器 break;
case 2: stopmotor(); break;
} }
}
求一个开关按下开始 进入定时器中断 ,执行定时器中断程序让电机旋转, 按另一个按键停止程序,停止电机旋转。
ZHE wang4:
void Key_Scan(){ unsigned int i; GpioDataRegs.GPADAT.bit.GPIO26=0; for(i=0;i<50000;i++); //键盘消抖动 if(GpioDataRegs.GPADAT.bit.GPIO20==0)//扫描方向按键是否按下 { KeyRec=1; } else { if(GpioDataRegs.GPADAT.bit.GPIO21==0) { KeyRec=2; }
} GpioDataRegs.GPADAT.bit.GPIO26=1; while((GpioDataRegs.GPADAT.bit.GPIO20==0)|(GpioDataRegs.GPADAT.bit.GPIO21==0));}
求一个开关按下开始 进入定时器中断 ,执行定时器中断程序让电机旋转, 按另一个按键停止程序,停止电机旋转。
ZHE wang4:
void Key_Scan(){ unsigned int i; GpioDataRegs.GPADAT.bit.GPIO26=0; for(i=0;i<50000;i++); //键盘消抖动 if(GpioDataRegs.GPADAT.bit.GPIO20==0)//扫描方向按键是否按下 { KeyRec=1; } else { if(GpioDataRegs.GPADAT.bit.GPIO21==0) { KeyRec=2; }
} GpioDataRegs.GPADAT.bit.GPIO26=1; while((GpioDataRegs.GPADAT.bit.GPIO20==0)|(GpioDataRegs.GPADAT.bit.GPIO21==0));}
求一个开关按下开始 进入定时器中断 ,执行定时器中断程序让电机旋转, 按另一个按键停止程序,停止电机旋转。
ZHE wang4:
这是我用键盘扫描写的 可是依旧不行 求大神
求一个开关按下开始 进入定时器中断 ,执行定时器中断程序让电机旋转, 按另一个按键停止程序,停止电机旋转。
Hardy Hu:
你好:
建议这样做。在PWM中断里面做一个软件计数器,按键可以用IO中断或者在while(1)里面查询。
这样就可以通过这个软件计数器来进行时间控制。