📄 serial.c
字号:
{
ucTmp += *ip_Tmp - 'A' +10;
}
else
{
ucTmp += *ip_Tmp - '0';
}
if( ucTmp != ucRcvCheckSum)
{//校验错误
#ifdef NDS_UI_DEBUG
#ifdef NDS_UI_DEBUG_ENABLEDIS
SetCursorPos(22);
DisplayChar( ((ucTmp)>>4)+0x30 );
DisplayChar( ((ucTmp)&0x0f)+0x30 );
DisplayChar( ((ucRcvCheckSum)>>4)+0x30 );
DisplayChar( ((ucRcvCheckSum)&0x0f)+0x30 );
#endif
#endif
break;
}
/* while( 1 )
//deleted by XuYiBo,2002-Oct-18(没必要把所有的检测参数都送到LinkLayer)
{
*/
UISemaphore.ucExamAreaSem = 0x00; //request semaphore
if( UISemaphore.ucExamAreaSem == 0x00)
{
if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
{
UARTRcvFrame = UART_RcvBuffer;
}
if(ConnectFlag == TRUE)
{
UIDataArea.Exam_Buffer.ConnectFlag = TRUE;
}
else
{
UIDataArea.Exam_Buffer.ConnectFlag = FALSE;
}
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.Current[0] = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.Current[1] = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.ExciterLevel[0] = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.ExciterLevel[1] = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.TravelPow = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.ReflectPow = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.AmpTemp = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.RxTemp = ucTmp;
UARTRcvFrame = AscToHex(UARTRcvFrame,&ucTmp);
UIDataArea.Exam_Buffer.TxTemp = ucTmp;
UIDataArea.Exam_Buffer.RXIF_LOCK = (*UARTRcvFrame)&0xf;
if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
{
UARTRcvFrame = UART_RcvBuffer;
}
UIDataArea.Exam_Buffer.RXRF_LOCK = (*UARTRcvFrame)&0xf;
if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
{
UARTRcvFrame = UART_RcvBuffer;
}
UIDataArea.Exam_Buffer.TXIF_LOCK = (*UARTRcvFrame)&0xf;
if(++UARTRcvFrame == UART_RcvBuffer+UARTBUFFERLEN_RX)
{
UARTRcvFrame = UART_RcvBuffer;
}
UIDataArea.Exam_Buffer.TXRF_LOCK = (*UARTRcvFrame)&0xf;
UIDataArea.Exam_Buffer.ExamDirtyFlag = 1;
UISemaphore.ucExamAreaSem = 0xff; //release semaphore
// break; //deleted by XuYiBo,2002-Oct-18(没必要把所有的检测参数都送到LinkLayer)
}
/* deleted by XuYiBo,2002-Oct-18(没必要把所有的检测参数都送到LinkLayer)
UISemaphore.ucExamAreaSem = 0xff; //release semaphore
DelayCycle(16);
}
*/
break;
default:
#ifdef NDS_UI_DEBUG
#ifdef NDS_UI_DEBUG_ENABLEDIS
SetCursorPos(2);
DisplayChar( ((*UARTRcvFrame)>>4)+0x30 );
DisplayChar( ((*UARTRcvFrame)&0x0f)+0x30 );
#endif
#endif
break;
}
break;
case ACK_FRAME:
if(ucRcvLen == ACK_FRAME_LEN)
{//Length OK
ET2 = 0; //disable timer2
ucAckTimeout= 0;
EnableTran = TRUE;
ConnectFlag = TRUE;
ucNoAckCount= 0;
ET2 = 1; //enable timer2
}
break;
case NAK_FRAME:
if(ucRcvLen == NAK_FRAME_LEN)
{//Length OK
ET2 = 0; //disable timer2
ucAckTimeout = 0;
EnableTran = TRUE;
if( ++ucNoAckCount < MAX_REP)
{
UARTTransHead = UARTTransFrame;
StopTran = FALSE;
TI = 1;
}
else
{//重发次数超过“最大允许重发次数”
ucTmp = 255;
while( --ucTmp )
{
UISemaphore.ucExamAreaSem = 0x00; //request semaphore
if( UISemaphore.ucExamAreaSem == 0x00)
{
UIDataArea.Exam_Buffer.ConnectFlag = FALSE;
UIDataArea.Exam_Buffer.ExamDirtyFlag = 1;
UISemaphore.ucExamAreaSem = 0xff; //release semaphore
break;
}
UISemaphore.ucExamAreaSem = 0xff; //release semaphore
DelayCycle(16);
}
UISemaphore.ucExamAreaSem = 0xff; //release semaphore
ConnectFlag = FALSE;
UARTTransFrame = UARTTransHead;
ucNoAckCount = 0;
if(UARTTransHead != UARTTransTail)
{
StopTran = FALSE;
TI = 1;
}
}
ET2 = 1; //enable timer2
}
break;
case REQ_FRAME:
if(ucRcvLen == REQ_FRAME_LEN)
{//Length OK
WriteSerial(ucACK,ACK_FRAME_LEN); //应答ACK
break;
}
break;
default:
#ifdef NDS_UI_DEBUG
#ifdef NDS_UI_DEBUG_ENABLEDIS
SetCursorPos(0);
DisplayChar( ((*UARTRcvFrame)>>4)+0x30 );
DisplayChar( ((*UARTRcvFrame)&0x0f)+0x30 );
#endif
#endif
break;
}//switch(*UARTRcvFrame)
////////////////////////////////////////////////
}//if( ucTmp == ETX)
}//if( ucTmp != STX)
}//if( UARTRcvHead != UARTRcvTail)
}
/******************************************************************************
* *
* 将指定的ASCII转换成HEX *
* *
******************************************************************************/
unsigned char idata * AscToHex(unsigned char idata *Ptr_Uart,unsigned char data *ucHex)
{
*ucHex = *Ptr_Uart;
if( *ucHex >= 'a' )
{
*ucHex = *ucHex - 'a' +10;
}
else if( *ucHex >= 'A' )
{
*ucHex = *ucHex - 'A' +10;
}
else
{
*ucHex &= 0x0f;
}
*ucHex <<= 4;
if(++Ptr_Uart == UART_RcvBuffer+UARTBUFFERLEN_RX)
{
Ptr_Uart = UART_RcvBuffer;
}
if( *Ptr_Uart >= 'a' )
{
*ucHex += *Ptr_Uart - 'a' +10;
}
else if( *Ptr_Uart >= 'A' )
{
*ucHex += *Ptr_Uart - 'A' +10;
}
else
{
*ucHex += *Ptr_Uart - '0';
}
if(++Ptr_Uart == UART_RcvBuffer+UARTBUFFERLEN_RX)
{
Ptr_Uart = UART_RcvBuffer;
}
return Ptr_Uart;
}
/******************************************************************************
* *
* 从双口ram取出系统参数,转换成命令串并放入发送缓冲区 *
* *
******************************************************************************/
void GetSysPara(void)
{
unsigned char ucCRC,ucTmp;
if(UIDataArea.SysPara.ucSysparaDirtyFlag & UpFreq_UP)
{//UpLink frequency has been chang
WriteSerial(ucUpfreq,3);
ucCRC = ucUpfreq[0]^ucUpfreq[1]^ucUpfreq[2];
ucTmp = UIDataArea.SysPara.ucUpFreq[0]>>4;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = UIDataArea.SysPara.ucUpFreq[0]&0x0f;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = UIDataArea.SysPara.ucUpFreq[1]>>4;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = UIDataArea.SysPara.ucUpFreq[1]&0x0f;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = ucCRC>>4;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
WriteSerialByte(ucTmp);
ucTmp = ucCRC&0x0f;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
WriteSerialByte(ucTmp);
WriteSerialByte(ETX);
}
if(UIDataArea.SysPara.ucSysparaDirtyFlag & DwnFreq_UP)
{//DownLink frequency has been chang
WriteSerial(ucDwnfreq,3);
ucCRC = ucDwnfreq[0]^ucDwnfreq[1]^ucDwnfreq[2];
ucTmp = UIDataArea.SysPara.ucDownFreq[0]>>4;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = UIDataArea.SysPara.ucDownFreq[0]&0x0f;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = UIDataArea.SysPara.ucDownFreq[1]>>4;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = UIDataArea.SysPara.ucDownFreq[1]&0x0f;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
ucCRC ^= ucTmp;
WriteSerialByte(ucTmp);
ucTmp = ucCRC>>4;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
WriteSerialByte(ucTmp);
ucTmp = ucCRC&0x0f;
if(ucTmp>9)
{
ucTmp += 'A' - 10;
}
else
{
ucTmp += '0';
}
WriteSerialByte(ucTmp);
WriteSerialByte(ETX);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -