Other Parts Discussed in Thread: MSP430G2533
Tool/software:
Hello, I'm trying to send a hex value from on MSP430G2533 (let's call is MSP430 transmitter) to another MSP430G2533 (let's call MSP430 receiver) over SPI.
I'm able to send and view the hex value on the TX buffer on MSP430 transmitter in the debugger view. However, my MSP430 receiver is unable to obtain the buffer. Here is my code
Spi receive code:
#include <msp430.h> void setupSPI_Slave() { // Set UCSWRST (USCI Software Reset) UCB0CTL1 = UCSWRST; // Set USCI_B0 to slave mode, 3-pin SPI, synchronous mode UCB0CTL0 = UCSYNC + UCCKPL + UCMSB; // Clear UCSWRST to release USCI_B0 for operation UCB0CTL1 &= ~UCSWRST; // Enable USCI_B0 RX interrupt IE2 |= UCB0RXIE; } int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1SEL |= BIT5 + BIT6 + BIT7; // Set P1.5, P1.6, P1.7 as SPI pins P1SEL2 |= BIT5 + BIT6 + BIT7; setupSPI_Slave(); __bis_SR_register(GIE); // Enable global interrupts while (1) { __bis_SR_register(LPM0_bits + GIE); } } // USCI_B0 Data ISR #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { if (IFG2 & UCB0RXIFG) { unsigned char receivedData = UCB0RXBUF; // Read received data // Do something with the received data __bic_SR_register_on_exit(LPM0_bits); // Exit low-power mode } }
SPI Transmit code:
#include <msp430.h> void setupSPI_Master() { // Set UCSWRST (USCI Software Reset) UCB0CTL1 = UCSWRST; // Set USCI_B0 to master mode, 3-pin SPI, synchronous mode UCB0CTL0 = UCMST + UCSYNC + UCCKPL + UCMSB; // SMCLK as clock source UCB0CTL1 |= UCSSEL_2; // Set baud rate (UCB0BR0 and UCB0BR1) UCB0BR0 = 0x02; UCB0BR1 = 0; // Clear UCSWRST to release USCI_B0 for operation UCB0CTL1 &= ~UCSWRST; // Enable USCI_B0 RX interrupt IE2 |= UCB0RXIE; } void sendSPI_Master(unsigned char data) { while (!(IFG2 & UCB0TXIFG)); // Wait for TX buffer to be ready UCB0TXBUF = data; // Send data } int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1SEL |= BIT5 + BIT6 + BIT7; // Set P1.5, P1.6, P1.7 as SPI pins P1SEL2 |= BIT5 + BIT6 + BIT7; P1DIR |= BIT4; // Set P1.4 as output (CS pin) P1OUT |= BIT4; // Set P1.4 high (CS idle high) setupSPI_Master(); while (1) { P1OUT &= ~BIT4; // Pull CS low to start communication sendSPI_Master(0xFF); P1OUT |= BIT4; // Set CS high to end communication __delay_cycles(1000); // Delay between transmissions } }