📄 cs5532._c
字号:
#define _CS5532_C
#include <iom169v.h>
#include <macros.h>
#include <stdio.h>
#include "main.h"
#include "cs5532.h"
const unsigned char setup_5532[35]=
{
0x41,
0xfe,0x00,0x00,0x00, //通道0
0xfe,0x00,0x00,0x00, //通道1
0xfe,0x00,0x00,0x00, //通道2
0xfe,0x00,0x00,0x00, //通道3
0x45, //设置所有通道设置寄存器
0x31,0xc0,0x31,0xc0, //0x31:12.5Hz,通道1(1、2脚)
0x31,0xc0,0x31,0xc0, //0x71,通道2(19、20脚)
0x31,0xc0,0x31,0xc0,
0x31,0xc0,0x31,0xc0,
0xc0;
}
void CS5532_Txd(unsigned char dat)//向CS5532写一字节数据
{
unsigned char i;
CLR_SCK;//时钟低
CLR_CS;
delay_loop(1);
for(i=0;i<8;i++)
{
if((dat<<i)&0x80)
SET_SDI; //数据送到SPI的SDI口
else
CLR_SDI;
delay_loop(2);
SET_SCK; //时钟高
delay_loop(2);
CLR_SCK; //时钟低
delay_loop(2);
}
CLR_SDI;
}
unsigned long CS5532_RXD(void)
{
unsigned long c;
unsigned char RxdTxd4b[4];
unsigned char i,j;
c=0;
CLR_SDI;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
SET_SCK; //时钟高
delay_loop(2);
RxdTxd4b[j]<<=1;
if(SDO)
RxdTxd4b[j]|=0x01; //从SDO读取数据
else
RxdTxd4b[j]|=0x00; //从SDO读取数据
delay_loop(2);
CLR_SCK; //时钟低
delay_loop(2);
}
}
c |= RxdTxd4b[0];
c<<=8;
c |= RxdTxd4b[1];
c<<=8;
c |= RxdTxd4b[2];
c<<=8;
c |= RxdTxd4b[3];
// c=c>>8;//去掉最低位
return(c);
}
void CS5532_init(void)
{
//串口初始化
unsigned char i;
SET_CS;
delay_loop(2);
CLR_CS; //片选使能
delay_loop(2);
CLR_SDI;
SET_SDO;
CLR_SCK;
for(i=0;i<18;i++)
CS5532_Txd(0xFF);//发送命令
CS5532_Txd(0xFE);
//配置寄存器
CS5532_Txd(0x43);
CS5532_Txd(0x02);
CS5532_Txd(0x40);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x02);
CS5532_Txd(0x40);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x02);
CS5532_Txd(0x40);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x02);
CS5532_Txd(0x40);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
/* //通道寄存器
CS5532_Txd(0x05);
CS5532_Txd(0x32);
CS5532_Txd(0x40);
CS5532_Txd(0x32);
CS5532_Txd(0x40);*/
//---------------------------
}
unsigned long CS5532_RW(unsigned int chunnel)
{
unsigned char Conversion_r,l,j,i;
unsigned char AD_data[4];
switch(chunnel)
{
case 0:
CLR_4052A;
CLR_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 1:
SET_4052A;
CLR_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 2:
CLR_4052A;
SET_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 3:
SET_4052A;
SET_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 4:
CLR_4052A;
CLR_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b01110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 5:
SET_4052A;
CLR_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b01110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 6:
CLR_4052A;
SET_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b01110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
case 7:
SET_4052A;
SET_4052B;
CS5532_Txd(0x05);
CS5532_Txd(0b01110110);
CS5532_Txd(0x40);
CS5532_Txd(0b00110110);
CS5532_Txd(0x40);
break;
default:break;
}
CS5532_Txd(0x80); //启动稳定的单次转换
while(SDO!=0) //等待转换结束
{;}
// 读取数据
CLR_SCK;//时钟低
CLR_SDI;
delay_loop(1);
for(i=0;i<8;i++)
{
SET_SCK; //时钟高
delay_loop(1);
CLR_SCK; //时钟低
delay_loop(1);
}
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
SET_SCK; //时钟高
AD_data[j]<<=1;
if(SDO)
AD_data[j]|=0x01; //从SDO读取数据
CLR_SCK; //时钟低
delay_loop(1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -