📄 att7022.c
字号:
#include "ATT7022.h"
#include "Pindefine.h"
#include "variable.h"
#include <string.h>
D7022 bank1 D_Sampling;
//#define Nop() asm("nop")
#define NOP() asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop")
unsigned char Read_7022(uchar address,uchar *pointer);
unsigned char Read_SPI(void);
unsigned char Write_SPI(uchar by_data);
unsigned char Conver_r( uchar n,uchar *pointer,uchar *p1,uchar num);
unsigned char Read_Voltage(unsigned int bank1 *p);
unsigned char Read_Current(unsigned int *p);
unsigned char Calibrate_7022(uchar address,uchar *pointer);
void DelyNms(unsigned int Nms);
uchar Reade2Calibrate(uchar byAddress,uchar EromAddr);
void Port_7022_INIT(void);
void Att7022_INIT(void);
unsigned char Read_SigST(void);
unsigned char Check_ChkSum(void);
void Calibrate_INIT(void);
unsigned char Readdata(uchar byAddress,uchar romAddr);
unsigned char Receive_Calibrate_Data(unsigned char *p);
extern unsigned char I2C_Read(unsigned char slvaddr,unsigned char address,unsigned char length,unsigned char *databuf);
extern unsigned char I2C_Write(unsigned char slvaddr,unsigned char address,unsigned char length,unsigned char *databuf);
unsigned char Calibrate_bit = 0;
extern void watchDOG(void);
void DelyNms(unsigned int Nms)
{
unsigned int i,j;
for(i = 0;i<Nms;i++)
{
j = 500;
while(j--);
}
}
//* --------------------------------------------------------------------------
//* Function : Read_7022
//* Describing : Read 3 byte from 7022 on spi.
//* In parameter : uchar Address,uchar *
//* Out parameter : bit---true/false
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
unsigned char Read_7022(uchar address,uchar *pointer)
{
CS_7022_PM = OUT_PORTST;
CS_7022 = 0;
NOP();
NOP();
Write_SPI(address);
*(pointer) = Read_SPI();
*(pointer+1) = Read_SPI();
*(pointer+2) = Read_SPI();
NOP();
NOP();
CS_7022 = 1;
return true;
}
//* --------------------------------------------------------------------------
//* Function : read_spi
//* Describing : Read a byte from 7022 on spi.
//* In parameter : none
//* Out parameter : uchar byte
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
uchar Read_SPI(void)
{
uchar by_data = 0;
uchar i = 0;
for(i = 0;i < 8;i++)
{
SCK_7022_PM = OUT_PORTST;
NOP();
SCK_7022 = 1;
NOP();
NOP();
by_data <<= 1;
DOUT_7022_PM = INPUT_PORTST;
if(DOUT_7022)by_data |= 1;
NOP();
NOP();
SCK_7022 = 0;
NOP();
}
return by_data;
}
//* --------------------------------------------------------------------------
//* Function : Write_Spi
//* Describing : Write a byte to 7022 on spi.
//* In parameter : uchar Data
//* Out parameter : bit---true/false
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
unsigned char Write_SPI(uchar by_data)
{
uchar i ;
uchar j=0;
for(i = 0 ; i < 8 ; i++ )
{
NOP();
j= by_data&0x80;
DIN_7022_PM = OUT_PORTST;
if(j)DIN_7022 = 1;
else DIN_7022 = 0;
NOP();
by_data <<= 1;
NOP();
SCK_7022_PM = OUT_PORTST;
SCK_7022 = 1;
NOP();
NOP();
NOP();
SCK_7022 = 0;
}
DIN_7022_PM = INPUT_PORTST;
if(DIN_7022)
{
DIN_7022_PM = OUT_PORTST;
DIN_7022 = 0;
}return true;
}
//* --------------------------------------------------------------------------
//* Function : Read_Voltage 2349600
//* Describing : Read the A B C 0 Voltage
//* In parameter : the * six byte buf
//* Out parameter : none
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
uchar Read_Voltage(unsigned int bank1 *p) //
{
uchar m_byBuf[3];
uint m_inTemp;
uchar by_address;
uchar i;
by_address = Adrs_7022_Ua;
for(i = 0;i<3;i++)
{
if(Read_7022(by_address++,m_byBuf)) //
{
Conver_r(13,m_byBuf,(uchar*)&m_inTemp,10);
if((m_inTemp > DATA_UABC_MAX))
{
return false;
}
*p = m_inTemp;
p++;
}
else return false;
}
return true;
}
//* --------------------------------------------------------------------------
//* Function : Read_Current
//* Describing : Read the A B C 0 Current
//* In parameter : the * six byte buf
//* Out parameter : none
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
uchar Read_Current(unsigned int *p)
{
uchar m_byBuf[3];
uchar by_address;
uint m_inTemp;
uchar i;
by_address = Adrs_7022_Ia;
for(i = 0;i<3;i++)
{
if(Read_7022(by_address++,m_byBuf)) //A
{
Conver_r(13,m_byBuf,(uchar*)&m_inTemp,100);
if(i<3)
{
if(m_inTemp > DATA_IABC_MAX)
{
return false;
}
}
*p = m_inTemp;
p++;
NOP();
}
else return false;
}
return true;
}
//* --------------------------------------------------------------------------
//* Function : Conver_r
//* Describing :
//* In parameter :
//* Out parameter : none
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
unsigned char Conver_r( uchar n,uchar *pointer,uchar *p1,uchar num)//
{
union{
ulong lg_Buf;
uchar by_Buf[4];
}un_4Buf;
un_4Buf.by_Buf[3] = 0;
un_4Buf.by_Buf[2] = (*pointer);
un_4Buf.by_Buf[1] = (*(pointer+1));
un_4Buf.by_Buf[0] = (*(pointer+2));
un_4Buf.lg_Buf = un_4Buf.lg_Buf*num;
un_4Buf.lg_Buf>>= n;
*p1 = un_4Buf.by_Buf[0];
*(p1+1) = un_4Buf.by_Buf[1];
return true;
}
void Calibrate_INIT(void)
{
uint i;
uchar m_byBuf[4];
watchDOG();
i = 50;
while(i--);
RESET_7022_PM = 0;
RESET_7022 = 0;
i = 30;
while(i--);
watchDOG();
RESET_7022 =1;
NOP();
DelyNms(5);
m_byBuf[0] = 0;
m_byBuf[1] = 0;
m_byBuf[2] = 0;
Calibrate_7022(Cmd_7022_SoftReset, m_byBuf); //SoftReset
NOP();
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
Calibrate_7022(Cmd_7022_ClearData, m_byBuf); //ClearData
i = 0xff;
while(i--);
Calibrate_7022(Cmd_7022_EnableWD, m_byBuf); //enable write
NOP();
i = 0xff;
while(i--);
watchDOG();
#ifdef VOLTAGE
I2C_Read(FM24C16addr2,0,4,m_byBuf);
i = (m_byBuf[0] + m_byBuf[1] + m_byBuf[2]);
if(m_byBuf[3]!=i)
{
m_byBuf[0] = 0xdc;//0xbc;
m_byBuf[1] = 0x28;//0x9c;
m_byBuf[2] = 0xf6;//0x7d;
}
Calibrate_7022(Adrs_7022_UgainA,m_byBuf);
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
I2C_Read(FM24C16addr2,4,4,m_byBuf);
i = (m_byBuf[0] + m_byBuf[1] + m_byBuf[2]);
if(m_byBuf[3]!=i)
{
m_byBuf[0] = 0xdb;//0xbc;
m_byBuf[1] = 0xb9;//0x9c;
m_byBuf[2] = 0x8d;//0x7d
}
Calibrate_7022(Adrs_7022_UgainB,m_byBuf);
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
I2C_Read(FM24C16addr2,8,4,m_byBuf);
i = (m_byBuf[0] + m_byBuf[1] + m_byBuf[2]);
if(m_byBuf[3]!=i)
{
m_byBuf[0] = 0xe7;//0xbc;
m_byBuf[1] = 0x24;//0x9c;
m_byBuf[2] = 0x75;//0x7d;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -