This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
目前没有直接的例程,但是给出了相关的文档,您可以参考一下
另外有客户分享了之前的程序,您也可以参考一下
/* --COPYRIGHT--,BSD * Copyright (c) 2017, Texas Instruments Incorporated * All rights reserved. * * 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. * --/COPYRIGHT--*/ #include "driverlib.h" //****************************************************************************** //! This example shows how to configure the UART module to echo a received //! character. To echo a received character, RX ISR is used. //! //! MSP430F6638 //! ----------------- //! /|\| | //! | | | //! --|RST | //! | | //! | P2.4/UCA0TXD|------------> //! | | 9600 //! | P2.5/UCA0RXD|<------------ //! //! //! This example uses the following peripherals and I/O signals. You must //! review these and change as needed for your own board: //! - UART peripheral //! - GPIO Port peripheral (for UART pins) //! - UCA0TXD //! - UCA0RXD //! //! This example uses the following interrupt handlers. To use this example //! in your own application you must add these interrupt handlers to your //! vector table. //! - USCI_A0_VECTOR. //****************************************************************************** #define BAUD_RATE 9600 #define RECEIVE_DATA_COUNT 0x02 #define USCI_A_UART_MULTIPROCESSOR_MODE_ADDRESS 0xAA #define UCS_XT2_TIMEOUT 50000 //Desired Timeout for XT2 initialization #define UCS_XT1_CRYSTAL_FREQUENCY 32768 //XT1 Crystal Frequency being used #define UCS_XT2_CRYSTAL_FREQUENCY 4000000 //XT2 Crystal Frequency being used uint8_t returnValue = 0; //Variable to store returned STATUS_SUCCESS or STATUS_FAIL uint8_t receivedData = 0x00; uint8_t receiveDataCount = 0x00; void Init_Clock(void); void Init_UART(void); void Init_IrDA (void); void main (void) { //Stop WDT WDT_A_hold(WDT_A_BASE); Init_Clock(); //Init_UART(); Init_IrDA(); __bis_SR_register(GIE); while(1) { USCI_A_UART_transmitData(USCI_A0_BASE, 'M' ); } } //****************************************************************************** // //Function definition . // //****************************************************************************** void Init_Clock(void) { /**********Clock Setup***************************************/ //Port select HF XT2 GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P7, GPIO_PIN2 + GPIO_PIN3 ); //Initializes the XT1 and XT2 crystal frequencies being used UCS_setExternalClockSource( UCS_XT1_CRYSTAL_FREQUENCY, UCS_XT2_CRYSTAL_FREQUENCY ); //Initialize XT2. Returns STATUS_SUCCESS if initializes successfully returnValue = UCS_turnOnXT2WithTimeout( UCS_XT2_DRIVE_4MHZ_8MHZ, UCS_XT2_TIMEOUT ); //Select XT2 as SMCLK source UCS_initClockSignal( UCS_SMCLK, UCS_XT2CLK_SELECT, UCS_CLOCK_DIVIDER_1 ); /********End**************************************************/ } void Init_UART(void) { /**********UART 1 --> USCI_A0__________Start*****************/ //----------BR 9600 @ 4MHz--------------------------- //Baudrate = 9600, clock freq = 4MHz //UCBRx = 26, UCBRFx = 10, UCBRSx = 6, UCOS16 = 1 USCI_A_UART_initParam param = {0}; param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK; param.clockPrescalar = 26; param.firstModReg = 10; param.secondModReg = 0xD6; param.parity = USCI_A_UART_NO_PARITY; param.msborLsbFirst = USCI_A_UART_LSB_FIRST; param.numberofStopBits = USCI_A_UART_ONE_STOP_BIT; param.uartMode = USCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE; param.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION; //--------------------------------------------------- //Initialize USCI_A0 UART USCI_A_UART_init(USCI_A0_BASE, ¶m); // if ( STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, ¶m)) // { // return; // } //P2.4,5 = USCI_A0 TXD/RXD GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P2, GPIO_PIN4 + GPIO_PIN5 ); //Enable UART module for operation USCI_A_UART_enable(USCI_A0_BASE); //---------Rx_Interrupt----------------- //Enable Receive Interrupt USCI_A_UART_clearInterrupt(USCI_A0_BASE, USCI_A_UART_RECEIVE_INTERRUPT ); USCI_A_UART_enableInterrupt(USCI_A0_BASE, USCI_A_UART_RECEIVE_INTERRUPT ); //------------------------------------ /**********UART 1 --> USCI_A0___________End******************/ /**********UART 2 --> USCI_A1__________Start*****************/ //-----------BR 9600 @ 4MHz----------------- //Baudrate = 9600, clock freq = 4MHz //UCBRx = 26, UCBRFx = 10, UCBRSx = 6, UCOS16 = 0 USCI_A_UART_initParam param2 = {0}; param2.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK; param2.clockPrescalar = 26; param2.firstModReg = 10; param2.secondModReg = 0xD6; param2.parity = USCI_A_UART_NO_PARITY; param2.msborLsbFirst = USCI_A_UART_LSB_FIRST; param2.numberofStopBits = USCI_A_UART_ONE_STOP_BIT; param2.uartMode = USCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE; param2.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION; //----------------------------------------- //Initialize USCI_A1 UART USCI_A_UART_init(USCI_A1_BASE, ¶m2); // if ( STATUS_FAIL == USCI_A_UART_init(USCI_A1_BASE, ¶m2)) // { // return; // } //P8.2,3 = USCI_A1 TXD/RXD GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P8, GPIO_PIN2 + GPIO_PIN3 ); //Enable UART module for operation USCI_A_UART_enable(USCI_A1_BASE); //---------Rx_Interrupt----------------- //Enable Receive Interrupt USCI_A_UART_clearInterrupt(USCI_A1_BASE, USCI_A_UART_RECEIVE_INTERRUPT ); USCI_A_UART_enableInterrupt(USCI_A1_BASE, USCI_A_UART_RECEIVE_INTERRUPT ); //------------------------------------ /**********UART 2 --> USCI_A1__________End*****************/ } void Init_IrDA (void) { //P2.4,5 = USCI_A0 TXD/RXD GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P2, GPIO_PIN4 + GPIO_PIN5 ); // Enable IrDA UCA0IRCTL |= UCIREN; // Disable eUSCI_A USCI_A_UART_disable(USCI_A0_BASE); // Set UCSWRST bit // IrDA encoder/decoder enabled HWREG16(USCI_A0_BASE + OFS_UCAxIRTCTL) |= UCIREN; // Transmit pulse clock source BITCLK16 (16 * 1/16 clock fractions) // HWREG16(USCI_A1_BASE + OFS_UCAxMCTLW) |= UCOS16; // Oversampling mode enabled HWREG16(USCI_A0_BASE + OFS_UCAxIRTCTL) |= UCIRTXCLK; // Select BITCLK16 // Transmit pulse length 3/16 bit period (6 half clock cycles) // Set UCIRTXPLx to 5 HWREG16(USCI_A0_BASE + OFS_UCAxIRTCTL) |= UCIRTXPL2 | UCIRTXPL0; // b101 //----------BR 9600 @ 4MHz--------------------------- //Baudrate = 9600, clock freq = 4MHz //UCBRx = 26, UCBRFx = 10, UCBRSx = 6, UCOS16 = 1 USCI_A_UART_initParam param = {0}; param.selectClockSource = USCI_A_UART_CLOCKSOURCE_SMCLK; param.clockPrescalar = 26; param.firstModReg = 10; param.secondModReg = 0xD6; param.parity = USCI_A_UART_NO_PARITY; param.msborLsbFirst = USCI_A_UART_LSB_FIRST; param.numberofStopBits = USCI_A_UART_ONE_STOP_BIT; param.uartMode = USCI_A_UART_ADDRESS_BIT_MULTI_PROCESSOR_MODE; param.overSampling = USCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION; //--------------------------------------------------- //Initialize USCI_A0 UART USCI_A_UART_init(USCI_A0_BASE, ¶m); // if ( STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, ¶m)) // { // return; // } // Enable eUSCI_A USCI_A_UART_enable(USCI_A0_BASE); // Clear UCSWRST bit //---------Rx_Interrupt----------------- //Enable Receive Interrupt USCI_A_UART_clearInterrupt(USCI_A0_BASE, USCI_A_UART_RECEIVE_INTERRUPT ); USCI_A_UART_enableInterrupt(USCI_A0_BASE, USCI_A_UART_RECEIVE_INTERRUPT ); } //****************************************************************************** // //This is the USCI_A0 interrupt vector service routine. // //****************************************************************************** #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=USCI_A0_VECTOR __interrupt #elif defined(__GNUC__) __attribute__((interrupt(USCI_A0_VECTOR))) #endif void USCI_A0_ISR (void) { switch (__even_in_range(UCA0IV,4)){ //Vector 2 - RXIFG case 2: //Receive the data receivedData = USCI_A_UART_receiveData(USCI_A0_BASE); //Send data back "echo" USCI_A_UART_transmitData(USCI_A0_BASE, receivedData ); break; default: break; } } //****************************************************************************** // //This is the USCI_A1 interrupt vector service routine. // //****************************************************************************** #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=USCI_A1_VECTOR __interrupt #elif defined(__GNUC__) __attribute__((interrupt(USCI_A1_VECTOR))) #endif void USCI_A1_ISR (void) { switch (__even_in_range(UCA1IV,4)){ //Vector 2 - RXIFG case 2: //Receive the data receivedData = USCI_A_UART_receiveData(USCI_A1_BASE); //Send data back "echo" USCI_A_UART_transmitData(USCI_A1_BASE, receivedData ); break; default: break; } }