//配置 ECAP1
ECap1Regs.ECEINT.all = 0x0000; // 禁止所有捕获中断
ECap1Regs.ECCLR.all = 0xFFFF; // 清除所有捕获中断
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // 禁止CAP1-CAP4 寄存器装载,相当于禁止写
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // 停止捕获时基计数器
ECap1Regs.CTRPHS = 0; // 相位0
ECap1Regs.TSCTR = 0;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0; // 连续运行模式
ECap1Regs.ECCTL2.bit.STOP_WRAP = 1; // CAP1和CAP2循环捕获,CAP3和CAP4不使用
ECap1Regs.ECCTL1.bit.CAP1POL = 1; // 下降沿
ECap1Regs.ECCTL1.bit.CAP2POL = 0; // 上降沿
ECap1Regs.ECCTL1.bit.CTRRST1 = 0; // CTRRST1~CTRRST4上电值都是0,故可以不配置,定时器CTR的计数范围为0~0xffffffff
ECap1Regs.ECCTL2.bit.SYNCI_EN = 1; // 采用同步输入
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // 同步信号直通输出
//配置 ECAP2
ECap2Regs.ECEINT.all = 0x0000; // 禁止所有捕获中断
ECap2Regs.ECCLR.all = 0xFFFF; // 清除所有捕获中断
ECap2Regs.ECCTL1.bit.CAPLDEN = 0; // 禁止CAP1-CAP4 寄存器装载,相当于禁止写
ECap2Regs.ECCTL2.bit.TSCTRSTOP = 0; // 停止捕获时基计数器
ECap2Regs.CTRPHS = 0; // 相位0
ECap2Regs.TSCTR = 0;
ECap2Regs.ECCTL2.bit.CONT_ONESHT = 0; // 连续运行模式
ECap2Regs.ECCTL2.bit.STOP_WRAP = 1; // CAP1捕获后停止
ECap2Regs.ECCTL1.bit.CAP1POL = 1; // 下降沿
ECap2Regs.ECCTL1.bit.CAP2POL = 0; // 上降沿
ECap2Regs.ECCTL1.bit.CTRRST1 = 0; // CAP1时计数器不清零
ECap2Regs.ECCTL2.bit.SYNCI_EN = 1; // 采用同步输入
ECap2Regs.ECCTL2.bit.SYNCO_SEL = 3; // 同步信号禁止输出
//启动ECAP1,ECAP2
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // 启动定时器
ECap2Regs.ECCTL2.bit.TSCTRSTOP = 1; // 启动定时器
ECap1Regs.ECCTL2.bit.SWSYNC = 1; // 时钟同步 ,不知能否实现eCAP1的定时器和eCAP2的定时器同步??
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; // 使能CAP1-CAP4 寄存器装载
ECap2Regs.ECCTL1.bit.CAPLDEN = 1; // 使能CAP1-CAP4 寄存器装载
问题:
本人前面的代码不知是否有误,且2806x外设手册中并没有发现eCap1的SYNCO到了哪个模块,故有疑问:请问下面哪种理解是正确的?
理解1:eCAP1的SYNCO–>eCAP2的SYNC_Input
eCAP2的SYNCO–>eCAP3的SYNC_Input
eCAP3的SYNCO–>eCAP4的SYNC_Input
eCAP4的SYNCO–> ???
理解2:eCAP1的SYNCO–> ???
eCAP2的SYNCO–>eCAP1的SYNC_Input
eCAP3的SYNCO–>eCAP2的SYNC_Input
eCAP4的SYNCO–>eCAP3的SYNC_Input
理解3:eCAP1、eCAP2、eCAP3、eCAP4的SYNCO都是用于和其它外设同步,SYNC_Input 是由其它外设(比如ePWM)过来的同步信号,他们四个之间并没有理解1和理解2这种级联情况
Eric Ma:
通过查看手册,我认为同步信号输入或软件同步功能,这个信号是同时输入到四个ECAP模块的。不是级联的方式。
ERIC