9#ifndef INCLUDE_DRV_SDRV_LIN_H
10#define INCLUDE_DRV_SDRV_LIN_H
13#if CONFIG_MAINFUNCTION_ENABLE
14#include <mainfunction/mainfunction.h>
25#define SDRV_HALF_DUPLEX 1U
27#define SDRV_SOFTWARE_FC 1U
29#define SDRV_CHAR_8_BITS 0U
30#define SDRV_STOP_1_BIT 0U
31#define SDRV_NO_PARITY 0U
34#define SDRV_LIN_TXBREAK_LEN (13U)
35#define SDRV_LIN_RXBREAK_LEN (10U)
36#define SDRV_LIN_TXBREAK_BIT(bit) (((bit)-8U) + 1U)
37#define SDRV_LIN_RXBREAK_BIT(bit) (((bit)-9U) + 1U)
40#define SDRV_DOORBELL_TRIGGER 0xA53CU
42#define SDRV_DOORBELL_ABORT 0xA5C3U
46#define SDRV_LIN_ABR_PATTERN_CHAR 0x55U
49#define LIN_SLEEP_ID 0x3cU
50#define LIN_WAKEUP_ID 0x3dU
53#define WaitForever 0xFFFFFFFFU
55#define SDRV_LIN_OPERATION_TIMEOUT 0x200000U
58#define SDRV_LIN_PCR7_PCMDTO_MASK 0x0000001FU
60#define SDRV_LIN_PSR4_LINPID_ID_MASK 0x0000003FU
63#define SDRV_UART_INTR_TX_FOVF \
65#define SDRV_UART_INTR_RX_FOVF \
67#define SDRV_LIN_INTR_PARITYERR \
70#define SDRV_LIN_INTR_FRAMEERR \
73#define SDRV_LIN_INTR_BAUDRATEERR \
75#define SDRV_LIN_INTR_NOISERERR \
78#define SDRV_LIN_INTR_ABRPASS \
80#define SDRV_LIN_INTR_ABRFAIL \
82#define SDRV_LIN_INTR_STARTBITERR \
84#define SDRV_LIN_INTR_APBCMDDONE \
86#define SDRV_LIN_INTR_APBCMDABORT \
88#define SDRV_LIN_INTR_PIDPASS (1U << 23)
89#define SDRV_LIN_INTR_PIDERR (1U << 24)
90#define SDRV_LIN_INTR_RXCHKSUMPASS (1U << 25)
91#define SDRV_LIN_INTR_RXCHKSUMERR (1U << 26)
94#define SDEV_LIN_INTR_FRAME_FIFO_ERR \
95 (SDRV_UART_INTR_TX_FOVF | SDRV_UART_INTR_RX_FOVF | \
96 SDRV_LIN_INTR_PARITYERR | SDRV_LIN_INTR_FRAMEERR | \
97 SDRV_LIN_INTR_NOISERERR | SDRV_LIN_INTR_STARTBITERR)
100#define SDRV_LIN_INTR_ABR (SDRV_LIN_INTR_ABRPASS | SDRV_LIN_INTR_ABRFAIL)
223#if CONFIG_MAINFUNCTION_ENABLE
225 module_mainfunction_t
227 volatile mainfunction_ret_status_t
228 module_mainfunction_state;
378 uint8_t *bytes_remaining);
393 size_t size, uint32_t times);
428 uint8_t *bytes_remaining);
564#if CONFIG_MAINFUNCTION_ENABLE
572void sdrv_lin_mainfunction_handler(
void *ctrl);
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_LIN
Definition: sdrv_common.h:35
@ SDRV_STATUS_INVALID_PARAM
Definition: sdrv_common.h:76
@ SDRV_STATUS_FAIL
Definition: sdrv_common.h:73
@ SDRV_STATUS_OK
Definition: sdrv_common.h:72
@ SDRV_STATUS_TIMEOUT
Definition: sdrv_common.h:75
@ SDRV_STATUS_BUSY
Definition: sdrv_common.h:74
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
enum lin_mode lin_mode_e
LIN mode.
struct sdrv_lin_pdu sdrv_lin_pdu_t
lin_cs_mode
LIN checksum mode.
Definition: sdrv_lin.h:145
@ LIN_ENHANCED_CS
Definition: sdrv_lin.h:147
@ LIN_CLASSIC_CS
Definition: sdrv_lin.h:146
lin_sub_status
LIN frame status.
Definition: sdrv_lin.h:178
@ SDRV_LIN_STATE_ABR_READY
Definition: sdrv_lin.h:185
@ SDRV_LIN_STATE_ABR_BUSY
Definition: sdrv_lin.h:186
@ SDRV_LIN_STATE_RX
Definition: sdrv_lin.h:183
@ SDRV_LIN_STATE_ABR_FAIL
Definition: sdrv_lin.h:187
@ SDRV_LIN_STATE_RX_ERROR
Definition: sdrv_lin.h:184
@ SDRV_LIN_STATE_BUSY
Definition: sdrv_lin.h:180
@ SDRV_LIN_STATE_TX
Definition: sdrv_lin.h:181
@ SDRV_LIN_STATE_TX_ERROR
Definition: sdrv_lin.h:182
@ SDRV_LIN_STATE_IDLE
Definition: sdrv_lin.h:179
enum lin_ret_status lin_ret_status_e
LIN return status.
uint32_t sdrv_lin_intr_status_get(sdrv_lin_t *ctrl)
Get Sdrv lin Interrupt flag status.
int sdrv_lin_irq_handler(uint32_t irq, void *ctrl)
Sdrv LIN default IRQ handle function.
lin_ret_status_e sdrv_lin_goto_sleep_internal(sdrv_lin_t *ctrl)
LIN require this node goto sleep.
lin_interrupt_type
Lin interrupt event type.
Definition: sdrv_lin.h:105
@ SDRV_LIN_RX_BAUDRATE_ERR
Definition: sdrv_lin.h:121
@ SDRV_LIN_RX_PIDPASS
Definition: sdrv_lin.h:116
@ SDRV_LIN_ABR_PASS
Definition: sdrv_lin.h:107
@ SDRV_LIN_TX_COMPLETE
Definition: sdrv_lin.h:109
@ SDRV_LIN_RX_STARTBIT_ERR
Definition: sdrv_lin.h:118
@ SDRV_LIN_RX_ERROR
Definition: sdrv_lin.h:114
@ SDRV_LIN_RX_CHECKSUM_ERR
Definition: sdrv_lin.h:115
@ SDRV_LIN_RX_PARITY_ERR
Definition: sdrv_lin.h:119
@ SDRV_LIN_NO_EVENT
Definition: sdrv_lin.h:106
@ SDRV_LIN_TX_TIMEOUT
Definition: sdrv_lin.h:110
@ SDRV_LIN_ABR_FAIL
Definition: sdrv_lin.h:108
@ SDRV_LIN_RX_PIDERR
Definition: sdrv_lin.h:117
@ SDRV_LIN_RX_NOISE_ERR
Definition: sdrv_lin.h:122
@ SDRV_LIN_TX_ERROR
Definition: sdrv_lin.h:111
@ SDRV_LIN_RX_RXFOVF_ERR
Definition: sdrv_lin.h:123
@ SDRV_LIN_RX_TIMEOUT
Definition: sdrv_lin.h:113
@ SDRV_LIN_RX_COMPLETE
Definition: sdrv_lin.h:112
@ SDRV_LIN_TX_TXFOVF_ERR
Definition: sdrv_lin.h:124
@ SDRV_LIN_RX_FRAME_ERR
Definition: sdrv_lin.h:120
enum lin_ch_status lin_ch_status_e
LIN Channel status.
struct sdrv_lin_config sdrv_lin_config_t
LIN controller configure.
lin_mode
LIN mode.
Definition: sdrv_lin.h:137
@ LIN_SLAVE
Definition: sdrv_lin.h:139
@ LIN_MASTER
Definition: sdrv_lin.h:138
uint32_t sdrv_lin_intr_get(sdrv_lin_t *ctrl)
Get Sdrv LIN Interrupt enable/disable status.
lin_ret_status_e sdrv_lin_controller_init(sdrv_lin_t *ctrl, const sdrv_lin_config_t *cfg, lin_callback_t callback, void *userdata)
LIN controller init.
void(* lin_callback_t)(struct sdrv_lin *ctrl, lin_interrupt_type_e linstate, void *userdata)
Definition: sdrv_lin.h:131
lin_ret_status_e sdrv_lin_wakeup_internal(sdrv_lin_t *ctrl)
LIN node wakeup.
void sdrv_lin_intr_ctrl(sdrv_lin_t *ctrl, uint32_t mask, bool value)
Enable/Disable Sdrv LIN Interrupt.
lin_ret_status_e sdrv_lin_receiveframe(sdrv_lin_t *ctrl, sdrv_lin_pdu_t *lin_pdu)
LIN receive frame.
void sdrv_lin_deinit(sdrv_lin_t *ctrl)
LIN deinit.
void sdrv_lin_intr_status_clear(sdrv_lin_t *ctrl, uint32_t mask)
Clear Sdrv lin Interrupt flag status.
enum lin_interrupt_type lin_interrupt_type_e
Definition: sdrv_lin.h:128
lin_ret_status_e sdrv_lin_set_baudrate(sdrv_lin_t *ctrl, uint32_t baud)
Configure lin baud rate.
uint8_t sdrv_lin_get_id(sdrv_lin_t *ctrl)
get lin current id.
lin_ret_status_e sdrv_lin_wakeup(sdrv_lin_t *ctrl)
LIN remote node wakeup.
lin_ch_status_e sdrv_lin_get_status(sdrv_lin_t *ctrl)
Get LIN node status .
enum lin_sub_status lin_sub_status_e
LIN frame status.
lin_ret_status_e sdrv_lin_transmit_status_get(sdrv_lin_t *ctrl, uint8_t *bytes_remaining)
Get LIN transmit status.
lin_ret_status_e sdrv_lin_transmitframe(sdrv_lin_t *ctrl, sdrv_lin_pdu_t *lin_pdu, uint32_t times)
LIN transmit frame.
lin_ret_status_e sdrv_lin_get_fifodata(sdrv_lin_t *ctrl, uint8_t *data, size_t size, uint32_t times)
LIN get rx fifo data.
lin_ch_status
LIN Channel status.
Definition: sdrv_lin.h:153
@ LIN_CH_OPERATIONAL_STATE
Definition: sdrv_lin.h:156
@ LIN_CH_UNINITIAL_STATE
Definition: sdrv_lin.h:154
@ LIN_CH_SLEEP_STATE
Definition: sdrv_lin.h:155
void sdrv_lin_clear_transfer_status(sdrv_lin_t *ctrl)
Clear LIN tranfer status .
lin_ret_status
LIN return status.
Definition: sdrv_lin.h:162
@ STATUS_INVALID_PARAM
Definition: sdrv_lin.h:167
@ STATUS_TIMEOUT
Definition: sdrv_lin.h:165
@ STATUS_FAIL
Definition: sdrv_lin.h:164
@ STATUS_BUSY
Definition: sdrv_lin.h:166
@ STATUS_UNINIT
Definition: sdrv_lin.h:171
@ STATUS_SLEEP
Definition: sdrv_lin.h:169
@ STATUS_SUCCESS
Definition: sdrv_lin.h:163
lin_sub_status_e sdrv_lin_get_transfer_status(sdrv_lin_t *ctrl)
Get LIN tranfer status .
lin_ret_status_e sdrv_lin_goto_sleep(sdrv_lin_t *ctrl)
LIN require slave node goto sleep.
enum lin_cs_mode lin_cs_mode_e
LIN checksum mode.
lin_ret_status_e sdrv_lin_receive_status_get(sdrv_lin_t *ctrl, uint8_t *bytes_remaining)
Get LIN async receive status.
SemiDrive UART driver header file.
enum sdrv_abr_max sdrv_abr_max_e
Sdrv UART the character count that abr expect to recv and match.
LIN controller configure.
Definition: sdrv_lin.h:236
uint32_t base
Definition: sdrv_lin.h:237
uint8_t timeout_value
Definition: sdrv_lin.h:271
lin_cs_mode_e checksum
Definition: sdrv_lin.h:242
lin_mode_e mode
Definition: sdrv_lin.h:241
uint8_t abr_en
Definition: sdrv_lin.h:247
uint32_t clk_freq
Definition: sdrv_lin.h:240
uint32_t period_ms
Definition: sdrv_lin.h:278
uint32_t baud
Definition: sdrv_lin.h:239
bool mainfunction_polling
Definition: sdrv_lin.h:276
int irq
Definition: sdrv_lin.h:238
bool transfer_timeout
Definition: sdrv_lin.h:269
sdrv_abr_max_e match_num
Definition: sdrv_lin.h:249
Definition: sdrv_lin.h:282
uint8_t id
Definition: sdrv_lin.h:283
lin_cs_mode_e checksum
Definition: sdrv_lin.h:284
uint8_t * data
Definition: sdrv_lin.h:286
uint8_t size
Definition: sdrv_lin.h:285
LIN controller struct.
Definition: sdrv_lin.h:193
uint8_t tx_size
Definition: sdrv_lin.h:214
uint8_t * rx_buff
Definition: sdrv_lin.h:218
uint32_t base
Definition: sdrv_lin.h:195
volatile uint8_t current_id
Definition: sdrv_lin.h:203
uint8_t rx_size
Definition: sdrv_lin.h:219
volatile uint8_t tx_remain
Definition: sdrv_lin.h:215
lin_cs_mode_e checksum
Definition: sdrv_lin.h:202
lin_mode_e mode
Definition: sdrv_lin.h:201
uint32_t clk_freq
Definition: sdrv_lin.h:197
volatile bool rx_error_invalid
Definition: sdrv_lin.h:210
volatile lin_interrupt_type_e current_event
Definition: sdrv_lin.h:204
volatile uint8_t rx_remain
Definition: sdrv_lin.h:220
volatile uint32_t abr_state
Definition: sdrv_lin.h:208
volatile uint32_t rx_state
Definition: sdrv_lin.h:221
volatile uint32_t tx_state
Definition: sdrv_lin.h:216
uint32_t baud
Definition: sdrv_lin.h:200
const uint8_t * tx_buff
Definition: sdrv_lin.h:213
volatile lin_ch_status_e channel_sta
Definition: sdrv_lin.h:205
int irq
Definition: sdrv_lin.h:196
lin_callback_t callback
Definition: sdrv_lin.h:206
void * userdata
Definition: sdrv_lin.h:207