DSP28335 ecap使用

来源:互联网 发布:微信订餐软件 编辑:程序博客网 时间:2024/05/18 03:54

输入捕获有4级捕获,最多可以得到4个捕获时间,捕获记性可以任意配置

可用于测速,测脉冲周期,频率,占空比等

cap.c

#include "cap.h"

void InitCap(void)
{
   InitECap5Gpio();
   InitECap6Gpio();
   SetCap5();
   SetCap6();
}

void SetCap5(void)
{
  ECap5Regs.ECCTL1.bit.CAP1POL = EC_RISING;  
  ECap5Regs.ECCTL1.bit.CAP2POL = EC_FALLING; //EC_RISING;
  ECap5Regs.ECCTL1.bit.CAP3POL = EC_RISING;
  ECap5Regs.ECCTL1.bit.CAP4POL = EC_FALLING;
  ECap5Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
  ECap5Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
  ECap5Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
  ECap5Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;
  ECap5Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
  ECap5Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
  ECap5Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
  ECap5Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;  //连续捕获
  ECap5Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
  ECap5Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
  ECap5Regs.ECEINT.all=0x0000;//stop all interrupt
  ECap5Regs.ECCLR.all=0xFFFF;//clare all flag
  ECap5Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;// 启动
  ECap5Regs.ECEINT.bit.CEVT4=1;// Enable cevt4 interrupt  //第4个捕获事件发生时,产生中断
}

void SetCap6(void)
{
  ECap6Regs.ECCTL1.bit.CAP1POL = EC_FALLING;
  ECap6Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
  ECap6Regs.ECCTL1.bit.CAP3POL = EC_FALLING;
  ECap6Regs.ECCTL1.bit.CAP4POL = EC_FALLING;
  ECap6Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
  ECap6Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
  ECap6Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
  ECap6Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;
  ECap6Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
  ECap6Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
  ECap6Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
  ECap6Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
  ECap6Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
  ECap6Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
  ECap6Regs.ECEINT.all=0x0000;//stop all interrupt
  ECap6Regs.ECCLR.all=0xFFFF;//clare all flag
  ECap6Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;// 启动
  ECap6Regs.ECEINT.bit.CEVT4=1;// Enable cevt4 interrupt
}

 Uint32 t1,t2,t3,t4,T1,T2;
interrupt void ISRCap5(void)
{
   // Acknowledge this interrupt to receive more interrupts from group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
    ECap5Regs.ECCLR.all=0xFFFF;//clare all flag
t1= ECap5Regs.CAP1;
t2= ECap5Regs.CAP2;
t3= ECap5Regs.CAP3;
    t4= ECap5Regs.CAP4;
    T1=t2-t1;T2=t3-t1;
}


Uint32 t5,t6,t7,t8,T3,T4;
interrupt void ISRCap6(void)
{
   // Acknowledge this interrupt to receive more interrupts from group 1
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
    ECap6Regs.ECCLR.all=0xFFFF;//clare all flag
t5= ECap6Regs.CAP1;
t6= ECap6Regs.CAP2;
t7= ECap6Regs.CAP3;
    t8= ECap6Regs.CAP4;
    T3=t6-t5;T4=t8-t7;

}



cap.h

#ifndef CAP_H_
#define CAP_H_

#include "main.h"

 extern Uint32 t1,t2,t3,t4,T1,T2;
 extern Uint32 t5,t6,t7,t8,T3,T4;

void InitCap(void);
void SetCap5(void);
void SetCap6(void);

interrupt void ISRCap5(void);
interrupt void ISRCap6(void);

#endif /* CAP_H_ */


main函数中要调用的

 InitCap(); //输入捕获初始化

PieVectTable. ECAP5_INT = &ISRCap5;  //输入捕获5

IER |= M_INT4;    //输入捕获
PieVectTable. ECAP6_INT = &ISRCap6;  //输入捕获6


 PieCtrlRegs.PIEIER4.bit.INTx5 = 1;   //输入捕获5中断
  PieCtrlRegs.PIEIER4.bit.INTx6 = 1;   //输入捕获6中断

0 0