Init
This commit is contained in:
parent
c1d9a582fc
commit
1ee101a5c9
|
|
@ -47,4 +47,6 @@ void vSerialPortLinInit(
|
|||
void SerialPort_IrqProcessing_UartLin(tSerialPortLinArtery *env);
|
||||
tSerialPortLinIO vSerialPorLinGetIo(tSerialPortLinArtery *env);
|
||||
|
||||
void LIN_CheckTimeout(tSerialPortLinArtery *env);
|
||||
|
||||
#endif //SERIALPORT_SERIALPORTLIN_ARTERY_H
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ void vSerialPortLinInit(
|
|||
) {
|
||||
env->uart = uart;
|
||||
|
||||
env->linLastByteTime = 20;
|
||||
env->linFrameTimeoutMs = 20;
|
||||
env->linLastByteTime = 10;
|
||||
env->linFrameTimeoutMs = 10;
|
||||
|
||||
usart_reset(uart);
|
||||
|
||||
|
|
@ -126,6 +126,7 @@ static uint8_t LIN_CalcParity(uint8_t id) {
|
|||
void SerialPort_IrqProcessing_UartLin(tSerialPortLinArtery *env) {
|
||||
|
||||
// 1. Break frame detection
|
||||
|
||||
if (usart_flag_get(env->uart, USART_BFF_FLAG)) {
|
||||
usart_flag_clear(env->uart, USART_BFF_FLAG);
|
||||
usart_data_receive(env->uart);
|
||||
|
|
@ -137,15 +138,17 @@ void SerialPort_IrqProcessing_UartLin(tSerialPortLinArtery *env) {
|
|||
return;
|
||||
}
|
||||
|
||||
|
||||
// 2. Receive data (без IDLE)
|
||||
if (usart_flag_get(env->uart, USART_RDBF_FLAG)) {
|
||||
|
||||
uint8_t data = usart_data_receive(env->uart);
|
||||
|
||||
if (env->linFrameStarted && (env->linByteCount < sizeof(env->linBuffer))) {
|
||||
uint8_t data = usart_data_receive(env->uart);
|
||||
env->linBuffer[env->linByteCount] = data;
|
||||
env->linByteCount++;
|
||||
env->linLastByteTime = SystemGetMs(); // Обновляем время
|
||||
} else {
|
||||
usart_data_receive(env->uart);
|
||||
if (env->linFrameStarted) {
|
||||
env->rxFrame.event = LIN_RX_OVERRUN;
|
||||
osMessageQueuePut(env->rxDataQueue, &env->rxFrame, 0, 0);
|
||||
|
|
@ -359,18 +362,22 @@ static uint8_t vLinTransmitCommand(tSerialPortLinArtery *env, tLinData *linData,
|
|||
static uint8_t vLinReceivedCommand(tSerialPortLinArtery *env, tLinData *linData, uint32_t timeout) {
|
||||
lin_frame_t rxFrame;
|
||||
|
||||
uint16_t len = vSerialPortLinReceiveQueue(env, (void *) &rxFrame, sizeof(lin_frame_t), osWaitForever, env->rxDataQueue);
|
||||
// uint16_t len = vSerialPortLinReceiveQueue(env, (void *) &rxFrame, sizeof(lin_frame_t), osWaitForever, env->rxDataQueue);
|
||||
osStatus_t result = osMessageQueueGet(env->rxDataQueue, (void *) &rxFrame, NULL, osWaitForever);
|
||||
if (result == osOK) {
|
||||
|
||||
if (len == 0) {
|
||||
return LIN_NO_EVENT;
|
||||
memset(linData->g_aRxBuffer, 0, sizeof(linData->g_aRxBuffer));
|
||||
|
||||
linData->g_aRxBufferLen = rxFrame.dataLen + 1;
|
||||
linData->g_aRxBuffer[0] = rxFrame.id;
|
||||
for (uint8_t i = 0; i < rxFrame.dataLen; ++i) {
|
||||
linData->g_aRxBuffer[i + 1] = rxFrame.data[i];
|
||||
}
|
||||
|
||||
return rxFrame.event;
|
||||
}
|
||||
|
||||
linData->g_aRxBufferLen = rxFrame.dataLen;
|
||||
for (uint8_t i = 0; i < rxFrame.dataLen; ++i) {
|
||||
linData->g_aRxBuffer[i] = rxFrame.data[i];
|
||||
}
|
||||
|
||||
return rxFrame.event;
|
||||
return LIN_NO_EVENT;
|
||||
}
|
||||
|
||||
tSerialPortLinIO vSerialPorLinGetIo(tSerialPortLinArtery *env) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue