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.

MSP430F6638: IRDA Example code

Part Number: MSP430F6638
Other Parts Discussed in Thread: MSP430FG4619, MSP430F149, MSP430F2274, BOOST-IR, MSP430FR4133

Hi all

Please provide driverlib level IrDA Example code for MSP430F6638.

Thanks in advance

  • Hi Mohit,

    I will reach out to the driverlib team concerning your request and will get back to you as soon as I can, thank you for your patience.

    Best regards,

    Matt
  • ok.
    Please give me any document or dedicated Application note for implementing IrDA on MSP430F6638 MCU.
  • Mohit,

    I have not heard back from the driverlib team but a quick google search led me to this App Report (www.ti.com/.../slaa202b.pdf) which has IRDA examples based on MSP430F149, MSP430FG4619, and MSP430F2274 . If you'd like to begin working on your project you can use the example code provided in that app report and just port the IRDA functionality over to the MSP430F6638.

    Best regards,

    Matt
  • I have already downloaded that code but the code is in assembly language.
    Please provide code in c language so that I can use that in my project.

    thanks
    Mohit
  • Mohit,

    If you prefer your examples in C-code format, you can reference the example code provided in the BOOST-IR landing page (www.ti.com/.../BOOST-IR). This example code was made for the MSP430FR4133 but you can port the IRDA implementation to your device. From what I can tell, there is no example code made specifically for the MSP430F6638 so you will have to port examples that you find on the web.

    Here are some other resources that seem to provide examples in C-code format for the IRDA module:
    - gist.github.com/.../943392
    - e2e.ti.com/.../665510

    Best regards,

    Matt
  • I just want Driver library level C code for IrDA implementation for MSP430F66XX Family.

    As TI claim that MSPware helps developer to easily use the ready library. i could not found any example code for IrDA or any support.

    And the example code that you have gave me is not useful.

    please guide me through this.

  • Mohit,

    I've received word from the Driver library team that there is no driver library example code for IrDA implementation, the only examples that are provided by TI are the ones I've already shared with you.

    I understand your concerns and I will be sure to pass your sentiment on to the driverlib team to consider making additional example code for that module.

    As of right now you can use the Infrared Remote Control Implementation With MSP430FR4xx Application ReportImplementing IrDA With MSP430™ MCUs Application Report, booster-pack collateral, MSP430F5xx/6xx User's Guide, and the example codes I've shared in order to begin developing your project.

    Best regards,

    Matt

  • Hi all

    I have solved the issue.

    I am attaching the code that is working for me.

    /* --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, &param);
    //		if ( STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, &param))
    //		{
    //        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, &param2);
    //		if ( STATUS_FAIL == USCI_A_UART_init(USCI_A1_BASE, &param2))
    //		{
    //        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, &param);
    //		if ( STATUS_FAIL == USCI_A_UART_init(USCI_A0_BASE, &param))
    //		{
    //        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;
        }
    }

**Attention** This is a public forum