// TI File $Revision: /main/2 $ // Checkin $Date: July 30, 2009 18:45:25 $ //########################################################################### // // 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/DSP2823x C/C++ Header Files V1.31 $ // $Release Date: August 4, 2009 $ //########################################################################### #include "DSP2833x_Device.h" #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include "define.h" #include #include #define SCIB 1 #define boolen 1; // Prototype statements for functions found within this file. /***************************************************************************** Ö¸ÁÊýÉùÃ÷ ******************************************************************************/ //------------------------------------------------------UART1,----------------------------------------------- void scib_loopback_init(void); void scib_fifo_init(void); void scib_xmit(unsigned char a); void error(); interrupt void scib_rx_isr(void); //delay time void Delay_ms(long delay_time); // Global counts used in this example Uint16 LoopCount; Uint16 ErrorCount; unsigned int g_ReceiveFlag; int iLen; Uint16 ReceiverData[15]; // These are defined by the linker (see F28335.cmd) //extern Uint16 RamfuncsLoadStart; //extern Uint16 RamfuncsLoadEnd; //extern Uint16 RamfuncsRunStart; void main(void) { Uint16 SendChar; char *msg; Uint16 iStart; Uint16 iCount; Uint16 iIndex; //------------LCD SCREEN-------------------------------------------------------------- g_ReceiveFlag=0x00; iLen=0; iStart=0x00; // 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 InitSciGpio(); // Disable and clear all CPU interrupts:// Step 3. Initialize PIE vector table: DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.SCIRXINTA=&scib_rx_isr; EDIS; scib_fifo_init(); // Initialize the SCI FIFO scib_loopback_init(); // Initalize SCI // 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: // PieCtrlRegs.PIECTRL.bit.ENPIE=1; PieCtrlRegs.PIEIER9.bit.INTx3=1; IER|=0x0100;//enable INT9 EnableInterrupts(); EINT; //enable interruption // ERTM; //ENABLE REAL INTERRUPTION SendChar = 0x00; //------------------------------------------------ for(;;) { //---------------------------------------------interrupt receive while(g_ReceiveFlag==0x00) { Delay_ms(1); } if(g_ReceiveFlag==1) { for(iCount=0;iCount0) { g_ReceiveFlag=0; iLen=0; } } } //--------------------------------------------------------------------------------- } // Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here: void error() { 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 // Test 1,SCIB DLB, 8-bit word, baud rate 9.6K, default, 1 STOP bit, no parity void scib_loopback_init() { // Note: Clocks were turned on to the SCIB peripheral // in the InitSysCtrl() function ScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXWAKE ScibRegs.SCICTL2.all =0x0003; ScibRegs.SCICTL2.bit.TXINTENA =1; ScibRegs.SCICTL2.bit.RXBKINTENA =1; ScibRegs.SCIHBAUD =0x0000; ScibRegs.SCILBAUD =0x0027;//baud rate 115200 ScibRegs.SCICCR.bit.LOOPBKENA =1; // Disable loop back ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset } // Transmit a character from the SCI' void scib_xmit(unsigned char a) { ScibRegs.SCITXBUF=a; } // Initalize the SCI FIFO void scib_fifo_init() { ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0; ScibRegs.SCIFFRX.bit.RXFIFORESET=0; ScibRegs.SCIFFTX.all=0xE040; ScibRegs.SCIFFRX.all=0x204f; ScibRegs.SCIFFCT.all=0x0; } // void Delay_ms(long delay_time) { long lCount=0; long delay1=1000; //delay_time=delay_time*1000; for(lCount=0;lCount0) { g_ReceiveFlag=1; } PieCtrlRegs.PIEACK.all = 0x100; EINT ; }