大家好、
客户提出的问题需要您的帮助:
大家好、我报告了使用283352/28035捕获500Hz 以下信号时发生的错误、我不知道具体原因是什么、因为它是500Hz-500kHz 捕获中的稳定捕获。 我查看了手册和数据手册、以查看计数器是否未及时重置为零、但在配置寄存器后未进行任何更改、然后我删除了配置代码、该代码是根据28335例程进行修改的。 我希望我的朋友能多教些东西。 以下是错误症状和代码:
void delay_1ms (uint16 t)
{
while (t-)
{
DELAY_US (1000);
}
}
中断空 ISRCap1 (空)
{
PieCtrlRegs.PIEACX.ALL = PIEACK_group4;// 0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
ECap1Regs.ECCLR.All=0xFFFF;//写0XFFFF对CAP1中断清除寄存器进行清除操作
t1= ECap1Regs.CAP1;//赋值
t2= ECap1Regs.CAP2;//赋值
T3= ECap1Regs.CAP3;//赋值
t4= ECap1Regs.CAP4;//赋值
t1=t2-t1;t2=t4-t3;
f=1/(float)(t1)*150000000;
}
中断空 ISRCap2 (空)
{
PieCtrlRegs.PIEACX.ALL = PIEACK_group4;// 0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
ECap2Regs.ECCLR.All=0xFFFF;//写0XFFFF对CAP2中断清除寄存器进行清除操作
T5= ECap2Regs.CAP1;//赋值
t6= ECap2Regs.CAP2;//赋值
T7= ECap2Regs.CAP3;//赋值
T8= ECap2Regs.CAP4;//赋值
t3=T6-T5;t1=T8-t7;
}
ap.c:
#include "bsp_cap.h"
#if DSP28_28335
// ECCTL1 (ECAP 控制寄存器1)
//================================================
// CAPxPOL 位
#define EC_RISING 0x0
#define EC_FALLING 0x1
// CTRRSTx 位
#define EC_ABS_MODE 0x0
#define EC_DELT_MODE 0x1
//预分频位
#define EC_BYPASS 0x0
#define EC_DIV1 0x0
#define EC_DIV2 0x1
#define EC_DIV4 0x2
#define EC_DIV6 0x3
#define EC_DIV8 0x4
#define EC_DIV10 0x5
// ECCTL2 (ECAP 控制寄存器2)
//================================================
// CONT/OneShot 位
#define EC_Continous 0x0
#define EC_OneShot 0x1
// STOPVAUE 位
#define EC_EVENT1 0x0
#define EC_EVENT2 0x1
#define EC_EVENT3 0x2
#define EC_EVENT4 0x3
//重新启用位
#define EC_ARM 0x1
// TSCTRSTOP 位
#define EC_FREEZE 0x0
#define EC_RUN 0x1
// SYNCO_SEL 位
#define EC_SYNCIN 0x0
#define EC_CTR_PRD 0x1
#define EC_SYNCO_DIS 0x2
// CAP/APWM 模式位
#define EC_CAP_MODE 0x0
#define EC_APWM_MODE 0x1
// APWMPOL 位
#define EC_ACTV_HI 0x0
#define EC_ACTV_LO 0x1
//通用
#define EC_DISABLE 0x0
#define EC_ENABLE 0x1
#define EC_FORCE 0x1
#endif //结束 DSP28_28335
空 InitCapl (空)
{
ChoseCap();//给CAP分配时钟
InitECap1Gpio();//初始化CA1的GPIO
InitECap2Gpio();//初始化CA2的GPIO
SetCap1Mode();
SetCap2Mode();
}
空压盖(空)
{
SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK=1;//启用到 CAP1的时钟
SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK=1;
//SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK=1;
//SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK=1;
//SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK=1;
//SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK=1;
}
void SetCap1模式(void)
{
ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CTRST1 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRST2 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRST3 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRST4 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.prescale = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUCT;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
ECap1Regs.ECEINT.All=0x0000;//停止所有中断
ECap1Regs.ECCLR.All=0xFFFF;//Clare all 标志
ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;//启动
ECap1Regs.ECEINT.BIT.CEVT4=1;//启用 cevt4中断
}
void SetCap2Mode (void)
{
ECap2Regs.ECCTL1.bit.CAP1POL = EC_FALLING;
ECap2Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap2Regs.ECCTL1.bit.CAP3POL = EC_FALLING;
ECap2Regs.ECCTL1.bit.CAP4POL = EC_FALLING;
ECap2Regs.ECCTL1.bit.CTRST1 = EC_ABS_MODE;
ECap2Regs.ECCTL1.bit.CTRST2 = EC_ABS_MODE;
ECap2Regs.ECCTL1.bit.CTRST3 = EC_ABS_MODE;
ECap2Regs.ECCTL1.bit.CTRST4 = EC_ABS_MODE;
ECap2Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap2Regs.ECCTL1.bit.prescale = EC_DIV1;
ECap2Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap2Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUCT;
ECap2Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap2Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
ECap2Regs.ECEINT.All=0x0000;//停止所有中断
ECap2Regs.ECCLR.All=0xFFFF;//Clare all 标志
ECap2Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;//启动
ECap2Regs.ECEINT.BIT.CEVT4=1;//启用 cevt4中断
}
结果:

您能否查看此案例?谢谢。
此致、
本
