?? cs5532.txt
字號:
CS5532_TEST
//////////////////////////////////////////////////////////
//////////////// CS5532 ////////////////////////
//////////////////////////////////////////////////////////
//#include "AT89X51.H"
#include "reg51.h" //changed by taoxy@20060110
#include "stdio.h"
#include "intrins.h"
#include "stdlib.h"
#include "absacc.h"
#define uchar unsigned char
// Original design board
sbit CS5532_CS=P1^2;
sbit CS5532_SDI=P1^3;
sbit CS5532_SCLK=P1^5;
sbit CS5532_SDO=P2^4;
// PCB Version
//sbit CS5532_CS=P1^3;
//sbit CS5532_SDI=P1^2;
//sbit CS5532_SDO=P1^1;
//sbit CS5532_SCLK=P1^0;
// all design board ?
sbit CS5532_A0=P1^6;
sbit CS5532_A1=P1^7;
#define RxdTxd4b_0 DBYTE[0x20]
#define RxdTxd4b_1 DBYTE[0x21]
#define RxdTxd4b_2 DBYTE[0x22]
#define RxdTxd4b_3 DBYTE[0x23]
uchar idata RxdTxd4b[4];
void CS5532_Txd(uchar);
void CS5532_Txd_init(uchar);
void read_reg(uchar address_pt);
void read_data(uchar address_pt);
void read_data1(uchar address_pt);
void CS5532_init(void);
void main(void)
{
uchar i,k,address_pt;
uchar flag=0;
address_pt = 32; // RAM 數據區起始地址
CS5532_init();
for(k=0;k<20;k++) _nop_();
//************************************************
// 系統軟復位( CS5532_init() 包含該部分)
CS5532_Txd(0x03); // Soft Reset
CS5532_Txd(0x2A);
CS5532_Txd(0x00);
CS5532_Txd(0x04);
CS5532_Txd(0x00);
CS5532_Txd(0x0B); // Read Config Reg
DBYTE[address_pt++]=0x0B;
read_reg(address_pt);
address_pt = address_pt +4;
CS5532_Txd(0x0B); // Read Config Reg
DBYTE[address_pt++]=0x0B;
read_reg(address_pt);
address_pt = address_pt +4;
//////////////////////////////////////////////
CS5532_Txd(0x05); // Setup REG
CS5532_Txd(0x32);
CS5532_Txd(0x34);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x03); // Config ReG
CS5532_Txd(0x40);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x03); // Config ReG
CS5532_Txd(0xC0);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x03); // Config ReG
CS5532_Txd(0x01);
CS5532_Txd(0x80);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x0B); // Read Config Reg
DBYTE[address_pt++]=0x0B;
read_reg(address_pt);
address_pt = address_pt +4;
CS5532_Txd(0x0D); // Read Setup Reg
DBYTE[address_pt++]=0x0D;
read_reg(address_pt);
address_pt = address_pt +4;
_nop_(); _nop_(); _nop_(); _nop_();
address_pt = 52;
CS5532_CS=1; // 未校準前轉換
CS5532_Txd(0x80);
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
DBYTE[address_pt++]=0x80;
read_data(address_pt);
address_pt = address_pt +4;
_nop_(); _nop_(); _nop_(); _nop_();
/*
CS5532_Txd(0x81); // 自偏移校準
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
*/
/*
CS5532_Txd(0x82); // 自增益校準
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
*/
CS5532_Txd(0x85); // 偏移校準
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
/*
CS5532_Txd(0x86); // 增益校準
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
*/
/*
// 測試寄存器寫回默認值
CS5532_Txd(0x07); // REF TEST
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x1A);
CS5532_Txd(0x00);
*/
//單次轉換
//////////////////////////////////////////////////
for(i=0;i<5;i++)
{
CS5532_CS=1;
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_();
// address_pt = 48;
CS5532_Txd(0x80);
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
DBYTE[address_pt++]=0x80;
read_data1(address_pt);
address_pt = address_pt +4;
for(k=0;k<20;k++) _nop_();
}
// 連續轉換
//***************************************************
CS5532_Txd(0xC0);//連續轉換命令
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
for(i=0;i<5;i++)
{
for(k=0;k<20;k++) _nop_();//delay1
// address_pt = 48;
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
DBYTE[address_pt++]=0xC0;
read_data1(address_pt);
address_pt = address_pt +4;
for(k=0;k<20;k++) _nop_(); //delay
}
for(i=0;i<5;i++)
{
for(k=0;k<20;k++) _nop_();//delay1
// address_pt = 48;
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
DBYTE[address_pt++]=0xC0;
read_data1(address_pt);
address_pt = address_pt +4;
for(k=0;k<20;k++) _nop_(); //delay
}
while(CS5532_SDO)
_nop_(); _nop_(); _nop_(); _nop_();
CS5532_Txd(0xFF);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x0B); // Read Config Reg
DBYTE[address_pt++]=0x0B;
read_reg(address_pt);
address_pt = address_pt +4;
CS5532_Txd(0x03); // Power Save Select
CS5532_Txd(0x80);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
_nop_();
}
void read_reg(uchar address_pt)
{
uchar i,j;
// EX1=0;
CS5532_SCLK = 0; //時鐘低
CS5532_SDI = 0;
_nop_(); _nop_(); _nop_();
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
CS5532_SCLK=1; //時鐘高
RxdTxd4b[j]<<=1;
if(CS5532_SDO)
RxdTxd4b[j]|=0x01; //從SDO讀取數據
CS5532_SCLK=0; //時鐘低
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
}
}
DBYTE[address_pt]=RxdTxd4b[0];
DBYTE[address_pt+1]=RxdTxd4b[1];
DBYTE[address_pt+2]=RxdTxd4b[2];
DBYTE[address_pt+3]=RxdTxd4b[3];
}
void read_data(uchar address_pt)
{
uchar i,j;
// EX1=0;
CS5532_SCLK = 0; //時鐘低
CS5532_SDI = 0;
//for(i=0;i<16;i++)
_nop_(); _nop_(); _nop_();
for(i=0;i<8;i++) // 8 個清串口時鐘
{
CS5532_SCLK=1; //時鐘高
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
CS5532_SCLK=0; //時鐘低
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
}
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
CS5532_SCLK=1; //時鐘高
RxdTxd4b[j]<<=1;
if(CS5532_SDO)
RxdTxd4b[j]|=0x01; //從SDO讀取數據
CS5532_SCLK=0; //時鐘低
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
}
}
DBYTE[address_pt]=RxdTxd4b[0];
DBYTE[address_pt+1]=RxdTxd4b[1];
DBYTE[address_pt+2]=RxdTxd4b[2];
DBYTE[address_pt+3]=RxdTxd4b[3];
}
void CS5532_init(void)
{
uchar k;
//串口初始化
uchar i;
CS5532_CS=1;
for(k=0;k<200;k++) _nop_();
CS5532_CS=0; //片選使能
for(k=0;k<200;k++) _nop_();
CS5532_SDI=0;
CS5532_SDO=1;
CS5532_SCLK=0;
for(i=0;i<180;i++)
CS5532_Txd_init(0xFF);//發送命令
CS5532_Txd(0xFE);
for(i=0;i<18;i++) _nop_();
for(i=0;i<18;i++) _nop_();
//配置寄存器
CS5532_Txd(0x03);
CS5532_Txd(0x20);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
CS5532_Txd(0x00);
for(k=0;k<200;k++) _nop_();
for(k=0;k<200;k++) _nop_();
/*
//配置寄存器
CS5532_Txd(0x03);
CS5532_Txd(0x02);
CS5532_Txd(0x40);
CS5532_Txd(0x00);
CS5532_Txd(0x02);
CS5532_Txd(0x05);
CS5532_Txd(0x84);
CS5532_Txd(0x00);
CS5532_Txd(0x84);
CS5532_Txd(0x00);
*/
//---------------------------
}
void CS5532_Txd(uchar dat)//向CS5532寫一字節數據
{
uchar i,k;
CS5532_SCLK=0;//時鐘低
CS5532_CS=0;
_nop_();
// for(i=0;i<16;i++)
// _nop_();
// _nop_();
_nop_();
_nop_();
for(i=0;i<8;i++)
{
if((dat<<i)&0x80)
CS5532_SDI=1; //數據送到SPI的SDI口
else
CS5532_SDI=0;
_nop_();
_nop_();
// for(i=0;i<16;i++)
// _nop_();
_nop_();
CS5532_SCLK=1; //時鐘高
for(k=0;k<20;k++) _nop_();
/*
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
*/
CS5532_SCLK=0; //時鐘低
for(k=0;k<20;k++) _nop_();
// _nop_();
}
CS5532_SDI=0;
}
void CS5532_Txd_init(uchar dat)//向CS5532寫一字節數據
{
uchar i,k;
CS5532_SCLK=0;//時鐘低
CS5532_CS=0;
_nop_();
for(i=0;i<8;i++)
{
if((dat<<i)&0x80)
CS5532_SDI=1; //數據送到SPI的SDI口
else
CS5532_SDI=0;
_nop_();
CS5532_SCLK=1; //時鐘高
for(k=0;k<190;k++) _nop_();
/*
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
*/
CS5532_SCLK=0; //時鐘低
_nop_();
for(k=0;k<190;k++) _nop_();
}
}
void read_data1(uchar address_pt)
{
uchar i,j;
// EX1=0;
CS5532_SCLK = 0; //時鐘低
CS5532_SDI = 0;
//for(i=0;i<16;i++)
_nop_(); _nop_(); _nop_();
for(i=0;i<8;i++) // 8 個清串口時鐘
{
CS5532_SCLK=1; //時鐘高
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
CS5532_SCLK=0; //時鐘低
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
}
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
CS5532_SCLK=1; //時鐘高
RxdTxd4b[j]<<=1;
if(CS5532_SDO)
RxdTxd4b[j]|=0x01; //從SDO讀取數據
CS5532_SCLK=0; //時鐘低
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_();
}
}
if(RxdTxd4b[0] > 0x7F)
{
// RxdTxd4b[3] = ~RxdTxd4b[3];
RxdTxd4b[2] = ~RxdTxd4b[2];
RxdTxd4b[1] = ~RxdTxd4b[1];
RxdTxd4b[0] = ~RxdTxd4b[0];
}
DBYTE[address_pt]=RxdTxd4b[0];
DBYTE[address_pt+1]=RxdTxd4b[1];
DBYTE[address_pt+2]=RxdTxd4b[2];
DBYTE[address_pt+3]=RxdTxd4b[3];
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -