| <> | //########################################################################### | |
| // | ||
| // 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 | ||
| // |