Как вызвать несколько ведомых для передачи данных Spi?

У меня есть общий подход, когда данные в SDRAM передаются SPIC.DATA. Я добавил функцию задержки для настройки моего цифрового сигнала с частотой дискретизации.

    /* Transfer data from internal memory via SPI from Master to Slave */
if ( (SWITCHPORTL.IN & PIN2_bm) == 0 )
{

flip = false;
j = 0;
while (j < NUM_BYTES)
{
if (flip == false)
{
// Set slave select line low (active) for Port C
PORTC.OUTCLR = PIN4_bm;
}
// Give the data to the data register of the Master
SPIC.DATA = __far_mem_read(j+SDRAM_ADDR);
if (flip == true)
{
// wait for the 2nd 8-bit-block to be send
-> delay 0.7us
_delay_us(0.7);
// Set slave select line high (inactive)
PORTC.OUTSET = PIN4_bm;
// delay to adjust to sampling frequency
100 kHz -> 6.9us; 200kHz -> 1.9us
_delay_us(1.9);                                 }
flip = !flip;
j++;
}}

Как я могу назвать два ведомых выбора для этого таким образом, чтобы данные в SDRAM передавались этим двум ведомым поочередно поочередно один за другим? Давайте рассмотрим данные, хранящиеся в SDRAM, как A1A2A3A4A5 и т. Д., Поэтому A1 A3 A5 … это один набор Данные, которые должны быть переданы в мой нечетный выбор ведомого, а A2 A4 A6 … это четный набор данных для другого ведомого.

-2

Решение

Как говорит Лундин, вам нужно решить, как подключить подчиненные к вашему контроллеру. 128A1 имеет несколько вариантов.

  1. Используйте те же линии MISO, MOSI и SCK, чтобы бежать к подчиненным. Затем используйте два разных контакта на контроллере для подключения к разрешающим контактам на ведомых устройствах. Включите одно устройство за раз и отправляйте данные по одной шине.
  2. 128A1 имеет четыре отдельных порта SPI. Подключите каждое ведомое устройство к отдельному порту, используя отдельные шины. Альтернативная отправка между портами.
  3. Вы можете использовать функцию SPI USART на микроконтроллере.

Я предлагаю вариант 1 или 2. Как только вы подключите подчиненные, программирование будет очень похоже на то, что у вас уже есть.

1

Другие решения