Как передать данные A1A2A3A4.. из внутренней памяти ATxmega128A1 через ведущее устройство SPI в ведомую форму в два отдельных преобразователя ЦАП?

Я хочу передать данные A1A2A3A4. Из внутренней памяти ATxmega128A1 через ведущее устройство SPI в подчиненную форму на два отдельных преобразователя ЦАП, так что DAC1 должен иметь A1A3 и DAC2 с A2A4.

Как я могу написать код в AVR

// Transfer data from internal memory via SPI from Master to single Slave
if ( (SWITCHPORTL.IN & PIN2_bm) == 0 )
{
    flip = false;
    j = 0;

    {
        // Switch on LED 2
        LEDPORT.OUTSET = PIN2_bm;
        // Switch on LED 3
        LEDPORT.OUTSET = PIN3_bm;
    }

    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)
        {
            _delay_us(0.7);         // wait for the 2nd 8-bit-block to be send -> delay 0.7us
            // Set slave select line high (inactive)
            PORTC.OUTSET = PIN4_bm;
            _delay_us(1.9);         // delay to adjust to sampling frequency 100 kHz -> 6.9us 200kHz -> 1.9us
        }
        flip = !flip;
        j++;
    }
}

1 ответ

Ваш общий подход верен, но почему вы не используете флаг SPIF в регистре SPSR? Это избавит от необходимости таких точных _delay_us(0.7),

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

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

  1. Прочитать четный байт (A1)
  2. Подтвердите выбор ведомого для первого ЦАП.
  3. Записать байт данных в SPIC.DATA
  4. Цикл пока бит SPIF SPSR == 0
  5. Читайте из SPIC.DATA, чтобы очистить бит SPIF.
  6. Deassert Slave выбирают для первого ЦАПа
  7. Чтение нечетного байта (A2)
  8. Утвердить выбор ведомого для второго ЦАП
  9. Повторите шаги 3-5
  10. Повторите с начала

Кроме того, рекомендуется создать функцию, которая обрабатывает запись данных через SPI.

Другие вопросы по тегам