📄 5532ad.c
字号:
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 + -