DSP28335eCAP测频

阅读: 评论:0

DSP28335eCAP测频
F28335共有6组eCAP模块,每个eCAP不但具有捕获功能,⽽且还可⽤作PWM输出功能。F28335捕获模块的主要特征如下:
  1. 150MHz系统时钟的情况下,32位时基的时间分辨率为6.67ns;
  2. 4组32位的时间标志寄存器;
  3. 4级捕获事件序列,可以灵活配置捕获事件边沿极性;域网
  4. 四级触发事件均可以产⽣中断;
  5. 软件配置⼀次捕获可以最多得到4个捕获时间;
  6. 可连续循环4级捕获;
  7. 绝对时间捕获;
  8. 不同模式的时间捕获;
  9. 所有捕获都发⽣在⼀个输⼊引脚上;
  10. 如果eCAP模块不作捕获使⽤,可以配置成⼀个单通道输出的PWM模式。
eCAP模块中⼀个捕获通道完成⼀次捕获任务,需要以下关键资源:
  1、专⽤捕获输⼊引脚;
  2、32位时基(计数器);
  3、4*32位时间标签捕获寄存器;
  4、4级序列器,与外部eCAP引脚的上升/下降沿同步;
  5、4个事件可独⽴配置边沿极性;
  6、输⼊捕获信号预定标(2-62);
  7、⼀个2位的⽐较寄存器,⼀次触发后可以捕获4个时间标签事件;
  8、采⽤4级深度的循环缓冲器以进⾏连续捕获;
  9、4个捕获事件中任意⼀个都可以产⽣中断。
DSP2833x_SysCtrl.h
// Peripheral clock control register 1 bit definitions:
struct PCLKCR1_BITS  {    // bits  description
Uint16 EPWM1ENCLK:1;  // 0    Enable SYSCLKOUT to EPWM1
Uint16 EPWM2ENCLK:1;  // 1    Enable SYSCLKOUT to EPWM2
Uint16 EPWM3ENCLK:1;  // 2    Enable SYSCLKOUT to EPWM3
氮化硅结合碳化硅制品
Uint16 EPWM4ENCLK:1;  // 3    Enable SYSCLKOUT to EPWM4
Uint16 EPWM5ENCLK:1;  // 4    Enable SYSCLKOUT to EPWM5
Uint16 EPWM6ENCLK:1;  // 5    Enable SYSCLKOUT to EPWM6
Uint16 rsvd1:2;        // 7:6  reserved
Uint16 ECAP1ENCLK:1;  // 8    Enable SYSCLKOUT to ECAP1 系统时钟150MHz
Uint16 ECAP2ENCLK:1;  // 9    Enable SYSCLKOUT to ECAP2
Uint16 ECAP3ENCLK:1;  // 10    Enable SYSCLKOUT to ECAP3
Uint16 ECAP4ENCLK:1;  // 11    Enable SYSCLKOUT to ECAP4
Uint16 ECAP5ENCLK:1;  // 12    Enable SYSCLKOUT to ECAP5
Uint16 ECAP6ENCLK:1;  // 13    Enable SYSCLKOUT to ECAP6
Uint16 EQEP1ENCLK:1;  // 14    Enable SYSCLKOUT to EQEP1
Uint16 EQEP2ENCLK:1;  // 15    Enable SYSCLKOUT to EQEP2
};
  由上⾯代码可知eCAP模块的时钟为系统时钟,时基是6.67ns
#define EC_RISING    0          //上升沿电平值
#define EC_FALLING    1            //下降沿电平值
#define EC_ABS_MODE  0            //在CAPx事件中不重置计数器
毛竹片#define EC_ENABLE    1            //使能在捕获事件中加载CAP1-4寄存器的时间
#define EC_DIV1      00000      //输⼊信号分频选择不分频
#define EC_CAP_MODE  0            //ECAP⼯作于捕获⼯作模式
#define EC_CONTINUOUS 0            //0为连续模式  1为单次模式
#define EC_SYNCO_DIS  2            //同步输出选择:  10、11屏蔽同步信号输出
#define EC_DISABLE    0            //屏蔽同步输⼊操作
#define EC_RUN        1            //1计数器启动    0计数器停⽌
  以上代码为宏定义
void InitECAP()
{
SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;//使能eCAP1
SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;//使能eCAP2
//    SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;//使能eCAP3
//    SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;//使能eCAP4
双生筷//    SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;//使能eCAP5
//    SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1;//使能eCAP6
IER |= M_INT4;//
ECap1Regs.ECEINT.all = 0x0000;            // Disable all capture interrupts
ECap1Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags
ECap1Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped
SetCap1();
SetCap2();
}
void SetCap1()
{
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.CTRRST1 = EC_ABS_MODE;        //⼀级事件捕捉后不清零计数器
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;        //⼆级事件捕捉后不清零计数器
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;        //三级事件捕捉后不清零计数器
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;        //四级事件捕捉后不清零计数器
ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;            //使能事件捕捉时捕捉寄存器装载计数器值    ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;            //对外部信号不分频
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;        //捕捉模式ECAP
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;    //连续模式
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;        //屏蔽同步信号输出医学护理模型
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;            //屏蔽同步输⼊操作
ECap1Regs.ECEINT.all=0x0000;                        //关闭所有 CAP 中断
ECap1Regs.ECCLR.all=0xFFFF;                        //清除所有中断标志位
ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;            //启动 CAP 计数器
ECap1Regs.ECEINT.bit.CEVT4=1;                        //使能四级事件中断,即当发⽣第四次捕捉时进⼊中断}
  在四级事件后进中断
interrupt void ECAP1_INT_ISR(void)    // ECAP-1
{
// Insert ISR Code here
Uint32 t1,t2,t3,t4,T1,T2;
t1 = ECap1Regs.CAP1;
t2 = ECap1Regs.CAP2;
t3 = ECap1Regs.CAP3;
t4 = ECap1Regs.CAP4;
T1 = t2-t1;
T2 = t4-t3;
// To receive more interrupts from this PIE group, acknowledge this interrupt
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
ECap1Regs.ECCLR.all=0xFFFF;                //clare all flag
}

本文发布于:2023-06-16 16:23:45,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/141149.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:捕获   事件   捕捉   时间   模块   时钟   寄存器   输出
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图