Tool/software: Code Composer Studio
Hi,
i m trying to integrate msp430f5438a & winbond spi flash ic via spi communication. i m facing problems in transmitting data from master(msp430f5438a) to slave select. i think i m doing mistake in slave selection enable & disable. if i m seeing the signals in logic analyser slave select pin is not syncing with mosi & clock signal. if i disable "Enable" option in logic analyser settings, given data signals are perfectly shown on analyser.
i have attached my code, please help me where i m doing mistake. also i have attached my logic analyser o/p.
#include "msp430x54xA.h"
unsigned char MST_Data,SLV_Data;
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
P1OUT |= 0x02; // Set P1.0,1 for LED
P3OUT |= 0X01; // slave select p3.0
P3DIR |= 0X01;
P1DIR |= 0x03; // Set P1.0,1 to output direction
P3SEL |= 0x0E; // P3.5,4,0 option select
UCB0CTL1 |= UCSWRST; // Put state machine in reset
/* 4 pin spi, master mode, msb first,synchronous comm, clock polarity high */
UCB0CTL0 |= UCMST+UCSYNC+UCMSB+UCCKPL+UCMODE_1 ;
UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 = 0x02; // 2
UCB0BR1 = 0;
// UCB0MCTL = 0; // No modulation
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(GIE);
MST_Data = 0x02; // Initialize data values
SLV_Data = 0x00;
while(1)
{
P3OUT |= BIT0; // slave select - high
UCB0TXBUF = MST_Data; // Transmit first character
while (!(UCA0IFG&UCTXIFG));
P3OUT &= ~BIT0; // slave select - low
__delay_cycles(5);
}
}
#pragma vector=USCI_B0_VECTOR
__interrupt void USCI_B0_ISR(void)
{
switch(__even_in_range(UCB0IV,4))
{
case 0: break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
// while (!(UCB0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
break;
case 4: break; // Vector 4 - TXIFG
default: break;
}
}