Перейти к содержанию

AVR32 SPI прием и передача, Одновременный прием и передача


69ka

Рекомендуемые сообщения

Добрый день, столкнулся с проблемой на микроконтроллере AVR32UC3C0512, мне необходимо передать сообщение по SPI на микросхему TLE6208-6G и одновременно с этой передачей считать ответ. Разница в передаче и ответе на диаграмме:
 

thumb.png

при передаче с кодом:

spi_select_device(&AVR32_SPI0, &SPI_MVK_CS1);
spi_write(&AVR32_SPI0, data_buff);
while((AVR32_SPI0.cr & AVR32_SPI_SR_TXEMPTY_MASK) != 0) {};

spi_read(&AVR32_SPI0, &result);
spi_set_chipselect_delay_bct(&AVR32_SPI0, &SPI_MVK_CS1, CONFIG_SPI_MASTER_DELAY_BCT);
spi_deselect_device(&AVR32_SPI0, &SPI_MVK_CS1);

код функции spi_write:

spi_status_t spi_write(volatile avr32_spi_t *spi, uint16_t data)
{
    uint32_t timeout = SPI_TIMEOUT;

    while (!(spi->sr & AVR32_SPI_SR_TDRE_MASK)) {
        if (!timeout--) {
            return SPI_ERROR_TIMEOUT;
            //return 0xFFFF;
        }
    }

    spi->tdr = data << AVR32_SPI_TDR_TD_OFFSET;

    return SPI_OK;
}

код функции spi_read:

spi_status_t spi_read(volatile avr32_spi_t *spi, uint16_t *data)
{unsigned int timeout = SPI_TIMEOUT;

   while ((spi->sr &
         (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) !=
         (AVR32_SPI_SR_RDRF_MASK | AVR32_SPI_SR_TXEMPTY_MASK)) {
      if (!timeout--) {
         return SPI_ERROR_TIMEOUT;
         //return 0xFFFF;
      }
   }

   *data = (spi->rdr & 0x0000FFFF) >> AVR32_SPI_RDR_RD_OFFSET;

   return SPI_OK;
}

в result 0. хотя отправляю не 0 и плата отрабатывает верно (необходимые светодиоды светятся). Посылка осуществляется в цикле. На осциллографе я вижу все эти пакеты, даже ответ, но мне нужно его прочитать, что не получается сделать.  Что может быть не так? Как получить верный ответ, пробовал даже оставлять от кода только строчки отправки и сразу чтение из регистра без задержек но ничего не помогло..

Пробовал также закольцевать SPI без изменения кода программы. ответ вижу передается через UART.

 

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...