Jump to content
43oh

SPI communication between two MSP430F5438 s


Recommended Posts

Hi

 

I am trying to communicate between two MSP430F5438s using SPI. I tried with my code . It was not working . So i tried using example code (TI)which is pasted below . Still it was not working .I doubt there might be a problem in hardware connection between two MCs. regarding hardware , I connected using 3 wire mode which connects SIMO(master p3.4)-SIMO (Slave p3.4) , SOMI(master p3.5)-SOMI (Slave p3.5) and clocks using p3.0(master )- p3.0(slave) and necessary power suppply to both the controllers . please let me know if there is any hardware problem or any code issue .

 

 

 

I have used following master code :

 

 

 

#include "msp430x54xA.h"

 

unsigned char MST_Data,SLV_Data;

 

void main(void)

{

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer

 

P1OUT |= 0x02; // Set P1.0 for LED

// Set P1.1 for slave reset

P1DIR |= 0x03; // Set P1.0-2 to output direction

P3SEL |= 0x31; // P3.5,4,0 option select

 

UCA0CTL1 |= UCSWRST; // **Put state machine in reset**

UCA0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB; // 3-pin, 8-bit SPI master

// Clock polarity high, MSB

UCA0CTL1 |= UCSSEL_2; // SMCLK

UCA0BR0 = 0x02; // /2

UCA0BR1 = 0; //

UCA0MCTL = 0; // No modulation

UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

 

P1OUT &= ~0x02; // Now with SPI signals initialized,

P1OUT |= 0x02; // reset slave

 

__delay_cycles(100); // Wait for slave to initialize

 

MST_Data = 0x01; // Initialize data values

SLV_Data = 0x00; //

 

while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?

UCA0TXBUF = MST_Data; // Transmit first character

 

__bis_SR_register(LPM0_bits + GIE); // CPU off, enable interrupts

}

 

#pragma vector=USCI_A0_VECTOR

__interrupt void USCI_A0_ISR(void)

{

switch(__even_in_range(UCA0IV,4))

{

case 0: break; // Vector 0 - no interrupt

case 2: // Vector 2 - RXIFG

while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?

 

if (UCA0RXBUF==SLV_Data) // Test for correct character RX'd

P1OUT |= 0x01; // If correct, light LED

else

P1OUT &= ~0x01; // If incorrect, clear LED

 

MST_Data++; // Increment data

SLV_Data++;

UCA0TXBUF = MST_Data; // Send next value

 

__delay_cycles(40); // Add time between transmissions to

// make sure slave can process information

break;

case 4: break; // Vector 4 - TXIFG

default: break;

}

}

 

 

 

 

 

 

 

also the save code is :

 

 

 

#include "msp430x54xA.h"

 

void main(void)

{

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer

 

while(!(P3IN&0x01)); // If clock sig from mstr stays low,

// it is not yet in SPI mode

P3SEL |= 0x31; // P3.5,4,0 option select

UCA0CTL1 |= UCSWRST; // **Put state machine in reset**

UCA0CTL0 |= UCSYNC+UCCKPL+UCMSB; // 3-pin, 8-bit SPI slave,

// Clock polarity high, MSB

UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt

 

__bis_SR_register(LPM4_bits + GIE); // Enter LPM4, enable interrupts

}

 

// Echo character

#pragma vector=USCI_A0_VECTOR

__interrupt void USCI_A0_ISR(void)

{

switch(__even_in_range(UCA0IV,4))

{

case 0:break; // Vector 0 - no interrupt

case 2: // Vector 2 - RXIFG

while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?

UCA0TXBUF = UCA0RXBUF;

break;

case 4:break; // Vector 4 - TXIFG

default: break;

}

}

 

 

 

with this code dumped on master and slave UCs ,, and connections as told , I am not able to communicate between the two controllers . Please suggest some breakthrough .

 

Thanks

 

Karthik

Link to post
Share on other sites

Hi and welcome to the forums. You gave a good amount of info in your post and so you have a question I can actually answer :)

 

I haven't had a look at your code, but your connections are wrong. SIMO stands for Slave In Master Out (you can probably work out what SOMI stands for).. So you need SIMO on the master device connected to SOMI on the slave, and same with the other connection. Your clock connection is fine.

 

Hope this helps..

 

Dan

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...