|
<> |
//########################################################################### |
|
|
// |
|
|
// FILE: Example_2837xDSci_Echoback.c |
|
|
// |
|
|
// TITLE: SCI Echoback. |
|
|
// |
|
|
//! \addtogroup cpu01_example_list |
|
|
//! <h1>SCI Echoback (sci_echoback)</h1> |
|
|
//! |
|
|
//! This test receives and echo-backs data through the SCI-A port. |
|
|
//! |
|
|
//! The PC application 'hyperterminal' or another terminal |
|
|
//! such as 'putty' can be used to view the data from the SCI and |
|
|
//! to send information to the SCI. Characters received |
|
|
//! by the SCI port are sent back to the host. |
|
|
//! |
|
|
//! \b Running \b the \b Application |
|
|
//! -# Configure hyperterminal or another terminal such as putty: |
|
|
//! |
|
|
//! For hyperterminal you can use the included hyperterminal configuration |
|
|
//! file SCI_96.ht. |
|
|
//! To load this configuration in hyperterminal |
|
|
//! -# Open hyperterminal |
|
|
//! -# Go to file->open |
|
|
//! -# Browse to the location of the project and |
|
|
//! select the SCI_96.ht file. |
|
|
//! -# Check the COM port. |
|
|
//! The configuration file is currently setup for COM1. |
|
|
//! If this is not correct, disconnect (Call->Disconnect) |
|
|
//! Open the File-Properties dialogue and select the correct COM port. |
|
|
//! -# Connect hyperterminal Call->Call |
|
|
//! and then start the 2837xD SCI echoback program execution. |
|
|
//! -# The program will print out a greeting and then ask you to |
|
|
//! enter a character which it will echo back to hyperterminal. |
|
|
//! |
|
|
//! \note If you are unable to open the .ht file, or you are using |
|
|
//! a different terminal, you can open a COM port with the following settings |
|
|
//! - Find correct COM port |
|
|
//! - Bits per second = 9600 |
|
|
//! - Date Bits = 8 |
|
|
//! - Parity = None |
|
|
//! - Stop Bits = 1 |
|
|
//! - Hardware Control = None |
|
|
//! |
|
|
//! \b Watch \b Variables \n |
|
|
//! - LoopCount - the number of characters sent |
|
|
//! |
|
|
//! \b External \b Connections \n |
|
|
//! Connect the SCI-A port to a PC via a transceiver and cable. |
|
|
//! - GPIO28 is SCI_A-RXD (Connect to Pin3, PC-TX, of serial DB9 cable) |
|
|
//! - GPIO29 is SCI_A-TXD (Connect to Pin2, PC-RX, of serial DB9 cable) |
|
|
//! |
|
|
// |
|
|
//########################################################################### |
|
|
// $TI Release: F2837xD Support Library v3.05.00.00 $ |
|
|
// $Release Date: Thu Oct 18 15:48:42 CDT 2018 $ |
|
|
// $Copyright: |
|
|
// Copyright (C) 2013-2018 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 "F28x_Project.h" |
|
#include "F28x_Project.h" |
#define TX 18 |
|
|
|
|
// |
|
|
// Globals |
|
|
// |
|
|
Uint16 LoopCount; |
|
|
|
|
|
// |
|
|
// Function Prototypes |
|
|
// |
void scib_echoback_init(void); |
|
void scia_echoback_init(void); |
void scib_fifo_init(void); |
|
void scia_fifo_init(void); |
void scib_xmit(int a); |
|
void scia_xmit(int a); |
void scib_msg(char *msg); |
|
void scia_msg(char *msg); |
|
|
|
|
|
// |
|
|
// Main |
|
|
// |
void main(void) |
|
void main(void) |
{ |
|
{ |
|
|
Uint16 ReceivedChar; |
char *msg; |
|
char *msg; |
|
|
|
|
|
// |
|
|
// Step 1. Initialize System Control: |
|
|
// PLL, WatchDog, enable Peripheral Clocks |
|
|
// This example function is found in the F2837xD_SysCtrl.c file. |
|
|
// |
InitSysCtrl(); |
|
InitSysCtrl(); |
// GPIO |
|
|
|
|
// |
|
|
// Step 2. Initialize GPIO: |
|
|
// This example function is found in the F2837xD_Gpio.c file and |
|
|
// illustrates how to set the GPIO to it's default state. |
|
|
// |
InitGpio(); |
|
InitGpio(); |
EALLOW; |
|
|
// Set the mux to SCITXDB on GPIO 18 |
|
|
GpioCtrlRegs.GPAGMUX2.bit.GPIO18 = 0; |
|
// |
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 2; |
|
// For this example, only init the pins for the SCI-A port. |
// Select CPU 1 |
|
// GPIO_SetupPinMux() - Sets the GPxMUX1/2 and GPyMUX1/2 register bits |
GpioCtrlRegs.GPACSEL3.bit.GPIO18 = 0; |
|
// GPIO_SetupPinOptions() - Sets the direction and configuration of the GPIOS |
// Set GPIO 18 as output |
|
// These functions are found in the F2837xD_Gpio.c file. |
GpioCtrlRegs.GPADIR.bit.GPIO18 = 1; |
|
// |
// Async mode |
|
GPIO_SetupPinMux(28, GPIO_MUX_CPU1, 1); |
GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; |
|
GPIO_SetupPinOptions(28, GPIO_INPUT, GPIO_PUSHPULL); |
EDIS; |
|
GPIO_SetupPinMux(29, GPIO_MUX_CPU1, 1); |
|
|
GPIO_SetupPinOptions(29, GPIO_OUTPUT, GPIO_ASYNC); |
// Interrupts |
|
|
|
|
// |
|
|
// Step 3. Clear all __interrupts and initialize PIE vector table: |
|
|
// Disable CPU __interrupts |
|
|
// |
DINT; |
|
DINT; |
|
|
|
|
|
// |
|
|
// Initialize PIE control registers to their default state. |
|
|
// The default state is all PIE __interrupts disabled and flags |
|
|
// are cleared. |
|
|
// This function is found in the F2837xD_PieCtrl.c file. |
|
|
// |
InitPieCtrl(); |
|
InitPieCtrl(); |
|
|
|
|
|
// |
|
|
// Disable CPU __interrupts and clear all CPU __interrupt flags: |
|
|
// |
IER = 0x0000; |
|
IER = 0x0000; |
IFR = 0x0000; |
|
IFR = 0x0000; |
|
|
|
|
|
// |
|
|
// Initialize the PIE vector table with pointers to the shell Interrupt |
|
|
// Service Routines (ISR). |
|
|
// This will populate the entire table, even if the __interrupt |
|
|
// is not used in this example. This is useful for debug purposes. |
|
|
// The shell ISR routines are found in F2837xD_DefaultIsr.c. |
|
|
// This function is found in F2837xD_PieVect.c. |
|
|
// |
InitPieVectTable(); |
|
InitPieVectTable(); |
EINT; |
|
|
|
|
// |
|
|
// Step 4. User specific code: |
|
|
// |
|
|
LoopCount = 0; |
// SCI |
|
|
scib_fifo_init(); |
|
scia_fifo_init(); // Initialize the SCI FIFO |
scib_echoback_init(); |
|
scia_echoback_init(); // Initialize SCI for echoback |
|
|
|
|
|
msg = "\r\n\n\nHello World!\0"; |
|
|
scia_msg(msg); |
|
|
|
|
|
msg = "\r\nYou will enter a character, and the DSP will echo it back! \n\0"; |
|
|
scia_msg(msg); |
|
|
|
for (;;) { |
|
for(;;) |
msg = "Salut\n\0"; |
|
{ |
|
|
msg = "\r\nEnter a character: \0"; |
scib_msg(msg); |
|
scia_msg(msg); |
|
|
|
|
|
// |
|
|
// Wait for inc character |
|
|
// |
|
|
while(SciaRegs.SCIFFRX.bit.RXFFST == 0) { } // wait for empty state |
|
|
|
|
|
// |
|
|
// Get character |
|
|
// |
|
|
ReceivedChar = SciaRegs.SCIRXBUF.all; |
|
|
|
|
|
// |
|
|
// Echo character back |
|
|
// |
|
|
msg = " You sent: \0"; |
|
|
scia_msg(msg); |
|
|
scia_xmit(ReceivedChar); |
|
|
|
|
|
LoopCount++; |
} |
|
} |
} |
|
} |
|
|
|
|
|
// |
|
|
// scia_echoback_init - Test 1,SCIA DLB, 8-bit word, baud rate 0x000F, |
|
|
// default, 1 STOP bit, no parity |
|
|
// |
void scib_echoback_init() |
|
void scia_echoback_init() |
{ |
|
{ |
|
|
// |
|
|
// Note: Clocks were turned on to the SCIA peripheral |
|
|
// in the InitSysCtrl() function |
|
|
// |
|
|
|
ScibRegs.SCICCR.all = 0x0007; // 1 stop bit, No loopback |
|
SciaRegs.SCICCR.all = 0x0007; // 1 stop bit, No loopback |
// No parity,8 char bits, |
|
// No parity,8 char bits, |
// async mode, idle-line protocol |
|
// async mode, idle-line protocol |
ScibRegs.SCICTL1.all = 0x0003; // enable TX, RX, internal SCICLK, |
|
SciaRegs.SCICTL1.all = 0x0003; // enable TX, RX, internal SCICLK, |
// Disable RX ERR, SLEEP, TXWAKE |
|
// Disable RX ERR, SLEEP, TXWAKE |
ScibRegs.SCICTL2.all = 0x0003; // Enable RXBKINTENA and TXINTENA |
|
SciaRegs.SCICTL2.all = 0x0003; |
// |
|
SciaRegs.SCICTL2.bit.TXINTENA = 1; |
// SCIB at 9600 baud |
|
SciaRegs.SCICTL2.bit.RXBKINTENA = 1; |
// @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B. |
|
|
// @LSPCLK = 30 MHz (120 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x86. |
|
// |
// |
|
// SCIA at 9600 baud |
|
|
// @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B. |
|
|
// @LSPCLK = 30 MHz (120 MHz SYSCLK) HBAUD = 0x01 and LBAUD = 0x86. |
|
|
// |
ScibRegs.SCIHBAUD.all = 0x0002; |
|
SciaRegs.SCIHBAUD.all = 0x0002; |
ScibRegs.SCILBAUD.all = 0x008B; |
|
SciaRegs.SCILBAUD.all = 0x008B; |
|
|
|
ScibRegs.SCICTL1.all = 0x0023; // Relinquish SCI from Reset |
|
SciaRegs.SCICTL1.all = 0x0023; // Relinquish SCI from Reset |
} |
|
} |
|
|
|
|
|
// |
|
|
// scia_xmit - Transmit a character from the SCI |
|
|
// |
void scib_xmit(int a) |
|
void scia_xmit(int a) |
{ |
|
{ |
while (ScibRegs.SCIFFTX.bit.TXFFST != 0) {} |
|
while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {} |
ScibRegs.SCITXBUF.all =a; |
|
SciaRegs.SCITXBUF.all =a; |
} |
|
} |
|
|
|
|
|
// |
|
|
// scia_msg - Transmit message via SCIA |
|
|
// |
void scib_msg(char * msg) |
|
void scia_msg(char * msg) |
{ |
|
{ |
int i; |
|
int i; |
i = 0; |
|
i = 0; |
while(msg[i] != '\0') |
|
while(msg[i] != '\0') |
{ |
|
{ |
scib_xmit(msg[i]); |
|
scia_xmit(msg[i]); |
i++; |
|
i++; |
} |
|
} |
} |
|
} |
|
|
|
|
|
// |
|
|
// scia_fifo_init - Initialize the SCI FIFO |
|
|
// |
void scib_fifo_init() |
|
void scia_fifo_init() |
{ |
|
{ |
ScibRegs.SCIFFTX.all = 0xE040; |
|
SciaRegs.SCIFFTX.all = 0xE040; |
ScibRegs.SCIFFRX.all = 0x2044; |
|
SciaRegs.SCIFFRX.all = 0x2044; |
ScibRegs.SCIFFCT.all = 0x0; |
|
SciaRegs.SCIFFCT.all = 0x0; |
} |
= |
} |
|
|
|
|
-+ |
// |
|
|
// End of file |
|
|
// |