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

📄 5532ad.c

📁 CS5532初始化代码
💻 C
📖 第 1 页 / 共 2 页
字号:
void Hx_CS5532Reset(void)
{
	uint8	i,rd0,rd1;
	for(i=0;i<16;i++)				/*横向引伸计5532初始化序列*/
		{
		 rd0=Spi_hx_SRByte(0xff);
		}
	rd0=Spi_hx_SRByte(0xfe);
			 
	rd0=Spi_hx_SRByte(0x03);		/*横向引伸计5532系统复位,RS=1,写配置寄存器*/
	rd0=Spi_hx_SRByte(0x20);
	rd0=Spi_hx_SRByte(0x00);
	rd0=Spi_hx_SRByte(0x00);
	rd0=Spi_hx_SRByte(0x00);

	for(i=0;i<255;i++)
	{;}	
	rd0=0x00;						/*等待横向引伸计5532系统复位*/
	while(0==(rd0&0x10))			/*RV=0?*/
		{rd0=Spi_hx_SRByte(0x0b);
		 rd0=Spi_hx_SRByte(0x00);
		 rd1=Spi_hx_SRByte(0x00);
		 rd1=Spi_hx_SRByte(0x00);
		 rd1=Spi_hx_SRByte(0x00);
		 }
}
/*******************************************************************************************************
** 名称:Hx_CS5532Ini()
** 功能:初始化采样横向引伸计的CS5532,并启动纵向引伸计连续转换
** 入口参数:无
** 出口参数:无
** 全局变量:无
** 调用函数:无
********************************************************************************************************/
void Hx_CS5532Ini(void)
{
	uint8	rd0;
	rd0=Spi_hx_SRByte(0x03);		/*初始化横向引伸计5532配置寄存器*/
	rd0=Spi_hx_SRByte(0x00);
	rd0=Spi_hx_SRByte(0x40);
	rd0=Spi_hx_SRByte(0x00);
	rd0=Spi_hx_SRByte(0x00);
	
//	rd0=Spi_hx_SRByte(0x03);		/*初始化横向引伸计5532配置寄存器:VREF=2.5V*/
//	rd0=Spi_hx_SRByte(0x02);
//	rd0=Spi_hx_SRByte(0x40);
//	rd0=Spi_hx_SRByte(0x00);
//	rd0=Spi_hx_SRByte(0x00);


	rd0=Spi_hx_SRByte(0x05);		/*初始化横向引伸计5532通道设置寄存器*/
//	rd0=Spi_hx_SRByte(0x34);		/*物理通道1、64倍增益、1920Hz字速率*/
//	rd0=Spi_hx_SRByte(0xc0);		/*单极性模式*/
//	rd0=Spi_hx_SRByte(0x34);
//	rd0=Spi_hx_SRByte(0xc0);
	
//	rd0=Spi_hx_SRByte(0x34);		/*物理通道1、64倍增益、1920Hz字速率*/
//	rd0=Spi_hx_SRByte(0x80);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x34);
//	rd0=Spi_hx_SRByte(0x80);
	
//	rd0=Spi_hx_SRByte(0x30);		/*物理通道1、64倍增益、120Hz字速率*/
//	rd0=Spi_hx_SRByte(0x00);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x30);
//	rd0=Spi_hx_SRByte(0x00);

//	rd0=Spi_hx_SRByte(0x30);		/*物理通道1、64倍增益、60Hz字速率*/
//	rd0=Spi_hx_SRByte(0x80);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x30);
//	rd0=Spi_hx_SRByte(0x80);

//	rd0=Spi_hx_SRByte(0x31);		/*物理通道1、64倍增益、30Hz字速率*/
//	rd0=Spi_hx_SRByte(0x00);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x31);
//	rd0=Spi_hx_SRByte(0x00);

	rd0=Spi_hx_SRByte(0x31);		/*物理通道1、64倍增益、15Hz字速率*/
	rd0=Spi_hx_SRByte(0x80);		/*双极性模式*/
	rd0=Spi_hx_SRByte(0x31);
	rd0=Spi_hx_SRByte(0x80);

//	rd0=Spi_hx_SRByte(0x32);		/*物理通道1、64倍增益、7.5Hz字速率*/
//	rd0=Spi_hx_SRByte(0x00);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x32);
//	rd0=Spi_hx_SRByte(0x00);
	
//	rd0=Spi_hx_SRByte(0x1a);		/*物理通道1、64倍增益、7.5Hz字速率*/
//	rd0=Spi_hx_SRByte(0x00);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x1a);
//	rd0=Spi_hx_SRByte(0x00);
	
//	rd0=Spi_hx_SRByte(0x21);		/*物理通道1、16倍增益、15Hz字速率*/
//	rd0=Spi_hx_SRByte(0x80);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x21);
//	rd0=Spi_hx_SRByte(0x80);
	
//	rd0=Spi_hx_SRByte(0x22);		/*物理通道1、16倍增益、7.5Hz字速率*/
//	rd0=Spi_hx_SRByte(0x00);		/*双极性模式*/
//	rd0=Spi_hx_SRByte(0x22);
//	rd0=Spi_hx_SRByte(0x00);

	rd0=Spi_hx_SRByte(0xc0);		/*启动横向引伸计连续转换*/
}


/*******************************************************************************************************
* 名称:IRQ_Eint1()
* 功能:外部中断1中断服务程序,力值、引伸计A/D采样。
* 入口参数:无
* 出口参数:无
********************************************************************************************************/
void  __irq IRQ_Eint1(void)
{
	uint8	rd0,rd1,rd2,rd3,rd4;
	uint32	ad_cx,ad_tmp;
//	uint32	ad_cx;
//	int32	ad_tmp;
	
	ad_cx=(IO0PIN&LZ_CX);
	if(ad_cx==0)			/*力值AD转换结束*/
		{
		 VICIntEnClr=0x00008000;		/*禁能EINT1中断,准备读取力值转换结果*/
		 IO0CLR=LZ_SEL;					/*片选,采样力值*/
		 
		 for(rd0=0;rd0<8;rd0++)			/*延时*/
		 	{;}							/*读力值结果*/
		 rd0=Spi_lz_SRByte(0x00);		/*发8个脉冲清SDO标志*/
		 rd1=Spi_lz_SRByte(0x00);		/*读转换数据第1字节,高位在前*/
		 rd2=Spi_lz_SRByte(0x00);
		 rd3=Spi_lz_SRByte(0x00);
		 rd4=Spi_lz_SRByte(0x00);		/*读转换数据第4字节,低位在后*/
		 
		 ad_tmp=rd1*65536;				/*力值转换结果合并为32位无符号整型*/
		 ad_tmp=ad_tmp+rd2*256;
		 ad_tmp=ad_tmp+rd3;
		 
//		 if(ad_tmp>0x7fffff)
//		 	{
//		 	 ad_tmp=ad_tmp|0xff000000;
//		 	}

		 if(((syfa_jbcs_syfx==0x00)&&(lzcgq_lxsz!=0))||((syfa_jbcs_syfx==0xff)&&(lzcgq_yxsz!=0)))  
		 {  /*力值传感器拉向或压向设置为1,则拉向或压向的力值显示取反*/
		 	if(ad_tmp<800000)
		 	{
		 		ad_tmp=ad_tmp&0xfffffff0;
		 		ad_tmp=~(ad_tmp-1);
		 	}
//		 	if(ad_tmp>0x7fffff)
			else
		 	{
		 		ad_tmp=ad_tmp>>YYWS;
		 		ad_tmp=(~ad_tmp)+1;
		 		ad_tmp=ad_tmp&QCFH;
		 		ad_tmp=ad_tmp<<YYWS;
		 	}
		 }

		 lzad_avg=ad_tmp;		/*A/D输出字速率120Hz,每个控制周期采集一次*/

//		 lz_ad[lzad_cnt]=ad_tmp;		/*力值采样结果存放8次采样数组*/
//		 lzad_cnt=lzad_cnt+1;			/*力值采样计数器加1*/
//		 if(lzad_cnt==8)
//		 	{
//		 	 for(rd0=1;rd0<8;rd0++)		/*采样8次,按照从小到大排序*/
//		 	 	{
//		 	 	 for(rd1=0;rd1<(8-rd0);rd1++)
//		 	 	 	{
//		 	 	 	 if(lz_ad[rd1]>lz_ad[rd1+1])
//		 	 	 	 	{
//		 	 	 	 	 ad_tmp=lz_ad[rd1];
//		 	 	 	 	 lz_ad[rd1]=lz_ad[rd1+1];
//		 	 	 	 	 lz_ad[rd1+1]=ad_tmp;
//		 	 	 	 	}
//		 	 	 	}
//		 	 	}
//		 	 ad_tmp=0;					/*采样4次累加和清零,分别去掉2个最大最小*/
//		 	 for(rd0=2;rd0<6;rd0++)
//		 	 	{
//		 	 	 ad_tmp=ad_tmp+lz_ad[rd0];
//		 	 	}
//		 	 lzad_avg=ad_tmp/4;			/*4次采样平均值作为采样结果*/
//		 	 lzad_cnt=0;				/*8次采样计数器清零*/
//		 	}
		 
		 IO0SET=LZ_SEL;					/*禁止力值采样片选*/
		 VICIntEnable=0x00008000;		/*重新使能EINT1中断*/
		}	

	ad_cx=(IO0PIN&ZXYSJ_CX);
	if(ad_cx==0)			/*纵向引伸计AD转换结束*/
		{
		 VICIntEnClr=0x00008000;		/*禁能EINT1中断,准备读取纵向引伸计转换结果*/
		 IO0CLR=ZXYSJ_SEL;				/*片选,采样纵向引伸计*/
		 for(rd0=0;rd0<8;rd0++)			/*延时*/
			{;}							/*读纵向引伸计结果*/
		 rd0=Spi_zx_SRByte(0x00);		/*发8个脉冲清SDO标志*/
		 rd1=Spi_zx_SRByte(0x00);		/*读转换数据第1字节,高位在前*/
		 rd2=Spi_zx_SRByte(0x00);
		 rd3=Spi_zx_SRByte(0x00);
		 rd4=Spi_zx_SRByte(0x00);		/*读转换数据第4字节,低位在后*/
		 	 
		 ad_tmp=rd1*65536;				/*纵向引伸计转换结果合并为32位无符号整型*/
		 ad_tmp=ad_tmp+rd2*256;
		 ad_tmp=ad_tmp+rd3;
		 	 
		 zxysjad_avg=ad_tmp;		/*A/D输出字速率120Hz,每个控制周期采集一次*/

//		 zxysj_ad[zxysjad_cnt]=ad_tmp;	/*纵向引伸计采样结果存放8次采样数组*/
//		 zxysjad_cnt=zxysjad_cnt+1;		/*纵向引伸计采样计数器加1*/
//		 if(zxysjad_cnt==8)				/*采样8次,计算平均值*/
//		 	{
//		 	 for(rd0=1;rd0<8;rd0++)		/*采样8次,按照从小到大排序*/
//		 	 	{
//		 	 	 for(rd1=0;rd1<(8-rd0);rd1++)
//		 	 	 	{
//		 	 	 	 if(zxysj_ad[rd1]>zxysj_ad[rd1+1])
//		 	 	 	 	{
//		 	 	 	 	 ad_tmp=zxysj_ad[rd1];
//		 	 	 	 	 zxysj_ad[rd1]=zxysj_ad[rd1+1];
//		 	 	 	 	 zxysj_ad[rd1+1]=ad_tmp;
//		 	 	 	 	}
//		 	 	 	}
//		 	 	}
//		 	 ad_tmp=0;					/*采样4次累加和清零,分别去掉2个最大最小*/
//		 	 for(rd0=2;rd0<6;rd0++)
//		 	 	{
//		 	 	 ad_tmp=ad_tmp+zxysj_ad[rd0];
//		 	 	}
//		 	 zxysjad_avg=ad_tmp/4;			/*4次采样平均值作为采样结果*/
//		 	 zxysjad_cnt=0;					/*8次采样计数器清零*/
//		 	}
		 	 
		 IO0SET=ZXYSJ_SEL;				/*禁止纵向引伸计采样片选*/
		 VICIntEnable=0x00008000;		/*重新使能EINT1中断*/
		}

	ad_cx=(IO0PIN&HXYSJ_CX);
	if(ad_cx==0)			/*横向引伸计AD转换结束*/
		{
		 VICIntEnClr=0x00008000;		/*禁能EINT1中断,准备读取横向引伸计转换结果*/
		 IO0CLR=HXYSJ_SEL;				/*片选,采样横向引伸计*/
		 for(rd0=0;rd0<8;rd0++)			/*延时*/
			{;}							/*读横向引伸计结果*/
		 rd0=Spi_hx_SRByte(0x00);		/*发8个脉冲清SDO标志*/
		 rd1=Spi_hx_SRByte(0x00);		/*读转换数据第1字节,高位在前*/
		 rd2=Spi_hx_SRByte(0x00);
		 rd3=Spi_hx_SRByte(0x00);
		 rd4=Spi_hx_SRByte(0x00);		/*读转换数据第4字节,低位在后*/
		 	 
		 ad_tmp=rd1*65536;				/*横向引伸计转换结果合并为32位无符号整型*/
		 ad_tmp=ad_tmp+rd2*256;
		 ad_tmp=ad_tmp+rd3;
		 	 
		 hxysjad_avg=ad_tmp;		/*A/D输出字速率120Hz,每个控制周期采集一次*/

//		 hxysj_ad[hxysjad_cnt]=ad_tmp;	/*横向引伸计采样结果存放8次采样数组*/
//		 hxysjad_cnt=hxysjad_cnt+1;		/*横向引伸计采样计数器加1*/
//		 if(hxysjad_cnt==8)				/*采样8次,计算平均值*/
//		 	{
//		 	 for(rd0=1;rd0<8;rd0++)		/*采样8次,按照从小到大排序*/
//		 	 	{
//		 	 	 for(rd1=0;rd1<(8-rd0);rd1++)
//		 	 	 	{
//		 	 	 	 if(hxysj_ad[rd1]>hxysj_ad[rd1+1])
//		 	 	 	 	{
//		 	 	 	 	 ad_tmp=hxysj_ad[rd1];
//		 	 	 	 	 hxysj_ad[rd1]=hxysj_ad[rd1+1];
//		 	 	 	 	 hxysj_ad[rd1+1]=ad_tmp;
//		 	 	 	 	}
//		 	 	 	}
//		 	 	}
//		 	 ad_tmp=0;					/*采样4次累加和清零,分别去掉2个最大最小*/
//		 	 for(rd0=2;rd0<6;rd0++)
//		 	 	{
//		 	 	 ad_tmp=ad_tmp+hxysj_ad[rd0];
//		 	 	}
//		 	 hxysjad_avg=ad_tmp/4;		/*4次采样平均值作为采样结果*/
//		 	 hxysjad_cnt=0;				/*8次采样计数器清零*/
//		 	}
		 	 
		 IO0SET=HXYSJ_SEL;				/*禁止纵向引伸计采样片选*/
		 VICIntEnable=0x00008000;		/*重新使能EINT1中断*/
		}
	
	EXTINT=0x02;				/*清除EINT1中断标志*/
//	VPBDIV=0;
//	EXTMODE=EXTMODE|0x00;		/*重新设置EINT1中断为电平激活*/
//	EXTPOLAR=EXTPOLAR&0X0d;		/*重新设置EINT1中断为低电平有效*/
//	VPBDIV=0;
	VICVectAddr=0x00;
}

/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
int main(void)
{
	/*中断设置*/
	 VICVectCntl4=0x20|15;			/*EINT1中断通道(A/D采样)分配到IRQ slot 4*/
	 VICVectAddr4=(int)IRQ_Eint1;	/*设置EINT1向量地址*/
	 EXTINT=0x02;
	 Lz_CS5532Reset();			/*复位力值A/D*/
	 Lz_CS5532Ini();			/*初始化采样力值的CS5532*/
	 lzad_cnt=0;				/*力值8次采样计数器清零*/
	 lzad_avg=0;				/*力值8次采样平均,实际AD转换为24位,有效位数由字速率确定*/
	 VICIntEnable=0x00008000;	/*使能EINT1中断,力*/

}

⌨️ 快捷键说明

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