📄 uart.c
字号:
// Output : none
// Description : C1
//********************************************************************
void C1Command(void)
{
static INT8U bCount = 0;
bCount++;
}
//********************************************************************
// Function : C2Command
// Input : none
// Output : none
// Description : C2,MM
//********************************************************************
void C2Command(void)
{
}
//********************************************************************
// Function : D1Command
// Input : none
// Output : none
// Description : D1
//********************************************************************
void D1Command(void)
{
SciBuffer_Tx_In(&stSciBuffer,'I');
SciBuffer_Tx_In(&stSciBuffer,' ');
SciBuffer_Tx_In(&stSciBuffer,'L');
SciBuffer_Tx_In(&stSciBuffer,'O');
SciBuffer_Tx_In(&stSciBuffer,'V');
SciBuffer_Tx_In(&stSciBuffer,'E');
SciBuffer_Tx_In(&stSciBuffer,' ');
SciBuffer_Tx_In(&stSciBuffer,'Y');
SciBuffer_Tx_In(&stSciBuffer,'O');
SciBuffer_Tx_In(&stSciBuffer,'U');
SciBuffer_Tx_In(&stSciBuffer,' ');
SciBuffer_Tx_In(&stSciBuffer,'!');
SciBuffer_Tx_In(&stSciBuffer,'\n');
UART_WRITE_DATA(&stSciBuffer);
}
//********************************************************************
// Function : D2Command
// Input : none
// Output : none
// Description : D2
//********************************************************************
extern INT16S wLineVoltRMS;
extern INT16S wLineVoltReal;
extern INT16S wLineVoltSample;
extern INT16U wLinePeriod;
extern INT16U wLinePeriodTemp;
extern INT16U wLineCaptureTime;
extern INT16U wLineCaptureTimeLast;
void D2Command(void)
{
//INT32U dwTest = 0xFFFFFFFF; //4294967295
sDataToNumber(wLineVoltSample,5,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,' ');
sDataToNumber(wLineVoltReal,5,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,' ');
sDataToNumber(wLineVoltRMS,5,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,' ');
sDataToNumber(wLineCaptureTime,5,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,'\n');
UART_WRITE_DATA(&stSciBuffer);
}
//********************************************************************
// Function : D3Command
// Input : none
// Output : none
// Description : D3
//********************************************************************
void D3Command(void)
{
INT32U dwTest = 0x12345678;
sDataToChar(dwTest,8,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,' ');
sDataToChar(dwTest,4,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,' ');
sDataToChar(dwTest,2,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,' ');
sDataToChar(dwTest,1,&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,'\n');
UART_WRITE_DATA(&stSciBuffer);
}
//********************************************************************
// Function : XXCommand
// Input : none
// Output : none
// Description : XX
//********************************************************************
void XXCommand(void)
{
sStringToChar("Received XX Command.\n",&stSciBuffer);
UART_WRITE_DATA(&stSciBuffer);
}
//********************************************************************
// Function : YYCommand
// Input : none
// Output : none
// Description : YY,MM
//********************************************************************
void YYCommand(void)
{
INT8U bChar[3];
bChar[0] = stSciBuffer.bRxBuffer[2];
bChar[1] = stSciBuffer.bRxBuffer[3];
bChar[2] = stSciBuffer.bRxBuffer[4];
sStringToChar("Received YY Command , ",&stSciBuffer);
if((bChar[0] == ',') && \
(bChar[1] >= '0') && (bChar[1] <= '9') &&\
(bChar[2] >= '0') && (bChar[2] <= '9'))
{
sStringToChar("Parameter : ",&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
SciBuffer_Tx_In(&stSciBuffer,'\n');
}
else
{
sStringToChar("Illegal Parameter !\n",&stSciBuffer);
}
UART_WRITE_DATA(&stSciBuffer);
}
//********************************************************************
// Function : ZZCommand
// Input : none
// Output : none
// Description : ZZ,MMM,NNN
//********************************************************************
void ZZCommand(void)
{
INT8U bChar[8];
bChar[0] = stSciBuffer.bRxBuffer[2];
bChar[1] = stSciBuffer.bRxBuffer[3];
bChar[2] = stSciBuffer.bRxBuffer[4];
bChar[3] = stSciBuffer.bRxBuffer[5];
bChar[4] = stSciBuffer.bRxBuffer[6];
bChar[5] = stSciBuffer.bRxBuffer[7];
bChar[6] = stSciBuffer.bRxBuffer[8];
bChar[7] = stSciBuffer.bRxBuffer[9];
sStringToChar("Received ZZ Command , ",&stSciBuffer);
if((bChar[0] == ',') && (bChar[4] == ',') && \
(bChar[1] >= '0') && (bChar[1] <= '9') && \
(bChar[2] >= '0') && (bChar[2] <= '9') && \
(bChar[3] >= '0') && (bChar[3] <= '9') && \
(bChar[5] >= '0') && (bChar[5] <= '9') && \
(bChar[6] >= '0') && (bChar[6] <= '9') && \
(bChar[7] >= '0') && (bChar[7] <= '9'))
{
sStringToChar("Parameter1 : ",&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,bChar[1]);
SciBuffer_Tx_In(&stSciBuffer,bChar[2]);
SciBuffer_Tx_In(&stSciBuffer,bChar[3]);
SciBuffer_Tx_In(&stSciBuffer,' ');
sStringToChar("Parameter2 : ",&stSciBuffer);
SciBuffer_Tx_In(&stSciBuffer,bChar[5]);
SciBuffer_Tx_In(&stSciBuffer,bChar[6]);
SciBuffer_Tx_In(&stSciBuffer,bChar[7]);
SciBuffer_Tx_In(&stSciBuffer,'\n');
}
else
{
sStringToChar("Illegal Parameters !\n",&stSciBuffer);
}
UART_WRITE_DATA(&stSciBuffer);
}
typedef void (*pFunc)(void);
pFunc CommandJobArray[8]=
{
C1Command,C2Command,D1Command,D2Command,
D3Command,XXCommand,YYCommand,ZZCommand
};
char wCommandTabArray[8][2]=
{
"C1", "C2",
"D1", "D2", "D3",
"XX", "YY", "ZZ",
};
//********************************************************************
// Function : SCI_Parsing
// Input : ptr-Pointer to SCI Buffer
// Output : none
// Description : Parse Received String and Execute Command
//********************************************************************
void SCI_Parsing(struct SCI_Buffer *ptr)
{
INT8S wLow;
INT8S wHigh;
INT8S wMid;
char wCommandBuffer[2];
wCommandBuffer[0] = ptr->bRxBuffer[0];
wCommandBuffer[1] = ptr->bRxBuffer[1];
wLow = 0;
wHigh = 8 - 1;
wMid = wHigh >> 1;
while(wLow <= wHigh && strncmp(wCommandTabArray[wMid],wCommandBuffer,2)!=0)
{
if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2) > 0)
{
wHigh = wMid - 1;
}
else
{
wLow = wMid + 1;
}
wMid = (wLow + wHigh) >> 1;
}
if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2)==0)
{
CommandJobArray[wMid]();
}
}
//********************************************************************
// Function : sbNumAsciiPick
// Input : dwData -Input Data,bPosition-Selected Index
// Output : Position Index in Decimal System
// Description : Extract out Selected Number in Decimal System
//********************************************************************
INT8U sbNumAsciiPick(INT32U dwData,INT8U bPosition)
{
INT8U bCode;
switch(bPosition)
{
case 1:
bCode = dwData % 10 + '0';
break;
case 2:
bCode = (dwData / 10) % 10 + '0';
break;
case 3:
bCode = (dwData / 100) % 10 + '0';
break;
case 4:
bCode = (dwData / 1000) % 10 + '0';
break;
case 5:
bCode = (dwData / 10000) % 10 + '0';
break;
case 6 :
bCode = (dwData / 100000) % 10 + '0';
break;
case 7 :
bCode = (dwData / 1000000) % 10 + '0';
break;
case 8 :
bCode = (dwData / 10000000) % 10 + '0';
break;
case 9 :
bCode = (dwData / 100000000) % 10 + '0';
break;
case 10 :
bCode = (dwData / 1000000000) % 10 + '0';
break;
default:
bCode = '0';
break;
}
return(bCode);
}
//********************************************************************
// Function : sbCharAsciiPick
// Input : dwData -Input Data,bPosition-Selected Index
// Output : Position Index in HEX System
// Description : Extract out Selected Char in HEX System
//********************************************************************
INT8U sbCharAsciiPick(INT32U dwData,INT8U bPosition)
{
INT8U bCode;
bCode = (dwData >> ((bPosition - 1) << 2)) & 0x0000000F;
if(bCode > 9)
{
bCode = bCode + 'A' - 0x0A;
}
else
{
bCode = bCode + '0';
}
return(bCode);
}
//********************************************************************
// Function : sDataToNumber
// Input : dwData -Input Data,bIndex - Length
// ptr-Pointer to SCI Buffer
// Output : none
// Description : Convert Data to Decimal Number
//********************************************************************
void sDataToNumber(INT32U dwData,INT8U bIndex,struct SCI_Buffer *ptr)
{
while(bIndex != 0)
{
SciBuffer_Tx_In(ptr,sbNumAsciiPick(dwData,bIndex--));
}
}
//********************************************************************
// Function : sDataToChar
// Input : dwData -Input Data,bIndex - Length
// ptr-Pointer to SCI Buffer
// Output : none
// Description : Convert Data to HEX Number
//********************************************************************
void sDataToChar(INT32U dwData,INT8U bIndex,struct SCI_Buffer *ptr)
{
if((bIndex >= 1) && (bIndex <= 8))
{
while(bIndex != 0)
{
SciBuffer_Tx_In(ptr,sbCharAsciiPick(dwData,bIndex--));
}
}
}
//********************************************************************
// Function : sStringToChar
// Input : string - pointer to char list
// ptr-Pointer to SCI Buffer
// Output : none
// Description : Convert String to Char
//********************************************************************
void sStringToChar(INT8U *string,struct SCI_Buffer *ptr)
{
while(*string != '\0')
{
SciBuffer_Tx_In(ptr,*string++);
}
}
//=========================END OF FILE=========================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -