标题:
28335 Ecap使用总结
[打印本页]
作者:
m1_ljp
时间:
2012-10-22 17:06
标题:
28335 Ecap使用总结
28335 Ecap
有好几个功能,
第一:捕获外部信号,可以设置为捕捉信号的上升还是下降沿,该功能一般最常用;
第二:计算外部方波信号的周期和占空比,在这里可以分别对
CAP1
、
CAP2
、
CAP3
和
CAP4
上升沿或下降沿动作进行设置,当外部信号和当前
CAPx
设置一致时,并将当前
CTR
值赋给
CAPx
寄存器。这样,可以根据四个
CAPx
寄存器里面的值,进行捕获的方波信号周期和占空比的计算。另外,
CTR
的变化模式取决于
ECap6Regs.ECCTL1.bit.CTRRSTx
的设置,如果为‘
0
’,则动作匹配时,不复位
CTR
,将一直往上增加,直至溢出;如果为‘
1
’,则动作匹配时,复位
CTR
。
如果,一个程序当中,四个
CPAx
均用到的话,假如:
CPA1
:上升沿
CPA2
:下降沿
CPA3
:上升沿
CPA4
:下降沿
对于输入信号,第一上升沿时,
CPA1
动作,并且产生
CEVT1
事件(如果该事件中断使能的话,则可以进入中断),同时将
CTR
数加载到
CPA1
中;接下来,下降沿时,
CPA2
动作,并且产生
CEVT2
事件(如果该事件中断使能的话,则可以进入中断),同时将
CTR
数加载到
CPA2
中;再接下来,上升沿时,
CPA3
动作,并且产生
CEVT3
事件(如果该事件中断使能的话,则可以进入中断),同时将
CTR
数加载到
CPA3
中;再接下来,下降沿时,
CPA4
动作,并且产生
CEVT4
事件(如果该事件中断使能的话,则可以进入中断),同时将
CTR
数加载到
CPA4
中;接下来在从
CPA1
往返动作。这时在一个循环里,可以利用四个
CAPx
里面的值进行周期和占空比的计算。
如果,程序不需要计算输入信号的周期和占空比,那么可能只要用到一个
CAPx
,这时就更简单了。(如下面觉得例子),这时
CTR
可以不运行(
ECap6Regs.ECCTL2.bit.TSCTRSTOP = EC_FREEZE
),
CAPx
寄存器加载也可以禁止(
ECap6Regs.ECCTL1.bit.CAPLDEN = EC_DISABLE;
)。
以上
2
个其实均为
CAP
口捕获功能,对应的
I/O
口为输入。
ECAP
口另外一个功能是产生
APWM
,和上述
2
个有很大的差别,对应的
I/O
口为输出。由于上面
2
个比较常用,特别是第一个,所以接下来,对设置
CAP
口为捕获功能的配置进行相关说明,以
Ecap
为例:
首先要设置
GPIO
引脚:
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;
// Enable pull-up on GPIO1 (CAP6)
// GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0;
// Enable pull-up on GPIO49 (CAP6)
// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.
GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0;
// Synch to SYSCLKOUT GPIO1 (CAP6)
// GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 0; // Synch to SYSCLKOUT GPIO49 (CAP6)
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 2;
// Configure GPIO1 as CAP6
// GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 1;
// Configure GPIO49 as CAP6
EDIS;
Ecap6
的外部信号输入引脚,可以选择
GPIO1
或
.GPIO49
。
其次,功能寄存器设置:
ECap6Regs.ECEINT.all = 0x0000;
// Disable all capture interrupts
ECap6Regs.ECCLR.all = 0xFFFF;
// Clear all CAP interrupt flags
ECap6Regs.ECCTL1.bit.CAPLDEN = EC_DISABLE; // Disable CAP1-CAP4 register loads
ECap6Regs.ECCTL2.bit.TSCTRSTOP = EC_FREEZE; // Make sure the counter is stopped
// Configure peripheral registers
ECap6Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
//CAP mode
ECap6Regs.ECCTL2.bit.CONT_ONESHT = EC_ONESHOT; // One-shot
ECap6Regs.ECCTL2.bit.STOP_WRAP = EC_EVENT1;
// Stop at 1 events
ECap6Regs.ECCTL1.bit.CAP1POL = EC_FALLING;
// Falling edge
ECap6Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
// Disable sync in
ECap6Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;// Disable sync out signal
ECap6Regs.ECCTL2.bit.
REARM
= 1;
// Arm one-shot
ECap6Regs.ECEINT.bit.CEVT1 = 1;
// Enable 1 events interrupt
其中,
ECap6Regs.ECCTL2.bit.REARM
这位决定
ECAP
口能否多次捕捉,外部信号的边沿。如果在中断响应函数里面没有“
ECap6Regs.ECCTL2.bit.REARM = 1;
”语句,则该
ECAP
口以后不响应信号边沿中断;如果为有“
ECap6Regs.ECCTL2.bit.REARM = 1;
”语句,则该
ECAP
口可以继续响应下一次中断。
ECAP
可以产生以下几个中断:
最后,外部
PIE
和
CPU
中断使能。
按照上述配置便可实现,
ECAP
捕获外部信号的功能,该功能可以实现很多算法,常用的如锁相角跟踪算法等等。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0