Hello!
I am using msp430fr4133 launchpad as master mode & another msp430fr4133 controller board as slave.
I simply send data from master to slave & monitor echoed data back.
I just want to display received data on LCD. But i didn't get any result.
Please provide any help. My code is here.
********************Master*******************
#include <msp430.h>
#include "global.h"
unsigned char RXData = 0;
unsigned char TXData;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P5SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; // set 4-SPI pin as second function
UCB0CTLW0 |= UCSWRST; // **Put state machine in reset**
UCB0CTLW0 |= UCMST|UCSYNC|UCCKPL|UCMSB|UCMODE_1|UCSTEM; // 4-pin, 8-bit SPI master
// Clock polarity high, MSB
UCB0CTLW0 |= UCSSEL__SMCLK; // Select SMCLK
UCB0BR0 = 0x01; // /2,fBitClock = fBRCLK/(UCBRx+1).
UCB0BR1 = 0;
// UCA0MCTLW = 0; // No modulation
UCB0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
TXData = 0x01; // Holds TX data
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode
// to activate previously configured port settings
while(1)
{
UCB0IE |= UCTXIE; // Enable TX interrupt
__bis_SR_register(LPM0_bits | GIE); // enable global interrupts, enter LPM0
__delay_cycles(2000); // Delay before next transmission
TXData++; // Increment transmit data
// __delay_cycles(20000);
}
}
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(UCB0IV,USCI_SPI_UCTXIFG))
{
case USCI_NONE: break; // Vector 0 - no interrupt
case USCI_SPI_UCRXIFG:
RXData = UCB0RXBUF;
UCB0IFG &= ~UCRXIFG;
__bic_SR_register_on_exit(LPM0_bits); // Wake up to setup next TX
LCDDataOut(RXData,pos1); //display receive data on LCD
break;
case USCI_SPI_UCTXIFG:
UCB0TXBUF = TXData; // Transmit characters
UCB0IE &= ~UCTXIE;
break;
default: break;
}
}
***********************************Slave**********************************
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW|WDTHOLD; // Stop watchdog timer
P5SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; // set 4-SPI pin as second function
UCB0CTLW0 |= UCSWRST; // **Put state machine in reset**
UCB0CTLW0 |= UCSYNC|UCCKPL|UCMSB|UCMODE_1|UCSTEM; // 4-pin, 8-bit SPI slave
// Clock polarity high, MSB
UCB0CTLW0 |= UCSSEL__SMCLK; // Select SMCLK
UCB0BR0 = 0x01; // /2,fBitClock = fBRCLK/(UCBRx+1).
UCB0BR1 = 0;
// UCB0MCTLW = 0; // No modulation
UCB0CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode
// to activate previously configured port settings
__bis_SR_register(LPM0_bits | GIE); // Enter LPM0, enable interrupts
}
#pragma vector=USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
{
while (!(UCB0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCB0TXBUF = UCB0RXBUF; // Echo received data
}