278 lines
7.3 KiB
C
278 lines
7.3 KiB
C
//###########################################################################
|
|
//
|
|
// FILE: Example_2833xSci_FFDLB.c
|
|
//
|
|
// TITLE: SCI Digital Loop Back Example
|
|
//
|
|
//! \addtogroup f2833x_example_list
|
|
//! <h1>SCI Digital Loop Back (scia_loopback)</h1>
|
|
//!
|
|
//! This program uses the internal loop back test mode of the peripheral.
|
|
//! Other then boot mode pin configuration, no other hardware configuration
|
|
//! is required.
|
|
//!
|
|
//! 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.
|
|
//!
|
|
//! \b Watch \b Variables \n
|
|
//! - LoopCount - Number of characters sent
|
|
//! - ErrorCount - Number of errors detected
|
|
//! - SendChar - Character sent
|
|
//! - ReceivedChar - Character received
|
|
//
|
|
//###########################################################################
|
|
// $TI Release: $
|
|
// $Release Date: $
|
|
// $Copyright:
|
|
// Copyright (C) 2009-2023 Texas Instruments Incorporated - http://www.ti.com/
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions
|
|
// are met:
|
|
//
|
|
// Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
//
|
|
// Redistributions in binary form must reproduce the above copyright
|
|
// notice, this list of conditions and the following disclaimer in the
|
|
// documentation and/or other materials provided with the
|
|
// distribution.
|
|
//
|
|
// Neither the name of Texas Instruments Incorporated nor the names of
|
|
// its contributors may be used to endorse or promote products derived
|
|
// from this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
// $
|
|
//###########################################################################
|
|
|
|
//
|
|
// Included Files
|
|
//
|
|
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
|
|
|
|
//
|
|
// Function Prototypes
|
|
//
|
|
void scia_loopback_init(void);
|
|
void scia_fifo_init(void);
|
|
void scia_xmit(int a);
|
|
void error();
|
|
__interrupt void scia_rx_isr(void);
|
|
__interrupt void scia_tx_isr(void);
|
|
|
|
//
|
|
// Globals
|
|
//
|
|
Uint16 LoopCount;
|
|
Uint16 ErrorCount;
|
|
|
|
//
|
|
// Main
|
|
//
|
|
void main(void)
|
|
{
|
|
Uint16 SendChar;
|
|
Uint16 ReceivedChar;
|
|
|
|
//
|
|
// 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.
|
|
//
|
|
|
|
//
|
|
// skip this as this is example selects the I/O for SCI-A in this
|
|
// file itself
|
|
//
|
|
// InitGpio();
|
|
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;
|
|
|
|
//
|
|
// 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:
|
|
//
|
|
LoopCount = 0;
|
|
ErrorCount = 0;
|
|
|
|
scia_fifo_init(); // Initialize the SCI FIFO
|
|
scia_loopback_init(); // Initialize SCI for digital loop back
|
|
|
|
//
|
|
// Note: Autobaud lock is not required for this example
|
|
//
|
|
|
|
//
|
|
// Send a character starting with 0
|
|
//
|
|
SendChar = 0;
|
|
|
|
//
|
|
// Step 6. Send Characters forever starting with 0x00 and going through
|
|
// 0xFF. After sending each, check the receive buffer for the correct
|
|
// value
|
|
//
|
|
for(;;)
|
|
{
|
|
scia_xmit(SendChar);
|
|
|
|
//
|
|
// wait for RRDY/RXFFST =1 for 1 data available in FIFO
|
|
//
|
|
while(SciaRegs.SCIFFRX.bit.RXFFST !=1)
|
|
{
|
|
|
|
}
|
|
|
|
//
|
|
// Check received character
|
|
//
|
|
ReceivedChar = SciaRegs.SCIRXBUF.all;
|
|
if(ReceivedChar != SendChar)
|
|
{
|
|
error();
|
|
}
|
|
|
|
//
|
|
// 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:
|
|
//
|
|
|
|
//
|
|
// error -
|
|
//
|
|
void
|
|
error()
|
|
{
|
|
ErrorCount++;
|
|
//__asm(" ESTOP0"); // Uncomment to stop the test here
|
|
//for (;;);
|
|
}
|
|
|
|
//
|
|
// scia_loopback_init - Test 1, SCIA DLB, 8-bit word, baud rate 0x000F,
|
|
// default, 1 STOP bit, no parity
|
|
//
|
|
void
|
|
scia_loopback_init()
|
|
{
|
|
//
|
|
// Note: Clocks were turned on to the SCIA peripheral
|
|
// in the InitSysCtrl() function
|
|
//
|
|
|
|
//
|
|
// 1 stop bit, No loopback, No parity,8 char bits, async mode,
|
|
// idle-line protocol
|
|
//
|
|
SciaRegs.SCICCR.all =0x0007;
|
|
|
|
//
|
|
// enable TX, RX, internal SCICLK, Disable RX ERR, SLEEP, TXWAKE
|
|
//
|
|
SciaRegs.SCICTL1.all =0x0003;
|
|
SciaRegs.SCICTL2.all =0x0003;
|
|
SciaRegs.SCICTL2.bit.TXINTENA =0;
|
|
SciaRegs.SCICTL2.bit.RXBKINTENA =0;
|
|
SciaRegs.SCIHBAUD =0x0000;
|
|
SciaRegs.SCILBAUD =0x000F;
|
|
SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back
|
|
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
|
|
}
|
|
|
|
//
|
|
// scia_xmit - Transmit a character from the SCI
|
|
//
|
|
void
|
|
scia_xmit(int a)
|
|
{
|
|
SciaRegs.SCITXBUF=a;
|
|
}
|
|
|
|
//
|
|
// scia_fifo_init - Initialize the SCI FIFO
|
|
//
|
|
void
|
|
scia_fifo_init()
|
|
{
|
|
SciaRegs.SCIFFTX.all=0xE040;
|
|
SciaRegs.SCIFFRX.all=0x204f;
|
|
SciaRegs.SCIFFCT.all=0x0;
|
|
}
|
|
|
|
//
|
|
// End of File
|
|
//
|
|
|