⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cs5532.c

📁 AVR 开发的CS5532代码
💻 C
字号:
#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);
}
//------------------------------------------------------------------------------------------
//写命令函数
//cmd是相应的命令
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;
 
}
//------------------------------------------------------------------------------------------
//写寄存器函数
//cmd为相应的命令,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;

}
//------------------------------------------------------------------------------------------
//读寄存器函数
//cmd为相关命令
//返回相应寄存器的值
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转换的函数
//csr为相应的通道,只能是0或者1
//返回本次转换的结果,如果返回-1,说明AD转换超时
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();//延时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
 */
}

//------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -