NULL
This commit is contained in:
191
user/Protocol/HWI2CProtocol.c
Executable file
191
user/Protocol/HWI2CProtocol.c
Executable file
@@ -0,0 +1,191 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
|
||||
//*************************************************************************************
|
||||
#ifndef ENABLE_USER_I2C
|
||||
#pragma message("[undefined] ENABLE_USER_I2C")
|
||||
#elif(ENABLE_USER_I2C)
|
||||
//*************************************************************************************
|
||||
/********************************************************************************************************
|
||||
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CResetProcess(void)
|
||||
{
|
||||
I2CData.txCounter = 0; // <20><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͺͽ<CDBA><CDBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
I2CData.rxCounter = 0;
|
||||
I2CData.state.Command = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
I2CData.state.WriteData = 0;
|
||||
I2CData.state.ReceivedAdr = 0;
|
||||
I2CData.state.CommError = 1;
|
||||
}
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>START+ADDRESS+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CStartReadProcess(void)
|
||||
{
|
||||
I2CData.state.ReceivedAdr = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
I2CData.state.WriteData = 0;
|
||||
I2CData.txCounter = 0; // <20><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͺͽ<CDBA><CDBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
I2CData.rxCounter = 0;
|
||||
}
|
||||
|
||||
void SetI2CDataToRead(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>START+ADDRESS+д<><D0B4><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CStartWriteProcess(void)
|
||||
{
|
||||
I2CData.txCounter = 0; // <20><><EFBFBD>³<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͺͽ<CDBA><CDBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
I2CData.rxCounter = 0;
|
||||
|
||||
I2CData.state.ReceivedAdr = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־
|
||||
I2CData.state.WriteData = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CReceiveProcess(void)
|
||||
{
|
||||
TypeWord wtData;
|
||||
|
||||
if(I2CData.rxCounter == SMB_CMD_READ){
|
||||
// Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ2<D6B7><32><EFBFBD>ֽڽ<D6BD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// if(I2CData.state.WriteData) return;
|
||||
I2CData.state.ReceivedAdr = 1;
|
||||
wtData.Byte[1] = I2CData.rxData[0];
|
||||
wtData.Byte[0] = I2CData.rxData[1];
|
||||
I2CData.readAddr = wtData.Word;
|
||||
I2CReadDataFromMemory();//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD>ŵ<EFBFBD>I2CData.RxData
|
||||
I2CDataCopyToSendBuf(); //<2F>õ<EFBFBD> I2CData.txData
|
||||
}
|
||||
else if(I2CData.rxCounter > 200){
|
||||
I2CData.rxCounter = 0;
|
||||
I2CData.state.CommError = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CTransmitProcess(void)
|
||||
{
|
||||
if(I2CData.txCounter < 3) return;
|
||||
|
||||
I2CData.txCounter = 0;
|
||||
I2CData.regCounter++;
|
||||
if(I2CData.regCounter >= I2CData.regLen) I2CReadDataFromMemory();
|
||||
|
||||
I2CDataCopyToSendBuf();
|
||||
}
|
||||
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѷ<EFBFBD>ȡ<EFBFBD>ļĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CDataCopyToSendBuf(void)
|
||||
{
|
||||
I2CData.txData[0] = I2CData.rxData[I2CData.Index++];
|
||||
I2CData.txData[1] = I2CData.rxData[I2CData.Index++];
|
||||
I2CData.txData[2] = I2CWordCrc(I2CData.txData[0], I2CData.txData[1]);
|
||||
|
||||
I2CData.txCounter = 0;
|
||||
}
|
||||
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>I2C<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CReadDataFromMemory(void)
|
||||
{
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
||||
// <20><>2<EFBFBD><32><EFBFBD>ֽڶ<D6BD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>>2<><32><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>ֽڸ<D6BD><DAB8><EFBFBD>
|
||||
MBBuf.StartAddr = I2CData.readAddr;
|
||||
MBBuf.ByteNumber = 2;
|
||||
MBBuf.RxPointer = &I2CData.rxData[2]; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>2<EFBFBD><32>ʼ<EFBFBD>ţ<EFBFBD>0<EFBFBD><30>1<EFBFBD><31><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD>յ<EFBFBD><D5B5>ĵ<EFBFBD>ַ
|
||||
MBBuf.Index = 0;
|
||||
ModBusReadMultiByte();
|
||||
|
||||
// if(MBBuf.StartAddr == 0x0081){
|
||||
// I2CData.rxData[2] = 0x00;
|
||||
// I2CData.rxData[3] = 0x02;
|
||||
// }
|
||||
// else{
|
||||
// I2CData.rxData[2] = 0x27;
|
||||
// I2CData.rxData[3] = 0x10;
|
||||
// }
|
||||
// MBBuf.DataByte = 2;
|
||||
|
||||
MBBuf.DataByte >>= 1;
|
||||
I2CData.regLen = MBBuf.DataByte;
|
||||
I2CData.readAddr += MBBuf.DataByte; // <20><>һ<EFBFBD>ζ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݵĵ<DDB5>ַ
|
||||
I2CData.regCounter = 0;
|
||||
I2CData.Index = 2;
|
||||
}
|
||||
|
||||
/********************************************************************************************************
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻ<EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
void I2CDataProcessing(void)
|
||||
{
|
||||
TypeWord wtData;
|
||||
u16 I, wtIndex=0;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
I2CData.state.ReceivedData = 0;
|
||||
systemProcess.Bit.I2CHandle = 0;
|
||||
//----------------------------------------------------------------------------
|
||||
if(I2CData.rxCounter < 5) return;
|
||||
disable_interrupts();
|
||||
//----------------------------------------------------------------------------
|
||||
//д<>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MBBuf.ByteNumber = (I2CData.rxCounter - 2) / 3;
|
||||
MBBuf.ByteNumber <<= 1;
|
||||
|
||||
wtData.Byte[1] = I2CData.rxData[0];
|
||||
wtData.Byte[0] = I2CData.rxData[1];
|
||||
MBBuf.StartAddr = wtData.Word;
|
||||
MBBuf.EndAddr = MBBuf.StartAddr + MBBuf.ByteNumber;
|
||||
|
||||
for(I = 0; I < MBBuf.ByteNumber; I++)
|
||||
{
|
||||
wtData.Byte[1] = I2CData.rxData[3*I+2];
|
||||
wtData.Byte[0] = I2CData.rxData[3*I+3];
|
||||
//wtData.Byte[2] = I2CData.rxData[3*I+4];
|
||||
//if(wtData.Byte[2] != CRC8_Talbe_I2CWord(wtData.Word[0])) {
|
||||
if(I2CData.rxData[3*I+4] != I2CWordCrc(wtData.Byte[1],wtData.Byte[0])) {
|
||||
enable_interrupts();
|
||||
return;
|
||||
}
|
||||
|
||||
I2CData.rxData[wtIndex++] = wtData.Byte[1];
|
||||
I2CData.rxData[wtIndex++] = wtData.Byte[0];
|
||||
}
|
||||
|
||||
MBBuf.Index = 0;
|
||||
MBBuf.RxPointer = I2CData.rxData;
|
||||
//ModBusWriteMultiByte();
|
||||
enable_interrupts();
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#endif
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user