ADE7758驱动程序
时间:11-11
来源:互联网
点击:
- data,unsigned short addr)
- {
- memcpy(ADE_AdjustDataBuf+addr,&data,sizeof(unsigned short));
- }
- /**
- *读取校准数据缓冲区中数据
- */
- unsigned short ADE_ReadByte(unsigned short addr)
- {
- unsigned short data;
- memcpy(&data,ADE_AdjustDataBuf+addr,sizeof(unsigned short));
- return data;
- }
- /**
- *功能:保存校准数据
- */
- void ADE_AdjustSaveData(void)
- {
- unsigned char i;
- unsigned short temp_data;
- unsigned short temp_add=0;
- ADE_WriteByte(SAVE_OK,ADE_SET_ADDR);//写入标志
- temp_add+=2;
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.voltage[i];
- ADE_WriteByte(temp_data,ADE_SET_ADDR+temp_add);
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.current[i];
- ADE_WriteByte(temp_data,ADE_SET_ADDR+temp_add);
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.watt[i];
- ADE_WriteByte(temp_data,ADE_SET_ADDR+temp_add);
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.var[i];
- ADE_WriteByte(temp_data,ADE_SET_ADDR+temp_add);
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.va[i];
- ADE_WriteByte(temp_data,ADE_SET_ADDR+temp_add);
- temp_add+=2;
- }
- }
- /**
- *功能: 将缓冲区中的校准参数写入ADE7758
- *当确定校准参数的值后,便调用该函数,写数据写入ADE7758特定的寄存器中
- */
- void ADE_AdjustWriteValue(void)
- {
- unsigned char i;
- unsigned short temp_data;
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.voltage[i];
- if(temp_data<0x1000)//4096
- ADE_Write(ADD_AVRMSGAIN+i,temp_data,16);
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.current[i];
- if(temp_data<0x1000)//4096
- ADE_Write(ADD_AIGAIN+i,temp_data,16);
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.watt[i];
- if(temp_data<0x1000)//4096
- ADE_Write(ADD_AWG+i,temp_data,16);
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.var[i];
- if(temp_data<0x1000)//4096
- ADE_Write(ADD_AVARG+i,temp_data,16);
- }
- for(i=0;i<3;i++)
- {
- temp_data=adjusting.write_data.va[i];
- if(temp_data<0x1000)//4096
- ADE_Write(ADD_AVAG+i,temp_data,16);
- }
- }
- /**
- *功能:读出已保存的校准参数
- */
- void ADE_AdjustReadData(void)
- {
- unsigned char i;
- unsigned short temp_data;
- unsigned short temp_add=0;
- if(ADE_ReadByte(ADE_SET_ADDR)==SAVE_OK)
- {
- b_adjust=1;//ADE7758已经校准标志
- temp_add+=2;
- for(i=0;i<3;i++)
- {
- temp_data=ADE_ReadByte(ADE_SET_ADDR+temp_add);
- adjusting.write_data.voltage[i]=temp_data;
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=ADE_ReadByte(ADE_SET_ADDR+temp_add);
- adjusting.write_data.current[i]=temp_data;
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=ADE_ReadByte(ADE_SET_ADDR+temp_add);
- adjusting.write_data.watt[i]=temp_data;
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=ADE_ReadByte(ADE_SET_ADDR+temp_add);
- adjusting.write_data.var[i]=temp_data;
- temp_add+=2;
- }
- for(i=0;i<3;i++)
- {
- temp_data=ADE_ReadByte(ADE_SET_ADDR+temp_add);
- adjusting.write_data.va[i]=temp_data;
- temp_add+=2;
- }
- ADE_AdjustWriteValue();
- }
- }
- /**
- *功能:检测7758是否异常,有则修复
- */
- void ADE_Check7758(void)
- {
- unsigned short temp,temp1;
- if(!b_adjust)//ADE7758已经校准标志
- return;
- temp=ADE_ReadByte(ADE_SET_ADDR+2);
- temp1=ADE_Read(ADD_AVRMSGAIN,12)&0x0fff;
- if(temp!=temp1)//检测A相校准参数是否正确
- ADE_AdjustReadData();
- }
- /**
- *功能:将标志写入中断寄存器中,允许能量寄存器容量超出一半时产生中断
- */
- void ADE_WriteMask(void)
- {
- unsigned char data[3];
- unsigned char type;
- unsignedintwdata=0x00000700;//AEHF=1,VAEHF=1,低8位无用
- ADE_CS(0);
- type=ADD_MASK&0x7F;
- type=type|0x80;
- data[0]=type;
- ADE_SPIWrite(data,1);
- ADE_udelay();
- data[0]=(wdata>>16)&0xFF;
- data[1]=(wdata>>8)&0xFF;
- data[2]=wdata&0xFF;
- ADE_SPIWrite(data,3);
- ADE_CS(1);
- }
- /**
- *功能:清除校准数据
- */
- void ADE_Clean(void)
- {
- unsigned char i;
- for(i=0;i<3;i++)
- adjusting.write_data.voltage[i]=0;
- for(i=0;i<3;i++)
- adjusting.write_data.current[i]=0;
- for(i=0;i<3;i++)
- adjusting.write_data.watt[i]=0;
- for(i=0;i<3;i++)
- adjusting.write_data.var[i]=0;
- for(i=0;i<3;i++)
- adjusting.write_data.va[i]=0;
- ADE_AdjustWriteValue();
- memset(ADE_AdjustDataBuf,0,sizeof(ADE_AdjustDataBuf));/*校验数据缓冲区清0*/
- }
- /**
- *功能:7758初始化函数
- */
- void ADE_Init(void)
- {
- unsigned char TempData,i;
- ADE_WriteMask();//write interrupt masktoade7758
- TempData=(0xff&ADE_R
ADE7758驱动程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)