原创 【TI博客大赛】28335 Ecap使用总结

2012-7-3 21:22 3199 8 12 分类: 模拟

28335 Ecap使用总结

28335 Ecap有好几个功能,

第一:捕获外部信号,可以设置为捕捉信号的上升还是下降沿,该功能一般最常用;

第二:计算外部方波信号的周期和占空比,在这里可以分别对CAP1CAP2CAP3CAP4上升沿或下降沿动作进行设置,当外部信号和当前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可以产生以下几个中断:

20120703212149519001.jpg

 

最后,外部PIECPU中断使能。

20120703211859150001.jpg

按照上述配置便可实现,ECAP捕获外部信号的功能,该功能可以实现很多算法,常用的如锁相角跟踪算法等等。

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户377235 2012-7-7 21:35

shouxia le

用户377235 2012-7-7 21:32

shouxia le

用户377235 2012-7-7 21:30

shouxia le

用户377235 2012-7-5 15:08

收下

相关推荐阅读
用户862116 2012-11-27 12:11
【博客大赛】周立功写给学单片机的年轻人
作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。您们千万不要等到毕业求职时才觉得自己能力太差,世界上从来...
用户862116 2012-11-27 08:44
【博客大赛】郭天祥的成长足迹
在哈尔滨工程大学六年,我在学校电子创新实验室呆了四年,这四年里创新实验室给我提供了良好的学习环境和完善的实验设备;在与众多电子爱好者的交流中,使我学到了更多的专业知识;在学校老师们的教导下,让我学...
用户862116 2012-11-20 15:16
【TI博客大赛】DSP高手的经验介绍
几个DSP高手的经验介绍,编写基于DSP程序的注意事项 一. 我是已经从事DSP开发有几年了,看到许多朋友对DSP的开发非常感兴取,我结合这几年对DSP的开发写一写自己的感受,一家之言,欢迎指...
用户862116 2012-11-20 15:13
【博客大赛】一个FPGA高手的总结
很早之前就想对这几个月工作经历写的东西,一是作为自己的总结,二是自己也很想将自己这段时间的一些经历和大家分享一下,希望对初学者而言能使得他们能少走一些弯路。只是公司里的事情很多,最近经常加班,所以...
用户862116 2012-11-16 10:18
【TI博客大赛】【原创】28035JTAG配置指导
JTAG口:TRST, TCK, TDI, TMS, TDO JTAG口与DSP距离最好再5cm,最多不超过15cm 1.  TRST,有内部下拉。当该引脚不接或拉低将处于功能模式,测试复位信号将被忽...
用户862116 2012-11-16 08:44
【TI博客大赛】【原创】28035晶振配置指导
晶振配置注意:(P47,图3-10. Clock Tree)自己的笔记~ 1.  片内无脚振荡器:内部集成两个10M的晶振,默认启动时是有效的且晶振1作为默认时钟源,若为省电,晶振需由用户手动关闭,震...
EE直播间
更多
我要评论
4
8
关闭 站长推荐上一条 /3 下一条