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