69ka

Members
  • Публикации

    1
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

О 69ka

  • Звание
    Новенький

Информация

  • Город
    Таганрог

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Микроконтроллеры, ПО для МК
  1. Добрый день, столкнулся с проблемой на микроконтроллере 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_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.