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.

[参考译文] MSP430FR2633:串行端口复用为自动波特率检测模式(LIN)的问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1043486/msp430fr2633-the-problem-of-serial-port-multiplexing-into-automatic-baud-rate-detection-mode-lin

器件型号:MSP430FR2633

尊敬的团队:

关于中断帧头的检测、当当前执行以下配置时、可以正确检测到中断:

Tsynbrk = 13、Tsyndel = 1/5/10

但有两种配置不会检测中断:

Tsynbrk = 13、Tsyndel = 14

Tsynbrk = 26、Tsyndel = 1

以下是配置代码:

const tUARTPort g_myLINPort =
{
.pbReceiveCallback = &LINreceiveHandler,
.pbErrorCallback = &LINerrorHandler,
.peripheralParameters.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK,//EUSCI_A_UART_CLOCKSOURCE_UCLK, //EUSCI_A_UART_CLOCKSOURCE_SMCLK,
.peripheralParameters.clockPrescalar = 6, //26,
.peripheralParameters.firstModReg = 8, //0,
.peripheralParameters.secondModReg = 0x11, //0xB6,
.peripheralParameters.parity = EUSCI_A_UART_NO_PARITY,
.peripheralParameters.msborLsbFirst = EUSCI_A_UART_LSB_FIRST,
.peripheralParameters.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT,
.peripheralParameters.uartMode = EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE,//EUSCI_A_UART_AUTOMATIC_BAUDRATE_DETECTION_MODE
.peripheralParameters.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION //EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION//EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION
};

void LIN_GPIO_Init(void)
{
P1OUT = (0);
P1DIR = (0);//(GPIO_PIN0 | GPIO_PIN6 | GPIO_PIN7);
P1SEL0 = (GPIO_PIN4 | GPIO_PIN5); //(GPIO_PIN2 | GPIO_PIN3 | GPIO_PIN4 | GPIO_PIN5);
P1SEL1 = (0);

LIN_EN_POUT |= LIN_EN_PIN;
LIN_EN_PDIR |= LIN_EN_PIN;
LIN_EN_ON;
}

void LIN_Init(void)
{
LIN_GPIO_Init();
UART_openPort(&g_myLINPort);
}

void UART_openPort(const tUARTPort *pPort)
{
UART_closePort();
g_pUARTPort = pPort;
UCA0CTLW0 |= UCSWRST; //reset UART0

MAP_EUSCI_A_UART_init(
UART__EUSCI_A_PERIPHERAL,
(EUSCI_A_UART_initParam*)&(g_pUARTPort->peripheralParameters)
);
UCA0CTLW0 |=UCBRKIE; //打开break 中断
UCA0CTLW0 &= ~UCDORM;//Not dormant. All received characters will set UCAxRXIFG
MAP_EUSCI_A_UART_enable(UART__EUSCI_A_PERIPHERAL);
MAP_EUSCI_A_UART_clearInterrupt(
UART__EUSCI_A_PERIPHERAL,
EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG
);
MAP_EUSCI_A_UART_enableInterrupt(
UART__EUSCI_A_PERIPHERAL,
EUSCI_A_UART_RECEIVE_INTERRUPT
);
MAP_EUSCI_A_UART_enableInterrupt(
UART__EUSCI_A_PERIPHERAL,
EUSCI_A_UART_BREAKCHAR_INTERRUPT
);
g_UARTStatus = eUARTIsIdle;
}

此致

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

    绿色环保、

    我将假定 Tsynbrk 是中断位的周期、而 Tsyndel 是定界符位的周期。 这两种配置实际上可能违反 LIN 总线时序。 对于第一种配置、Tsyndel 长于 Tsynbrk、LIN 总线时序可能不允许这种情况。 对于第二种配置、Tsynbrk 大于21位时间、根据用户指南、如果中断长度超过21位时间、中断超时错误标志 UCBTOE 将被置位。

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

    尊敬的 James:

    也许我们应该以另一种方式表达我们的怀疑。 用户手册中的指令是否意味着大于 21位的 Tsynbrk+Tsyndel 在硬件级不被识别为一个有效的中断域? 也就是说、如果客户要求我们支持多达27位的时间中断字段、我们无法使用 fr2633来实现?

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

    您好!

    用户指南中提到的21位限制 只适用于 Tsynbrk。 Tsyndel 通常为1位(标称值)。 如果 Tsynbrk 需要超过21位、则无法使用 eUSCI 模块的自动波特率检测功能。 否则、需要在 MSP430FR2633上手动实现使用 GPIO 和计时器模块的软件方法。

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

    尊敬的 James:

    因此、这个芯 片的硬件设计似乎支持 Tsynbrk = 13、Tsyndel = 14?然而、我们实际上使用 Lin 网络诊断工具来测试 ucbrk 没有在这个参数设置下被设定。

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

    您好!

    我希望器件能够支持 Tsynbrk = 13位、但我无法找到有关允许的最大 Tsyndel 位的任何指导。 正如我之前提到的、Tsyndel 的标称位数通常为1位。 我将在内部检查我是否可以与您分享有关此主题的任何其他指导。