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

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:   Example_281xWatchdog.c
  4. //
  5. // TITLE:  DSP281x Watchdog interrupt test 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. //          This program exercises the watchdog on the F2812/F2810 parts.  
  17. //
  18. //          First the watchdog is connected to the WAKEINT interrupt of the
  19. //          PIE block.  The code is then put into an infinite loop.
  20. // 
  21. //          The user can select to feed the watchdog key register or not
  22. //          by commenting one line of code in the infinite loop.
  23. //
  24. //          If the watchdog key register is fed by the KickDog function 
  25. //          then the WAKEINT interrupt is not taken.  If the key register 
  26. //          is not fed by the KickDog function then WAKEINT will be taken.  
  27. //
  28. //          Watch Variables:
  29. //                LoopCount for the number of times through the infinite loop
  30. //                WakeCount for the number of times through WAKEINT
  31. //
  32. //###########################################################################
  33. //
  34. //  Ver | dd mmm yyyy | Who  | Description of changes
  35. // =====|=============|======|===============================================
  36. //  1.00| 11 Sep 2003 | L.H. | Changes since previous version (v.58 Alpha) 
  37. //      |             |      | Cleanup 
  38. //      |             |      | Now uses the common DSP281x_SysCtrl.c file
  39. //      |             |      | and the WD is re-enabled in this file. 
  40. //###########################################################################
  41. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  42. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  43. // Prototype statements for functions found within this file.
  44. interrupt void wakeint_isr(void);
  45. // Global variables for this example
  46. Uint32 WakeCount;
  47. Uint32 LoopCount;
  48. void main(void)
  49. {
  50. // Step 1. Initialize System Control:
  51. // PLL, WatchDog, enable Peripheral Clocks
  52. // This example function is found in the DSP281x_SysCtrl.c file.
  53.    InitSysCtrl();
  54. // Step 2. Initalize GPIO: 
  55. // This example function is found in the DSP281x_Gpio.c file and
  56. // illustrates how to set the GPIO to it's default state.
  57. // InitGpio();  // Skipped for this example  
  58. // Step 3. Clear all interrupts and initialize PIE vector table:
  59. // Disable CPU interrupts 
  60.    DINT;
  61. // Initialize PIE control registers to their default state.
  62. // The default state is all PIE interrupts disabled and flags
  63. // are cleared.  
  64. // This function is found in the DSP281x_PieCtrl.c file.
  65.    InitPieCtrl();
  66. // Disable CPU interrupts and clear all CPU interrupt flags:
  67.    IER = 0x0000;
  68.    IFR = 0x0000;
  69. // Initialize the PIE vector table with pointers to the shell Interrupt 
  70. // Service Routines (ISR).  
  71. // This will populate the entire table, even if the interrupt
  72. // is not used in this example.  This is useful for debug purposes.
  73. // The shell ISR routines are found in DSP281x_DefaultIsr.c.
  74. // This function is found in DSP281x_PieVect.c.
  75.    InitPieVectTable();
  76. // Interrupts that are used in this example are re-mapped to
  77. // ISR functions found within this file.  
  78.    EALLOW; // This is needed to write to EALLOW protected registers
  79.    PieVectTable.WAKEINT = &wakeint_isr;
  80.    EDIS;   // This is needed to disable write to EALLOW protected registers
  81. // Step 4. Initialize all the Device Peripherals:
  82. // This function is found in DSP281x_InitPeripherals.c
  83. // InitPeripherals(); // Not required for this example
  84.  
  85. // Step 5. User specific code, enable interrupts:
  86. // Clear the counters
  87.    WakeCount = 0; // Count interrupts
  88.    LoopCount = 0; // Count times through idle loop
  89. // Connect the watchdog to the WAKEINT interrupt of the PIE
  90. // Write to the whole SCSR register to avoid clearing WDOVERRIDE bit
  91.    EALLOW;
  92.    SysCtrlRegs.SCSR = BIT1;
  93.    EDIS;
  94. // Enable WAKEINT in the PIE: Group 1 interrupt 8
  95. // Enable INT1 which is connected to WAKEINT:
  96.    PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE block
  97.    PieCtrlRegs.PIEIER1.bit.INTx8 = 1;   // Enable PIE Gropu 1 INT8
  98.    IER |= M_INT1;                       // Enable CPU INT1
  99.    EINT;                                // Enable Global Interrupts
  100. // Reset the watchdog counter
  101.    KickDog();
  102.       
  103. // Enable the watchdog
  104.    EALLOW;
  105.    SysCtrlRegs.WDCR = 0x0028;   
  106.    EDIS;
  107.    
  108. // Step 6. IDLE loop. Just sit and loop forever (optional):
  109.    for(;;)
  110.    {
  111.       LoopCount++;
  112.     
  113.       // Uncomment KickDog to just loop here
  114.       // Comment KickDog to take the WAKEINT instead
  115.       // KickDog();
  116.    }
  117. // Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:
  118. // If local ISRs are used, reassign vector addresses in vector table as
  119.     // shown in Step 5
  120. interrupt void wakeint_isr(void)
  121. {
  122. WakeCount++;
  123. // Acknowledge this interrupt to get more from group 1
  124. PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
  125. }
  126. //===========================================================================
  127. // No more.
  128. //===========================================================================