DSP TMS320F280049C之捕获eCAP(1)

       F280049C的捕获模块功能强大,既可以实现捕获功能的输入,又可以实现APWM的输出。作为捕获功能时,可以实现对信号脉宽、周期、频率、占空比的测量。还可以用来对外界边沿信号的捕获。

特点:

  1. 任何一个GPIO引脚都可以配置作为捕获的输入引脚,可设置为上升沿、下降沿捕获。使用起来很方便。
  2. 每一个捕获模块都拥有一个32位的时间戳(time stamps)计数器,计数频率为CPU主频。
  3. 每一个捕获模块都包含四个捕获事件寄存器,捕获到信号时会装载此时的计数值到32位的CAPx寄存器中。
  4. 捕获模式包含的中断源有:CEVT1-CEVT4中断、计数器溢出中断。

示例图如下所示:

(1)引脚配置

我配置的是GPIO5引脚作为捕获的输入,使用了X-BAR的INPUT1输入通道。

相关的配置如下所示:

void InitECapGpio(void)
{
    EALLOW;

    InputXbarRegs.INPUT1SELECT = 5;         //使用INPUT1--GPIO5引脚

    GpioCtrlRegs.GPADIR.bit.GPIO5 = 0;      //配置为输入
    GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;      //配置为上拉
    GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3;    //GPIO配置为非同步模式

    EDIS;
}
  1. 配置INPUT1对应到GPIO5引脚
  2. 配置GPIO5引脚作为上拉输入模式
  3. 配置eCAP的ECCTL0[INPUTSEL]寄存器

(2)eCAP初始化配置

程序源代码如下所示:

void InitECap(void)
{
    EALLOW;

    ECap1Regs.ECCTL0.bit.INPUTSEL = 0;                  //ECap1捕获引脚对应到INTPUT1

    ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;           //上升沿捕获
    ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;          //下降沿捕获
    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.CAPLDEN = EC_ENABLE;           //使能装载
    ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;            //输入信号不分频

    ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;        //配置为捕获模式
    ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;   //连续计数模式
    ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
    ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
    ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN;            //时间戳计数器自由运行

    ECap1Regs.ECEINT.bit.CEVT3 = 1;                     //事件3中断捕获使能

    EDIS;
}

 eCAP配置示意图如下所示:

配置步骤:

  1. 配置捕获信号极性,分别配置了事件1(上升沿捕获)、事件2(下升沿捕获)、事件3(上升沿捕获)
  2. 捕获到事件后计数器不清零。不使用Delta模式(捕获到事件后计数器清零)
  3. 捕获信号后计数器装载使能(捕获到事件后从计数器装载计数值到捕获寄存器)
  4. 输入信号分频设置
  5. 配置为捕获模式
  6. 配置为连续计数模式(捕获到事件后事件计数器加一,0->1->2->3->0)
  7. 只使用一个捕获模块,不需要使用同步功能(使用多个捕获模块是按需求使用捕获模块。同步功能主要是用来同步计数器)
  8. 配置计数器为连续计数模式(计数器从0x00000000->0xFFFFFFFF),计满最大值后会产生计数溢出中断(if enable)

(3)中断配置

本例程中配置的是事件3触发中断,相应的配置程序如下所示:

中断入口配置:

    EALLOW;  // This is needed to write to EALLOW protected register
    PieVectTable.ECAP1_INT = &ECap1ISR;
    EDIS;

    PieCtrlRegs.PIEIER4.bit.INTx1 = 1;
    IER |= M_INT4; // Enable CPU Interrupt 1
    PieCtrlRegs.PIEACK.bit.ACK4 = 1;

中断函数配置:

__interrupt void ECap1ISR(void)
{
    ECap1Regs.ECCLR.bit.INT = 1;

    Tst1 = ECap1Regs.CAP1;          //读取捕获时刻的计数值
    Tst2 = ECap1Regs.CAP2;
    Tst3 = ECap1Regs.CAP3;

    if(Tst2>Tst1&&Tst3>Tst2)
    {
        Proid = Tst3 - Tst1;
        duty = (Tst2 - Tst1)*1.0/Proid;
    }

    PieCtrlRegs.PIEACK.bit.ACK4 = 1;
}

 中断函数中主要是读取CAP寄存器中的值,用于计算信号的脉宽频率;还需要清除中断标志位,以及全局中断应答。

 

注:F280049C实现捕获功能的完整CCS程序我已经上传到了CSDN上,该程序主要是实现对方波信号脉宽、频率的测量。需要的可自行下载哈,程序中有不懂得地方都可以给我留言。下载链接如下:

https://download.csdn.net/download/fanxianyan1993/11978084

 

提问方式:有啥不懂的可以随时向我提问哈,扫描下方二维码我会在第一时间给大家回复的哈,谢谢。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章