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

📄 cs553x.c

📁 cs5532 spi 接口的程序
💻 C
字号:
#define CS553X_C
#include "all_inc.h"


#define end_for
#define end_if
#define ADC32x  0x28002800
#define ADC64x  0x30003000

#define ADC15hz 0x01800180
#define ADC30hz 0x01000100
#define ADC60hz 0x00800080
#define ADC120hz 0x00000000
#define ADC240hz 0x06000600
#define ADC480hz 0x05800580
#define ADC960hz 0x05000500
#define ADC7_5hz 0x02000200


#define set_cs5532_cs	PORTB |= b0_msk
#define clr_cs5532_cs	PORTB &= ~b0_msk



void write_cs5532_byte(unsigned char c);
void reset_cs5532(void);
void write_cs5532_cmd(unsigned char cmd,unsigned long reg);
unsigned long read_cs5532_reg(unsigned char cmd);
void adc_init(void);
void config_adc(unsigned char rate);
signed long read_adc(void);


void write_cs5532_byte(unsigned char c)
{
	SPDR = c;
	while(!(SPSR & (1<<SPIF)))
	{
		;
	}
}
/*******************************************
*复位 cs5532
********************************************/
void reset_cs5532(void)
{
	unsigned char i;
	for(i=0;i<15;i++)
	{
		write_cs5532_byte(0xff);
	}
	write_cs5532_byte(0xfe);
}
/************************************************************
*****************MCU向cs5532寄存器写入命令*******************
************************************************************/
void write_cs5532_cmd(unsigned char cmd,unsigned long reg)
{
	unsigned char i,*p;
	unsigned long tmp;

	tmp = reg;
	p = (unsigned char *)&tmp;

	write_cs5532_byte(cmd);
	for(i=0;i<4;i++)
	{
		write_cs5532_byte(*(p+3-i));
	}
}
/************************************************************
*****************MCU从cs5532寄存器读取命令*******************
************************************************************/
unsigned long read_cs5532_reg(unsigned char cmd)
{
	unsigned char i,*p;
	unsigned long reg;

	p = (unsigned char *)&reg;
	write_cs5532_byte(cmd);
	for(i=0;i<4;i++)
	{
		write_cs5532_byte(0);
		*(p+3-i) = SPDR;
	}
	return reg;
}
/************************************************************
*****************cs5532初始化*******************
************************************************************/
void adc_init(void)
{
	unsigned char i=0;
	unsigned long tmp;

	clr_cs5532_cs;
    do
	{
    	i += 1;
		reset_cs5532();//初始化cs5532,串行口为命令状态
		write_cs5532_cmd(0x03,0x22000000);//写入CS5532复位命令
		tmp = read_cs5532_reg(0x0b);//读取配置寄存器内容

		if(i>3)
        {
        	//disp_adcerr();
			break;
		}
	}
	while(tmp!=0x30000000);
}
/*************************************************************
**********************config_adc(cs5532)
**************************************************************/
void config_adc(unsigned char rate)
{

	clr_cs5532_cs;
	write_cs5532_cmd(0x03,0x00080000);//写配置寄存器
	switch(rate)
	{
	case 0:
		write_cs5532_cmd(0x05,ADC64x+ADC7_5hz);	//写通道设置寄存器
		break;
	case 1:
		write_cs5532_cmd(0x05,ADC64x+ADC15hz);
		break;
	case 2:
		write_cs5532_cmd(0x05,ADC64x+ADC30hz);
		break;
	case 3:
		write_cs5532_cmd(0x05,ADC64x+ADC60hz);
		break;
	case 4:
		write_cs5532_cmd(0x05,ADC64x+ADC240hz);
		break;
	case 5:
		write_cs5532_cmd(0x05,ADC64x+ADC480hz);
		break;
	default:
		write_cs5532_cmd(0x05,ADC64x+ADC30hz);
		break;
	}
	write_cs5532_byte(0xc0);	//执行转换命令
}
/*************************************************************
* read adc
**************************************************************/
signed long read_adc(void)
{

	unsigned char i,state,*p;
	unsigned long cnt=0;
	signed long ad_result;

	clr_cs5532_cs;
	__delay_cycles(100);
	do
	{
		cnt ++;
		state = (PINB&0x08);

//		__watchdog_reset();
		if(cnt>=100000)
		{
			cnt = 0;
			adc_init();
			config_adc(1);
		}
	}
	while(state!=0);	//wait conversion  complete
	
	p = (unsigned char*)&ad_result;

//	clr_cs5532_cs;
	write_cs5532_byte(0);

	for(i=0;i<4;i++)
	{
		write_cs5532_byte(0);
		*(p+3-i) = SPDR;
	}
	return ad_result>>11;
}
/*
void sample(void)
{
	unsigned char i;
	signed long glide_filter_result=0;
	
	for(i=0;i<glide_lenth;i++)
	{
		GlideFilterBuf[i] = read_adc>>11;
	}
	glide_filter_result = Glide_Filter(glide_lenth);
	RCFilterVal = RC_Filter(glide_filter_result,RCFilterVal);
}
*/

⌨️ 快捷键说明

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