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 问题

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1271207/tms320f2800157-lin-issue

器件型号:TMS320F2800157
主题中讨论的其他器件:C2000WARE

大家好、

以下是客户可能需要您的帮助的问题:

当我在 F2800157中设置 LIN 配置时、我发送主机在周期内、但它从不触发 Rx 中断、我测试 Rx 引脚、它在引脚中有数据 、并且引脚多路复用器对于 LINA_RX 为 GPIO29、对于 LINA_TX 为 GPIO28、我的 LIN 初始配置如下:

#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

代码是否有任何故障?

--

谢谢、此致

耶鲁

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,耶鲁,

    您能否先使用 C2000Ware 内置示例进行测试、看看它是否适合您? 您应该通过默认示例从该引脚获得输出。 如果您没有看到任何输出、则这可能是硬件问题。

    此致、

    文斯