📄 cs553x.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 *)®
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 + -