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

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE: DSP281x_CpuTimers.c
  4. //
  5. // TITLE: DSP281x CPU 32-bit Timers Initialization & Support Functions.
  6. //
  7. // NOTES:   CpuTimer1 and CpuTimer2 are reserved for use with DSP BIOS and
  8. //          other realtime operating systems.  
  9. //
  10. //          Do not use these two timers in your application if you ever plan
  11. //          on integrating DSP-BIOS or another realtime OS. 
  12. //
  13. //          For this reason, the code to manipulate these two timers is
  14. //          commented out and not used in these examples.
  15. //           
  16. //###########################################################################
  17. //
  18. //  Ver | dd mmm yyyy | Who  | Description of changes
  19. // =====|=============|======|===============================================
  20. //  1.00| 11 Sep 2003 | L.H  | Changes since previous version (v.58 Alpha)
  21. //      |             |      | Removed some incorrect parameters in the timer
  22. //      |             |      | setup that are not available on this device
  23. //###########################################################################
  24. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  25. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  26. struct CPUTIMER_VARS CpuTimer0;
  27. // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS
  28. //struct CPUTIMER_VARS CpuTimer1;
  29. //struct CPUTIMER_VARS CpuTimer2;
  30. //---------------------------------------------------------------------------
  31. // InitCpuTimers: 
  32. //---------------------------------------------------------------------------
  33. // This function initializes all three CPU timers to a known state.
  34. //
  35. void InitCpuTimers(void)
  36. {
  37.     // CPU Timer 0
  38. // Initialize address pointers to respective timer registers:
  39. CpuTimer0.RegsAddr = &CpuTimer0Regs;
  40. // Initialize timer period to maximum:
  41. CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;
  42. // Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
  43. CpuTimer0Regs.TPR.all  = 0;
  44. CpuTimer0Regs.TPRH.all = 0;
  45. // Make sure timer is stopped:
  46. CpuTimer0Regs.TCR.bit.TSS = 1;
  47. // Reload all counter register with period value:
  48. CpuTimer0Regs.TCR.bit.TRB = 1;
  49. // Reset interrupt counters:
  50. CpuTimer0.InterruptCount = 0;              
  51. // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS
  52. // Do not use these two timers if you ever plan on integrating 
  53. // DSP-BIOS or another realtime OS. 
  54. //
  55. // For this reason, the code to manipulate these two timers is
  56. // commented out and not used in these examples.
  57.     // Initialize address pointers to respective timer registers:
  58. // CpuTimer1.RegsAddr = &CpuTimer1Regs;
  59. // CpuTimer2.RegsAddr = &CpuTimer2Regs;
  60. // Initialize timer period to maximum:
  61. // CpuTimer1Regs.PRD.all  = 0xFFFFFFFF;
  62. // CpuTimer2Regs.PRD.all  = 0xFFFFFFFF;
  63. // Make sure timers are stopped:
  64. // CpuTimer1Regs.TCR.bit.TSS = 1;             
  65. // CpuTimer2Regs.TCR.bit.TSS = 1;             
  66. // Reload all counter register with period value:
  67. // CpuTimer1Regs.TCR.bit.TRB = 1;             
  68. // CpuTimer2Regs.TCR.bit.TRB = 1;             
  69. // Reset interrupt counters:
  70. // CpuTimer1.InterruptCount = 0;
  71. // CpuTimer2.InterruptCount = 0;
  72. }
  73. //---------------------------------------------------------------------------
  74. // ConfigCpuTimer: 
  75. //---------------------------------------------------------------------------
  76. // This function initializes the selected timer to the period specified
  77. // by the "Freq" and "Period" parameters. The "Freq" is entered as "MHz"
  78. // and the period in "uSeconds". The timer is held in the stopped state
  79. // after configuration.
  80. //
  81. void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
  82. {
  83. Uint32  temp;
  84. // Initialize timer period:
  85. Timer->CPUFreqInMHz = Freq;
  86. Timer->PeriodInUSec = Period;
  87. temp = (long) (Freq * Period);
  88. Timer->RegsAddr->PRD.all = temp;
  89. // Set pre-scale counter to divide by 1 (SYSCLKOUT):
  90. Timer->RegsAddr->TPR.all  = 0;
  91. Timer->RegsAddr->TPRH.all  = 0;
  92. // Initialize timer control register:
  93. Timer->RegsAddr->TCR.bit.TSS = 1;      // 1 = Stop timer, 0 = Start/Restart Timer 
  94. Timer->RegsAddr->TCR.bit.TRB = 1;      // 1 = reload timer
  95. Timer->RegsAddr->TCR.bit.SOFT = 1;
  96. Timer->RegsAddr->TCR.bit.FREE = 1;     // Timer Free Run
  97. Timer->RegsAddr->TCR.bit.TIE = 1;      // 0 = Disable/ 1 = Enable Timer Interrupt
  98. // Reset interrupt counter:
  99. Timer->InterruptCount = 0;
  100. }
  101. //===========================================================================
  102. // No more.
  103. //===========================================================================