2015-06-05 3 views
0

я получаю данные от USB во внутренней памяти Atxmega 128A1как писать код для данных передачи из внутренней памяти через SPI Master 2 ведомый

if ((SWITCHPORTL.IN & PIN1_bm) == 0) 
    { 
     j = 0; 
     while (j < NUM_BYTES) 
     { 
      // Wait till there is unread data in the receive buffer 
      while((USART.STATUS & USART_RXCIF_bm) == 0){}; 
      // Read out the received data 
      __far_mem_write(j+SDRAM_ADDR, USART.DATA); 
      if (j == (NUM_BYTES-1)) 
      { 
       // Toggle LED 1 
       LEDPORT.OUTTGL = PIN1_bm; 
      } 
      j++; 
     } 
    } 

Как написать код для данных передачи из внутренней памяти через SPI Мастер для двух подчиненных устройств, так что нечетный и даже байтовый данные должны отправляться отдельно на два подчиненных устройства? Как запустить мастер на два подчиненных устройства (несколько подчиненных)?

+0

Это очень зависит от формата кадра, требуемого рабы. Вы должны прочитать данные. Вернитесь, если у вас есть ** конкретный вопрос с вашим кодом. – Olaf

+0

@ Олаф извините ... я должен опубликовать этот подход. но не в состоянии писать в кодированном виде, так как я новичок здесь. вы можете помочь мне –

+0

Возьмите [тур] (http://stackoverflow.com/tour). Ты здесь больше, чем я. – Olaf

ответ

0

Я думаю, что это возможно в основном, когда оба ведомого устройства будут понимать данные в таком же формате, как в той же конфигурации для CPOL и CPHA. Вы можете выбрать один конкретный ведомый, включив штырь CS соответственно. Таким образом, ваш код может выглядеть следующим образом:

initMaster(); 
selectSlave1(); //Make CS1 low and CS2 high 
spiTransmit(data1); //transmit odd byte 
selectSlave2(); //Make CS2 low and CS1 high 
spiTransmit(data2); //transmit even byte 
+0

Скорее всего, это не сработает, так как на данный момент вы переключаете выделение, SPI, скорее всего, все еще занят сдвигом. Кроме того, вы должны распределять полученные данные между ними. Далее: после выбора Slave2 у вас есть оба выбора активных (если 'selectSlave2()' не подразумевает «снять выделение с ведомого 1») .Кроме того: что, если устройствам требуется адрес перед данными? Какой формат? ... Требуются таблицы данных (но это слишком далеко для этого сайта). – Olaf

+0

- Я обычно реализую spiTransmit(), чтобы убедиться, что отправка завершена, проверяя этот флаг: while (! (SPSR & (1 << SPIF))); - Вы правы, seletSlaven() - отменяет выбор всех подчиненных, а затем выбирает slave n - И да, если требуется адрес, который также должен быть предоставлен. – Apoorv

+0

Я думаю, что вопрос просто включает в себя мультиплексирование по SPI, для двух разных подчиненных устройств, и это кажется выполнимым. Возможно, у вас есть t o просто настроить их отдельно, дождаться завершения инициализации, а затем просто отправить один байт и перейти к другому. – Apoorv

0

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

  1. реализовать простой протокол, чтобы каждый подчиненный знал, какой из байтов принадлежит ему. (пример: один байтовый заголовок с 6-разрядной длиной и 2-битным кодом приемника или (1 - ведомый 1, 2 ведомый 2 - 3 оба ведомых четных/нечетных)
  2. использовать подчиненные переключатели и передавать байт и не выполнять отправьте следующее и отмените выбор первого приемника до тех пор, пока не будет отправлено старое (вычислите такты, сколько времени потребуется, и nop их или используйте их для других полезных вещей))

 Смежные вопросы

  • Нет связанных вопросов^_^