LPC55S16 LIN basic usage example

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

LPC55S16 LIN basic usage example

LPC55S16 LIN basic usage example

INTRODUCTION

The goal of this example is to demonstrate basic LIN communication between two devices where one active as Master another as Slave. In this case, the two devices used are LPC55S16 EVK's.

LIN master will send a specific publisher frame and a subscriber frame, the LIN slave will detect the master data and feedback the data accordingly.

This article will mainly focus on the software side, for hardware please refer https://community.nxp.com/t5/LPC-Microcontrollers-Knowledge/LPC54608-LIN-master-basic-usage-sharing/....

LIN MASTER EXAMPLE

LIN master sends the LIN publisher data and the subscriber ID data, the software code is modified from the SDK_2.8.2_LPCXpresso55S16 usart_interrupt_rb_transfer project, the detailed code is as follows:

/* USART callback */
void FLEXCOMM3_IRQHandler()
{
	  if(DEMO_USART->STAT & USART_STAT_RXBRK_MASK) // detect LIN break
	     {
	       Lin_BKflag = 1;
	       cnt = 0;
	       state = RECV_DATA;
	       DisableLinBreak;
	     }
	    if((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART))
	     {
	       USART_ClearStatusFlags(DEMO_USART,kUSART_TxError | kUSART_RxError);
	    	 rxbuff[cnt] = USART_ReadByte(DEMO_USART);;

	         switch(state)
	         {
	            case RECV_SYN:
	                          if(0x55 == rxbuff[cnt])
	                          {
	                              state = RECV_PID;
	                          }
	                          else
	                          {
	                              state = IDLE;
	                              DisableLinBreak;
	                          }
	                          break;
	            case RECV_PID:
	                          if(0xAD == rxbuff[cnt])
	                          {
	                              state = SEND_DATA;
	                          }
	                          else if(0XEC == rxbuff[cnt])
	                          {
	                              state = RECV_DATA;
	                          }
	                          else
	                          {
	                              state = IDLE;
	                              DisableLinBreak;
	                          }
	                          break;
	            case RECV_DATA:
	                         Sub_rxbuff[recdatacnt++]= rxbuff[cnt];
	                          if(recdatacnt >= 3) // 2 Bytes data + 1 Bytes checksum
	                          {
	                              recdatacnt=0;
	                              state = RECV_SYN;
	                              EnableLinBreak;
	                          }
	                          break;
	            case SEND_DATA:
	                          recdatacnt++;
	                          if(recdatacnt >= 4) // 2 Bytes data + 1 Bytes checksum
	                          {
	                              recdatacnt=0;
	                              state = RECV_SYN;
	                              EnableLinBreak;
	                          }
	                          break;
	         default:break;
	         }
	         cnt++;
	     }


	    /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
	      exception return operation might vector to incorrect interrupt */
	#if defined __CORTEX_M && (__CORTEX_M == 4U)
	    __DSB();
	#endif
}

void Lin_Master_Publisher(void)
{
    unsigned int i=0;
    unsigned char ch =0xa0;//dummy byte
//===============================LIN master send=====================

       DEMO_USART->CTL |= USART_CTL_TXBRKEN_MASK;//enable TX break;
       while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
      	 USART_WriteBlocking(DEMO_USART,&ch,1);//dummy data

            break;  //just send one byte, otherwise, will send 16 bytes
        }
       DEMO_USART->CTL &= ~(USART_CTL_TXBRKEN_MASK); //disable TX break

       // Send the sync byte 0x55.
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X55);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
       //protected ID
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0Xad);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
        //Data1
       while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X01);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
        //Data2
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X02);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
        //Data3
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X03);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
        // checksum byte
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X4c);//0X4c
            break;  //just send one byte, otherwise, will send 16 bytes
        }

}

void Lin_Master_Subscribe(void)
{
  unsigned int i=0;

unsigned char ch=0xf0;//dummy byte

     DEMO_USART->CTL |= USART_CTL_TXBRKEN_MASK;//enable TX break;
     while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
      {
    	 USART_WriteBlocking(DEMO_USART,&ch,1);

          break;  //just send one byte, otherwise, will send 16 bytes
      }
       DEMO_USART->CTL &= ~(USART_CTL_TXBRKEN_MASK); //disable TX break

       // Send the syncy byte 0x55.
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X55);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
       //protected ID
        while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
        {
            USART_WriteByte(DEMO_USART, 0X3C);
            break;  //just send one byte, otherwise, will send 16 bytes
        }
	       state = RECV_DATA;
}

The main task here was to generate and detect the LIN break field.

If one look closely, to generate the LIN break field in publisher and subscriber frame, we first set the Tx break and then send a dummy byte and then disable the Tx break. The function used to send the dummy byte is USART_WriteBlocking whereas USART_WriteByte is used to send data other than dummy byte. This is because if we use USART_WriteByte during dummy byte then it was not a continuous low as in the other case. I still need to find the reason for this, will update here once done.

 

LIN SLAVE EXAMPLE

LIN Slave receives the LIN publisher data and the subscriber ID data from Master and respond back id required, the software code is modified from the SDK_2.8.2_LPCXpresso55S16 usart_interrupt_rb_transfer project, the detailed code is as follows:

void FLEXCOMM3_IRQHandler()
{
 if(DEMO_USART->STAT & USART_STAT_RXBRK_MASK) // detect LIN break
	     {
	       Lin_BKflag = 1;
	       cnt = 0;
	       state = RECV_SYN;
	       DisableLinBreak;
	     }

	    if((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(DEMO_USART))
	     {
	       USART_ClearStatusFlags(DEMO_USART,kUSART_TxError | kUSART_RxError);
	    	 rxbuff[cnt] = USART_ReadByte(DEMO_USART);;

	         switch(state)
	         {
	            case RECV_SYN:
	                          if(0x55 == rxbuff[cnt])
	                          {
	                              state = RECV_PID;
	                          }
	                          else
	                          {
	                              state = IDLE;
	                              DisableLinBreak;
	                          }
	                          break;
	            case RECV_PID:
	                          if(0xAD == rxbuff[cnt])
	                          {
	                              state = RECV_DATA;
	                          }
	                          else if(0X3C == rxbuff[cnt])
	                          {
	                              state = SEND_DATA;
	                              senddata();
	                          }
	                          else
	                          {
	                              state = IDLE;
	                              DisableLinBreak;
	                          }
	                          break;
	            case RECV_DATA:
	                          recdatacnt++;
	                          if(recdatacnt >= 4) // 3 Bytes data + 1 Bytes checksum
	                          {
	                              recdatacnt=0;
	                              state = RECV_SYN;
	                              EnableLinBreak;
	                          }
	                          break;
	         default:break;

	         }

	         cnt++;
	     }


	    /* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F Store immediate overlapping
	      exception return operation might vector to incorrect interrupt */
	#if defined __CORTEX_M && (__CORTEX_M == 4U)
	    __DSB();
	#endif
}

void senddata(void)
{
	        {

	         while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
	         {
	             USART_WriteByte(DEMO_USART, 0X01);
	             break;  //just send one byte, otherwise, will send 16 bytes
	         }
	         while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
	         {
	             USART_WriteByte(DEMO_USART, 0X02);
	             break;  //just send one byte, otherwise, will send 16 bytes
	         }
	         while (kUSART_TxFifoNotFullFlag & USART_GetStatusFlags(DEMO_USART))
	         {
	             USART_WriteByte(DEMO_USART, 0X10);// 0X10 correct 0Xaa wrong
	             break;  //just send one byte, otherwise, will send 16 bytes
	         }

	           recdatacnt=0;
	           state = RECV_SYN;
	           EnableLinBreak;
	        }
}

 Attaching herewith the codes of the Master and Slave.

I hope it helps!!

标签 (1)
附件
%3CLINGO-SUB%20id%3D%22lingo-sub-1223619%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ELPC55S16%20LIN%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95%E7%A4%BA%E4%BE%8B%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1223619%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%0A%3CH3%20id%3D%22toc-hId-1112120925%22%20id%3D%22toc-hId-2004241427%22%3E%E7%AE%80%E4%BB%8B%3C%2FH3%3E%0A%3CP%3E%E6%9C%AC%E7%A4%BA%E4%BE%8B%E7%9A%84%E7%9B%AE%E6%A0%87%E6%98%AF%E6%BC%94%E7%A4%BA%E4%B8%A4%E4%B8%AA%E8%AE%BE%E5%A4%87%E4%B9%8B%E9%97%B4%E7%9A%84%E5%9F%BA%E6%9C%AC%20LIN%20%E9%80%9A%E4%BF%A1%EF%BC%8C%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E8%AE%BE%E5%A4%87%E4%BD%9C%E4%B8%BA%E4%B8%BB%E6%9C%BA%EF%BC%8C%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%AE%BE%E5%A4%87%E4%BD%9C%E4%B8%BA%E4%BB%8E%E6%9C%BA%E3%80%82%E5%9C%A8%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E4%BD%BF%E7%94%A8%E7%9A%84%E4%B8%A4%E4%B8%AA%E8%AE%BE%E5%A4%87%E6%98%AF%20LPC55S16%20EVK%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%3ELIN%20%E4%B8%BB%E8%AE%BE%E5%A4%87%E5%B0%86%E5%8F%91%E9%80%81%E4%B8%80%E4%B8%AA%E7%89%B9%E5%AE%9A%E7%9A%84%E5%8F%91%E5%B8%83%E8%80%85%E5%B8%A7%E5%92%8C%E4%B8%80%E4%B8%AA%E8%AE%A2%E9%98%85%E8%80%85%E5%B8%A7%EF%BC%8CLIN%20%E4%BB%8E%E8%AE%BE%E5%A4%87%E5%B0%86%E6%A3%80%E6%B5%8B%E4%B8%BB%E8%AE%BE%E5%A4%87%E7%9A%84%E6%95%B0%E6%8D%AE%E5%B9%B6%E7%9B%B8%E5%BA%94%E5%9C%B0%E5%8F%8D%E9%A6%88%E6%95%B0%E6%8D%AE%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%E6%9C%AC%E6%96%87%E5%B0%86%E4%B8%BB%E8%A6%81%E5%85%B3%E6%B3%A8%E8%BD%AF%E4%BB%B6%E6%96%B9%E9%9D%A2%EF%BC%8C%E7%A1%AC%E4%BB%B6%E6%96%B9%E9%9D%A2%E8%AF%B7%E5%8F%82%E8%80%83%20%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2FLPC-Microcontrollers-Knowledge%2FLPC54608-LIN-master-basic-usage-sharing%2Fta-p%2F1118103%22%20target%3D%22_blank%22%3Ehttps%3A%2F%2Fcommunity.nxp.com%2Ft5%2FLPC-Microcontrollers-Knowledge%2FLPC54608-LIN-master-basic-usage-sharing%2Fta-p%2F1118103%3C%2FA%3E%E3%80%82%3C%2FP%3E%0A%3CH3%20id%3D%22toc-hId--695333538%22%20id%3D%22toc-hId-196786964%22%3ELIN%20MASTER%20%E7%A4%BA%E4%BE%8B%3C%2FH3%3E%0A%3CP%3E%3CSPAN%3ELIN%20%E4%B8%BB%E6%9C%BA%E5%8F%91%E9%80%81%20LIN%20%E5%8F%91%E5%B8%83%E5%99%A8%E6%95%B0%E6%8D%AE%E5%92%8C%E8%AE%A2%E9%98%85%E8%80%85%20ID%20%E6%95%B0%E6%8D%AE%EF%BC%8C%E8%BD%AF%E4%BB%B6%E4%BB%A3%E7%A0%81%E4%BB%8E%20SDK_2.8.2_LPCXpresso55S16%20usart_interrupt_rb_transfer%20%E9%A1%B9%E7%9B%AE%E4%B8%AD%E4%BF%AE%E6%94%B9%EF%BC%8C%E8%AF%A6%E7%BB%86%E4%BB%A3%E7%A0%81%E5%A6%82%E4%B8%8B%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3E%2F*%20USART%20callback%20*%2F%0Avoid%20FLEXCOMM3_IRQHandler()%0A%7B%0A%09%20%20if(DEMO_USART-%26gt%3BSTAT%20%26amp%3B%20USART_STAT_RXBRK_MASK)%20%2F%2F%20detect%20LIN%20break%0A%09%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20Lin_BKflag%20%3D%201%3B%0A%09%20%20%20%20%20%20%20cnt%20%3D%200%3B%0A%09%20%20%20%20%20%20%20state%20%3D%20RECV_DATA%3B%0A%09%20%20%20%20%20%20%20DisableLinBreak%3B%0A%09%20%20%20%20%20%7D%0A%09%20%20%20%20if((kUSART_RxFifoNotEmptyFlag%20%7C%20kUSART_RxError)%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%09%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20USART_ClearStatusFlags(DEMO_USART%2CkUSART_TxError%20%7C%20kUSART_RxError)%3B%0A%09%20%20%20%20%09%20rxbuff%5Bcnt%5D%20%3D%20USART_ReadByte(DEMO_USART)%3B%3B%0A%0A%09%20%20%20%20%20%20%20%20%20switch(state)%0A%09%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20RECV_SYN%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(0x55%20%3D%3D%20rxbuff%5Bcnt%5D)%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_PID%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20IDLE%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DisableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20RECV_PID%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(0xAD%20%3D%3D%20rxbuff%5Bcnt%5D)%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20SEND_DATA%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20if(0XEC%20%3D%3D%20rxbuff%5Bcnt%5D)%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_DATA%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20IDLE%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DisableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20RECV_DATA%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Sub_rxbuff%5Brecdatacnt%2B%2B%5D%3D%20rxbuff%5Bcnt%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(recdatacnt%20%26gt%3B%3D%203)%20%2F%2F%202%20Bytes%20data%20%2B%201%20Bytes%20checksum%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recdatacnt%3D0%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_SYN%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EnableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20SEND_DATA%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recdatacnt%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(recdatacnt%20%26gt%3B%3D%204)%20%2F%2F%202%20Bytes%20data%20%2B%201%20Bytes%20checksum%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recdatacnt%3D0%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_SYN%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EnableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20default%3Abreak%3B%0A%09%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20cnt%2B%2B%3B%0A%09%20%20%20%20%20%7D%0A%0A%0A%09%20%20%20%20%2F*%20Add%20for%20ARM%20errata%20838869%2C%20affects%20Cortex-M4%2C%20Cortex-M4F%20Store%20immediate%20overlapping%0A%09%20%20%20%20%20%20exception%20return%20operation%20might%20vector%20to%20incorrect%20interrupt%20*%2F%0A%09%23if%20defined%20__CORTEX_M%20%26amp%3B%26amp%3B%20(__CORTEX_M%20%3D%3D%204U)%0A%09%20%20%20%20__DSB()%3B%0A%09%23endif%0A%7D%0A%0Avoid%20Lin_Master_Publisher(void)%0A%7B%0A%20%20%20%20unsigned%20int%20i%3D0%3B%0A%20%20%20%20unsigned%20char%20ch%20%3D0xa0%3B%2F%2Fdummy%20byte%0A%2F%2F%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3DLIN%20master%20send%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%20%20%20%20%20%20%20DEMO_USART-%26gt%3BCTL%20%7C%3D%20USART_CTL_TXBRKEN_MASK%3B%2F%2Fenable%20TX%20break%3B%0A%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%09%20USART_WriteBlocking(DEMO_USART%2C%26amp%3Bch%2C1)%3B%2F%2Fdummy%20data%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20DEMO_USART-%26gt%3BCTL%20%26amp%3B%3D%20~(USART_CTL_TXBRKEN_MASK)%3B%20%2F%2Fdisable%20TX%20break%0A%0A%20%20%20%20%20%20%20%2F%2F%20Send%20the%20sync%20byte%200x55.%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X55)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%2F%2Fprotected%20ID%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200Xad)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2FData1%0A%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X01)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2FData2%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X02)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2FData3%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X03)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2F%2F%20checksum%20byte%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X4c)%3B%2F%2F0X4c%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%0A%7D%0A%0Avoid%20Lin_Master_Subscribe(void)%0A%7B%0A%20%20unsigned%20int%20i%3D0%3B%0A%0Aunsigned%20char%20ch%3D0xf0%3B%2F%2Fdummy%20byte%0A%0A%20%20%20%20%20DEMO_USART-%26gt%3BCTL%20%7C%3D%20USART_CTL_TXBRKEN_MASK%3B%2F%2Fenable%20TX%20break%3B%0A%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%09%20USART_WriteBlocking(DEMO_USART%2C%26amp%3Bch%2C1)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20DEMO_USART-%26gt%3BCTL%20%26amp%3B%3D%20~(USART_CTL_TXBRKEN_MASK)%3B%20%2F%2Fdisable%20TX%20break%0A%0A%20%20%20%20%20%20%20%2F%2F%20Send%20the%20syncy%20byte%200x55.%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X55)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%2F%2Fprotected%20ID%0A%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X3C)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20state%20%3D%20RECV_DATA%3B%0A%7D%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%E8%BF%99%E9%87%8C%E7%9A%84%E4%B8%BB%E8%A6%81%E4%BB%BB%E5%8A%A1%E6%98%AF%E7%94%9F%E6%88%90%E5%92%8C%E6%A3%80%E6%B5%8B%20LIN%20%E6%96%AD%E8%A3%82%E5%AD%97%E6%AE%B5%E3%80%82%3C%2FP%3E%0A%3CP%3E%E5%A6%82%E6%9E%9C%E4%BB%94%E7%BB%86%E8%A7%82%E5%AF%9F%EF%BC%8C%E8%A6%81%E5%9C%A8%E5%8F%91%E5%B8%83%E8%80%85%E5%92%8C%E8%AE%A2%E9%98%85%E8%80%85%E5%B8%A7%E4%B8%AD%E7%94%9F%E6%88%90%20LIN%20%E6%96%AD%E5%BC%80%E5%AD%97%E6%AE%B5%EF%BC%8C%E6%88%91%E4%BB%AC%E9%A6%96%E5%85%88%E8%AE%BE%E7%BD%AE%20Tx%20%E6%96%AD%E5%BC%80%EF%BC%8C%E7%84%B6%E5%90%8E%E5%8F%91%E9%80%81%E7%A9%BA%E5%AD%97%E8%8A%82%EF%BC%8C%E6%9C%80%E5%90%8E%E7%A6%81%E7%94%A8%20Tx%20%E6%96%AD%E5%BC%80%E3%80%82%E7%94%A8%E4%BA%8E%E5%8F%91%E9%80%81%E7%A9%BA%E5%AD%97%E8%8A%82%E7%9A%84%E5%87%BD%E6%95%B0%E6%98%AF%20USART_WriteBlocking%EF%BC%8C%E8%80%8C%20USART_WriteByte%20%E7%94%A8%E4%BA%8E%E5%8F%91%E9%80%81%E9%99%A4%E7%A9%BA%E5%AD%97%E8%8A%82%E4%BB%A5%E5%A4%96%E7%9A%84%E5%85%B6%E4%BB%96%E6%95%B0%E6%8D%AE%E3%80%82%E8%BF%99%E6%98%AF%E5%9B%A0%E4%B8%BA%E5%A6%82%E6%9E%9C%E6%88%91%E4%BB%AC%E5%9C%A8%E7%A9%BA%E5%AD%97%E8%8A%82%E6%9C%9F%E9%97%B4%E4%BD%BF%E7%94%A8%20USART_WriteByte%EF%BC%8C%E5%AE%83%E4%B8%8D%E5%83%8F%E5%8F%A6%E4%B8%80%E7%A7%8D%E6%83%85%E5%86%B5%E9%82%A3%E6%A0%B7%E4%BF%9D%E6%8C%81%E8%BF%9E%E7%BB%AD%E4%BD%8E%E7%94%B5%E5%B9%B3%E3%80%82%E6%88%91%E4%BB%8D%E7%84%B6%E9%9C%80%E8%A6%81%E6%89%BE%E5%88%B0%E5%8E%9F%E5%9B%A0%EF%BC%8C%E5%AE%8C%E6%88%90%E5%90%8E%E4%BC%9A%E5%9C%A8%E8%BF%99%E9%87%8C%E6%9B%B4%E6%96%B0%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CH3%20id%3D%22toc-hId-1792179295%22%20id%3D%22toc-hId--1610667499%22%3ELIN%E4%BB%8E%E7%AB%AF%E7%A4%BA%E4%BE%8B%3C%2FH3%3E%0A%3CP%3E%3CSPAN%3ELIN%20%E4%BB%8E%E6%9C%BA%E4%BB%8E%E4%B8%BB%E6%9C%BA%E6%8E%A5%E6%94%B6%20LIN%20%E5%8F%91%E5%B8%83%E8%80%85%E6%95%B0%E6%8D%AE%E5%92%8C%E8%AE%A2%E9%98%85%E8%80%85%20ID%20%E6%95%B0%E6%8D%AE%EF%BC%8C%E5%B9%B6%E5%9C%A8%E9%9C%80%E8%A6%81%E6%97%B6%E5%93%8D%E5%BA%94%E3%80%82%E8%BD%AF%E4%BB%B6%E4%BB%A3%E7%A0%81%E6%98%AF%E4%BB%8E%20SDK_2.8.2_LPCXpresso55S16%20usart_interrupt_rb_transfer%20%E9%A1%B9%E7%9B%AE%E4%B8%AD%E4%BF%AE%E6%94%B9%E7%9A%84%EF%BC%8C%E8%AF%A6%E7%BB%86%E4%BB%A3%E7%A0%81%E5%A6%82%E4%B8%8B%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%0A%3CPRE%20class%3D%22lia-code-sample%20language-c%22%3E%3CCODE%20translate%3D%22no%22%3Evoid%20FLEXCOMM3_IRQHandler()%0A%7B%0A%20if(DEMO_USART-%26gt%3BSTAT%20%26amp%3B%20USART_STAT_RXBRK_MASK)%20%2F%2F%20detect%20LIN%20break%0A%09%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20Lin_BKflag%20%3D%201%3B%0A%09%20%20%20%20%20%20%20cnt%20%3D%200%3B%0A%09%20%20%20%20%20%20%20state%20%3D%20RECV_SYN%3B%0A%09%20%20%20%20%20%20%20DisableLinBreak%3B%0A%09%20%20%20%20%20%7D%0A%0A%09%20%20%20%20if((kUSART_RxFifoNotEmptyFlag%20%7C%20kUSART_RxError)%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%09%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20USART_ClearStatusFlags(DEMO_USART%2CkUSART_TxError%20%7C%20kUSART_RxError)%3B%0A%09%20%20%20%20%09%20rxbuff%5Bcnt%5D%20%3D%20USART_ReadByte(DEMO_USART)%3B%3B%0A%0A%09%20%20%20%20%20%20%20%20%20switch(state)%0A%09%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20RECV_SYN%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(0x55%20%3D%3D%20rxbuff%5Bcnt%5D)%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_PID%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20IDLE%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DisableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20RECV_PID%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(0xAD%20%3D%3D%20rxbuff%5Bcnt%5D)%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_DATA%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20if(0X3C%20%3D%3D%20rxbuff%5Bcnt%5D)%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20SEND_DATA%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20senddata()%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20IDLE%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DisableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20RECV_DATA%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recdatacnt%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if(recdatacnt%20%26gt%3B%3D%204)%20%2F%2F%203%20Bytes%20data%20%2B%201%20Bytes%20checksum%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recdatacnt%3D0%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_SYN%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20EnableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20default%3Abreak%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20cnt%2B%2B%3B%0A%09%20%20%20%20%20%7D%0A%0A%0A%09%20%20%20%20%2F*%20Add%20for%20ARM%20errata%20838869%2C%20affects%20Cortex-M4%2C%20Cortex-M4F%20Store%20immediate%20overlapping%0A%09%20%20%20%20%20%20exception%20return%20operation%20might%20vector%20to%20incorrect%20interrupt%20*%2F%0A%09%23if%20defined%20__CORTEX_M%20%26amp%3B%26amp%3B%20(__CORTEX_M%20%3D%3D%204U)%0A%09%20%20%20%20__DSB()%3B%0A%09%23endif%0A%7D%0A%0Avoid%20senddata(void)%0A%7B%0A%09%20%20%20%20%20%20%20%20%7B%0A%0A%09%20%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%09%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X01)%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%09%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%09%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X02)%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%09%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20while%20(kUSART_TxFifoNotFullFlag%20%26amp%3B%20USART_GetStatusFlags(DEMO_USART))%0A%09%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20USART_WriteByte(DEMO_USART%2C%200X10)%3B%2F%2F%200X10%20correct%200Xaa%20wrong%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%20%20%2F%2Fjust%20send%20one%20byte%2C%20otherwise%2C%20will%20send%2016%20bytes%0A%09%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20recdatacnt%3D0%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20RECV_SYN%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20EnableLinBreak%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%7D%0A%3C%2FCODE%3E%3C%2FPRE%3E%0A%3CP%3E%E9%9A%8F%E5%87%BD%E9%99%84%E4%B8%8A%E4%B8%BB%E6%9C%BA%E4%B8%8E%E4%BB%8E%E6%9C%BA%E7%9A%84%E4%BB%A3%E7%A0%81%E3%80%82%3C%2FP%3E%0A%3CP%3E%E5%B8%8C%E6%9C%9B%E5%AF%B9%E6%82%A8%E6%9C%89%E6%89%80%E5%B8%AE%E5%8A%A9%EF%BC%81%EF%BC%81%3C%2FP%3E%0A%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1223619%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3ELPC55xx%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
无评分
版本历史
最后更新:
‎07-15-2021 02:15 AM
更新人: