2010-05-27 122 views
0

我正在做一些閱讀,甚至有一個「主」SPI工作在我的微控制器上。這裏是我的問題,基本上,如果主設備要初始化寫入SSPBUF寫的從設備,我們如何控制從設備響應的內容?數據表似乎並不清楚在這種情況下事件的順序。微控制器到微控制器SPI通信

I.E. Master向SSPBUF中寫入一個字符,這會啓動SPI模塊向從站發送數據,在移位期間,從站返回一個字節。

在從屬方面,有沒有什麼能告訴你有傳入數據,你可以先寫入你的SSPBUF,然後接受數據?

OR

你必須寫SSPBUF第一個「返回值」你想要的主人面前發回可以有機會發起轉移?

+0

你用什麼微型? – Dave 2010-05-27 12:29:58

+0

圖片16F913是芯片 – onaclov2000 2010-07-19 02:27:40

回答

1

你想在GPIO線上使用一箇中斷來處理從器件的片選。確保從器件有足夠的時間處理該中斷,並在時鐘啓動之前加載輸出數據寄存器。

某些SPI模塊排除了GPIO的使用 - 您需要檢查您的SPI模塊是否具有處理芯片選擇的功能,或僅根據GPIO活動啓用模塊。

+0

實際上看着這個答案,它似乎使重新審視這個話題很有意義,如果我只是等到我看到一個chipselect嗨,然後我傳遞數據給buff,然後我應該準備好數據。我必須試一試。 – onaclov2000 2010-07-19 02:27:11

0

無論您的微控制器是什麼,三個可能是一個與接收SPI數據相關的ISR,以及一個寄存器,可以訪問已接收的數據並將其複製到本地變量中。

+0

有,但它只是表示傳入的數據,我遇到的問題是,我不知道如何確保我在主機啓動響應之前在主機中有數據。或者每次發生轉移,我想我已經解決了它,但是現在偶爾會遇到計時問題,但是現在我沒有閱讀渠道的主方,現在我已經連接了該服務器,但是我會回報當我找到更多的信息。 – onaclov2000 2010-05-28 19:48:57

0

通常我在過去用SPI做的事情是從主設備向從設備發送2個字節,並且兩者之間的延遲最小。主站發送:「X Y」,其中「X」是它希望從從站讀取的變量,「Y」實際上只是一個虛擬變量,用於記錄從站的響應。與此同時,從器件在接收到「X」時查找中斷,查找要將輸出緩衝器置於什麼值,以及何時接收到「Y」時,對其數據包的響應將被寫入主器件。

0

首先您需要確認您的主站和從站具有共同的參數值,例如SPI模式和數據大小。 SPI模式將決定SPI時鐘線的空閒極性和數據採樣沿是否爲第一或第二。數據大小將顯示它是8位還是16位,或者根據芯片不同可能會有所不同。

現在,當主設備通過芯片/從設備選擇一個從設備時,選擇引腳從設備變爲活動狀態並等待時鐘改變其狀態,一旦時鐘改變狀態,從設備根據SPI模式選擇再次等待第一或第二邊沿的時鐘線。如果是第一個邊沿從器件採樣MOSI線數據並將其放入內部移位寄存器,如果從器件也要發送數據,則必須在選定時鐘沿之前將數據保持在MISO線上。 根據數據大小,此過程將重複至8或16次。完成後,主機和從機可以產生中斷到他們的CPU收集數據(在微控制器的情況下)。