看板 ASM 關於我們 聯絡資訊
各位先進好 想請問SPI一些問題 因為看了sample code 發現底層也是有一個 "BYTE" buffer 作傳輸 可是目前小弟的 晶片通訊協定 head (10bits)+register(10bits)+Data_N..(10bits*N) 是為10bits做一個單位 就算我用bitfild typedef struct { long A :10; long B :10; long C :10; long D :2 ; }Packdata; 之後也是只能用buffer=_Packdata.A>>8 還是卡在buffer不對稱 感覺越弄越複雜... 怎樣想都沒辦法達到晶片的需求 想請問要怎樣處理這種問題 ? PS:MCU Siliconlab F330 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 39.11.27.148 ※ 編輯: gg1122 來自: 39.11.27.148 (01/29 16:47)
shietsd:分兩個byte傳,傳完再組合成一個word不行嗎? 01/29 17:22
gg1122:這樣怎湊 只能8bit的倍數 遇到total data length 30bit 01/29 22:43
gg1122:還是會多送二個bit過去 因為底層一次出去就一個byte 01/29 22:44
gg1122:SPI0DAT = indata;整個就收走了 跟i2c uart 一樣 01/29 22:47
gg1122:這樣CS時序 跟spec的 就不同 很苦惱 希望有人有經驗能分享 01/29 22:49
WolfLord:使用ISR混和硬體軟體傳送:最後一組用軟體送/收 如何? 01/29 23:23
gg1122:W大可以講清楚點嗎 聽不懂 .. = = 01/29 23:28
WolfLord:用MSSP送Byte 0-2,當ISR到2之後用軟體再轉出6個bit 01/30 00:27
Anal:如果是小弟的話會考慮直接使用GPIO自己寫SPI的protocal 01/30 00:32
WolfLord:我想混搭MSSP最主要應該還是CPUTIME的問題,330是很快的 01/30 00:43
WolfLord:一棵8051如果停下來送30個BIT要不就是太快要不就是浪費 01/30 00:44
gg1122:我想我應該會用刻gpio的方法 01/30 21:31
gg1122:w大的方法感覺很困難== 01/30 21:32
WolfLord:直接用GPIO你程式會在輸出入時停住喔~ 沒採了330的速度呢 01/31 00:32
kikiqqp:要傳10bit,實際上我們會傳8bit+8bit(這8bit只有高位元 01/31 01:04
kikiqqp:效,後面6bit餵高電位,接收端自己會乖乖吃下去 01/31 01:05
kikiqqp:有些設備(如ADC類需要設定的)一樣都是這樣處理 01/31 01:06
kikiqqp:例如 ADS 10bit(1011011010) + Reg 10bit(0111100011) 01/31 01:09
kikiqqp:丟給我SPI就101101101 001111000 11111111(看你的SPI MODE 01/31 01:10
kikiqqp:至於多送會不會怎樣,很多設計都是沒收完全CS HIGH就當作 01/31 01:12
kikiqqp:沒這資料 01/31 01:12
gg1122:就多的就補1 送過去就對了 沒差哪多送的1? 01/31 21:35
gg1122:這樣在讀的時候 多送的垃圾值 不知道會不會當dummy data 01/31 21:37