本帖最后由 any012 于 2016-1-30 14:42 编辑
其他元件都是SCL空闲电平为高电平,然后是上升沿采样。
只有一个是上升沿时数据改变,下降沿时采样。
现在想到的办法是:
把SPI设置为SCL空闲电平为高电平,第二个边沿数据采样;
和这个期间通讯前,更改SPI模式,改为SCL空闲电平为低电平,仍是第二个边沿数据采样;
通讯结束后,再把SPI模式改回来。
结果,通讯不成功,用示波器观测了下MOSI和SCL信号,不同步,有时候SCL信号出现了几个以后才有MOSI信号,并且这个间隔是在变化的。
- #include "adg738.h"
- //¸ÃоƬÊÇϽµÑزÉÑù£¬¹ÊÐèÒª¸ü¸Ä¿ÕÏÐµçÆ½
- void ADG738_Set(unsigned char value)
- {
- SPI_InitTypeDef SPI_InitStructure;
-
- SPI_Cmd(SPI3, DISABLE);
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_CRCPolynomial = 7;
- SPI_Init(SPI3, &SPI_InitStructure);
- SPI_Cmd(SPI3, ENABLE);
-
- ADG738_CS(OFF);
- SPI3_ReadWriteByte(value);
- ADG738_CS(ON);
-
- SPI_Cmd(SPI3, DISABLE);
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
- SPI_Init(SPI3, &SPI_InitStructure);
- SPI_Cmd(SPI3, ENABLE);
- }
----------------------20160130------------------------------
主楼更新下手册,及读写时续截图。
好像有两位朋友怀疑是CS不对,不知道这么猜测有什么依据?
ADG738 .pdf
(103.64 KB, 下载次数: 0)
|