This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F2800157: LIN issue

Part Number: TMS320F2800157
Other Parts Discussed in Thread: C2000WARE

Hi Team,

Here's an issue from the customer may need your help:

When I set lin config in F2800157, I send the master in period, but it never trigger the rx interrupt, I test the rx pin ,it has data in the pin ,and  my pinmux is GPIO29 for LINA_RX,GPIO28 for LINA_TX, my lin init config is below:

#define SCI_ADDR 0x6A00

 GPIO_setPinConfig(GPIO_28_LINA_TX);
GPIO_setPinConfig(GPIO_29_LINA_RX);

LIN_disableModule(SCI_ADDR);//disable tx and rx function, disable lin
LIN_enableModule(SCI_ADDR);//enable tx and rx function, enable lin

LIN_enterSoftwareReset(SCI_ADDR);//The SCI/LIN should only be configured while SWnRST = 0.

LIN_disableSCIMode(SCI_ADDR);//LIN mode is enabled

LIN_setLINMode(SCI_ADDR, LIN_MODE_LIN_RESPONDER);//Set LIN mode to Master

LIN_disableAutomaticBaudrate(SCI_ADDR);//Enable Fixed baud rate mode,disable autobaud

LIN_setCommMode(SCI_ADDR, LIN_COMM_LIN_USELENGTHVAL);

LIN_setDebugSuspendMode(SCI_ADDR, LIN_DEBUG_FROZEN);

LIN_setChecksumType(SCI_ADDR, LIN_CHECKSUM_ENHANCED);

LIN_setMessageFiltering(SCI_ADDR, LIN_MSG_FILTER_IDRESPONDER);

LIN_disableIntLoopback(SCI_ADDR);

LIN_enableMultibufferMode(SCI_ADDR);

LIN_enableParity(SCI_ADDR);

LIN_enableDataTransmitter(SCI_ADDR);
LIN_enableDataReceiver(SCI_ADDR);


LIN_disableInterrupt(SCI_ADDR, LIN_INT_ALL);

divider=(MCU_BUS_FREQ/LIN_BAUD_RATE)/16 - 1;                                                    //100M:324 120M:389
LIN_setBaudRatePrescaler(SCI_ADDR, divider, 10);                                                      //(SYSCLOCK) / ((P + 1 + M/16) * 16) = Bitrate
LIN_setMaximumBaudRate(SCI_ADDR, 120000000U);                                                 //(100000000U) / ((324 + 1 + 8/16) * 16) = 19201
                                                                                                                                         //(120000000U) / ((389 + 1 + 10/16) * 16) = 19200
LIN_setSyncFields(SCI_ADDR, 0U, 0U);


LIN_setTxMask(SCI_ADDR, 0xFFU);
LIN_setRxMask(SCI_ADDR, 0xFFU);
LIN_setIDResponderTask(SCI_ADDR,0xD6);

LIN_disableExtLoopback(SCI_ADDR);

LIN_enableInterrupt(SCI_ADDR, (LIN_INT_ID|LIN_INT_RX|LIN_INT_PE|LIN_INT_FE|LIN_INT_ISFE|LIN_INT_BE|LIN_INT_PBE));

LIN_exitSoftwareReset(SCI_ADDR);

EDIS;


LIN_setInterruptLevel0(SCI_ADDR, LIN_INT_ALL);
LIN_enableGlobalInterrupt(SCI_ADDR, LIN_INTERRUPT_LINE0);
LIN_clearGlobalInterruptStatus(SCI_ADDR, LIN_INTERRUPT_LINE0);

Interrupt_register(lin_interrupt_index[0], &lin_interrupt);

Interrupt_enable(lin_interrupt_index[0]);//lin_interrupt_index[0]       #define INT_LINA_0                  0x004C0605U // 6.5 - LINA_0 Interrupt

Is there any fault in code?

--

Thanks & Regards

Yale

  • Hi Yale,

    Can you first test with the C2000Ware built-in example and see if that is working for you? You should get output from the pin with the default example. If you do not see any output, then this may be a hardware issue.

    Regards,

    Vince