Part Number:MSP-EXP430FR5994
Hi,
I am testing both the A0& A1UART ports of the MCU on the MSP-EXP430FR5994 launchpad. I am able to transmit & receive data from A0 (P2.0 & P2.1) successfully, but A1 (P2.5 & P2.6) seems not to work at all. I am providing below the working code first for A0 then followed by A1 code. Note that both codes are same except that all zeros (of A0) have been replaced by ones (of A1) & the GPIO configurations are different. Am I still missing something somewhere?
-------------
WORKING CODE:
#pragma vector = EUSCI_A0_VECTOR
__interrupt void FFF0_ISR(void)
{
switch (__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG)) {
case USCI_NONE: break;
case USCI_UART_UCRXIFG:
gblLasteceivedUartCharacter_i = EUSCI_A_UART_receiveData(EUSCI_A0_BASE);
__bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
break;
case USCI_UART_UCTXIFG: break;
case USCI_UART_UCSTTIFG: break;
case USCI_UART_UCTXCPTIFG: break;
}
}
-------------
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);
// Configure P2.0 - UCA0TXD and P2.1 - UCA0RXD
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2, GPIO_PIN1, GPIO_SECONDARY_MODULE_FUNCTION);
// Set PJ.4 and PJ.5 as Primary Module Function Input, LFXT.
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_PJ,
GPIO_PIN4 + GPIO_PIN5,
GPIO_PRIMARY_MODULE_FUNCTION
);
// Set DCO frequency to 8 MHz
CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_6);
//Set external clock frequency to 32.768 KHz
CS_setExternalClockSource(32768, 0);
//Set ACLK=LFXT
CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
// Set SMCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
// Set MCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
//Start XT1 with no time out
CS_turnOnLFXT(CS_LFXT_DRIVE_3);
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2, GPIO_PIN0, GPIO_SECONDARY_MODULE_FUNCTION);
// Configure UART
EUSCI_A_UART_initParam param = {0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 52;
param.firstModReg = 1;
param.secondModReg = 0x49;
param.parity = EUSCI_A_UART_NO_PARITY;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
if(STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A0_BASE, ¶m))
{
LED_RED_ON;
}
EUSCI_A_UART_enable(EUSCI_A0_BASE);
EUSCI_A_UART_clearInterrupt(EUSCI_A0_BASE,
EUSCI_A_UART_RECEIVE_INTERRUPT);
// Enable USCI_A0 RX interrupt
EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,
EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable interrupt
// Enable globale interrupt
__enable_interrupt();
while(1)
{
// Send Temp Sensor Calibration Data
EUSCI_A_UART_transmitData(EUSCI_A0_BASE, '-');
__delay_cycles(900000);
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN1);
// Send Temp Sensor Calibration Data
EUSCI_A_UART_transmitData(EUSCI_A0_BASE, (uint8_t)gblLasteceivedUartCharacter_i);//(uint8_t)gblUartRxCharacter_i);
__delay_cycles(900000);
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN1);
}
-------------
NON WORKING CODE: Changed sections of the code are highlighted
#pragma vector = EUSCI_A1_VECTOR
__interrupt void FFE6_ISR(void)
{
switch (__even_in_range(UCA1IV, USCI_UART_UCTXCPTIFG)) {
case USCI_NONE: break;
case USCI_UART_UCRXIFG:
gblLasteceivedUartCharacter_i = EUSCI_A_UART_receiveData(EUSCI_A1_BASE);
__bic_SR_register_on_exit(LPM3_bits); // Exit active CPU
break;
case USCI_UART_UCTXIFG: break;
case USCI_UART_UCSTTIFG: break;
case USCI_UART_UCTXCPTIFG: break;
}
}
-------------
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN5|GPIO_PIN6);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN5);
// Configure P2.5 - UCA1TXD and P2.6 - UCA1RXD
GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN5);
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN5);
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2, GPIO_PIN6, GPIO_SECONDARY_MODULE_FUNCTION);
// Set PJ.4 and PJ.5 as Primary Module Function Input, LFXT.
GPIO_setAsPeripheralModuleFunctionInputPin(
GPIO_PORT_PJ,
GPIO_PIN4 + GPIO_PIN5,
GPIO_PRIMARY_MODULE_FUNCTION
);
// Set DCO frequency to 8 MHz
CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_6);
//Set external clock frequency to 32.768 KHz
CS_setExternalClockSource(32768, 0);
//Set ACLK=LFXT
CS_initClockSignal(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
// Set SMCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
// Set MCLK = DCO with frequency divider of 1
CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
//Start XT1 with no time out
CS_turnOnLFXT(CS_LFXT_DRIVE_3);
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2, GPIO_PIN6, GPIO_SECONDARY_MODULE_FUNCTION);
// Configure UART
EUSCI_A_UART_initParam param = {0};
param.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
param.clockPrescalar = 52;
param.firstModReg = 1;
param.secondModReg = 0x49;
param.parity = EUSCI_A_UART_NO_PARITY;
param.msborLsbFirst = EUSCI_A_UART_LSB_FIRST;
param.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT;
param.uartMode = EUSCI_A_UART_MODE;
param.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
if(STATUS_FAIL == EUSCI_A_UART_init(EUSCI_A1_BASE, ¶m))
{
LED_RED_ON;
}
EUSCI_A_UART_enable(EUSCI_A1_BASE);
EUSCI_A_UART_clearInterrupt(EUSCI_A1_BASE,
EUSCI_A_UART_RECEIVE_INTERRUPT);
// Enable USCI_A1 RX interrupt
EUSCI_A_UART_enableInterrupt(EUSCI_A1_BASE,
EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable interrupt
// Enable globale interrupt
__enable_interrupt();
while(1)
{
// Send Temp Sensor Calibration Data
EUSCI_A_UART_transmitData(EUSCI_A1_BASE, '-');
__delay_cycles(900000);
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN1);
// Send Temp Sensor Calibration Data
EUSCI_A_UART_transmitData(EUSCI_A1_BASE, (uint8_t)gblLasteceivedUartCharacter_i);//(uint8_t)gblUartRxCharacter_i);
__delay_cycles(900000);
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN1);
}
-------------
Thanks
Regards
Soumyajit