您的位置 首页 分销

CS5550读写程序

最近一直在写采集板的程序。采用STM32F101与外部ADCS5550。刚刚接触这个CS5550,感觉时序有点怪异。尤其是读的时候,在后3个指节,还要写

最近一直在写收集板的程序。

选用STM32F101与外部AD CS5550

刚刚触摸这个CS5550,感觉时序有点奇怪。尤其是读的时分,在后3个指节,还要写SYNCO.

刚开始对这个十分不了解。后来参阅了网上的一个程序。形似网上就只有一个程序。所以有一点了解。便是说,单片机在读CS5550的数据时(也便是读MISO)还要往CS5550(MOSI)写数据。

CS5550读写大致是这样的。

读写都要32个周期。

前8个周期读写都是相同的,便是都要先写地址,然后读/写 地址的内容。

可是读的时分在后24个周期的时分要写3次SYNCO(11111110).这个是难点,简单被疏忽。

刚开始我也揣摩了好久。

后来总算柳岸花明。

然后便是周期的挑选,我是先低后高。看到网上许多程序都是先高后低。网上的程序我没有成功过。或许自己没设置好。

把自己的代码共享下,或许还有过错。我们能够点拨下。

总归写程序要有耐性,能够仿照他人,可是千万仿制。往往仿制的都会是有问题的。

//延时都是准确延时,时刻能够短一点没问题Delay_us(10)都行;

u32 Read_CS5550(u8 Read_Addr)
{
u8 Num;
u32 Read_Temp,Read_Data=0;
CS5550_CS_1;
Delay_us(50);
CS5550_CS_0;
Delay_us(100);
//数据手册上说每次写的时分要等24个周期。自己实验后不需要等。
for(Num=1;Num<=8;Num++)
{
if(Read_Addr&0x80)
MOSI_1;
else
MOSI_0;
SCK_0;
Delay_us(1);
SCK_1;
Delay_us(1);
Read_Addr=Read_Addr<<1;
}//写命令字

MOSI_1;
for(Num=1;Num<=24;Num++)
{
SCK_0;
Delay_us(20);
if(Num==7||Num==15||Num==23)//这里是难点,自己揣摩下。
MOSI_0;
if(Num==8||Num==16||Num==24)//这里是难点,自己揣摩下。

MOSI_1;
Read_Data=Read_Data<<1;
Read_Temp=MISO;
if(Read_Temp)
Read_Data=Read_Data+1;
Delay_us(200);
SCK_1;
Delay_us(200);

}
MOSI_1;
CS5550_CS_1;
Delay_us(200);
return Read_Data;

}
//READ 修正。。

void Write_CS5550(u8 Write_Addr,u32 Write_Data)
{
u8 num;
CS5550_CS_1;
Delay_us(50);

CS5550_CS_0;
Delay_us(50);


MOSI_1;
Delay_us(200);
for(num=1;num<=8;num++)
{
if(Write_Addr&0x80)
MOSI_1;
else
MOSI_0;
SCK_0;
Delay_us(200);
SCK_1;
Delay_us(200);

Write_Addr=Write_Addr<<1;
}//写命令字
for(num=0;num<24;num++)
{
if(Write_Data&0x800000)
MOSI_1;
else
MOSI_0;
SCK_0;
Delay_us(200);
SCK_1;
Delay_us(200);
Write_Data=Write_Data<<1;
}//写数据

MOSI_1;
SCK_0;
Delay_us(100);
CS5550_CS_1;

}

void Write_Command(u8 Command_Data)
{
u8 NUM;
CS5550_CS_1;
Delay_us(100);
CS5550_CS_0;
Delay_us(200);
for(NUM=1;NUM<=24;NUM++)
{
SCK_0;
Delay_us(200);
SCK_1;
Delay_us(200);

}

for(NUM=1;NUM<=8;NUM++)
{
if(Command_Data&0x80)
MOSI_1;
else
MOSI_0;
SCK_0;
Delay_us(200);
SCK_1;
Delay_us(200);

Command_Data= Command_Data<<1;
}

for(NUM=1;NUM<=24;NUM++)
{
SCK_0;
Delay_us(200);
SCK_1;
Delay_us(200);

}
CS5550_CS_1;
SCK_1;
MOSI_1;

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/259575.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部