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%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E4%BD%BF%E7%94%A8%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-2004239480%22%3E%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%3C%2FH3%3E%0A%3CP%3E%E3%81%93%E3%81%AE%E4%BE%8B%E3%81%AE%E7%9B%AE%E7%9A%84%E3%81%AF%E3%80%811%E3%81%A4%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%8C%E3%83%9E%E3%82%B9%E3%82%BF%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%E3%82%82%E3%81%861%E3%81%A4%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%8C%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%A8%E3%81%97%E3%81%A6%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B2%E3%81%A4%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E9%96%93%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AALIN%E9%80%9A%E4%BF%A1%E3%82%92%E7%A4%BA%E3%81%99%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E4%BE%8B%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B2%E3%81%A4%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AFLPC55S16%20EVK%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%3ELIN%E3%83%9E%E3%82%B9%E3%82%BF%E3%81%AF%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BB%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%A8%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BB%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82LIN%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%AF%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%A4%9C%E5%87%BA%E3%81%97%E3%80%81%E3%81%9D%E3%82%8C%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%E3%81%A7%E3%81%AF%E4%B8%BB%E3%81%AB%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%81%B4%E3%81%AB%E7%84%A6%E7%82%B9%E3%82%92%E5%BD%93%E3%81%A6%E3%81%BE%E3%81%99%E3%80%82%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AF%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%82%92%E3%81%94%E5%8F%82%E7%85%A7%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FP%3E%0A%3CH3%20id%3D%22toc-hId--695333538%22%20id%3D%22toc-hId-196785017%22%3ELIN%E3%83%9E%E3%82%B9%E3%82%BF%E3%81%AE%E4%BE%8B%3C%2FH3%3E%0A%3CP%3E%3CSPAN%3ELIN%E3%83%9E%E3%82%B9%E3%82%BF%E3%81%AFLIN%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%90ID%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AFSDK_2.8.2_LPCXpresso55S16%20usart_interrupt_rb_transfer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8B%E3%82%89%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A9%B3%E7%B4%B0%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%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%E3%81%93%E3%81%93%E3%81%A7%E3%81%AE%E4%B8%BB%E3%81%AA%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AFLIN%20break%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E7%94%9F%E6%88%90%E3%81%A8%E6%A4%9C%E5%87%BA%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%0A%3CP%3E%E8%A9%B3%E3%81%97%E3%81%8F%E8%A6%8B%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%82%87%E3%81%86%E3%80%82%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%B7%E3%83%A3%E3%81%8A%E3%82%88%E3%81%B3%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%90%E3%83%BB%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%ABLIN%20break%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%80%81%E3%81%BE%E3%81%9ATx%20break%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%80%81%E6%AC%A1%E3%81%AB%E3%83%80%E3%83%9F%E3%83%BC%E3%81%AE%E3%83%90%E3%82%A4%E3%83%88%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89Tx%20break%E3%82%92%E7%84%A1%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%83%80%E3%83%9F%E3%83%BC%E3%83%BB%E3%83%90%E3%82%A4%E3%83%88%E3%81%AE%E9%80%81%E4%BF%A1%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E9%96%A2%E6%95%B0%E3%81%AFUSART_WriteBlocking%E3%81%A7%E3%80%81USART_WriteByte%E3%81%AF%E3%83%80%E3%83%9F%E3%83%BC%E3%83%BB%E3%83%90%E3%82%A4%E3%83%88%E4%BB%A5%E5%A4%96%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E9%80%81%E4%BF%A1%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%95%E3%82%8C%E3%82%8B%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%80%81%E3%83%80%E3%83%9F%E3%83%BC%E3%83%BB%E3%83%90%E3%82%A4%E3%83%88%E3%81%AE%E4%B8%AD%E3%81%A7USART_WriteByte%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8%E4%BB%96%E3%81%AE%E4%BE%8B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E9%80%A3%E7%B6%9A%E3%81%97%E3%81%9Flow%E3%81%AB%E3%81%AA%E3%82%89%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%9F%E3%82%81%E3%81%A7%E3%81%99%E3%80%82%E3%81%93%E3%81%AE%E7%90%86%E7%94%B1%E3%81%AF%E3%81%BE%E3%81%A0%E5%88%A4%E6%98%8E%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E5%88%86%E3%81%8B%E3%82%8A%E6%AC%A1%E7%AC%AC%E3%81%93%E3%81%A1%E3%82%89%E3%81%AB%E6%9B%B4%E6%96%B0%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CH3%20id%3D%22toc-hId-1792179295%22%20id%3D%22toc-hId--1610669446%22%3ELIN%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%AE%E4%BE%8B%3C%2FH3%3E%0A%3CP%3E%3CSPAN%3ELIN%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%AF%E3%83%9E%E3%82%B9%E3%82%BF%E3%81%8B%E3%82%89LIN%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%B7%E3%83%A3%E3%83%BB%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A8%E3%82%B5%E3%83%96%E3%82%B9%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%90ID%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%97%E4%BF%A1%E3%81%97%E3%80%81%E5%BF%85%E8%A6%81%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E5%BF%9C%E7%AD%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AFSDK_2.8.2_LPCXpresso55S16%20usart_interrupt_rb_transfer%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8B%E3%82%89%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E8%A9%B3%E7%B4%B0%E3%81%AA%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E9%80%9A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%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%E3%81%93%E3%81%93%E3%81%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%A8%E3%82%B9%E3%83%AC%E3%83%BC%E3%83%96%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%B7%BB%E4%BB%98%E3%81%84%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%0A%3CP%3E%E3%81%8A%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%A6%E3%81%B0%E5%B9%B8%E3%81%84%E3%81%A7%E3%81%99%E3%80%82%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
更新者: