+#ifdef MPC551X_ERRATA_REV_A\r
+void LinTimeOutInterrupt( uint8 channel )\r
+{\r
+ /* We ended up here because of that the eSCI module for the given channel has stopped internally.\r
+ * Now we have to reset the LIN module state machine ourself.\r
+ * See [Freescale Device Errata MPC5510ACE, Rev. 10 APR 2009, errata ID: 8173 and 4968]. */\r
+\r
+ volatile struct ESCI_tag *esciHw = ESCI( channel );\r
+\r
+ /* Make sure that the timer it stopped (e.g. if by mistake setup as continuously). */\r
+ Gpt_StopTimer( LinChannelTimeOutGptChannelId[ channel ] );\r
+\r
+ /* Disable transmitter and receiver. */\r
+ esciHw->CR1.B.TE = 0;\r
+ esciHw->CR1.B.RE = 0;\r
+\r
+ /* Prepare module for resynchronization. */\r
+ esciHw->LCR.B.LRES = 1; /* LIN Resynchronize. First set then cleared. */\r
+\r
+ /* Enable transmitter and receiver. */\r
+ esciHw->CR1.B.TE = 1;\r
+ esciHw->CR1.B.RE = 1;\r
+\r
+ /* Resynchronize module. */\r
+ esciHw->LCR.B.LRES = 0; /* LIN Resynchronize. First set then cleared. */\r
+}\r
+\r
+void LinTimeOutInterruptA()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_A );\r
+}\r
+void LinTimeOutInterruptB()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_B );\r
+}\r
+void LinTimeOutInterruptC()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_C );\r
+}\r
+void LinTimeOutInterruptD()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_D );\r
+}\r
+void LinTimeOutInterruptE()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_E );\r
+}\r
+void LinTimeOutInterruptF()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_F );\r
+}\r
+void LinTimeOutInterruptG()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_G );\r
+}\r
+void LinTimeOutInterruptH()\r
+{\r
+ LinTimeOutInterrupt( LIN_CTRL_H );\r
+}\r
+#endif\r