/*********************************************************************************************************************** * Copyright (C) All rights reserved. ***********************************************************************************************************************/ /*********************************************************************************************************************** * @file lin.h * @brief This file implements device driver for LIN Send and Receive. * @version 1.0.0 * @date 2019/12/24 ***********************************************************************************************************************/ #ifndef LIN_H #define LIN_H /*********************************************************************************************************************** Macro definitions ***********************************************************************************************************************/ /*********************************************************************************************************************** Includes ***********************************************************************************************************************/ #include "userdefine.h" #include "BAT32A239.h" #include "sci.h" #include "tim4.h" #include "intp.h" /************************************************************************** * UART Data and Status Register **************************************************************************/ #define UART_TXDR (SCI0->TXD0) /* transmission data register */ #define UART_RXDR (SCI0->RXD0) /* reception data register */ #define UART_TXBR (SCI0->SDR00) /* transmission baudrate */ #define UART_RXBR (SCI0->SDR01) /* reception baudrate */ #define UART_PRS (SCI0->SPS0 & 0x0FU) /* prescale value */ #define UART_BUSY (SCI0->SSR00 & (_0040_SCI_UNDER_EXECUTE | _0020_SCI_VALID_STORED)) /* busy */ #define UART_RRDY (SCI0->SSR01 & _0020_SCI_VALID_STORED) /* read ready */ #define UART_TXST (SCI0->SS0 |= _0001_SCI_CH0_START_TRG_ON) /* transmission start */ #define UART_TXSP (SCI0->ST0 |= _0001_SCI_CH0_STOP_TRG_ON) /* transmission stop */ #define UART_RXST (SCI0->SS0 |= _0002_SCI_CH1_START_TRG_ON) /* reception start */ #define UART_RXSP (SCI0->ST0 |= _0002_SCI_CH1_STOP_TRG_ON) /* reception stop */ #define LIN_BAUDRATE (19200) /* baudrate: 19200bps */ #define RESPONSE_TIME (1000) //#define POLLING_STYLE /************************************************************************** * Typedef defination **************************************************************************/ typedef struct { union { uint8_t PID; struct { uint8_t ID : 6; uint8_t P0 : 1; /* odd parity: P0 = (ID0 ^ ID1 ^ ID2 ^ ID4) */ uint8_t P1 : 1; /* even parity: P1 = ~(ID1 ^ ID3 ^ ID4 ^ ID5) */ } PID_b; }; uint8_t Data[8]; /* data field: 1 ~ 8 bytes */ uint8_t ChkSum; /* check sum field */ } lin_frame_t; /************************************************************************** * Global functions **************************************************************************/ void LIN_SetConfig(void); void LIN_SetBaudRate(uint16_t baudrate); void LIN_SendWakeUp(void); void LIN_SendBreak(void); void LIN_SendSync(void); void LIN_ReceiveBreak(void); int16_t LIN_GetBreakWidth(void); void LIN_ReceiveSync(void); uint16_t LIN_GetBaudRate(void); #ifdef POLLING_STYLE /* polling-based */ void LIN_Send(lin_frame_t *pFrame); void LIN_Receive(lin_fram_t *pFrame); #else /* interrupt-based */ void LIN_Send(uint8_t * tx_buf, uint8_t tx_num); void LIN_Receive(uint8_t * rx_buf, uint8_t rx_num); #endif #endif