LIN_initModule(uint32_t base) { // // Check the arguments. // ASSERT(LIN_isBaseValid(base)); EALLOW; // // Reset LIN module // Release from hard reset // LIN_disableModule(base); LIN_enableModule(base); // // Enter Software Reset State // LIN_enterSoftwareReset(base); // // Enable LIN Mode // LIN_disableSCIMode(base); // // Set LIN mode to SLAVE // LIN_setLINMode(base, LIN_MODE_LIN_SLAVE ); // // // LIN_disableAutomaticBaudrate(base); // LIN_enableAutomaticBaudrate(base); // // Use the set frame length and not ID4/ID5 bits for length control LIN_setCommMode(base, LIN_COMM_LIN_USELENGTHVAL);// // // Setup to continue operating on emulation suspend LIN_setDebugSuspendMode(base, LIN_DEBUG_COMPLETE); // // Use Enhanced Checksum // LIN_setChecksumType(base, LIN_CHECKSUM_ENHANCED); // // Message filtering uses slave task ID byte LIN_setMessageFiltering(base, LIN_MSG_FILTER_IDSLAVE); // // Disable Internal loopback for external communication // LIN_disableIntLoopback(base); // // Enable multi-buffer mode // LIN_enableMultibufferMode(base); // // Enable parity check on received ID // LIN_enableParity(base); // // Enable transfer of data to and from the shift registers // LIN_enableDataTransmitter(base); LIN_enableDataReceiver(base); // // Enable the triggering of checksum compare on extended frames // // LIN_triggerChecksumCompare(base); // // Set LIN interrupts to disabled // LIN_disableInterrupt(base, LIN_INT_ALL); // // Set Baud Rate Settings - 100MHz Device // LIN_setBaudRatePrescaler(base, 324U, 8U); LIN_setMaximumBaudRate(base, 100000000U); // // Set response field to 1 byte // LIN_setFrameLength(base, 8U); // // Configure sync field // Sync break (13 + 5 = 18 Tbits) // Sync delimiter (1 + 3 = 4 Tbits) // LIN_setSyncFields(base, 0U, 1U); // // Set Mask ID so TX/RX match will always happen // LIN_setTxMask(base, 0xFFU); LIN_setRxMask(base, 0xFFU); // // Disable IODFT testing and external loopback mode // LIN_disableExtLoopback(base); // // Finally exit SW reset and enter LIN ready state // LIN_exitSoftwareReset(base); EDIS; } LIN_RXProcess(viod) { if(LIN_isRxMatch(LINA_BASE)) { RXID.byte1=LIN_getRxIdentifier(LINA_BASE); switch(RXID.byte1) { case 0x06: CANBUSOFFPARA.RX_06=0; HVSC_0x06RcvManage(); break; case 0xC1: CANBUSOFFPARA.RX_01=0; HVSC_0x01RcvManage(); break; case 0x20: CANBUSOFFPARA.RX_20=0; UDS_Lin_RX_Interface(); break; case 0x03: CANBUSOFFPARA.TX_03=0; HVSC_0x03TrmManage(); break; case 0x85: CANBUSOFFPARA.TX_05=0; HVSC_0x05TrmManage(); break; case 0x61: CANBUSOFFPARA.TX_21=0; UDS_Lin_TX_Interface(); break; default: break; } }else{;} }