如何为Spi数据传输调用多个从站?

时间:2015-06-09 11:23:49

标签: c++ c embedded avr atmel

我有一种通用方法,其中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++;
            }   


        }  

如何调用两个Slave选择这样,SDRAM中的数据应该一个接一个地转移到这两个从器件?让我们将存储在SDRAM中的数据视为A1A2A3A4A5等所以A1 A3 A5 ...是一组数据应转移到我的奇数从属选择和A2 A4 A6 ...甚至是一组数据到其他从属。

1 个答案:

答案 0 :(得分:1)

正如Lundin所说,您需要决定如何将从属设备连接到控制器。 128A1有几个选项。

  1. 使用相同的MISO,MOSI和SCK行运行到从站。然后使用控制器上的两个不同引脚连接到从器件上的使能引脚。一次启用一个设备并通过同一总线发送数据。
  2. 128A1有四个独立的SPI端口。使用单独的总线将每个从站连接到不同的端口。在端口之间交替发送。
  3. 您可以在微控制器上使用USART的SPI功能。
  4. 我建议选项1或2.一旦你连接了奴隶,编程将与你已经拥有的非常相似。