作者gg1122 (99通未接來電)
看板ASM
標題[問題] SPI底層buffer 設定
時間Tue Jan 29 16:46:04 2013
各位先進好 想請問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)
1F:推 shietsd:分兩個byte傳,傳完再組合成一個word不行嗎? 01/29 17:22
2F:→ gg1122:這樣怎湊 只能8bit的倍數 遇到total data length 30bit 01/29 22:43
3F:→ gg1122:還是會多送二個bit過去 因為底層一次出去就一個byte 01/29 22:44
4F:→ gg1122:SPI0DAT = indata;整個就收走了 跟i2c uart 一樣 01/29 22:47
5F:→ gg1122:這樣CS時序 跟spec的 就不同 很苦惱 希望有人有經驗能分享 01/29 22:49
6F:推 WolfLord:使用ISR混和硬體軟體傳送:最後一組用軟體送/收 如何? 01/29 23:23
7F:→ gg1122:W大可以講清楚點嗎 聽不懂 .. = = 01/29 23:28
8F:推 WolfLord:用MSSP送Byte 0-2,當ISR到2之後用軟體再轉出6個bit 01/30 00:27
9F:推 Anal:如果是小弟的話會考慮直接使用GPIO自己寫SPI的protocal 01/30 00:32
10F:推 WolfLord:我想混搭MSSP最主要應該還是CPUTIME的問題,330是很快的 01/30 00:43
11F:→ WolfLord:一棵8051如果停下來送30個BIT要不就是太快要不就是浪費 01/30 00:44
12F:→ gg1122:我想我應該會用刻gpio的方法 01/30 21:31
13F:→ gg1122:w大的方法感覺很困難== 01/30 21:32
14F:推 WolfLord:直接用GPIO你程式會在輸出入時停住喔~ 沒採了330的速度呢 01/31 00:32
15F:→ kikiqqp:要傳10bit,實際上我們會傳8bit+8bit(這8bit只有高位元 01/31 01:04
16F:→ kikiqqp:效,後面6bit餵高電位,接收端自己會乖乖吃下去 01/31 01:05
17F:→ kikiqqp:有些設備(如ADC類需要設定的)一樣都是這樣處理 01/31 01:06
18F:→ kikiqqp:例如 ADS 10bit(1011011010) + Reg 10bit(0111100011) 01/31 01:09
19F:→ kikiqqp:丟給我SPI就101101101 001111000 11111111(看你的SPI MODE 01/31 01:10
20F:→ kikiqqp:至於多送會不會怎樣,很多設計都是沒收完全CS HIGH就當作 01/31 01:12
21F:→ kikiqqp:沒這資料 01/31 01:12
22F:→ gg1122:就多的就補1 送過去就對了 沒差哪多送的1? 01/31 21:35
23F:→ gg1122:這樣在讀的時候 多送的垃圾值 不知道會不會當dummy data 01/31 21:37