Здравствуйте!
Пытаюсь осуществить запись и считывание одного байта из внешней памяти 93lc46b. Для этого на память по интерфейсу SPI посылаются команды "Разрешения Очистки/Записи" (EWEN), "Записи" (WRITE), а затем "Чтения" (READ). Перед передачей команды на устройство посылается стартовый бит. Программа пока не оптимизирована, команды пересылаются по проверке флага UTXIFG1, а не с помощью канала ПДП. Подача сигнала CS на память осуществляется по порту ввода/вывода P1.2. Реакция со стороны устройства отсутствует. Подскажите пожалуйста, что я делаю не так. Может быть дело в задержках при передаче или сами пересылаемые команды имеют неправильный вид?
Datasheet 93lc46b
#include <msp430FG4618.h>
unsigned char rsv = 0xFF;
unsigned char rsv1 = 0xFF;
int i;
int main(void) {
WDTCTL = WDTPW + WDTHOLD; // Остановить WDT
//настройки SPI
P4SEL |= 0x38; // Р4.3, 4, 5 => SPI
U1CTL = CHAR+SYNC+MM+SWRST; // 8 бит, SPI, ведущий
U1TCTL |= CKPL+SSEL0+STC; // Полярность, ACLK, 3-пров.
U1BR0 = 0x080 , U1BR1 = 0x00; // UCLK = ACLK
U1MCTL = 0x00; // Биты модуляции
ME2 |= USPIE1; // Включение SPI модуля
U1CTL &= ~SWRST; // Разрешение SPI
//настройка ввода/вывода порта P1.2
P1DIR |= 0x04;
P1OUT &= ~0x04;
i = 1000;
while(i>0) i--;
P1OUT |= 0x04;
//разрешение Очистки/Записи
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0x01; //00000001
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0x30; //00110000
P1OUT &= ~0x04;
i = 1000;
while(i>0) i--;
P1OUT |= 0x04;
//Запись
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0x01; //00000001
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0x4A; //01001010
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0xFF; //11001100
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0xFF; //11001100
P1OUT &= ~0x04;
i = 1000;
while(i>0) i--;
P1OUT |= 0x04;
//Чтение
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0x01; //00000001
while (!(IFG2 & UTXIFG1));
U1TXBUF = 0x8A; //10001010
while (!(IFG2 & URXIFG1)); // Ожидаем готовность буфера приёма
rsv = U1RXBUF; // Прием данных
U1TXBUF = 0x00;
while (!(IFG2 & URXIFG1)); // Ожидаем готовность буфера приёма
rsv1 = U1RXBUF; // Прием данных
P1OUT &= ~0x04;
i = 1000;
while(i>0) i--;
}