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

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:    Example_281xGpioToggle.c
  4. //
  5. // TITLE:   DSP281x Device GPIO toggle 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. //          Three different examples are included. Select the example 
  16. //          (data, set/clear or toggle) to execute before compiling using
  17. //          the #define statements found at the top of the code.   
  18. //
  19. // DESCRIPTION:
  20. //
  21. //          Toggle all of the GPIO PORT pins 
  22. //        
  23. //          The pins can be observed using Oscilloscope.  
  24. // 
  25. //
  26. //###########################################################################
  27. //
  28. // Original by S.S.
  29. //
  30. //  Ver | dd mmm yyyy | Who  | Description of changes
  31. // =====|=============|======|===============================================
  32. // 1.00 | 11 Sep 2003 | L.H. | First Release
  33. //###########################################################################
  34. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  35. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  36. // Select the example to compile in.  Only one example should be set as 1
  37. // the rest should be set as 0.
  38. #define EXAMPLE1 1  // Use DATA registers to toggle I/O's
  39. #define EXAMPLE2 0  // Use SET/CLEAR registers to toggle I/O's
  40. #define EXAMPLE3 0  // Use TOGGLE registers to toggle I/O's
  41. // Prototype statements for functions found within this file.
  42. void delay_loop(void);
  43. void Gpio_select(void);
  44. void Gpio_example1(void);
  45. void Gpio_example2(void);
  46. void Gpio_example3(void);
  47. void main(void)
  48. {
  49. // Step 1. Initialize System Control:
  50. // PLL, WatchDog, enable Peripheral Clocks
  51. // This example function is found in the DSP281x_SysCtrl.c file.
  52.    InitSysCtrl();
  53.    
  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.  
  59. // For this example use the following configuration:
  60.    Gpio_select();   
  61. // Step 3. Clear all interrupts and initialize PIE vector table:
  62. // Disable CPU interrupts 
  63.    DINT;
  64. // Initialize PIE control registers to their default state.
  65. // The default state is all PIE interrupts disabled and flags
  66. // are cleared.  
  67. // This function is found in the DSP281x_PieCtrl.c file.
  68.    InitPieCtrl();
  69. // Disable CPU interrupts and clear all CPU interrupt flags:
  70.    IER = 0x0000;
  71.    IFR = 0x0000;
  72. // Initialize the PIE vector table with pointers to the shell Interrupt 
  73. // Service Routines (ISR).  
  74. // This will populate the entire table, even if the interrupt
  75. // is not used in this example.  This is useful for debug purposes.
  76. // The shell ISR routines are found in DSP281x_DefaultIsr.c.
  77. // This function is found in DSP281x_PieVect.c.
  78.    InitPieVectTable();
  79. // Step 4. Initialize all the Device Peripherals:
  80. // This function is found in DSP281x_InitPeripherals.c
  81. // InitPeripherals(); // Not required for this example
  82. // Step 5. User specific code:
  83. #if EXAMPLE1
  84.     // This example uses DATA registers to toggle I/O's
  85.     Gpio_example1();
  86. #endif  // - EXAMPLE1
  87. #if EXAMPLE2
  88.     // This example uses SET/CLEAR registers to toggle I/O's
  89.     Gpio_example1();
  90.     
  91. #endif
  92. #if EXAMPLE3
  93.     // This example uses TOGGLE registers to toggle I/O's
  94.     Gpio_example3();
  95.     
  96. #endif
  97. void delay_loop()
  98. {
  99.     short      i;
  100.     for (i = 0; i < 1000; i++) {}
  101. }
  102. void Gpio_example1(void)
  103.    // Example 1:
  104.    // Toggle I/Os using DATA registers
  105.    // Note: When using the DATA reigsters, input values
  106.    // may be lost.  If there are inputs on the port then
  107.    // use the CLEAR/SET/TOGGLE registers instead. 
  108.    while(1)
  109.    {    
  110.        GpioDataRegs.GPADAT.all    =0xAAAA;   
  111.        GpioDataRegs.GPBDAT.all    =0xAAAA;     
  112.        GpioDataRegs.GPDDAT.all    =0x0022;    
  113.        GpioDataRegs.GPEDAT.all    =0x0002; 
  114.        GpioDataRegs.GPFDAT.all    =0xAAAA;    
  115.        GpioDataRegs.GPGDAT.all    =0x0020;        
  116.        delay_loop();
  117.     
  118.        GpioDataRegs.GPADAT.all    =0x5555;     
  119.        GpioDataRegs.GPBDAT.all    =0x5555;     
  120.        GpioDataRegs.GPDDAT.all    =0x0041;    // Four I/Os only
  121.        GpioDataRegs.GPEDAT.all    =0x0005;    // ThreeI/Os only
  122.        GpioDataRegs.GPFDAT.all    =0x5555;    
  123.        GpioDataRegs.GPGDAT.all    =0x0010;    // Two  I/Os only
  124.        delay_loop();
  125.     }
  126. }
  127. void Gpio_example2(void)
  128.    // Example 2:
  129.    // Toggle I/Os using SET/CLEAR registers
  130.    while(1)
  131.    {    
  132.        GpioDataRegs.GPASET.all    =0xAAAA;
  133.        GpioDataRegs.GPACLEAR.all  =0x5555;         
  134.        
  135.        GpioDataRegs.GPBSET.all    =0xAAAA;
  136.        GpioDataRegs.GPBCLEAR.all  =0x5555;     
  137.                    
  138.        GpioDataRegs.GPDSET.all    =0x0022;
  139.        GpioDataRegs.GPDCLEAR.all  =0x0041;    // Four I/Os only
  140.        GpioDataRegs.GPESET.all    =0x0002;
  141.        GpioDataRegs.GPECLEAR.all  =0x0005;    // ThreeI/Os only
  142.                
  143.        GpioDataRegs.GPFSET.all    =0xAAAA;
  144.        GpioDataRegs.GPFCLEAR.all  =0x5555;    
  145.                   
  146.        GpioDataRegs.GPGSET.all    =0x0020;
  147.        GpioDataRegs.GPGCLEAR.all  =0x0010;    // Two  I/Os only
  148.                       
  149.        delay_loop();
  150.        
  151.        GpioDataRegs.GPACLEAR.all  =0xAAAA;
  152.        GpioDataRegs.GPASET.all    =0x5555;         
  153.        
  154.        GpioDataRegs.GPBCLEAR.all  =0xAAAA;
  155.        GpioDataRegs.GPBSET.all    =0x5555;     
  156.                    
  157.        GpioDataRegs.GPDCLEAR.all  =0x0022;
  158.        GpioDataRegs.GPDSET.all    =0x0041;    // Four I/Os only
  159.        GpioDataRegs.GPECLEAR.all  =0x0002;
  160.        GpioDataRegs.GPESET.all    =0x0005;    // ThreeI/Os only
  161.                
  162.        GpioDataRegs.GPFCLEAR.all  =0xAAAA;
  163.        GpioDataRegs.GPFSET.all    =0x5555;    
  164.                   
  165.        GpioDataRegs.GPGCLEAR.all  =0x0020;
  166.        GpioDataRegs.GPGSET.all    =0x0010;    // Two  I/Os only                   
  167.        delay_loop();
  168.     }
  169. }
  170. void Gpio_example3(void)
  171.    // Example 2:
  172.    // Toggle I/Os using TOGGLE registers
  173.    // Set pins to a known state
  174.    GpioDataRegs.GPASET.all    =0xAAAA;
  175.    GpioDataRegs.GPACLEAR.all  =0x5555;         
  176.        
  177.    GpioDataRegs.GPBSET.all    =0xAAAA;
  178.    GpioDataRegs.GPBCLEAR.all  =0x5555;     
  179.    
  180.    GpioDataRegs.GPDSET.all    =0x0022;
  181.    GpioDataRegs.GPDCLEAR.all  =0x0041;    // Four I/Os only
  182.    GpioDataRegs.GPESET.all    =0x0002;
  183.    GpioDataRegs.GPECLEAR.all  =0x0005;    // ThreeI/Os only
  184.                
  185.    GpioDataRegs.GPFSET.all    =0xAAAA;
  186.    GpioDataRegs.GPFCLEAR.all  =0x5555;    
  187.                   
  188.    GpioDataRegs.GPGSET.all    =0x0020;
  189.    GpioDataRegs.GPGCLEAR.all  =0x0010;    // Two  I/Os only
  190.    
  191.    // Use TOGGLE registers to flip the state of
  192.    // the pins. 
  193.    // Any bit set to a 1 will flip state (toggle)
  194.    // Any bit set to a 0 will not toggle.   
  195.    while(1)
  196.    {    
  197.        GpioDataRegs.GPATOGGLE.all = 0xFFFF;
  198.        GpioDataRegs.GPBTOGGLE.all = 0xFFFF;
  199.        GpioDataRegs.GPDTOGGLE.all = 0xFFFF;
  200.        GpioDataRegs.GPETOGGLE.all = 0xFFFF;
  201.        GpioDataRegs.GPFTOGGLE.all = 0xFFFF;
  202.        GpioDataRegs.GPGTOGGLE.all = 0xFFFF;
  203.                       
  204.        delay_loop();
  205.     }
  206. }
  207. void Gpio_select(void)
  208. {
  209.     Uint16 var1;
  210.     Uint16 var2;
  211.     Uint16 var3;
  212.     var1= 0x0000; // sets GPIO Muxs as I/Os
  213.     var2= 0xFFFF; // sets GPIO DIR as outputs
  214.     var3= 0x0000; // sets the Input qualifier values
  215.    
  216.     EALLOW;
  217.  
  218. GpioMuxRegs.GPAMUX.all=var1;
  219.     GpioMuxRegs.GPBMUX.all=var1;   
  220.     GpioMuxRegs.GPDMUX.all=var1;
  221.     GpioMuxRegs.GPFMUX.all=var1;  
  222.     GpioMuxRegs.GPEMUX.all=var1; 
  223.     GpioMuxRegs.GPGMUX.all=var1;
  224.     GpioMuxRegs.GPADIR.all=var2; // GPIO PORTs  as output
  225.     GpioMuxRegs.GPBDIR.all=var2;    // GPIO DIR select GPIOs as output 
  226.     GpioMuxRegs.GPDDIR.all=var2;
  227.     GpioMuxRegs.GPEDIR.all=var2;
  228.     GpioMuxRegs.GPFDIR.all=var2; 
  229.     GpioMuxRegs.GPGDIR.all=var2;
  230.     GpioMuxRegs.GPAQUAL.all=var3;   // Set GPIO input qualifier values
  231.     GpioMuxRegs.GPBQUAL.all=var3;   
  232.     GpioMuxRegs.GPDQUAL.all=var3;
  233.     GpioMuxRegs.GPEQUAL.all=var3;
  234.  
  235.     EDIS;
  236.      
  237. }     
  238. //===========================================================================
  239. // No more.
  240. //===========================================================================