工具/软件:Code Composer Studio
大家好。
我为频率计编写了一个代码、但它有一些问题。 因此、我决定发布这个新线程。
这里是我执行的代码。
#include "F2806x_Device.h" #include "F2806x_examples.h" #include "DSP28x_Project.h" #include #include #include #include extern UINT16 RamfuncsLoadStart; extern UINT16 RamfuncsLoadEnd; extern UINT16 RamfuncsRunStart; __interrupt void eCAP1_ISR (void); uint32 T1、T2、T3、T4、t; uint32 conteo; float f; void main (void) { InitSysCtrl(); memcpy (&RamfuncsRunStart、&RamfuncsLoadStart、(size_t)&RamfuncsLoadEnd); InitFlash(); EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO5=0;// Launchpad 上的 PIN35 GpioCtrlRegs.GPAQSEL1.bit.GPIO5=0; GpioCtrlRegs.GPAMUX1.bit.GPIO5=3; EDIS; Dint; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.ECAP1_INT =&eCAP1_ISR; EDIS; t1=0; T2=0; T3=0; T4 = 0; T=0; conteo = 0; IER |= M_INT4; PieCtrlRegs.PIEIER4.bit.INTx1 = 1; EINT; ERTM; EALLOW; ECap1Regs.ECEINT.ALL = 0x0000; ECap1Regs.ECCLR.ALL = 0x0000; ECap1Regs.ECCTL1.bit.CAP1POL= 0x1; ECap1Regs.ECCTL1.bit.CAP2POL= 0x1; ECap1Regs.ECCTL1.bit.CAP3POL= 0x1; ECap1Regs.ECCTL1.bit.CAP4POL= 0x1; ECap1Regs.ECCTL1.bit.CTRST1 = 0x1; ECap1Regs.ECCTL1.bit.CTRST2 = 0x1; ECap1Regs.ECCTL1.bit.CTRST3 = 0x1; ECap1Regs.ECCTL1.bit.CTRRST4 = 0x1; ECap1Regs.ECCTL1.bit.CAPLDEN = 0x1; ECap1Regs.ECCTL1.bit.prescale = 0x1; ECap1Regs.ECCTL2.bit.CAP_APWM = 0x0; ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0x0; ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0x2; ECap1Regs.ECCTL2.bit.SYNCI_EN = 0x0; ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0x1; ECap1Regs.ECEINT.BIT.CEVT4 = 1; GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; EDIS; for (;;) { EALLOW; GpioDataRegs.GPBSET.BIO34 = 1; DELAY_US (100000); GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1; DELAY_US (100000); f=180734328.8/t; EDIS; } } _interrupt void eCAP1_ISR (void) { conteo++; t1=ECap1Regs.CAP1; t2=ECap1Regs.CAP2; T3=ECap1Regs.CAP3; T4=ECap1Regs.CAP4; T=(t1+t2+t3+t4)/4; ECap1Regs.ECCLR.bit.CEVT4 = 1; ECap1Regs.ECCLR.bit.INT = 1; ECap1Regs.ECCTL2.bit.rearm = 1; PieCtrlRegs.PIEACX.ALL = PIEACK_group4; }
如您所见、我在下降沿使用了 eCAP 模块和 CAP1-CAP4负载、然后我添加了4个捕捉、得到了平均值。
编号 180734328.8来自频率为1Hz 的计时器戳。
它的误差为10MHz。
此代码的问题是、当我在 LAUNCHXL-F28069M 的35引脚中输入频率低于10Hz 的信号时、数据更新速度很慢、数据冻结、我认为是在 CAP1- CAP4生成时、 然后、数据会自行更新、然后所有的东西都很好。
我认为还有其他方法可以做到、如果是、请提供一些指南、或者、如果可以优化、请提供一些指南。
此致
Mike