реклама на сайте
подробности

 
 
> AVR32 SPI прием и передача, Одновременный прием и передача
69ka
сообщение Sep 6 2016, 07:51
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 6-09-16
Пользователь №: 93 227



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



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

Код
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_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 и плата отрабатывает верно (необходимые светодиоды светятся). Посылка осуществляется в цикле. Что может быть не так? Как получить верный ответ, пробовал даже оставлять от кода только строчки отправки и сразу чтение из регистра без задержек но ничего не помогло..
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Sep 7 2016, 06:35
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Это у Вас папилац не летает с конкретным slave-SPI или вообще ?
Вопрос в смысле, функции для работы с SPI отлажены или нет.

Если самописные, то рекомендую использовать такой интерфейс:
Код
   SET_CS_RTC;
    rx_spi[0] = SPI_Write( command1);
    rx_spi[1] = SPI_Write( Data1 );
    . . . .
   RESET_CS_ALL;

Обработка ошибок - наподобие errno;

При управлении узлом SPI в режиме опроса флагов, можно чего-то не учесть, например буферизацию регистров Tx Rx.
Курить даташит все равно придется. Как вариант - взять готовый драйвер SPI.

Кроме того очень полезная весч лог. анализатор SPI, наподобие Saleae LOGIC (20-30 кваксов)

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 20:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016