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

DSP编程

开发平台:

C/C++

  1. //###########################################################################
  2. //
  3. // FILE:    Example_281xSci_FFDLB.c
  4. //
  5. // TITLE:   DSP281x Device SCI FIFO Digital Loop Back Test. 
  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 test uses the loopback test mode of the SCI module to send
  18. //          characters starting with 0x00 through 0xFF.  The test will send
  19. //          a character and then check the receive buffer for a correct match.
  20. //
  21. //          Watch Variables:
  22. //                LoopCount for the number of characters sent
  23. //                ErrorCount 
  24. //
  25. //
  26. //###########################################################################
  27. //
  28. // Original Author: S.S.
  29. //
  30. //  Ver | dd mmm yyyy | Who  | Description of changes
  31. // =====|=============|======|===============================================
  32. //  1.00| 11 Sep 2003 | L.H. | No change since previous version (v.58 Alpha)
  33. //###########################################################################
  34. #include "DSP281x_Device.h"
  35. #include "DSP281x_Examples.h"
  36. // Prototype statements for functions found within this file.
  37. void scia_loopback_init(void);
  38. void scia_fifo_init(void);
  39. void scia_xmit(int a);
  40. void error(int);
  41. interrupt void scia_rx_isr(void);
  42. interrupt void scia_tx_isr(void);
  43. // Global counts used in this example
  44. Uint16 LoopCount;
  45. Uint16 ErrorCount; 
  46. void main(void)
  47. {
  48.     Uint16 SendChar;
  49.     Uint16 ReceivedChar;
  50.     
  51. // Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state:
  52.         // This function is found in the DSP281x_SysCtrl.c file.
  53. InitSysCtrl();
  54. // Step 2. Select GPIO for the device or for the specific application:
  55.        // This function is found in the DSP281x_Gpio.c file.
  56.        // InitGpio(); skip this as this is example selects the I/O for SCI in this file itself
  57.     EALLOW;
  58.     GpioMuxRegs.GPFMUX.all=0x0030; // Select GPIOs to be Sci pins  
  59.                                     // Port F MUX - x000 0000 0011 0000
  60.     EDIS;
  61. // Step 3. Initialize PIE vector table:
  62.       // The PIE vector table is initialized with pointers to shell Interrupt 
  63.       // Service Routines (ISR).  The shell routines are found in DSP281x_DefaultIsr.c.
  64.       // Insert user specific ISR code in the appropriate shell ISR routine in 
  65.       // the DSP28_DefaultIsr.c file.
  66.       // Disable and clear all CPU interrupts:
  67. DINT;
  68. IER = 0x0000;
  69. IFR = 0x0000;
  70.       // Initialize Pie Control Registers To Default State:
  71.       // This function is found in the DSP281x_PieCtrl.c file.
  72.   // InitPieCtrl();  PIE is not used for this example
  73.       // Initialize the PIE Vector Table To a Known State:
  74.       // This function is found in DSP281x_PieVect.c.
  75.       // This function populates the PIE vector table with pointers
  76.       // to the shell ISR functions found in DSP281x_DefaultIsr.c.
  77.   InitPieVectTable();  
  78.       // Enable CPU and PIE interrupts
  79.       // This example function is found in the DSP281x_PieCtrl.c file.   
  80.       EnableInterrupts();
  81. // Step 4. Initialize all the Device Peripherals to a known state:
  82.       // This function is found in DSP281x_InitPeripherals.c
  83.       // InitPeripherals(); skip this for SCI tests
  84. // Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:
  85.     LoopCount = 0;
  86.     ErrorCount = 0;
  87.     
  88.     scia_fifo_init();    // Initialize the SCI FIFO
  89.     scia_loopback_init();  // Initalize SCI for digital loop back 
  90.     // Note: Autobaud lock is not required for this example
  91.     
  92.     // Send a character starting with 0 
  93.     SendChar = 0;
  94. // Step 6. Send Characters forever starting with 0x00 and going through
  95. // 0xFF.  After sending each, check the recieve buffer for the correct value
  96. for(;;)
  97.     { 
  98.        scia_xmit(SendChar);
  99.        while(SciaRegs.SCIFFRX.bit.RXFIFST !=1) { } // wait for XRDY =1 for empty state
  100.   
  101.        // Check received character
  102.        ReceivedChar = SciaRegs.SCIRXBUF.all;
  103.        if(ReceivedChar != SendChar) error(1);
  104.        // Move to the next character and repeat the test
  105.        SendChar++;
  106.        // Limit the character to 8-bits
  107.        SendChar &= 0x00FF;
  108.        LoopCount++;
  109.     }
  110. // Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:
  111. void error(int ErrorFlag)
  112. {
  113.       ErrorCount++;
  114. //    asm("     ESTOP0");  // Uncomment to stop the test here
  115. //    for (;;);
  116. }
  117. // Test 1,SCIA  DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity 
  118. void scia_loopback_init()
  119. {    
  120.     // Note: Clocks were turned on to the SCIA peripheral
  121.     // in the InitSysCtrl() function
  122.     
  123.   SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback 
  124.                                    // No parity,8 char bits,
  125.                                    // async mode, idle-line protocol
  126. SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK, 
  127.                                    // Disable RX ERR, SLEEP, TXWAKE
  128. SciaRegs.SCICTL2.all =0x0003; 
  129. SciaRegs.SCICTL2.bit.TXINTENA =1;
  130. SciaRegs.SCICTL2.bit.RXBKINTENA =1;
  131.     SciaRegs.SCIHBAUD    =0x0000;
  132.     SciaRegs.SCILBAUD    =0x000F;
  133. SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back  
  134. SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset 
  135. }
  136. // Transmit a character from the SCI'
  137. void scia_xmit(int a)
  138. {
  139.     SciaRegs.SCITXBUF=a;
  140. }    
  141. // Initalize the SCI FIFO
  142. void scia_fifo_init()
  143. {
  144.     SciaRegs.SCIFFTX.all=0xE040;
  145.     SciaRegs.SCIFFRX.all=0x204f;
  146.     SciaRegs.SCIFFCT.all=0x0;
  147.     
  148. }  
  149.                 
  150.  
  151.     
  152. //===========================================================================
  153. // No more.
  154. //===========================================================================