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

 

提問方式:有啥不懂的可以隨時向我提問哈,掃描下方二維碼我會在第一時間給大家回覆的哈,謝謝。 

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