Инициализация
Код
//структуры для SPI
struct __TX
{
char TXData[20];
char CurrByte;
char TotalToTX;
char TXBusy;
};
struct __RX
{
char RXData[20];
char CurrByte;
char TotalRXed;
};
void initSPI()
{
P3SEL = 0x0E;
P3DIR = 0x0A;
U0CTL = SWRST + SYNC + CHAR + MM;
U0TCTL |= SSEL1 + STC + CKPH /*+ CKPL*/;
U0BR0 = 0x08;
U0BR1 = 0x00;
U0MCTL = 0x000;
ME1 = USPIE0;
U0CTL &= ~SWRST;
IE1 |= URXIE0;
}
Обработчик прерывания
Код
#pragma vector=USART0RX_VECTOR
__interrupt void SPI0_rx (void)
{
unsigned long spi_buf;
spi_buf = U0RXBUF;
RX.RXData[RX.CurrByte++] = (unsigned char)(spi_buf&0x00FF);
RX.TotalRXed = RX.CurrByte;
if ((++TX.CurrByte <= TX.TotalToTX)&&(TX.TXBusy))
{
U0TXBUF = TX.TXData[TX.CurrByte];
}
else
{
TX.TXBusy = 0;
TX.CurrByte = 0;
fDataTransfer = 0;
NSS_CONFIG(1); //end SPI Transaction - CS - в "1"
}
}
Использование
Код
//setting NSS_Config Setting
void NSS_CONFIG(char SET)
{
if(SET)
P1OUT |= _BV(4);
else
P1OUT &= ~_BV(4);
}
void do_SPI1_start_TX()
{
TX.TXBusy = 1;
TX.CurrByte=0;
RX.CurrByte=0;
NSS_CONFIG(0); //end SPI Transaction - CS - в "0"
U0TXBUF = TX.TXData[TX.CurrByte];
// TX.CurrByte++;
}
}