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

📄 main.c

📁 spi通讯方式的CS5530的驱动程序
💻 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 + -