DSP280x_examples.rar

  • PUDN用户
    了解作者
  • C/C++
    开发工具
  • 211KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 13
    下载次数
  • 2009-11-24 11:09
    上传日期
tms320F2808DSP的正弦波PWM控制程序,供大家下载参考。
DSP280x_examples.rar
  • DSP280x_examples
  • sine
  • Debug
  • DSP280x_SysCtrl.obj
    14.2KB
  • DSP280x_CodeStartBranch.obj
    1.3KB
  • sine.obj
    24.2KB
  • Example_280xEPwmUpDownAQ.map
    23.1KB
  • sine.out
    128.1KB
  • DSP280x_PieCtrl.obj
    5.2KB
  • DSP280x_GlobalVariableDefs.obj
    89.4KB
  • DSP280x_CpuTimers.obj
    4.6KB
  • DSP280x_DefaultIsr.obj
    35.4KB
  • sine.map
    22.9KB
  • DSP280x_PieVect.obj
    16.4KB
  • Example_280xEPwmUpDownAQ.out
    129.4KB
  • DSP280x_EPwm.obj
    11.2KB
  • sine.CS_
  • SYMBOL.FPT
    309.1KB
  • SYMBOL.DBF
    181.7KB
  • FILE.DBF
    1.3KB
  • FILE.FPT
    2.4KB
  • SYMBOL.CDX
    244.5KB
  • FILE.CDX
    3KB
  • cc_build_Debug.log
    656B
  • sine.pjt
    1.7KB
  • Debug.lkf
    937B
  • sine.c
    8.9KB
  • sine.sbl
    6.8KB
  • sine.gel
    1KB
  • sine.paf2
    8.6KB
内容介绍
//########################################################################### // // FILE: sine.c // // ASSUMPTIONS: // // This program requires the DSP280x header files. // // Monitor ePWM1-ePWM3 pins on an oscilloscope as described // below. // // EPWM1A is on GPIO0 // EPWM1B is on GPIO1 // // EPWM2A is on GPIO2 // EPWM2B is on GPIO3 // // EPWM3A is on GPIO4 // EPWM3B is on GPIO5 // // As supplied, this project is configured for "boot to SARAM" // operation. The 280x Boot Mode table is shown below. // For information on configuring the boot mode of an eZdsp, // please refer to the documentation included with the eZdsp, // // Boot GPIO18 GPIO29 GPIO34 // Mode SPICLKA SCITXDA // SCITXB // ------------------------------------- // Flash 1 1 1 // SCI-A 1 1 0 // SPI-A 1 0 1 // I2C-A 1 0 0 // ECAN-A 0 1 1 // SARAM 0 1 0 <- "boot to SARAM" // OTP 0 0 1 // I/0 0 0 0 // // // DESCRIPTION: // // This example configures ePWM1, ePWM2, ePWM3 to produce an // waveform with independant modulation on EPWMxA and // EPWMxB. // // The compare values CMPA and CMPB are modified within the ePWM's ISR // // The TB counter is in up/down count mode for this example. // // View the EPWM1A/B, EPWM2A/B and EPWM3A/B waveforms // via an oscilloscope //########################################################################### // $TI Release: DSP280x Header Files V1.60 $ // $Release Date: December 3, 2007 $ //########################################################################### #include "DSP280x_Device.h" // DSP280x Headerfile Include File #include "DSP280x_Examples.h" // DSP280x Examples Include File #include "math.h" typedef struct { volatile struct EPWM_REGS *EPwmRegHandle; Uint16 EPwm_CMPA_Direction; Uint16 EPwm_CMPB_Direction; Uint16 EPwmTimerIntCount; Uint16 EPwmMaxCMPA; Uint16 EPwmMinCMPA; Uint16 EPwmMaxCMPB; Uint16 EPwmMinCMPB; }EPWM_INFO; // Prototype statements for functions found within this file. void InitEPwm1Example(void); void InitEPwm2Example(void); void InitEPwm3Example(void); interrupt void epwm1_isr(void); interrupt void epwm2_isr(void); interrupt void epwm3_isr(void); void update_compare(EPWM_INFO*); // Global variables used in this example EPWM_INFO epwm1_info; EPWM_INFO epwm2_info; EPWM_INFO epwm3_info; // Configure the period for each timer #define EPWM1_TIMER_TBPRD 2500 // Period register #define EPWM1_MAX_CMPA 2500 #define EPWM1_MIN_CMPA 0 #define EPWM1_MAX_CMPB 2450 #define EPWM1_MIN_CMPB 50 #define EPWM2_TIMER_TBPRD 2000 // Period register #define EPWM2_MAX_CMPA 1950 #define EPWM2_MIN_CMPA 50 #define EPWM2_MAX_CMPB 1950 #define EPWM2_MIN_CMPB 50 #define EPWM3_TIMER_TBPRD 2000 // Period register #define EPWM3_MAX_CMPA 950 #define EPWM3_MIN_CMPA 50 #define EPWM3_MAX_CMPB 1950 #define EPWM3_MIN_CMPB 1050 // To keep track of which way the compare value is moving #define EPWM_CMP_UP 1 #define EPWM_CMP_DOWN 0 void main(void) { // Step 1. Initialize System Control: // PLL, WatchDog, enable Peripheral Clocks // This example function is found in the DSP280x_SysCtrl.c file. InitSysCtrl(); // Step 2. Initalize GPIO: // This example function is found in the DSP280x_Gpio.c file and // illustrates how to set the GPIO to it's default state. // InitGpio(); // Skipped for this example // For this case just init GPIO pins for ePWM1, ePWM2, ePWM3 // These functions are in the DSP280x_EPwm.c file InitEPwm1Gpio(); // 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 DSP280x_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 DSP280x_DefaultIsr.c. // This function is found in DSP280x_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.EPWM1_INT = &epwm1_isr; EDIS; // This is needed to disable write to EALLOW protected registers // Step 4. Initialize all the Device Peripherals: // This function is found in DSP280x_InitPeripherals.c // InitPeripherals(); // Not required for this example // For this example, only initialize the ePWM EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; EDIS; InitEPwm1Example(); EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS; // Step 5. User specific code, enable interrupts: // Enable CPU INT3 which is connected to EPWM1-3 INT: IER |= M_INT3; // Enable EPWM INTn in the PIE: Group 3 interrupt 1-3 PieCtrlRegs.PIEIER3.bit.INTx1 = 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"); } } interrupt void epwm1_isr(void) { // Update the CMPA and CMPB values update_compare(&epwm1_info); // Clear INT flag for this timer EPwm1Regs.ETCLR.bit.INT = 1; // Acknowledge this interrupt to receive more interrupts from group 3 PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; } void InitEPwm1Example() { // Setup TBCLK EPwm1Regs.TBPRD = 200; // Set timer period 801 TBCLKs EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0 EPwm1Regs.TBCTR = 0x0000; // Clear counter // Setup counter mode EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count updown EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // Setup shadowing EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // Set actions EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on event A, up count EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // Clear PWM1A on event A, down count EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Set PWM1B on event B, up count EPwm1Regs.AQCTLB.bit.CBD = AQ_SET; // Clear PWM1B on event B, down count // Interrupt where we will change the Compare Values EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT EPwm1Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 1st event // Information this example uses to keep track // of the direction the CMPA/CMPB values are // moving, the min and max allowed values and // a pointer to the correct ePWM regi
评论
    相关推荐