📄 att7022.c
字号:
}
Calibrate_7022(Adrs_7022_UgainC,m_byBuf);
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
#else CURRENT
I2C_Read(FM24C16addr2,12,4,m_byBuf);
i = (m_byBuf[0] + m_byBuf[1] + m_byBuf[2]);
if(m_byBuf[3]!=i)
{
m_byBuf[0] = 0x87;
m_byBuf[1] = 0xae;
m_byBuf[2] = 0x15;
}
Calibrate_7022(Adrs_7022_IgainA,m_byBuf);
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
I2C_Read(FM24C16addr2,16,4,m_byBuf);
i = (m_byBuf[0] + m_byBuf[1] + m_byBuf[2]);
if(m_byBuf[3]!=i)
{
m_byBuf[0] = 0xe7;
m_byBuf[1] = 0x24;
m_byBuf[2] = 0x75;
}
Calibrate_7022(Adrs_7022_IgainB,m_byBuf);
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
I2C_Read(FM24C16addr2,20,4,m_byBuf);
i = (m_byBuf[0] + m_byBuf[1] + m_byBuf[2]);
if(m_byBuf[3]!=i)
{
m_byBuf[0] = 0xe7;
m_byBuf[1] = 0x24;
m_byBuf[2] = 0x75;
}
Calibrate_7022(Adrs_7022_IgainC,m_byBuf);
i = 0xff;
while(i--);
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
#endif
watchDOG();
m_byBuf[0] = 0;
m_byBuf[1] = 0;
m_byBuf[2] = 1;
Calibrate_7022(Cmd_7022_EnableWD, m_byBuf); //disable write
i = 0xffff;
watchDOG();
while(i--)
{
NOP();
NOP();
NOP();
NOP();
}
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
DelyNms(200);
watchDOG();
}
unsigned char Calibrate_7022(uchar address,uchar *pointer)
{
CS_7022_PM = OUT_PORTST;
CS_7022 = 0;
NOP();
NOP();
if(Write_SPI(address+0X80) == 0)
return false;
if(Write_SPI(*pointer) == 0)
return false;
if(Write_SPI(*(pointer+1))== 0)
return false;
if(Write_SPI(*(pointer+2))== 0)
return false;
NOP();
NOP();
CS_7022 = 1;
return true;
}
unsigned char Readdata(uchar byAddress,uchar romAddr)
{
uchar m_byBuf[4];
I2C_Read(FM24C16addr2,romAddr,4,m_byBuf);
if(m_byBuf[3]==(m_byBuf[0] + m_byBuf[1] + m_byBuf[2]))
{
Calibrate_7022(byAddress, m_byBuf);
return true;
}
else return false;
}
//* --------------------------------------------------------------------------
//* Function : Reade2Calibrate
//* Describing :
//* In parameter : none
//* Out parameter : none
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
uchar Reade2Calibrate(uchar byAddress,uchar romAddr)
{
uchar m_byBuf[4];
//I2C_Read(FM24C16addr2,romAddr,4,m_byBuf);
if(m_byBuf[3]==(m_byBuf[0] + m_byBuf[1] + m_byBuf[2]))
{
Calibrate_7022(byAddress, m_byBuf);
return true;
}
else return false;
}
void Port_7022_INIT(void)
{
DOUT_7022_PM = INPUT_PORTST;
DIN_7022_PM = INPUT_PORTST;
SCK_7022_PM = INPUT_PORTST;
CS_7022_PM = INPUT_PORTST;
// SIG_7022_PM = INPUT_PORTST;
RESET_7022_PM= INPUT_PORTST;
/* DOUT_7022_PM = OUT_PORTST;
DIN_7022_PM = OUT_PORTST;
SCK_7022_PM = OUT_PORTST;
CS_7022_PM = OUT_PORTST;
SIG_7022_PM = OUT_PORTST;
RESET_7022_PM= OUT_PORTST; */
}
//* --------------------------------------------------------------------------
//* Function : Att7022_INIT
//* Describing : INIT 7022,PORT,RESET
//* In parameter : none
//* Out parameter : none
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
void Att7022_INIT(void)
{
uint i;
i = 0x7fff;
watchDOG();
while(i--); //需要喂狗
watchDOG();
Port_7022_INIT();
Calibrate_INIT();
}
//* --------------------------------------------------------------------------
//* Function : Read_SigST
//* Describing :
//* In parameter :
//* Out parameter : true is work right,false is work eeror.
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
uchar Read_SigST(void)
{
uchar i = 0xff;
// SIG_7022_PM = INPUT_PORTST; //SIG IS INPUT
if(Calibrate_bit) return true;
/* if(!SIG_7022)
{
watchDOG();
while(i--); //Watch_Dog();
watchDOG();
if(!SIG_7022) //Calibrate_INIT()
{
return false; //work eeror
}
}*/
return true; //work right
}
//--------------------------------------------------------------------------
//* Function : Read_ChkSum 校表数据的校验
//* Describing : Read the ChkSum of Calibrate Data
//* In parameter :
//* Out parameter :
//* Mend Note : none
//* Remark : ture is no problom, false is question
//* --------------------------------------------------------------------------
unsigned char Check_ChkSum(void)
{
uchar m_byBuf1[4];
uchar m_byBuf2[4];
uchar i;
Read_7022(Adrs_7022_ChkSum1,m_byBuf1);
I2C_Read(FM24C16addr2,24,4,m_byBuf2);
i = (m_byBuf2[0]+m_byBuf2[1]+m_byBuf2[2]);
if(m_byBuf2[3] == i)
{
/*if(memcmp(m_byBuf1,m_byBuf2,3)!=0)
{
return true;
}*/
if(m_byBuf2[2]!=m_byBuf1[2]) return false;
if(m_byBuf2[1]!=m_byBuf1[1]) return false;
if(m_byBuf2[0]!=m_byBuf1[0]) return false;
return true;
}
return false;
}
//* --------------------------------------------------------------------------
//* Function : Receive_Calibrate_Data
//* Describing : the data record in EEPROM,and use in ATT7022B
//* In parameter : The *p of 4 Byte
//* Out parameter : true is succeed false is lost,
//* Mend Note : none
//* Remark : none
//* --------------------------------------------------------------------------
unsigned char Receive_Calibrate_Data(unsigned char *p)
{
uchar m_byBuf[4];
uchar m_byBuf1[4];
uchar m_byControl;
uint i;
m_byControl = *p;
m_byBuf[0] = *(p+1);
m_byBuf[1] = *(p+2);
m_byBuf[2] = *(p+3);
if(m_byControl!=0x55)
{
m_byBuf1[0] = 0;
m_byBuf1[1] = 0;
m_byBuf1[2] = 0;
Calibrate_7022(Cmd_7022_EnableWD, m_byBuf1); //enable write
watchDOG();
i = 0xff;
while(i--);
Calibrate_7022(m_byControl, m_byBuf);
i = 0xff;
while(i--);
watchDOG();
m_byBuf1[0] = 0;
m_byBuf1[1] = 0;
m_byBuf1[2] = 1;
Calibrate_7022(Cmd_7022_EnableWD, m_byBuf1); //disable write
i = 0xffff;
watchDOG();
while(i--)
{
NOP();
NOP();
NOP();
NOP();
}
}
else
{
i = 50;
while(i--);
RESET_7022_PM = 0;
RESET_7022 = 0;
i = 30;
while(i--);
watchDOG();
RESET_7022 =1;
NOP();
DelyNms(10);
watchDOG();
m_byBuf[0] = 0;
m_byBuf[1] = 0;
m_byBuf[2] = 0;
Calibrate_7022(Cmd_7022_SoftReset, m_byBuf); //SoftReset
DelyNms(10);
}
watchDOG();
Read_7022(Adrs_7022_ChkSum1,m_byBuf);
m_byBuf[3] = m_byBuf[0] + m_byBuf[1] + m_byBuf[2];
I2C_Write(FM24C16addr2,24,4,m_byBuf);
watchDOG();
i = 0xff;
while(i--);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -