Dear team:
Regarding the detection of the break frame header, the break can be correctly detected when the following configuration is currently performed:
Tsynbrk = 13, Tsyndel = 1/5/10
But there are two configurations that will not detect break:
Tsynbrk = 13, Tsyndel = 14
Tsynbrk = 26, Tsyndel = 1
The following is the configuration code:
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;
}
Best regards