⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 example_2833xscia_ffdlb.c

📁 TI F28335 的串口通讯程序;以测试过
💻 C
字号:
// TI File $Revision: /main/8 $
// Checkin $Date: August 15, 2007   09:45:52 $
//###########################################################################
//
// FILE:    Example_2833xSci_FFDLB.c
//
// TITLE:   DSP2833x Device SCI FIFO Digital Loop Back Test.
//
// ASSUMPTIONS:
//
//    This program requires the DSP2833x header files.
//
//    This program uses the internal loop back test mode of the peripheral.
//    Other then boot mode pin configuration, no other hardware configuration
//    is required.
//
//    As supplied, this project is configured for "boot to SARAM"
//    operation.  The 2833x Boot Mode table is shown below.
//    For information on configuring the boot mode of an eZdsp,
//    please refer to the documentation included with the eZdsp,
//
//       $Boot_Table:
//
//         GPIO87   GPIO86     GPIO85   GPIO84
//          XA15     XA14       XA13     XA12
//           PU       PU         PU       PU
//        ==========================================
//            1        1          1        1    Jump to Flash
//            1        1          1        0    SCI-A boot
//            1        1          0        1    SPI-A boot
//            1        1          0        0    I2C-A boot
//            1        0          1        1    eCAN-A boot
//            1        0          1        0    McBSP-A boot
//            1        0          0        1    Jump to XINTF x16
//            1        0          0        0    Jump to XINTF x32
//            0        1          1        1    Jump to OTP
//            0        1          1        0    Parallel GPIO I/O boot
//            0        1          0        1    Parallel XINTF boot
//            0        1          0        0    Jump to SARAM	    <- "boot to SARAM"
//            0        0          1        1    Branch to check boot mode
//            0        0          1        0    Boot to flash, bypass ADC cal
//            0        0          0        1    Boot to SARAM, bypass ADC cal
//            0        0          0        0    Boot to SCI-A, bypass ADC cal
//                                              Boot_Table_End$
//
// DESCRIPTION:
//
//    This test uses the loopback test mode of the SCI module to send
//    characters starting with 0x00 through 0xFF.  The test will send
//    a character and then check the receive buffer for a correct match.
//
//          Watch Variables:
//                LoopCount      Number of characters sent
//                ErrorCount     Number of errors detected
//                SendChar       Character sent
//                ReceivedChar   Character recieved
//
//
//###########################################################################
//
// Original Author: S.S.
//
// $TI Release: DSP2833x Header Files V1.10 $
// $Release Date: February 15, 2008 $
//###########################################################################


#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"

// Prototype statements for functions found within this file.
void scia_init(void);
void scia_fifo_init(void);
void scia_xmit(int a);
void error(int);
interrupt void scia_rx_isr(void);
interrupt void scia_tx_isr(void);
Uint16 scia_rx(void);

// Global counts used in this example
Uint16 SendChar;
volatile Uint16 flag;
volatile Uint16 RX;
Uint16 LoopCount;
Uint16 ErrorCount;
Uint16 i;
Uint16 RUFF[10];

void main(void)
{
 //   Uint16 SendChar;
    Uint16 ReceivedChar;
	Uint16 a,b;

// Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state:
// This function is found in the DSP2833x_SysCtrl.c file.
	InitSysCtrl();

// Step 2. Select GPIO for the device or for the specific application:
// This function is found in the DSP2833x_Gpio.c file.
// InitGpio(); skip this as this is example selects the I/O
// for SCI-A in this file itself
   InitSciGpio();

// Step 3. Initialize PIE vector table:
// The PIE vector table is initialized with pointers to shell Interrupt
// Service Routines (ISR).  The shell routines are found in DSP2833x_DefaultIsr.c.
// Insert user specific ISR code in the appropriate shell ISR routine in
// the DSP28_DefaultIsr.c file.

// Disable and clear all CPU interrupts:
	DINT;
	
	IER = 0x0000;
	IFR = 0x0000;
	flag=0;
      // Initialize Pie Control Registers To Default State:
      // This function is found in the DSP2833x_PieCtrl.c file.
	  // InitPieCtrl();  PIE is not used for this example

      // Initialize the PIE Vector Table To a Known State:
      // This function is found in DSP2833x_PieVect.c.
      // This function populates the PIE vector table with pointers
      // to the shell ISR functions found in DSP2833x_DefaultIsr.c.
	  InitPieVectTable();

      // Enable CPU and PIE interrupts
      // This example function is found in the DSP2833x_PieCtrl.c file.
      EnableInterrupts();

// Step 4. Initialize all the Device Peripherals to a known state:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); //skip this for SCI tests

// Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:
	i=0;
    LoopCount = 0;
    ErrorCount = 0;

    scia_fifo_init();	   // Initialize the SCI FIFO
    scia_init();  // Initalize SCI for digital loop back
	 EALLOW;	    // This is needed to write to EALLOW protected registers
//	DevEmuRegs.DEVICECNF.bit.VMAPS=1;
   PieVectTable.SCIRXINTA = &scia_rx_isr;
   EDIS;

    // Note: Autobaud lock is not required for this example

    // Send a character starting with 0
    SendChar = 0;
	EALLOW;
//	XIntruptRegs.XINT1CR.bit.ENABLE=0;
	PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
	PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
	
	SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;
	EDIS;
//	PieCtrlRegs.PIEIER9.all = 0x0001; // Enable all SCIA RXINT interrupt
   IER |= 0x0100;			         // enable PIEIER9, and INT9

   EINT;
	ERTM;
// Step 6. Send Characters forever starting with 0x00 and going through
// 0xFF.  After sending each, check the recieve buffer for the correct value

	for(;;)
    {
       scia_xmit(SendChar);
//		scia_xmit(SendChar);
 //      while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { } // wait for RRDY/RXFFST =1 for 1 data available in FIFO
		while(flag!=1){}
       // Check received character
//       ReceivedChar = SciaRegs.SCIRXBUF.all;
//		ReceivedChar=scia_rx();
		RUFF[i]=0;
	   RUFF[i]=RX;
	  
	   flag=0;
	   if(i<9){
			i++;
		}
			else i=0;
  //     if(ReceivedChar != SendChar) error(1);

       // Move to the next character and repeat the test
       SendChar++;
       // Limit the character to 8-bits
       SendChar &= 0x00FF;
       LoopCount++;
    }

}


// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:

void error(int ErrorFlag)
{
      Uint16 ErrorCount = ErrorFlag;
      ErrorCount++;
//    asm("     ESTOP0");  // Uncomment to stop the test here
//    for (;;);

}

// Test 1,SCIA  DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
void scia_init()
{
    // Note: Clocks were turned on to the SCIA peripheral
    // in the InitSysCtrl() function

 	SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
	SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
	SciaRegs.SCICTL2.all =0x0003;
	SciaRegs.SCICTL2.bit.TXINTENA =1;
	SciaRegs.SCICTL2.bit.RXBKINTENA =1;
    SciaRegs.SCIHBAUD    =0x0001;		//SET THE BAUD RATE
    SciaRegs.SCILBAUD    =0x00E7;
	SciaRegs.SCICCR.bit.LOOPBKENA =0; // Disable loop back
	SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset
}

// Transmit a character from the SCI'
void scia_xmit(int a)
{
    SciaRegs.SCITXBUF=a;
}

// Initalize the SCI FIFO
void scia_fifo_init()
{
    SciaRegs.SCIFFTX.all=0xE040;
//    SciaRegs.SCIFFRX.all=0x204f;
	SciaRegs.SCIFFRX.all=0x2061;
    SciaRegs.SCIFFCT.all=0x0;

}

interrupt void scia_rx_isr(void){
//	Uint16 RX;
	
//	 while(SciaRegs.SCIFFRX.bit.RXFFST !=1) { } // wait for RRDY/RXFFST =1 for 1 data available in FIFO
		RX=0;
       // Check received character
       RX = SciaRegs.SCIRXBUF.all;
	   RX&=0x00ff;
		flag=1;
	   PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
	   SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;
// Acknowledge this interrupt to receive more interrupts from group 1
   // PieCtrlRegs.PIEACK.all =0X0100;
	

}




//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -