📄 main.c
字号:
/*******************************************************************************
数字传感器AD-Box转换模块
--------------------------------------------------------------------------------
通讯规则:
1:时钟4.9152 MHz/波特率9600/8个数据位/1个停止位/
2:通讯连接采用硬件MAX485,双向单工
3:每个上行/下行的数据包的字节个数都是不一样的 ( 通讯数据量 )
4:数据采用中断接收 + 查询发送的方式
5:总是由主机向从机发送一个数据包,从机收到数据包后校验正确向主机回复一个数据包
6:采用多ADC共用MCU
7:采用握手应答机制
********************************************************************************/
#include "config.h"
#define cs5530_clk_h (PORTB|=(1<<PB1))
#define cs5530_clk_l (PORTB&=~(1<<PB1))
#define cs5530_cs_h (PORTB|=(1<<PB0))
#define cs5530_cs_l (PORTB&=~(1<<PB0))
#define cs5530_in_h (PORTB|=(1<<PB2))
#define cs5530_in_l (PORTB&=~(1<<PB2))
#define cs5530_out (PINB&0x08)
/*********************************************************************************************************
* 函数名称 : void cs5530_write(uint8_t write_cs5530data)
* 功能描述 : cs5530写一个字节
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void cs5530_write(uint8_t write_cs5530data)
{
cs5530_cs_l;
SPDR=write_cs5530data;
while(!(SPSR & (1<<SPIF)));
cs5530_cs_h;
}
/*********************************************************************************************************
* 函数名称 : uint8_t cs5530_read(void)
* 功能描述 : cs5530读一个字节
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
uint8_t cs5530_read(void)
{ uint8_t ad_number;
cs5530_cs_l;
SPDR=0xFF; ///先发送一个空操作指令
while(!(SPSR & (1<<SPIF)));
ad_number=SPDR; //读SPI
SPSR=0x00;
cs5530_cs_h;
return ad_number;
}
/*********************************************************************************************************
* 函数名称 : uint32_t CS5530_Read_Dword ( void )
* 功能描述 : 读一个双字
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
uint32_t CS5530_Read_Dword ( void )
{
unsigned long return_data;
return_data=cs5530_read();
return_data<<=8;
return_data+=cs5530_read();
return_data<<=8;
return_data+=cs5530_read();
return_data<<=8;
return_data+=cs5530_read();
return_data=return_data>>9;
return (return_data);
}
/*********************************************************************************************************
* 函数名称 : uint8_t cs5530_check_over(void)
* 功能描述 : 读cs5530的转换完标志
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
uint8_t cs5530_check_over(void)
{
uint8_t return_data;
cs5530_cs_h;
asm("nop");
cs5530_clk_l;
asm("nop");
asm("nop");
cs5530_cs_l;
asm("nop");
asm("nop");
asm("nop");
return_data=cs5530_out;
return_data>>=3;
cs5530_cs_h;
return (return_data);
}
/*********************************************************************************************************
* 函数名称 : void CS5530_Write_Dword ( uint32_t ld ) [5],uint8_t add )
* 功能描述 : 向cs5530写一个双字
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void CS5530_Write_Dword ( uint32_t ld )
{
Format_temp.Data_32 = ld;//
cs5530_write ( Format_temp.Data_8[0] ) ;//
cs5530_write ( Format_temp.Data_8[1] ) ;
cs5530_write ( Format_temp.Data_8[2] ) ;
cs5530_write ( Format_temp.Data_8[3] ) ;
}
/*********************************************************************************************************
* 函数名称 : void CS5530_Serial_Reset ( void ) [5],uint8_t add )
* 功能描述 : 写15个初始命令
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void CS5530_Serial_Reset ( void ) //1
{
uint8_t i = 18;
while ( i-- )
cs5530_write ( SYNC1 ) ;
cs5530_write ( SYNC0 ) ;
}
/*********************************************************************************************************
* 函数名称 : void CS5530_System_Reset ( void ) [5],uint8_t add )
* 功能描述 :配置寄存器
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void CS5530_System_Reset ( void ) //
{
uint8_t read_data,cs5530_rst;
cs5530_write ( CMD_WRITE + REG_CONFIG ) ; //写配置寄存器
CS5530_Write_Dword ( SYSTEM_RESET ) ; //初始化 0x20000000
delay_1ms ( ) ;
cs5530_write(CMD_READ + REG_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)
{
cs5530_write(CMD_READ + REG_CONFIG);//读配置寄存器//
read_data=cs5530_read();
cs5530_rst=read_data;
read_data=cs5530_read();
read_data=cs5530_read();
read_data=cs5530_read();
}
cs5530_write ( CMD_WRITE + REG_CONFIG ) ; //配置寄存器
CS5530_Write_Dword ( NORMAL_MODE ) ; //0x00000000
}
/*********************************************************************************************************
* 函数名称 : void CS5530_Config ( void [5],uint8_t add )
* 功能描述 : 配置寄存器
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void CS5530_Config ( void ) //3
{
cs5530_write ( CMD_WRITE + REG_CONFIG ) ; ///写配置寄存器 DATARATE_800 LINE_FREQ_50DATARATE_960 UNIPOLAR_MODEDATARATE_6P25
CS5530_Write_Dword ( NORMAL_MODE + VREF_HIGH + CR_A0_0 + CR_A1_0 + SHORT_INPUTS + LINE_FREQ_60 +DATARATE_3200 + BIPOLAR_MODE + TURN_OFF_300NA ) ;
cs5530_write ( START_CONTINUOUS + NORMAL_CONVERSION ) ;//连续转换START_SINGLE
}
/*********************************************************************************************************
* 函数名称 : CS5530_Result ( void )
* 功能描述 : 读转换结果
*
* 输入参数 : 无
*
* 返回值 : 无
* 全局变量 : 无
* 调用函数 : 无
*
* 作 者 : ligang
* 日 期 : 2008-12-09
*--------------------------------------------------------------------------------------------------------
* 修 改 :
* 日 期 :
* 描 述 :
*--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
uint32_t CS5530_Result ( void )
{
cs5530_write ( NULL_BYTE ) ;
return ( uint32_t ) ( CS5530_Read_Dword ( ) ) ;//
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -