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

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:    Example_281xEvTimerPeriod.c
  4. //
  5. // TITLE:   DSP281x Event Manager GP Timer example program.
  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 EVA Timer 1, EVA Timer 2, EVB Timer 3
  18. //          and EVB Timer 4 to fire an interrupt on a period overflow.  
  19. //          A count is kept each time each interrupt passes through
  20. //          the interrupt service routine. 
  21. //
  22. //          EVA Timer 1 has the shortest period while EVB Timer4 has the
  23. //          longest period.
  24. //
  25. //          Watch Variables:
  26. //
  27. //                EvaTimer1InterruptCount;
  28. //                EvaTimer2InterruptCount;
  29. //                EvbTimer3InterruptCount;
  30. //                EvbTimer4InterruptCount;
  31. //
  32. //###########################################################################
  33. //
  34. //  Ver | dd mmm yyyy | Who  | Description of changes
  35. // =====|=============|======|===============================================
  36. //  1.00| 11 Sep 2003 | L.H. | No change since previous version (v.58 Alpha)
  37. //###########################################################################
  38. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  39. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  40. // Prototype statements for functions found within this file.
  41. interrupt void eva_timer1_isr(void);
  42. interrupt void eva_timer2_isr(void);
  43. interrupt void evb_timer3_isr(void);
  44. interrupt void evb_timer4_isr(void);
  45. void init_eva_timer1(void);
  46. void init_eva_timer2(void);
  47. void init_evb_timer3(void);
  48. void init_evb_timer4(void);
  49. // Global counts used in this example
  50. Uint32  EvaTimer1InterruptCount;
  51. Uint32  EvaTimer2InterruptCount;
  52. Uint32  EvbTimer3InterruptCount;
  53. Uint32  EvbTimer4InterruptCount;
  54. void main(void)
  55. {
  56. // Step 1. Initialize System Control:
  57. // PLL, WatchDog, enable Peripheral Clocks
  58. // This example function is found in the DSP281x_SysCtrl.c file.
  59.    InitSysCtrl();
  60. // Step 2. Initalize GPIO: 
  61. // This example function is found in the DSP281x_Gpio.c file and
  62. // illustrates how to set the GPIO to it's default state.
  63. // InitGpio();  // Skipped for this example  
  64. // Step 3. Clear all interrupts and initialize PIE vector table:
  65. // Disable CPU interrupts 
  66.    DINT;
  67. // Initialize PIE control registers to their default state.
  68. // The default state is all PIE interrupts disabled and flags
  69. // are cleared.  
  70. // This function is found in the DSP281x_PieCtrl.c file.
  71.    InitPieCtrl();
  72.    
  73. // Disable CPU interrupts and clear all CPU interrupt flags:
  74.    IER = 0x0000;
  75.    IFR = 0x0000;
  76. // Initialize the PIE vector table with pointers to the shell Interrupt 
  77. // Service Routines (ISR).  
  78. // This will populate the entire table, even if the interrupt
  79. // is not used in this example.  This is useful for debug purposes.
  80. // The shell ISR routines are found in DSP281x_DefaultIsr.c.
  81. // This function is found in DSP281x_PieVect.c.
  82.    InitPieVectTable();
  83. // Interrupts that are used in this example are re-mapped to
  84. // ISR functions found within this file.  
  85.    EALLOW;  // This is needed to write to EALLOW protected registers
  86.    PieVectTable.T1PINT = &eva_timer1_isr;
  87.    PieVectTable.T2PINT = &eva_timer2_isr;
  88.    PieVectTable.T3PINT = &evb_timer3_isr;
  89.    PieVectTable.T4PINT = &evb_timer4_isr;
  90.    EDIS;   // This is needed to disable write to EALLOW protected registers
  91. // Step 4. Initialize all the Device Peripherals:
  92. // This function is found in DSP281x_InitPeripherals.c
  93. // InitPeripherals(); // Not required for this example
  94.    init_eva_timer1();
  95.    init_eva_timer2();
  96.    init_evb_timer3();
  97.    init_evb_timer4();
  98.    
  99. // Step 5. User specific code, enable interrupts:
  100.     // Initialize count values to 0
  101.     EvaTimer1InterruptCount = 0;
  102.     EvaTimer2InterruptCount = 0;
  103.     EvbTimer3InterruptCount = 0;
  104.     EvbTimer4InterruptCount = 0;
  105.  
  106.     // Enable PIE group 2 interrupt 4 for T1PINT
  107.     PieCtrlRegs.PIEIER2.all = M_INT4;
  108.     // Enable PIE group 3 interrupt 1 for T2PINT
  109.     PieCtrlRegs.PIEIER3.all = M_INT1;    
  110.     // Enable PIE group 4 interrupt 4 for T3PINT
  111.     PieCtrlRegs.PIEIER4.all = M_INT4;
  112.     // Enable PIE group 5 interrupt 1 for T4PINT
  113.     PieCtrlRegs.PIEIER5.all = M_INT1;
  114.     // Enable CPU INT2 for T1PINT, INT3 for T2PINT, INT4 for T3PINT
  115.     // and INT5 for T4PINT:
  116.     IER |= (M_INT2 | M_INT3 | M_INT4 | M_INT5);
  117.     // Enable global Interrupts and higher priority real-time debug events:
  118.     EINT;   // Enable Global interrupt INTM
  119.     ERTM;   // Enable Global realtime interrupt DBGM
  120.     // Step 6. IDLE loop. Just sit and loop forever:
  121.     for(;;);
  122. }
  123. void init_eva_timer1(void)
  124. {
  125.     // Initialize EVA Timer 1:
  126.     // Setup Timer 1 Registers (EV A)
  127.     EvaRegs.GPTCONA.all = 0;
  128.    
  129.     // Set the Period for the GP timer 1 to 0x0200;
  130.     EvaRegs.T1PR = 0x0200;       // Period
  131.     EvaRegs.T1CMPR = 0x0000;     // Compare Reg
  132.    
  133.     // Enable Period interrupt bits for GP timer 1
  134.     // Count up, x128, internal clk, enable compare, use own period
  135.     EvaRegs.EVAIMRA.bit.T1PINT = 1;
  136.     EvaRegs.EVAIFRA.bit.T1PINT = 1;
  137.     // Clear the counter for GP timer 1
  138.     EvaRegs.T1CNT = 0x0000;
  139.     EvaRegs.T1CON.all = 0x1742;
  140.     // Start EVA ADC Conversion on timer 1 Period interrupt
  141.     EvaRegs.GPTCONA.bit.T1TOADC = 2;
  142. }
  143. void init_eva_timer2(void)
  144. {
  145.     // Initialize EVA Timer 2:
  146.     // Setup Timer 2 Registers (EV A)
  147.     EvaRegs.GPTCONA.all = 0;
  148.    
  149.     // Set the Period for the GP timer 2 to 0x0200;
  150.     EvaRegs.T2PR = 0x0400;       // Period
  151.     EvaRegs.T2CMPR = 0x0000;     // Compare Reg
  152.    
  153.     // Enable Period interrupt bits for GP timer 2
  154.     // Count up, x128, internal clk, enable compare, use own period
  155.     EvaRegs.EVAIMRB.bit.T2PINT = 1;
  156.     EvaRegs.EVAIFRB.bit.T2PINT = 1;
  157.     // Clear the counter for GP timer 2
  158.     EvaRegs.T2CNT = 0x0000;
  159.     EvaRegs.T2CON.all = 0x1742;
  160.     // Start EVA ADC Conversion on timer 2 Period interrupt
  161.     EvaRegs.GPTCONA.bit.T2TOADC = 2;
  162. }
  163. void init_evb_timer3(void)
  164. {
  165.     // Initialize EVB Timer 3:
  166.     // Setup Timer 3 Registers (EV B)
  167.     EvbRegs.GPTCONB.all = 0;
  168.    
  169.     // Set the Period for the GP timer 3 to 0x0200;
  170.     EvbRegs.T3PR = 0x0800;       // Period
  171.     EvbRegs.T3CMPR = 0x0000;     // Compare Reg
  172.    
  173.     // Enable Period interrupt bits for GP timer 3
  174.     // Count up, x128, internal clk, enable compare, use own period
  175.     EvbRegs.EVBIMRA.bit.T3PINT = 1;
  176.     EvbRegs.EVBIFRA.bit.T3PINT = 1;
  177.     // Clear the counter for GP timer 3
  178.     EvbRegs.T3CNT = 0x0000;
  179.     EvbRegs.T3CON.all = 0x1742;
  180.     // Start EVA ADC Conversion on timer 3 Period interrupt
  181.     EvbRegs.GPTCONB.bit.T3TOADC = 2;
  182. }
  183. void init_evb_timer4(void)
  184. {
  185.     // Initialize EVB Timer 4:
  186.     // Setup Timer 4 Registers (EV B)
  187.     EvbRegs.GPTCONB.all = 0;
  188.    
  189.     // Set the Period for the GP timer 4 to 0x0200;
  190.     EvbRegs.T4PR = 0x1000;       // Period
  191.     EvbRegs.T4CMPR = 0x0000;     // Compare Reg
  192.    
  193.     // Enable Period interrupt bits for GP timer 4
  194.     // Count up, x128, internal clk, enable compare, use own period
  195.     EvbRegs.EVBIMRB.bit.T4PINT = 1;
  196.     EvbRegs.EVBIFRB.bit.T4PINT = 1;
  197.     // Clear the counter for GP timer 4
  198.     EvbRegs.T4CNT = 0x0000;
  199.     EvbRegs.T4CON.all = 0x1742;
  200.     // Start EVA ADC Conversion on timer 4 Period interrupt
  201.     EvbRegs.GPTCONB.bit.T4TOADC = 2;
  202. interrupt void eva_timer1_isr(void)
  203. {
  204.    EvaTimer1InterruptCount++;
  205.    // Enable more interrupts from this timer
  206.    EvaRegs.EVAIMRA.bit.T1PINT = 1;
  207.    // Note: To be safe, use a mask value to write to the entire
  208.    // EVAIFRA register.  Writing to one bit will cause a read-modify-write
  209.    // operation that may have the result of writing 1's to clear 
  210.    // bits other then those intended. 
  211.    EvaRegs.EVAIFRA.all = BIT7;
  212.    // Acknowledge interrupt to receive more interrupts from PIE group 2
  213.    PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
  214. }
  215. interrupt void eva_timer2_isr(void)
  216. {
  217.   EvaTimer2InterruptCount++;
  218.   // Enable more interrupts from this timer
  219.   EvaRegs.EVAIMRB.bit.T2PINT = 1;
  220.  
  221.   // Note: To be safe, use a mask value to write to the entire
  222.   // EVAIFRB register.  Writing to one bit will cause a read-modify-write
  223.   // operation that may have the result of writing 1's to clear 
  224.   // bits other then those intended. 
  225.   EvaRegs.EVAIFRB.all = BIT0;
  226.   // Acknowledge interrupt to receive more interrupts from PIE group 3
  227.   PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
  228. }
  229. interrupt void evb_timer3_isr(void)
  230. {
  231.   EvbTimer3InterruptCount++;
  232.   // Note: To be safe, use a mask value to write to the entire
  233.   // EVBIFRA register.  Writing to one bit will cause a read-modify-write
  234.   // operation that may have the result of writing 1's to clear 
  235.   // bits other then those intended. 
  236.   EvbRegs.EVBIFRA.all = BIT7;
  237.   // Acknowledge interrupt to receive more interrupts from PIE group 4
  238.   PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
  239. }
  240. interrupt void evb_timer4_isr(void)
  241. {
  242.    EvbTimer4InterruptCount++;
  243.    // Note: To be safe, use a mask value to write to the entire
  244.    // EVBIFRB register.  Writing to one bit will cause a read-modify-write
  245.    // operation that may have the result of writing 1's to clear 
  246.    // bits other then those intended. 
  247.    EvbRegs.EVBIFRB.all = BIT0;
  248.    // Acknowledge interrupt to receive more interrupts from PIE group 5
  249.    PieCtrlRegs.PIEACK.all = PIEACK_GROUP5;
  250. }
  251. //===========================================================================
  252. // No more.
  253. //===========================================================================