Адрес регистра, старший бит, младший.
При этом второе устройство использует 4-х выводной SPI.
Что я делаю:
CODE
#include <msp430x20x3.h>
void SPI_Transfer (unsigned char addr, unsigned char msb, unsigned char lsb);
initcontroller()
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR = 0x01; //
P1OUT = 0x01; //vkl. svetodiod na P1.0
USICTL0 = USIPE7 | USIPE6 | USIPE5 | USIMST | USIOE; // SPI Master
USICTL1 = USIIE;
USICKCTL = USIDIV_4 + USISSEL_2; // 16SMCLK
USICTL0 &= ~USISWRST; // Release USI from reset
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}
void main()
{
initcontroller();
P1OUT=~0x01; // vukl. svetodiod na P1.0
delay(250);
P1DIR = 0x02;
P1OUT = 0x02;// vkl. svetodiod na P1.1
// Svetodiod na P1.1 ne zagoraeca. Vidimo v svyazi s tem, chto ne prohodit inicializaciya SPI
SPI_Transfer(0x30,0x98,0x00);
P1OUT ^= 0x02;
}
// esli vse yspeshno, to svetodio nachnet migat'
void SPI_Transfer (unsigned char addr, unsigned char msb, unsigned char lsb)
{
P1OUT =~ 0x10;
delay(1);
P1OUT = 0x10; // Podat' na ss 1
delay(10);
USISRL = addr; // Write variable value to Shift Register
USICNT = 8;
__low_power_mode_0();
USISRL = msb; // Write variable value to Shift Register
USICNT = 8;
__low_power_mode_0();
USISRL = lsb; // Write variable value to Shift Register
USICNT = 8;
__low_power_mode_0();
}
Почему-то не проходит инициализация SPI. Не загорается светодиод на Р1.1. Далее прога соответственно не идёт. Подскажите пожалуйста, что здесь не правильно.