新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2017-8-7
- 在线时间
- 2 小时
|
1金钱
#include "sys.h"
#include "SPI.h"
#include "CS55301.h"
#include "delay.h"
void SPI_CS5530_Init(void)
{
RCC->APB2ENR|=1<<2; //PORTA时钟使能
GPIOA->CRL&=0XFFF0FFFF;
GPIOA->CRL|=0X00030000; //PA4 推挽
GPIOA->ODR|=1<<4; //PA4 上拉 输出高
SPI1_Init(); //初始化SPI1
SPI1_SetSpeed(SPI_SPEED_4);//设置为18M时钟,高速模式
}
/**********************************************************
*函数名:unsigned char CS5530_Read(void)
*功 能:CS5530读8位数据
*说 明:
**********************************************************/
u8 CS5530_Read(void)
{
u8 Read_data;
Read_data=SPI1_ReadWriteByte(0xff);
return Read_data;
}
/**********************************************************
*函数名:unsigned long CS5530_Read_Dword (void)
*功 能:CS5530读32位数据
*说 明:
**********************************************************/
u32 CS5530_Read_Dword(void)
{
u32 Read_data=0;
SPI1_ReadWriteByte(0xff);
Read_data|=SPI1_ReadWriteByte(0xFF)<<24;
return Read_data;
}
/**********************************************************
*函数名:void CS5530_Write(unsigned char Write_data)
*功 能:写8位数据
*说 明:unsigned char Write_data:需发送的数据
**********************************************************/
void CS5530_Write(u8 Write_data)
{
SPI1_ReadWriteByte(Write_data);
}
/**********************************************************
*函数名:void CS5530_Write_Dword(unsigned long Write_data)
*功 能:写32位数据
*说 明:unsigned char Write_data:需发送的数据
**********************************************************/
void CS5530_Write_Dword(u32 Write_data)
{
SPI1_ReadWriteByte(Write_data>>24); //发送32bit地址
}
/**********************************************************
*函数名:void CS5530_Serial_Reset(void)
*功 能:
*说 明:
**********************************************************/
void CS5530_Serial_Reset(void) //1
{
u8 i = 18;
while(i-- )
{
CS5530_Write(SYNC1) ;
}
CS5530_Write(SYNC0) ;
}
/**********************************************************
*函数名:void CS5530_Set(void)
*功 能:CS5530初始化
*说 明:
**********************************************************/
void CS5530_Set(void)
{
u32 data;
u32 CONFIG;
u32 GAIN;
u32 OFFSET;
u8 read_data;
u8 CS5530_rst;
SPI_CS5530_Init();
delay_ms(100);
AD_CS= 0 ;
CS5530_Serial_Reset();
CS5530_Write(Write_CONFIG); //写配置寄存器
CS5530_Write_Dword(SYSTEM_RESET) ; //初始化 0x20000000
delay_us(1);
CS5530_Write(Write_CONFIG); //写配置寄存器
CS5530_Write_Dword(0x00000000) ; //初始化 0x20000000
CS5530_Write(Read_CONFIG);
read_data = CS5530_Read();
CS5530_rst = read_data;
read_data = CS5530_Read();
read_data = CS5530_Read();
read_data = CS5530_Read();
while((CS5530_rst & 0x10) != 0x10)
{
CS5530_Write(Read_CONFIG);
read_data = CS5530_Read();
CS5530_rst = read_data;
read_data = CS5530_Read();
read_data = CS5530_Read();
read_data = CS5530_Read();
}
CS5530_Write(Read_CONFIG);
CONFIG = CS5530_Read_Dword();
delay_us(1);
CS5530_Write(Read_GAIN);
GAIN = CS5530_Read_Dword();
delay_us(1);
CS5530_Write(Read_OFFSET);
OFFSET = CS5530_Read_Dword();
delay_us(1);
CS5530_Serial_Reset();
CS5530_Write(Write_CONFIG); //写配置寄存器
CS5530_Write_Dword(0x00000000);
delay_us(1);
delay_us(1);
CS5530_Write(Write_CONFIG); //写配置寄存器
CS5530_Write_Dword(0x00084000);
CS5530_Write(Write_GAIN);
CS5530_Write_Dword(0x01000000);
// CS5530_Write_Dword( NORMAL_MODE + VREF_HIGH + CR_A0_0 + CR_A1_0 + SHORT_INPUTS + LINE_FREQ_60 +DATARATE_200 + BIPOLAR_MODE + TURN_OFF_300NA ) ;
CS5530_Write(START_CONTINUOUS); //连续转换START_SINGLE
delay_us(10);
// CS5530_SDI = 0;
CS5530_Write(0x00); //写入空指令,
data = CS5530_Read_Dword();
}
u32 CS5530_Result ( void )
{
CS5530_Write ( NULL_BYTE ) ;
return ( u32 ) ( CS5530_Read_Dword ( ) ) ;//
}
u32 CS5530_ADC(void)
{
u32 temp;
CS5530_Write(START_SINGLE);
CS5530_Write_Dword(NULL_BYTE);
delay_us(1);
temp=CS5530_Result ( ) ;
return temp ;
}
/**********************************************************
*文件名:cs5530.h
*说 明:cs5530工程头文件
修改记录:
**********************************************************/
//cs5530.h
#include "sys.h"
#ifndef __cs5530_h__
#define __cs5530_h__
#define SYNC1 0xff
#define SYNC0 0xfe
#define NULL_BYTE 0x00
#define AD_CS PAout(4) //AD卡片选引脚
// Command Register
//#define CMD_WRITE (0x00<<3)//写寄存器命令
//#define CMD_READ (0x01<<3)//读寄存器命令
#define CMD_WRITE 0x00 //写寄存器命令
#define CMD_READ (0x08)//读寄存器命令
#define REG_OFFSET 0x01 //偏移寄存器
#define REG_GAIN 0x02 //增益寄存器
#define REG_CONFIG 0x03 //配置寄存器
#define Write_GAIN 0x02 //写增益寄存器
#define Read_GAIN 0x0a //读增益寄存器
#define Write_OFFSET 0x01 //写偏移寄存器命令
#define Read_OFFSET 0x09 //读偏移寄存器命令
#define Write_CONFIG 0x03 //写配置寄存器命令
#define Read_CONFIG 0x0b //读配置寄存器命令
//#define START_SINGLE (0x00<<6) //单次转换
//#define START_CONTINUOUS (0x01<<6)//连续转换
#define START_SINGLE 0x80 //单次转换,转换命令
#define START_CONTINUOUS 0xc0//连续转换
//#define NORMAL_CONVERSION (0x80+0x00)//转换命令
#define SYSTEM_OFFSET_CAL (0x80+0x05)//执行偏移校准
#define SYSTEM_GAIN_CAL (0x80+0x06)// 执行增益校准
// Configuration Register
//#define STANDBY_MODE (0x00L<<31)//待机模式
//#define SLEEP_MODE (0x01L<<31)//休眠模式
//#define POWER_SAVE_MODE (0x01L<<30) //节电模式
#define STANDBY_MODE 0x00000000 //待机模式
#define SLEEP_MODE (0x01L<<31)//休眠模式
#define POWER_SAVE_MODE (0x01L<<30) //节电模式
#define NORMAL_MODE (0x00L<<29) //正常操作
#define SYSTEM_RESET (0x01L<<29)//激活一个复位周期 复位后自动清0
#define RESET_STATUS (0x01L<<28) //复位有效 系统已复位 只读
#define SHORT_INPUTS (0x00L<<27) //输入正常输入 个通道输入不断接
#define VREF_HIGH (0x00L<<25) //参考电压 2.5~((VA+)-(VA-))V
#define VREF_LOW (0x01L<<25)//参考电压 1~2.5V
#define CR_A1_0 (0x00L<<24)
#define CR_A1_1 (0x01L<<24)
#define CR_A0_0 (0x00L<<23)
#define CR_A0_1 (0x01L<<23)
#define LINE_FREQ_60 (0x00L<<19) //滤波数率选择 缺省输入字
#define LINE_FREQ_50 (0x01L<<19) //输出字数率及相应滤波器特性乘以系数5/6
#define DATARATE_100 (0x00L<<11) //字数率 不同位就不同
#define DATARATE_50 (0x01L<<11)
#define DATARATE_25 (0x02L<<11)
#define DATARATE_12P5 (0x03L<<11)
#define DATARATE_6P25 (0x04L<<11)
#define DATARATE_3200 (0x08L<<11)
#define DATARATE_1600 (0x09L<<11)
#define DATARATE_800 (0x0aL<<11)
#define DATARATE_400 (0x0bL<<11)
#define DATARATE_200 (0x0cL<<11)
#define BIPOLAR_MODE (0x00L<<10) //极性选择双极性模式
#define UNIPOLAR_MODE (0x01L<<10)//极性选择单极性模式
#define TURN_OFF_300NA (0x00L<<9) //不激活电流源
#define TURN_ON_300NA (0x01L<<9) //激活电流源300ma
/******************子函数******************/
void SPI_CS5530_Init(void);
u8 CS5530_Read(void);
u32 CS5530_Read_Dword(void);
//u32 CS5530_Read_Dword(u32 Read_data);
void CS5530_Write(u8 Write_data);
//u8 AD_SPI_ReadWriteByte(u8 data);
void CS5530_Write_Dword(u32 Write_data);
void CS5530_Set(void);
void CS5530_Serial_Reset(void);
void CS5530_System_Reset(void);
u32 CS5530_ADC(void);
u32 CS5530_Result ( void );
u32 CS5530_ReadReg(u8 reg);
#endif
|
|