如何将内部存储器传输数据的代码通过SPI Master写入2从器件

时间:2015-06-05 09:12:47

标签: embedded avr atmega atmel

我从USB接收数据到Atxmega 128A1的内部存储器

    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 Master将内部存储器中的传输数据写入两个从器件,以便将奇数和偶数字节的数据分别发送到两个从器件?如何向两个从站(多个从站)启动主站?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

由于两个从设备都连接到同一总线,一次只能传输一个数据,因此有两个选项可供选择:

  1. 实现一个简单的协议,以便每个从属确实知道哪个字节属于它。 (示例:一个字节头,6位长度和2位接收器代码或(1 - 从站1,2从站2 - 3两个从站偶数/奇数)
  2. 使用从属选择引脚并传输一个字节并确保不发送下一个字节并取消选择第一个接收器,直到旧的发送为止(计算时钟周期需要多长时间并nop它们或使用它们其他有用的东西))