Example_281xEvPwm.c
上传用户:qingfan3
上传日期:2014-10-27
资源大小:31439k
文件大小:6k
源码类别:

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:   Example_281xEvPwm.c
  4. //
  5. // TITLE:  DSP281x Event Manager PWM Generation.
  6. //
  7. // ASSUMPTIONS:
  8. //
  9. //          This program requires the DSP281x V1.00 header files. 
  10. //          As supplied, this project is configured for "boot to H0" operation.
  11. //
  12. //          Other then boot mode pin configuration, no other hardware configuration
  13. //          is required.    
  14. //
  15. // DESCRIPTION:
  16. //
  17. //          This program sets up the EV timers (TIMER1, TIMER2, TIMER3 and TIMER4) 
  18. //          to generate T1PWM, T2PWM, T3PWM, T4PWM and PWM1-12 waveforms.  
  19. //          The user can then observe the waveforms using an scope.  
  20. //          
  21. //
  22. //###########################################################################
  23. //
  24. //  Ver | dd mmm yyyy | Who  | Description of changes
  25. // =====|=============|======|===============================================
  26. //  1.00| 11 Sep 2003 | L.H. | No change since previous version (v.58 Alpha)
  27. //###########################################################################
  28. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  29. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  30. // Prototype statements for functions found within this file.
  31. void init_eva(void);
  32. void init_evb(void);
  33. // Global counts used in this example
  34. void main(void)
  35. {
  36. // Step 1. Initialize System Control:
  37. // PLL, WatchDog, enable Peripheral Clocks
  38. // This example function is found in the DSP281x_SysCtrl.c file.
  39.    InitSysCtrl();
  40. // Step 2. Initalize GPIO: 
  41. // This example function is found in the DSP281x_Gpio.c file and
  42. // illustrates how to set the GPIO to it's default state.
  43. // InitGpio();  // Skipped for this example  
  44. // Initialize only GPAMUX and GPBMUX for this test
  45.    EALLOW;
  46.    // Enable PWM pins
  47.    GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6  pins
  48.    GpioMuxRegs.GPBMUX.all = 0x00FF; // EVB PWM 7-12 pins
  49.    EDIS;
  50.     
  51. // Step 3. Clear all interrupts and initialize PIE vector table:
  52. // Disable CPU interrupts 
  53.    DINT;
  54. // Initialize PIE control registers to their default state.
  55. // The default state is all PIE interrupts disabled and flags
  56. // are cleared.  
  57. // This function is found in the DSP281x_PieCtrl.c file.
  58.    InitPieCtrl();
  59. // Disable CPU interrupts and clear all CPU interrupt flags:
  60.    IER = 0x0000;
  61.    IFR = 0x0000;
  62. // Initialize the PIE vector table with pointers to the shell Interrupt 
  63. // Service Routines (ISR).  
  64. // This will populate the entire table, even if the interrupt
  65. // is not used in this example.  This is useful for debug purposes.
  66. // The shell ISR routines are found in DSP281x_DefaultIsr.c.
  67. // This function is found in DSP281x_PieVect.c.
  68.    InitPieVectTable();
  69.    
  70. // Step 4. Initialize all the Device Peripherals:
  71. // This function is found in DSP281x_InitPeripherals.c
  72. // InitPeripherals(); // Not required for this example
  73.    init_eva();
  74.    init_evb();
  75. // Step 5. User specific code, enable interrupts:
  76.   // Just sit and loop forever:
  77.   // PWM pins can be observed with a scope.
  78.   for(;;);
  79. }
  80. void init_eva()
  81. {
  82. // EVA Configure T1PWM, T2PWM, PWM1-PWM6 
  83. // Initalize the timers
  84.    // Initalize EVA Timer1 
  85.    EvaRegs.T1PR = 0xFFFF;       // Timer1 period
  86.    EvaRegs.T1CMPR = 0x3C00;     // Timer1 compare
  87.    EvaRegs.T1CNT = 0x0000;      // Timer1 counter
  88.    // TMODE = continuous up/down
  89.    // Timer enable
  90.    // Timer compare enable
  91.    EvaRegs.T1CON.all = 0x1042;   
  92.   // Initalize EVA Timer2 
  93.   EvaRegs.T2PR = 0x0FFF;       // Timer2 period
  94.   EvaRegs.T2CMPR = 0x03C0;     // Timer2 compare
  95.   EvaRegs.T2CNT = 0x0000;      // Timer2 counter
  96.   // TMODE = continuous up/down
  97.   // Timer enable
  98.   // Timer compare enable
  99.   EvaRegs.T2CON.all = 0x1042;   
  100.   // Setup T1PWM and T2PWM
  101.   // Drive T1/T2 PWM by compare logic
  102.   EvaRegs.GPTCONA.bit.TCMPOE = 1;
  103.   // Polarity of GP Timer 1 Compare = Active low
  104.   EvaRegs.GPTCONA.bit.T1PIN = 1;
  105.   // Polarity of GP Timer 2 Compare = Active high
  106.   EvaRegs.GPTCONA.bit.T2PIN = 2;
  107.   // Enable compare for PWM1-PWM6
  108.   EvaRegs.CMPR1 = 0x0C00;
  109.   EvaRegs.CMPR2 = 0x3C00;
  110.   EvaRegs.CMPR3 = 0xFC00;
  111.     
  112.   // Compare action control.  Action that takes place
  113.   // on a cmpare event
  114.   // output pin 1 CMPR1 - active high
  115.   // output pin 2 CMPR1 - active low
  116.   // output pin 3 CMPR2 - active high
  117.   // output pin 4 CMPR2 - active low
  118.   // output pin 5 CMPR3 - active high
  119.   // output pin 6 CMPR3 - active low
  120.   EvaRegs.ACTRA.all = 0x0666;
  121.   EvaRegs.DBTCONA.all = 0x0000; // Disable deadband
  122.   EvaRegs.COMCONA.all = 0xA600;
  123. void init_evb()
  124. {
  125. // EVB Configure T3PWM, T4PWM and PWM7-PWM12
  126. // Step 1 - Initialize the Timers
  127.   // Initialize EVB Timer3 
  128.   // Timer3 controls T3PWM and PWM7-12
  129.   EvbRegs.T3PR = 0xFFFF;       // Timer3 period
  130.   EvbRegs.T3CMPR = 0x3C00;     // Timer3 compare
  131.   EvbRegs.T3CNT = 0x0000;      // Timer3 counter
  132.   // TMODE = continuous up/down
  133.   // Timer enable
  134.   // Timer compare enable
  135.   EvbRegs.T3CON.all = 0x1042;   
  136.   // Initialize EVB Timer4 
  137.   // Timer4 controls T4PWM
  138.   EvbRegs.T4PR = 0x00FF;       // Timer4 period
  139.   EvbRegs.T4CMPR = 0x0030;     // Timer4 compare
  140.   EvbRegs.T4CNT = 0x0000;      // Timer4 counter
  141.   // TMODE = continuous up/down
  142.   // Timer enable
  143.   // Timer compare enable
  144.   EvbRegs.T4CON.all = 0x1042;   
  145.   // Setup T3PWM and T4PWM
  146.   // Drive T3/T4 PWM by compare logic
  147.   EvbRegs.GPTCONB.bit.TCMPOE = 1;
  148.   // Polarity of GP Timer 3 Compare = Active low
  149.   EvbRegs.GPTCONB.bit.T3PIN = 1;
  150.   // Polarity of GP Timer 4 Compare = Active high
  151.   EvbRegs.GPTCONB.bit.T4PIN = 2;
  152.  
  153.   // Enable compare for PWM7-PWM12
  154.   EvbRegs.CMPR4 = 0x0C00;
  155.   EvbRegs.CMPR5 = 0x3C00;
  156.   EvbRegs.CMPR6 = 0xFC00;
  157.     
  158.   // Compare action control.  Action that takes place
  159.   // on a cmpare event
  160.   // output pin 1 CMPR4 - active high
  161.   // output pin 2 CMPR4 - active low
  162.   // output pin 3 CMPR5 - active high
  163.   // output pin 4 CMPR5 - active low
  164.   // output pin 5 CMPR6 - active high
  165.   // output pin 6 CMPR6 - active low
  166.   EvbRegs.ACTRB.all = 0x0666;
  167.   EvbRegs.DBTCONB.all = 0x0000; // Disable deadband
  168.   EvbRegs.COMCONB.all = 0xA600;
  169. }
  170. // No ISR's used in this example
  171. //===========================================================================
  172. // No more.
  173. //===========================================================================