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
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.
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
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 Report, Implementing 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, ¶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;
}
}
**Attention** This is a public forum