tx_data是來自匯流排暫存器的一個暫存器,用於把資料寫入sspbuf,具體是多少位的取決於你是這個模組的設計者還是使用者,如果你打算設計一個spi模組,那麼你想設定成幾位都可以。如果你是使用者,那麼這暫存器可能是8位或者16位的,也可能是32的,不過非常少這個過程是由內部的狀態機驅動的,流程一般是當內部的的傳送暫存器發起一次寫操作之後,tx_data會被填入一個數據,同時驅動控制邏輯產生一個sck時鐘,在這個時鐘同時驅動移位暫存器把資料輸出出去。每個人設計可能有不同的地方。這只是其中一種簡單的思路供你參考SPI是全雙工通訊協議,傳送的同時可以接收,傳送的資料就是從機buf裡面的資料,如果不傳送資料就是0.這個來自於spi的內部狀態機。至於你問一次移動多少,我要反問下,你怎麼定義一次這個概念?一般來說不會產生這個問題。因為流程是這樣的先是buf中有資料,然後資料在傳送的過程中也會接受來自從機的資料。在一幀資料完全發完,從機的資料會被讀取到rx_data中,然後第二個資料再次從tx_data寫入buf。把之前來自從機的資料覆蓋掉
------分割
miso的資料先進入移位暫存器,再拼接成一個8位或者16位寬的資料送給rx_data暫存器。
2. 是不是說tx_data和rx_data只是一個介面暫存器?tx_data和rx_data到底怎麼理解?
我不太明白你說的介面暫存器的定義,但是這個暫存器一般是直接受匯流排控制,一般共用同一個地址,一個只寫,一個只讀。在使用者看來是一個暫存器。就像usart一樣
3. 假設sspbuf是32位,那也是不是隻有當新輸入32位資料後,spi才會序列地把它傳送出去?
實際上你只要有寫入tx_data這個動作就行了,無論你寫了多少位的資料,ssbuf都會發送32位出去,前段補0就是了。有的人設計這個模組的時候會設定成msb和lsb。然後sspbuf的位寬也可以配置。
tx_data是來自匯流排暫存器的一個暫存器,用於把資料寫入sspbuf,具體是多少位的取決於你是這個模組的設計者還是使用者,如果你打算設計一個spi模組,那麼你想設定成幾位都可以。如果你是使用者,那麼這暫存器可能是8位或者16位的,也可能是32的,不過非常少這個過程是由內部的狀態機驅動的,流程一般是當內部的的傳送暫存器發起一次寫操作之後,tx_data會被填入一個數據,同時驅動控制邏輯產生一個sck時鐘,在這個時鐘同時驅動移位暫存器把資料輸出出去。每個人設計可能有不同的地方。這只是其中一種簡單的思路供你參考SPI是全雙工通訊協議,傳送的同時可以接收,傳送的資料就是從機buf裡面的資料,如果不傳送資料就是0.這個來自於spi的內部狀態機。至於你問一次移動多少,我要反問下,你怎麼定義一次這個概念?一般來說不會產生這個問題。因為流程是這樣的先是buf中有資料,然後資料在傳送的過程中也會接受來自從機的資料。在一幀資料完全發完,從機的資料會被讀取到rx_data中,然後第二個資料再次從tx_data寫入buf。把之前來自從機的資料覆蓋掉
------分割
從miso進來的從機資料是不是發給rx_data暫存器?miso的資料先進入移位暫存器,再拼接成一個8位或者16位寬的資料送給rx_data暫存器。
2. 是不是說tx_data和rx_data只是一個介面暫存器?tx_data和rx_data到底怎麼理解?
我不太明白你說的介面暫存器的定義,但是這個暫存器一般是直接受匯流排控制,一般共用同一個地址,一個只寫,一個只讀。在使用者看來是一個暫存器。就像usart一樣
3. 假設sspbuf是32位,那也是不是隻有當新輸入32位資料後,spi才會序列地把它傳送出去?
實際上你只要有寫入tx_data這個動作就行了,無論你寫了多少位的資料,ssbuf都會發送32位出去,前段補0就是了。有的人設計這個模組的時候會設定成msb和lsb。然後sspbuf的位寬也可以配置。