This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

APWM

Other Parts Discussed in Thread: CONTROLSUITE

请问ECAP里面用来产生APWM的模块,捕获脉冲是从哪个GPIO口输入的?

  • 这是ECAP文件配置的程序:

    // TI File $Revision: /main/2 $
    // Checkin $Date: March 15, 2007   16:54:36 $
    //###########################################################################
    //
    // FILE:   DSP2833x_ECap.c
    //
    // TITLE:  DSP2833x eCAP Initialization & Support Functions.
    //
    //###########################################################################
    // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
    // $Release Date: August 4, 2009 $
    //###########################################################################

    #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
    #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

    //---------------------------------------------------------------------------
    // InitECap:
    //---------------------------------------------------------------------------
    // This function initializes the eCAP(s) to a known state.
    //
    void InitECap(void)
    {
       // Initialize eCAP1/2/3

       //tbd...

    }

    //---------------------------------------------------------------------------
    // Example: InitECapGpio:
    //---------------------------------------------------------------------------
    // This function initializes GPIO pins to function as ECAP pins
    //
    // Each GPIO pin can be configured as a GPIO pin or up to 3 different
    // peripheral functional pins. By default all pins come up as GPIO
    // inputs after reset.
    //
    // Caution:
    // For each eCAP peripheral
    // Only one GPIO pin should be enabled for ECAP operation.
    // Comment out other unwanted lines.

    void InitECapGpio()
    {

       InitECap1Gpio();
    #if (DSP28_ECAP2)
       InitECap2Gpio();
    #endif // endif DSP28_ECAP2
    #if (DSP28_ECAP3)
       InitECap3Gpio();
    #endif // endif DSP28_ECAP3
    #if (DSP28_ECAP4)
       InitECap4Gpio();
    #endif // endif DSP28_ECAP4
    #if (DSP28_ECAP5)
       InitECap5Gpio();
    #endif // endif DSP28_ECAP5
    #if (DSP28_ECAP6)
       InitECap6Gpio();
    #endif // endif DSP28_ECAP6
    }

    void InitECap1Gpio(void)
    {
       EALLOW;
    /* Enable internal pull-up for the selected pins */
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.

    // GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;      // Enable pull-up on GPIO5 (CAP1)
       GpioCtrlRegs.GPAPUD.bit.GPIO24 = 1;     // Disable pull-up on GPIO24 (CAP1)
    // GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0;     // Enable pull-up on GPIO34 (CAP1)


    // Inputs are synchronized to SYSCLKOUT by default.
    // Comment out other unwanted lines.

    // GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 0;    // Synch to SYSCLKOUT GPIO5 (CAP1)
       GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0;   // Synch to SYSCLKOUT GPIO24 (CAP1)
    // GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 0;   // Synch to SYSCLKOUT GPIO34 (CAP1)

    /* Configure eCAP-1 pins using GPIO regs*/
    // This specifies which of the possible GPIO pins will be eCAP1 functional pins.
    // Comment out other unwanted lines.

    // GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 3;     // Configure GPIO5 as CAP1
       GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 1;    // Configure GPIO24 as CAP1
    // GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 1;    // Configure GPIO24 as CAP1

        EDIS;
    }

    #if DSP28_ECAP2
    void InitECap2Gpio(void)
    {
       EALLOW;
    /* Enable internal pull-up for the selected pins */
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.

    //   GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;     // Enable pull-up on GPIO7 (CAP2)
       GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;    // Enable pull-up on GPIO25 (CAP2)
    // GpioCtrlRegs.GPBPUD.bit.GPIO37 = 0;    // Enable pull-up on GPIO37 (CAP2)

    // Inputs are synchronized to SYSCLKOUT by default.
    // Comment out other unwanted lines.

    //  GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 0;    // Synch to SYSCLKOUT GPIO7 (CAP2)
       GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0;   // Synch to SYSCLKOUT GPIO25 (CAP2)
    // GpioCtrlRegs.GPBQSEL1.bit.GPIO37 = 0;   // Synch to SYSCLKOUT GPIO37 (CAP2)

    /* Configure eCAP-2 pins using GPIO regs*/
    // This specifies which of the possible GPIO pins will be eCAP2 functional pins.
    // Comment out other unwanted lines.

    //   GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 3;    // Configure GPIO7 as CAP2
       GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 1;   // Configure GPIO25 as CAP2
    // GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3;   // Configure GPIO37 as CAP2

        EDIS;
    }
    #endif // endif DSP28_ECAP2

    #if DSP28_ECAP3
    void InitECap3Gpio(void)
    {
       EALLOW;

    /* Enable internal pull-up for the selected pins */
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.

    //   GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;      // Enable pull-up on GPIO9 (CAP3)
       GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;     // Enable pull-up on GPIO26 (CAP3)

    // Inputs are synchronized to SYSCLKOUT by default.
    // Comment out other unwanted lines.

    //   GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 0;    // Synch to SYSCLKOUT GPIO9 (CAP3)
       GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 0;   // Synch to SYSCLKOUT GPIO26 (CAP3)

    /* Configure eCAP-3 pins using GPIO regs*/
    // This specifies which of the possible GPIO pins will be eCAP3 functional pins.
    // Comment out other unwanted lines.

    //   GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3;     // Configure GPIO9 as CAP3
       GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 1;    // Configure GPIO26 as CAP3

        EDIS;
    }
    #endif // endif DSP28_ECAP3


    #if DSP28_ECAP4
    void InitECap4Gpio(void)
    {
       EALLOW;

    /* Enable internal pull-up for the selected pins */
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.

       GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0;   // Enable pull-up on GPIO11 (CAP4)
    // GpioCtrlRegs.GPAPUD.bit.GPIO27 = 0;   // Enable pull-up on GPIO27 (CAP4)

    // Inputs are synchronized to SYSCLKOUT by default.
    // Comment out other unwanted lines.

       GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 0; // Synch to SYSCLKOUT GPIO11 (CAP4)
    // GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 0; // Synch to SYSCLKOUT GPIO27 (CAP4)

    /* Configure eCAP-4 pins using GPIO regs*/
    // This specifies which of the possible GPIO pins will be eCAP4 functional pins.
    // Comment out other unwanted lines.

       GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 3;  // Configure GPIO11 as CAP4
    // GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 1;  // Configure GPIO27 as CAP4

        EDIS;
    }
    #endif // endif DSP28_ECAP4


    #if DSP28_ECAP5
    void InitECap5Gpio(void)
    {
       EALLOW;

    /* Enable internal pull-up for the selected pins */
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.

    // GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;     // Enable pull-up on GPIO3 (CAP5)
       GpioCtrlRegs.GPBPUD.bit.GPIO48 = 1;    // Disable pull-up on GPIO48 (CAP5)

    // Inputs are synchronized to SYSCLKOUT by default.
    // Comment out other unwanted lines.

    // GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 0;  // Synch to SYSCLKOUT GPIO3 (CAP5)
       GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 0; // Synch to SYSCLKOUT GPIO48 (CAP5)

    /* Configure eCAP-5 pins using GPIO regs*/
    // This specifies which of the possible GPIO pins will be eCAP5 functional pins.
    // Comment out other unwanted lines.

    // GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 2;   // Configure GPIO3 as CAP5
       GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 1;  // Configure GPIO48 as CAP5

        EDIS;
    }
    #endif // endif DSP28_ECAP5


    #if DSP28_ECAP6
    void InitECap6Gpio(void)
    {
       EALLOW;

    /* Enable internal pull-up for the selected pins */
    // Pull-ups can be enabled or disabled by the user.
    // This will enable the pullups for the specified pins.
    // Comment out other unwanted lines.

       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)

    /* Configure eCAP-5 pins using GPIO regs*/
    // This specifies which of the possible GPIO pins will be eCAP6 functional pins.
    // Comment out other unwanted lines.

       GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 2;   // Configure GPIO1 as CAP6
    // GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 1;  // Configure GPIO49 as CAP6

        EDIS;
    }
    #endif // endif DSP28_ECAP6

    //===========================================================================
    // End of file.
    //===========================================================================
    这是主函数程序:

    //       $Boot_Table:
    //         GPIO87   GPIO86     GPIO85   GPIO84
    //          XA15     XA14       XA13     XA12
    //           PU       PU         PU       PU
    //        ==========================================
    //            1        1          1        1    Jump to Flash
    //            1        1          1        0    SCI-A boot
    //            1        1          0        1    SPI-A boot
    //            1        1          0        0    I2C-A boot
    //            1        0          1        1    eCAN-A boot
    //            1        0          1        0    McBSP-A boot
    //            1        0          0        1    Jump to XINTF x16
    //            1        0          0        0    Jump to XINTF x32
    //            0        1          1        1    Jump to OTP
    //            0        1          1        0    Parallel GPIO I/O boot
    //            0        1          0        1    Parallel XINTF boot
    //            0        1          0        0    Jump to SARAM        <- "boot to SARAM"
    //            0        0          1        1    Branch to check boot mode
    //            0        0          1        0    Boot to flash, bypass ADC cal
    //            0        0          0        1    Boot to SARAM, bypass ADC cal
    //            0        0          0        0    Boot to SCI-A, bypass ADC cal
    //                                              Boot_Table_End$
    // DESCRIPTION:
    //    This example configures ePWM3A for:
    //    - Up count
    //    - Period starts at 2 and goes up to 1000
    //    - Toggle output on PRD
    //    eCAP1 is configured to capture the time between rising
    //    and falling edge of the PWM3A output.
    //###########################################################################
    // $TI Release: DSP2833x/DSP2823x C/C++ Header Files V1.31 $
    // $Release Date: August 4, 2009 $
    //###########################################################################
    #include "DSP28x_Project.h"     // Device Headerfile and Examples Include File
    #define   PI  3.14159
    #define   Radius  0.22
    #define      LED1    GpioDataRegs.GPBDAT.bit.GPIO60
    #define      LED2    GpioDataRegs.GPBDAT.bit.GPIO61
    // Configure the start/end period for the timer
    #define   DIR_L  GpioDataRegs.GPBDAT.bit.GPIO49
    #define   DIR_R  GpioDataRegs.GPADAT.bit.GPIO25
    // Prototype statements for functions found within this file.
    interrupt void ecap1_isr(void);
    interrupt void ecap5_isr(void);
    void InitECapture1(void);
    void InitECapture5(void);
    void InitLed(void);
    void InitDIR(void);
    // Global variables used in this example
    Uint32  ECap1IntCount;
    Uint32  ECap5IntCount;
    Uint32  Period1 = 0;
    Uint32  Period5 = 0;
    Uint32  Time1[24]={0};
    Uint32  Time5[24]={0};
    Uint32  T_Per_L = 0;
    Uint32  T_Per_R = 0;
    Uint32  Turn_R = 0;
    Uint32  Turn_L = 0;
    float  Spd_L = 0;
    float  Spd_R = 0;
    // To keep track of which way the timer value is moving
    void main(void)
    {

    // Step 1. Initialize System Control:
    // PLL, WatchDog, enable Peripheral Clocks
    // This example function is found in the DSP2833x_SysCtrl.c file.
       InitSysCtrl();
       InitLed();
       InitDIR();
    // Step 2. Initalize GPIO: 
    // This example function is found in the DSP2833x_Gpio.c file and
    // illustrates how to set the GPIO to it's default state.
    // InitGpio();  // Skipped for this example  
       
       InitECap1Gpio();
       InitECap5Gpio();
    // Step 3. Clear all interrupts and initialize PIE vector table:
    // Disable CPU interrupts 
       DINT;

    // Initialize the PIE control registers to their default state.
    // The default state is all PIE interrupts disabled and flags
    // are cleared.  
    // This function is found in the DSP2833x_PieCtrl.c file.
       InitPieCtrl();
       
    // Disable CPU interrupts and clear all CPU interrupt flags:
       IER = 0x0000;
       IFR = 0x0000;

    // Initialize the PIE vector table with pointers to the shell Interrupt 
    // Service Routines (ISR).  
    // This will populate the entire table, even if the interrupt
    // is not used in this example.  This is useful for debug purposes.
    // The shell ISR routines are found in DSP2833x_DefaultIsr.c.
    // This function is found in DSP2833x_PieVect.c.
       InitPieVectTable();

    // Interrupts that are used in this example are re-mapped to
    // ISR functions found within this file.  
       EALLOW;  // This is needed to write to EALLOW protected registers
       PieVectTable.ECAP1_INT = &ecap1_isr;
       PieVectTable.ECAP5_INT = &ecap5_isr;
       EDIS;    // This is needed to disable write to EALLOW protected registers

    // Step 4. Initialize all the Device Peripherals:
    // This function is found in DSP2833x_InitPeripherals.c
    // InitPeripherals();  // Not required for this example

       InitECapture1();
       InitECapture5();
       
    // Step 5. User specific code, enable interrupts:

    // Initalize counters:   
        ECap1IntCount = 0;
        ECap5IntCount = 0;
       
    // Enable CPU INT4 which is connected to ECAP1-4  INT:
       IER |= M_INT4;

    // Enable eCAP INTn in the PIE: Group 4 interrupt 1-6
       PieCtrlRegs.PIEIER4.bit.INTx1 = 1;
       PieCtrlRegs.PIEIER4.bit.INTx5 = 1;
    // Enable global Interrupts and higher priority real-time debug events:
       EINT;   // Enable Global interrupt INTM
       ERTM;   // Enable Global realtime interrupt DBGM

    // Step 6. IDLE loop. Just sit and loop forever (optional):
       for(;;)
       {
          asm("NOP");
       }

    void InitECapture1()
    {
       ECap1Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts 禁用所有中断使能寄存器
       ECap1Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags 清除所有CAP中断旗帜
       ECap1Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads 禁止在捕获事件中加载CAP1-4寄存器的时间
       ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped 计数器停止
       
       // Configure peripheral registers
       ECap1Regs.ECCTL2.bit.CAP_APWM = 0;         // CAP moudle ECAP模块工作于捕捉模式
       ECap1Regs.ECCTL2.bit.CONT_ONESHT = 1;      // One shot 单次模式
       ECap1Regs.ECCTL2.bit.STOP_WRAP = 0;        // Stop at 1 events 单次模式下,在CAP1的捕捉事件发生后产生停止信号
       ECap1Regs.ECCTL1.bit.CAP1POL = 0;          // Rising edge CAP1上升沿捕捉
       // ECap1Regs.ECCTL1.bit.CAP2POL = 0;        // Falling edge
       // ECap1Regs.ECCTL1.bit.CAP3POL = 0;        // Rising edge
       //ECap1Regs.ECCTL1.bit.CAP4POL = 0;        // Falling edge
       ECap1Regs.ECCTL1.bit.CTRRST1 = 1;          // Difference operation  在CAP1捕获后重置计数器
       // ECap1Regs.ECCTL1.bit.CTRRST2 = 1;        // Difference operation
       //ECap1Regs.ECCTL1.bit.CTRRST3 = 1;        // Difference operation
       //ECap1Regs.ECCTL1.bit.CTRRST4 = 1;        // Difference operation
       ECap1Regs.ECCTL2.bit.SYNCI_EN = 0;         // Disable sync 屏蔽同步输入操作
       ECap1Regs.ECCTL2.bit.SYNCO_SEL = 2;        // Disable sync out 屏蔽同步信号输出
       ECap1Regs.ECCTL1.bit.CAPLDEN = 1;          // Enable CAP1-CAP4 register loads 使能在捕获事件中加载CAP1-4寄存器的时间
       ECap1Regs.ECCTL1.bit.PRESCALE = 0;         //输入信号不分频

       ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1;        // Start Counter 计数器计数
       ECap1Regs.ECCTL2.bit.REARM = 1;            // arm one-shot 以下情况将强制为单次模式
       ECap1Regs.ECEINT.bit.CEVT1 = 1;            // CEVENT = interrupt 捕获事件1中断使能
    }

    void InitECapture5()
    {
       ECap5Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts   禁用所有中断使能寄存器
       ECap5Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags    清除所有CAP中断旗帜
       ECap5Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads 禁止在捕获事件中加载CAP1-4寄存器的时间
       ECap5Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped 计数器停止
       
       // Configure peripheral registers
       ECap5Regs.ECCTL2.bit.CAP_APWM = 0;         // CAP moudle        ECAP模块工作于捕捉模式
       ECap5Regs.ECCTL2.bit.CONT_ONESHT = 1;      // One shot          单次模式
       ECap5Regs.ECCTL2.bit.STOP_WRAP = 0;        // Stop at 1 events  单次模式下,在CAP1的捕捉事件发生后产生停止信号
       ECap5Regs.ECCTL1.bit.CAP1POL = 0;          // Rising edge       CAP1上升沿捕捉
       //ECap5Regs.ECCTL1.bit.CAP2POL = 1;          // Falling edge
      // ECap5Regs.ECCTL1.bit.CAP3POL = 0;          // Rising edge
       //ECap5Regs.ECCTL1.bit.CAP4POL = 0;          // Falling edge
       ECap5Regs.ECCTL1.bit.CTRRST1 = 1;          // Difference operation      在CAP1捕获后重置计数器
       //ECap5Regs.ECCTL1.bit.CTRRST2 = 1;          // Difference operation         
       //ECap5Regs.ECCTL1.bit.CTRRST3 = 1;          // Difference operation         
       //ECap5Regs.ECCTL1.bit.CTRRST4 = 1;          // Difference operation         
       ECap5Regs.ECCTL2.bit.SYNCI_EN = 0;         // Disable sync              屏蔽同步输入操作
       ECap5Regs.ECCTL2.bit.SYNCO_SEL = 2;        // Disable sync out          屏蔽同步信号输出
       ECap5Regs.ECCTL1.bit.CAPLDEN = 1;          // Enable CAP1-CAP4 register loads  使能在捕获事件中加载CAP1-4寄存器的时间
       ECap5Regs.ECCTL1.bit.PRESCALE = 0;            //不分频

       ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1;        // Start Counter  计数器计数
       ECap5Regs.ECCTL2.bit.REARM = 1;            // arm one-shot   以下情况将强制为单次模式
       ECap5Regs.ECEINT.bit.CEVT1 = 1;            //捕获事件4-1中断使能,1:使能
       //ECap6Regs.ECEINT.bit.CEVT2 = 1;            // CEVENT = interrupt  
    }

    interrupt void ecap1_isr(void)
    {
       Uint32 i;
       LED1=~LED1;
       ECap1IntCount++;
       Period1 = ECap1Regs.CAP1;
       if (ECap1IntCount<=24)
       {
           Time1[ECap1IntCount-1] = Period1;
           Period1 = 0;
           if(ECap1IntCount==24)
           {
             for(i=0;i<24;i++)
             {
                  T_Per_R = T_Per_R + Time1[i];
             }
             Spd_R = 2*PI*Radius/(float)T_Per_R/6.67*1000000000*60;
             T_Per_R = 0;
           }
       }
       else 
       {
           Turn_R = Turn_R + 1;
           ECap1IntCount = 0;
       }
       
       ECap1Regs.ECCLR.bit.CEVT1 = 1;            //捕捉事件4~1标志,清除该位标志位
       ECap1Regs.ECCLR.bit.INT = 1;              //全局中断标志,清除该位标志位,不影响中断的使能
       ECap1Regs.ECCTL2.bit.REARM = 1;           //以下情况下将强制为单次模式:复位Mod4计数器为0,允许Mod4计数器持续计数,使能捕捉寄存器加载

       // Acknowledge this interrupt to receive more interrupts from group 4
       PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
    }

    interrupt void ecap5_isr(void)
    {
       Uint32 j;
       LED2=~LED2;
       ECap5IntCount++;
       Period5 = ECap5Regs.CAP1;
       if (ECap5IntCount<=24)
       {
           Time5[ECap5IntCount-1] = Period5;
           Period5 = 0;
           if(ECap5IntCount==24)
           {
             for(j=0;j<24;j++)
             {
                  T_Per_L = T_Per_L + Time5[j];
             }
             Spd_L = 2*PI*Radius/(float)T_Per_L/6.67*1000000000*60;
             T_Per_L = 0;
           }
       }
       else 
       {
           Turn_L = Turn_L + 1;
           ECap5IntCount = 0;
       }
       
       ECap5Regs.ECCLR.bit.CEVT1 = 1;              //捕捉事件4~1标志,清除该位标志位
       //ECap5Regs.ECCLR.bit.CEVT2 = 1;            // CEVENT = interrupt
       ECap5Regs.ECCLR.bit.INT = 1;                //全局中断标志,清除该位标志位,不影响中断的使能
       ECap5Regs.ECCTL2.bit.REARM = 1;             //以下情况下将强制为单次模式:复位Mod4计数器为0,允许Mod4计数器持续计数,使能捕捉寄存器加载
       // Acknowledge this interrupt to receive more interrupts from group 4
       PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;

    }

    void InitLed(void)
    {
       EALLOW;
       GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0; // GPIO60 = GPIO60
       GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;  //Output
       LED1=1;
       GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0; // GPIO61 = GPIO61
       GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1;  
       LED2=1;
       EDIS;
    }
    void InitDIR(void)
    {
       EALLOW;
       GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0; // GPIO25 = GPIO25
       GpioCtrlRegs.GPADIR.bit.GPIO25 = 0;  // Intput
       GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 0; // GPIO49 = GPIO49
       GpioCtrlRegs.GPBDIR.bit.GPIO49 = 0;  
       EDIS;
    }
    //===========================================================================
    // No more.
    //===========================================================================
    请问捕获脉冲是从什么地方进入的?

  • 请问你用的是哪款芯片?捕获脉冲是指什么?
  • 28335,就是说我是不是要先捕获一个脉冲,然后用捕获的脉冲才能产生APWM?
  • APWM可以看成简化版的ePWM,你可以参考TI的例程配置:
    C:\ti\controlSUITE\device_support\f2833x\v142\DSP2833x_examples_ccsv5\ecap_apwm
  • 就是这个例程我看不懂,这个例程里面,被捕获的脉冲是从什么地方输入的?