MSP430_User 0 29 ноября, 2016 Опубликовано 29 ноября, 2016 · Жалоба Здравствуйте! Пытаюсь осуществить запись и считывание одного байта из внешней памяти 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--; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Не дожидаетесь почему-то окончания передачи по SPI перед снятием сигнала разрешения. Предлагаю тем же способом, как между байтами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Фазы-полярности SPI соотв-ют спецификации для 93C46 ? Осцилографом проверяли, что там все "так" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 30 ноября, 2016 Опубликовано 30 ноября, 2016 · Жалоба Память эта, если не ошибаюсь, 16-разрядная. Не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться