📄 probe_rs232.c
字号:
#endif
ProbeRS232_InitTarget(baud_rate); /* Initialize target specific code */
}
/*
*********************************************************************************************************
*********************************************************************************************************
** Task
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* ProbeRS232_Task()
*
* Description : The task whcih parses the received packet, forms a response, and begins transmission.
*
* Argument(s) : p_arg The argument passed to 'ProbeRS232_Task()' by 'ProbeRS232_OS_Task()'.
*
* Return(s) : none.
*********************************************************************************************************
*/
#if (PROBE_RS232_PARSE_TASK > 0)
void ProbeRS232_Task (void *p_arg)
{
CPU_INT16U len;
(void)p_arg;
while (DEF_TRUE) {
ProbeRS232_OS_Pend(); /* Wait for a packet to be received */
len = ProbeRS232_ParseRxPkt(); /* Parse packet and formulate a response */
if (len > 0) { /* If we have a response */
ProbeRS232_TxLen = len;
ProbeRS232_TxStart();
}
}
}
#endif
/*
*********************************************************************************************************
*********************************************************************************************************
** Rx and Tx Handlers
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* ProbeRS232_RxHandler()
*
* Description : Called when a byte is received.
*
* Argument(s) : rx_data Received data byte.
*
* Return(s) : none.
*********************************************************************************************************
*/
void ProbeRS232_RxHandler (CPU_INT08U rx_data)
{
#if (PROBE_COM_STAT_EN > 0)
ProbeRS232_RxCtr++;
#endif
switch (ProbeRS232_RxState) {
case PROBE_RS232_RX_STATE_SD0: /* Receive the start first start delimiter (SD0) */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD0) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD1;
ProbeRS232_RxBufClr();
}
break;
case PROBE_RS232_RX_STATE_SD1: /* Receive the start second start delimiter (SD1) */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD1) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD2;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
break;
case PROBE_RS232_RX_STATE_SD2: /* Receive the start third start delimiter (SD2) */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD2) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD3;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
break;
case PROBE_RS232_RX_STATE_SD3: /* Receive the start fourth start delimiter (SD3) */
if (rx_data == PROBE_RS232_PROTOCOL_RX_SD3) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_LEN1;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
break;
case PROBE_RS232_RX_STATE_LEN1: /* Receive the first length byte */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum = rx_data;
#endif
ProbeRS232_RxRemainLen = rx_data;
ProbeRS232_RxState = PROBE_RS232_RX_STATE_LEN2;
break;
case PROBE_RS232_RX_STATE_LEN2: /* Receive the second length byte */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum += rx_data;
#endif
ProbeRS232_RxRemainLen |= rx_data << 8;
if ((ProbeRS232_RxRemainLen == 0) || (ProbeRS232_RxRemainLen > PROBE_RS232_RX_BUF_SIZE)) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0; /* ... Cannot handle a packet of this size */
} else {
ProbeRS232_RxLen = ProbeRS232_RxRemainLen;
ProbeRS232_RxState = PROBE_RS232_RX_STATE_PAD1;
}
break;
case PROBE_RS232_RX_STATE_PAD1: /* Receive the first padding byte */
ProbeRS232_RxState = PROBE_RS232_RX_STATE_PAD2;
break;
case PROBE_RS232_RX_STATE_PAD2: /* Receive the second padding byte */
ProbeRS232_RxState = PROBE_RS232_RX_STATE_DATA;
break;
case PROBE_RS232_RX_STATE_DATA: /* Receive the data */
ProbeRS232_RxStoINT8U(rx_data);
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum += rx_data;
#endif
if (--ProbeRS232_RxRemainLen == 0) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_CHKSUM;
}
break;
case PROBE_RS232_RX_STATE_CHKSUM: /* Receive the checksum */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
ProbeRS232_RxChkSum += rx_data;
if ((ProbeRS232_RxChkSum & 0xFF) == 0x00) {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_ED;
} else {
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
}
#else
ProbeRS232_RxState = PROBE_RS232_RX_STATE_ED;
#endif
break;
case PROBE_RS232_RX_STATE_ED: /* Receive the end delimiter */
if (rx_data == PROBE_RS232_PROTOCOL_RX_ED) {
ProbeRS232_RxPkt(); /* ... Parse received packet */
}
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
break;
default:
ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
break;
}
}
/*
*********************************************************************************************************
* ProbeRS232_TxHandler()
*
* Description : Called when a byte has been transmitted.
*
* Argument(s) : none.
*
* Return(s) : none.
*********************************************************************************************************
*/
void ProbeRS232_TxHandler (void)
{
CPU_INT08U tx_data;
#if (PROBE_COM_STAT_EN > 0)
if ((ProbeRS232_TxState != PROBE_RS232_TX_STATE_SD0) ||
(ProbeRS232_TxLen > 0 )) {
ProbeRS232_TxCtr++;
}
#endif
switch (ProbeRS232_TxState) {
case PROBE_RS232_TX_STATE_SD0:
if (ProbeRS232_TxLen > 0) { /* If packet is waiting to be sent */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD0); /* ... Transmit start first start delimiter (SD0) */
ProbeRS232_TxActiveFlag = DEF_TRUE; /* ... Transmit in process */
ProbeRS232_TxState = PROBE_RS232_TX_STATE_SD1;
ProbeRS232_TxBufRdIx = 0;
} else { /* If no packet is waiting to be sent */
ProbeRS232_TxActiveFlag = DEF_FALSE; /* ... Transmission not active */
ProbeRS232_TxIntDis(); /* ... Disable transmit interrupts */
}
break;
case PROBE_RS232_TX_STATE_SD1: /* Transmit start second start delimiter (SD1) */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD1);
ProbeRS232_TxState = PROBE_RS232_TX_STATE_SD2;
break;
case PROBE_RS232_TX_STATE_SD2: /* Transmit start third start delimiter (SD2) */
ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -