2015-06-09 25 views
-2

我有一個通用的方法,在SDRAM中的數據被傳輸SPIC.DATA。我添加了延遲功能,以便用採樣頻率調整我的數字信號。如何爲Spi數據傳輸調用多個從站?

/* 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 ...是對其他從屬的偶數組數據。

+1

你可以提一下你正在使用的微控制器嗎?有100個不同的AVR。 –

+1

問題不明確。這些奴隸在同一條SPI總線上嗎?如果是這樣,你如何在它們之間複用?看起來你的代碼中只有一個從選擇引腳。或者這是一個「菊花鏈」SPI解決方案嗎?請說明有哪些硬件。 – Lundin

+0

[如何編寫傳輸數據從內部存儲器通過SPI主機到2從機]的可能的重複(http://stackoverflow.com/questions/30662682/how-to-write-code-for-transfer-data-from內存通過spi-master-to-2-sla) – Olaf

回答

1

正如Lundin所說,您需要決定如何將奴隸連接到您的控制器。 128A1有幾個選項。

  1. 使用相同的MISO,MOSI和SCK線路運行到從站。然後使用控制器上的兩個不同引腳連接到從站上的使能引腳。一次啓用一個設備並通過同一總線發送數據。
  2. 128A1有四個獨立的SPI端口。使用不同的總線將每個從站連接到不同的端口。在端口之間交替發送。
  3. 您可以在微控制器上使用USART的SPI功能。

我建議選擇1或2.一旦連接了從站,編程將與您已有的非常相似。

+0

是的你是正確的,我想在端口C的同一SPI總線上使用從機。存儲在SDRAM中的數據是兩組不同的數據。我的意思是,我想調用與一個設定值相對應的偶數位和另一個奇數位。所以這兩套必須獨立發送給奴隸。 –

+0

在您的巴士上使用兩條'EN'線,每個設備一條。在你的循環中,在奇數字節中啓用一個設備,在偶數字節中啓用另一個設備。 – UncleO

+0

你讓我啓用兩個奴隸選擇通過位掩碼如上面的代碼,如PORTC.OUTCLR = PIN4_bm?如果是的話如何從SDRAM調用偶數和奇數位到選定的從機。 –

相關問題