?? cs5532.c
字號(hào):
?
+
#include <avr/io.h>
#include <math.h>
#include <avr/eeprom.h>
#include "common.h"
#include "cs5532.h"
#include "sLcd.h"
#define nop() asm volatile("nop"::)
//------------------------------------------------------------------------------------------
static void dlyus(unsigned int len)
{
do{len--;}while(len>0);
}
//------------------------------------------------------------------------------------------
//寫命令函數(shù)
//cmd是相應(yīng)的命令
void CsCmd(unsigned char cmd)
{
unsigned char i=8;
CSSCK_L;
dlyus(CSDLY*10);
CSCS_L;
dlyus(CSDLY);
for(;i>0;i--)
{
if(cmd&0x80) CSSDI_H;
else CSSDI_L;
dlyus(CSDLY);
CSSCK_H;
dlyus(CSDLY);
CSSCK_L;
cmd<<=1;
}
CSCS_L;
CSSCK_L;
CSSDI_L;
}
//------------------------------------------------------------------------------------------
//寫寄存器函數(shù)
//cmd為相應(yīng)的命令,data是寫入的值
static void CsWrReg(unsigned char cmd,unsigned long data)
{
unsigned char i=8;
CSSCK_L;
dlyus(CSDLY*10);
CSCS_L;
for(;i>0;i--)
{
if(cmd&0x80) CSSDI_H;
else CSSDI_L;
dlyus(CSDLY*2);
CSSCK_H;
dlyus(CSDLY*2);
CSSCK_L;
cmd<<=1;
}
dlyus(CSDLY);
for(i=32;i>0;i--)
{
if(data&0x80000000) CSSDI_H;
else CSSDI_L;
dlyus(CSDLY*2);
CSSCK_H;
dlyus(CSDLY*2);
CSSCK_L;
data<<=1;
}
CSCS_L;
CSSCK_L;
CSSDI_L;
}
//------------------------------------------------------------------------------------------
//讀寄存器函數(shù)
//cmd為相關(guān)命令
//返回相應(yīng)寄存器的值
unsigned long CsRdReg(unsigned char cmd)
{
unsigned char i=8;
unsigned long reg=0;
dlyus(CSDLY);
CSSCK_L;
CSCS_L;
if(cmd)
{
for(;i>0;i--)
{
if(cmd&0x80) CSSDI_H;
else CSSDI_L;
dlyus(CSDLY);
CSSCK_H;
dlyus(CSDLY);
CSSCK_L;
cmd<<=1;
}
}
CSSDI_L;
for(i=31;i>0;i--)
{
dlyus(CSDLY);
CSSCK_H;
dlyus(CSDLY);
if(CSPIN&(1<<CSSDOPIN)) reg|=0x01;//CSSDO
CSSCK_L;
reg<<=1;
}
CSSCK_L;
dlyus(CSDLY);
CSSCK_H;
CSCS_L;
CSSCK_L;
CSSDI_L;
return reg;
}
//------------------------------------------------------------------------------------------
//單次AD轉(zhuǎn)換的函數(shù)
//csr為相應(yīng)的通道,只能是0或者1
//返回本次轉(zhuǎn)換的結(jié)果,如果返回-1,說明AD轉(zhuǎn)換超時(shí)
unsigned long CsSgConv(unsigned char csr)
{
unsigned long res=0;
unsigned int timeout=65532;
csr<<=3;
CsCmd(0x80|csr);
while((CSPIN&(1<<CSSDOPIN))&&(timeout>0)) timeout--;
if(timeout<=0) return -1;
dlyus(CSDLY);
CsCmd(0);
res=CsRdReg(0x0);
//CsCmd(0xc0); //continuously
CSSCK_L;
CSSDI_L;
CSCS_L;
return res;
}
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------
//CS5532初始化
void CsInit(void)
{
unsigned char i=18;
unsigned long x=0;
unsigned int timeout=65532;
CSDDR|=(1<<CSCS)|(1<<CSSDI)|(1<<CSSCK); //SDO ,input
CSPORT|=(1<<CSCS)|(1<<CSSDI)|(1<<CSSCK)|(1<<CSSDOPIN);
delay();//延時(shí)20ms
do
{
CsCmd(SYNC1);
dlyus(CSDLY*10);
i--;
}while(i>0);
CsCmd(SYNC0);
dlyus(CSDLY*10);
CsWrReg(0x03,0x20000000);//軟件置位RS
delay();//20ms
x=CsRdReg(0x0b); //讀配置寄存器
delay();
CsWrReg(0x03,0x00000000);//軟件清零RS
//x=CsRdReg(0x0b); //read cfg
dlyus(CSDLY*10);
CsWrReg(0x03,0x01880000);//configuration
dlyus(CSDLY*10);
CsWrReg(0x05,0x2d2845f8);//CSR0,CSR1
dlyus(CSDLY*10);
delay();
//x=CsRdReg(0x0b); //read cfg
//x=CsRdReg(0x0d); //read CSR
CsCmd(0x81); //Offset calibration
while((CSPIN&(1<<CSSDOPIN))&&(timeout>0)) timeout--;//SDO=0
CsCmd(0x82); //Gain calibration
while((CSPIN&(1<<CSSDOPIN))&&(timeout>0)) timeout--;//SDO=0
//x=CsRdReg(0x09); //read offset
//x=CsRdReg(0x0a); //read gain
/*
CsCmd(0x89); //Offset calibration
while((PINA&0x02)&&(timeout>0)) timeout--;//SDO=0
CsCmd(0x8a); //Gain calibration
while((PINA&0x02)&&(timeout>0)) timeout--;//SDO=0
*/
}
//------------------------------------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -