作者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