Axel 1 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба К сожалению сейчас некогда рассматривать Ваш код. Может попозже... И посмотрите, как включать код в сообщение, а то читать в таком виде затруднительно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SidAlex 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба Вот переделал, вставил, чтобы читать было удобнее void WriteFM25L256(unsigned int adress, char *mass, int nbyte) { unsigned int a; // OFF_HOLD_FRAM(); //продолжить передачу данных из FRAM // OFF_WP_FRAM(); //отключить защиту записи CS_FRAM(); //чип-селект для FRAM while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = WREN_FM25L; //разрешение записи в FM25L256 while(!(U0TCTL & TXEPT)); // __no_operation(); // __no_operation(); // __no_operation(); // __no_operation(); OFF_CS_FRAM(); //сброс чипселекта FRAM CS_FRAM(); //чип-селект для FRAM while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = WRITE_FM25L; //разрешение записи в FM25L256 while(!(U0TCTL & TXEPT)); while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = adress >> 8; //запись старшего байта адреса while(!(U0TCTL & TXEPT)); while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = adress; //запись младшего байта адреса while(!(U0TCTL & TXEPT)); for(a = 0; a < nbyte; a++) { // while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера // U0TXBUF = mass[a] >> 8; //передать старший байт элемента массива while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера U0TXBUF = mass[a]; //передать младший байт элемента массива while(!(U0TCTL & TXEPT)); }; // while(!(U0TCTL & TXEPT)); //пусты ли регистры TX // WP_FRAM(); //включить защиту записи OFF_CS_FRAM(); //сброс чипселекта FRAM } void ReadFM25L256(unsigned int adress, char *mass, int nbyte) { unsigned int a; CS_FRAM(); //чип-селект для FRAM while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = READ_FM25L; //команда //разрешение чтения из FM25L256 while(!(U0TCTL & TXEPT)); while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера U0TXBUF = adress >> 8; //запись старшего байта адреса while(!(U0TCTL & TXEPT)); while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера U0TXBUF = adress; //запись младшего байта адреса while(!(U0TCTL & TXEPT)); for(a = 0; a < nbyte; a++) { while (!(IFG1 & UTXIFG0)); //ожидание готовности TX-буфера U0TXBUF = 0x40; //тактирование FRAM while(!(U0TCTL & TXEPT)); while (!(IFG1 & URXIFG0)); //ожидание готовности RХ-буфера mass[a] = U0RXBUF; //считывание из RX-буфера в массив страшего байта while(!(U0TCTL & TXEPT)); } //while(!(U0TCTL & TXEPT)); //пусты ли регистры TX OFF_CS_FRAM(); //сброс чипселекта FRAM }/* конец определения ------------------------------------------------------------------*/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба Если с пинами (W и HOLD) все в порядке, то замечание только одно: void WriteFM25L256(unsigned int adress, char *mass, int nbyte) { unsigned int a; CS_FRAM(); //чип-селект для FRAM while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = WREN_FM25L; //разрешение записи в FM25L256 while(!(U0TCTL & TXEPT)); // __no_operation(); // __no_operation(); // __no_operation(); // __no_operation(); OFF_CS_FRAM(); //сброс чипселекта FRAM // ------- необходим таймаут хотя-бы на один такт SPI ------------ CS_FRAM(); //чип-селект для FRAM while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = WRITE_FM25L; //разрешение записи в FM25L256 while(!(U0TCTL & TXEPT)); while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = adress >> 8; //запись старшего байта адреса while(!(U0TCTL & TXEPT)); while (!(IFG1 & UTXIFG0));//провека готовности ТХ-буфера U0TXBUF = adress; //запись младшего байта адреса while(!(U0TCTL & TXEPT)); for(a = 0; a < nbyte; a++) { while (!(IFG1 & UTXIFG0)); //провека готовности ТХ-буфера U0TXBUF = mass[a]; //передать младший байт элемента массива while(!(U0TCTL & TXEPT)); }; OFF_CS_FRAM(); //сброс чипселекта FRAM } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SidAlex 0 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба Еще раз прошу прощения, но что значит WP и HOLD в порядке? Они должны быть установлены в каком то положении??? Они у меня подняты в единицу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 1 марта, 2011 Опубликовано 1 марта, 2011 · Жалоба Еще раз прошу прощения, но что значит WP и HOLD в порядке? Они должны быть установлены в каком то положении??? Они у меня подняты в единицу. Это нормально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SidAlex 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба В общем не работает. Слать в микруху я данные шлю - это я вижу на осциллографе, а читать ничего не читаю. Скажите, пожалуйста, как должны быть установлены WP и HOLD. Вообще, если смотреть в мануал, то получается, что WP - это аппаратная защита от записи. Или я ошибаюсь? Про HOLD тоже вроде понятно, что если ноль, то все будет игнорироваться. А можно еще подсказать настройки SPI? Я вот так настраиваю: switch(UsartNumber) { case 0: U0CTL |= SWRST; U0CTL |= MM + SYNC + CHAR; //Master, SPI, 8-bit Data; U0TCTL |= STC + SSEL0 + SSEL1; U0BR0 = 0x02; U0BR1 = 0x00; U0MCTL = 0x00; ME1 |= USPIE0; U0CTL &= ~SWRST; break; case 1: U1CTL |= SWRST; U1CTL |= SYNC + CHAR; //Slave, SPI, 8-bit Data; U1TCTL |= STC + CKPH; U1BR0 = 0x02; U1BR1 = 0x00; U1MCTL = 0x00; ME2 |= USPIE1; U1CTL &= ~SWRST; break; default: break; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба Проверить трудно, поскольку Вы не указали тип контроллера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SidAlex 0 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба микроконтроллер MSP430F1611IPM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 2 марта, 2011 Опубликовано 2 марта, 2011 · Жалоба микроконтроллер MSP430F1611IPM Вряд-ли смогу помочь - лет шесть с ними не работал... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 7 марта, 2011 Опубликовано 7 марта, 2011 · Жалоба что WP - это аппаратная защита от записи. Да правильно. Для МС которую вы пользуете - в нормальном режиме работы (чтение/запись) WP и HOLD должны быть подтянуты к VCC. По поводу настройки SPI - проконсультируйтесь в тематическом форуме по MSP. Если есть сомнения в настройках железа - можно попробовать программно эмулировать SPI - ногодрыганием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться