//Cap.Init.c
#include "DSP2833x_Device.h" #include "DSP2833x_Examples.h"
void InitCapl(void) { ChoseCap(); InitECap1Gpio(); InitECap2Gpio(); SetCap1Mode(); SetCap2Mode(); }
void ChoseCap(void) { SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK=1; SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK=1; }
void InitECap1Gpio() { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO24=0; GpioCtrlRegs.GPAQSEL2.bit.GPIO24=1; GpioCtrlRegs.GPAMUX2.bit.GPIO24=1; EDIS; }
void InitECap2Gpio() { EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO25=0; GpioCtrlRegs.GPAQSEL2.bit.GPIO25=1; GpioCtrlRegs.GPAMUX2.bit.GPIO25=1; EDIS; }
void SetCap1Mode(void) { ECap1Regs.ECCTL1.bit.CAP1POL=0;//捕获沿选择。上升沿捕获 ECap1Regs.ECCTL1.bit.CAP2POL=0; ECap1Regs.ECCTL1.bit.CAP3POL=0; ECap1Regs.ECCTL1.bit.CAP4POL=0;
ECap1Regs.ECCTL1.bit.CTRRST1=0;//CAP1事件中重置计数器。0-在CAP1事件中不重置计数器 ECap1Regs.ECCTL1.bit.CTRRST2=0; ECap1Regs.ECCTL1.bit.CTRRST3=0; ECap1Regs.ECCTL1.bit.CTRRST4=0;
ECap1Regs.ECCTL1.bit.CAPLDEN=1; ECap1Regs.ECCTL1.bit.PRESCALE=0;//输入信号分频选择 ECap1Regs.ECCTL2.bit.CAP_APWM=0;//模式选择。0-捕捉模式,1-APWM模式 ECap1Regs.ECCTL2.bit.CONT_ONESHT=0;//1-单次模式,0-连续模式。 //疑惑:为什么配置为连续模式而不是单次模式 ECap1Regs.ECCTL2.bit.SYNCO_SEL=2;//同步输出选择。0-选择同步输入事件作为同步输出事件 //10或11:屏蔽同步信号输出 //疑惑:为什么屏蔽同步信号输出??? ECap1Regs.ECCTL2.bit.SYNCI_EN=0; //计数器(TSCTR)同步输入选择模式 ECap1Regs.ECEINT.all=0x0000; //失能中断 ECap1Regs.ECCLR.all=0xFFFF; //清除中断标志位 ECap1Regs.ECCTL2.bit.TSCTRSTOP=1;//启用计数器计数 ECap1Regs.ECEINT.bit.CEVT4=1; //???????????为什么只使能一路捕获事件4中断 }
void SetCap2Mode(void) { ECap2Regs.ECCTL1.bit.CAP1POL=1;//下降沿捕获 ECap2Regs.ECCTL1.bit.CAP2POL=1; ECap2Regs.ECCTL1.bit.CAP3POL=1; ECap2Regs.ECCTL1.bit.CAP4POL=1;
ECap2Regs.ECCTL1.bit.CTRRST1=0;//0-在CAP1事件中不重置计数器 ECap2Regs.ECCTL1.bit.CTRRST2=0; ECap2Regs.ECCTL1.bit.CTRRST3=0; ECap2Regs.ECCTL1.bit.CTRRST4=0;
ECap2Regs.ECCTL1.bit.CAPLDEN=1;//使能在捕获事件中加载CAP1-4寄存器时间 ECap2Regs.ECCTL1.bit.PRESCALE=0;//输入信号不分频 ECap2Regs.ECCTL2.bit.CAP_APWM=0;//0-选择CAP模式 ECap2Regs.ECCTL2.bit.CONT_ONESHT=0;//0-连续模式 ECap2Regs.ECCTL2.bit.SYNCO_SEL=2;//屏蔽同步信号输出 ECap2Regs.ECCTL2.bit.SYNCI_EN=0;//屏蔽同步输入操作 ECap2Regs.ECEINT.all=0x0000;//失能所有CAP中断 ECap2Regs.ECCLR.all=0xFFFF;//清除所有CAP中断标志 ECap2Regs.ECCTL2.bit.TSCTRSTOP=1;//1-计数器计数 ECap2Regs.ECEINT.bit.CEVT4=1;//1-捕获事件4中断使能 } |