2024-03-30 15:05:00 +08:00

182 lines
6.1 KiB
C

/*
* Copyright (c) 2022, Shenzhen CVA Innovation CO.,LTD
* All rights reserved.
*
* Shenzhen CVA Innovation CO.,LTD (CVA chip) is supplying this file for use
* exclusively with CVA's microcontroller products. This file can be freely
* distributed within development tools that are supporting such microcontroller
* products.
*
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
* CVA SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL,
* OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
*/
#ifndef _LIN_CFG_H_
#define _LIN_CFG_H_
/*! \brief Contains public interface to various functions related
* to the lin module
*/
/*******************************************************************************
* the includes
******************************************************************************/
#include <stdint.h>
#include <stdbool.h>
/*! \addtogroup lin_cfg
* @{
*/
#ifdef __cplusplus
extern "C" {
#endif
/*******************************************************************************
* the defines
******************************************************************************/
/* LIN Communication protocol version */
#define LIN_PROTOCOL_VER_22 (0x22u)
#define LIN_PROTOCOL_VER_21 (0x21u)
#define LIN_PROTOCOL_VER_20 (0x20u)
#define LIN_PROTOCOL_VER_13 (0x13u)
#define LIN_PROTOCOL_VER_12 (0x12u)
#define LIN_PROTOCOL_VER_11 (0x11u)
#define LINCFG_PROTOCOL_VER LIN_PROTOCOL_VER_22
#define LINCFG_NODE_ADDRESS (0x00)
/* Lin communication baudrate */
#define LINCFG_BAUDRATE (19200u)
/* Node address for sleep command */
#define LINCFG_NAD_FOR_SLEEP (0u)
/* Node feature type select, be used as master or slave node */
#define LINCFG_NODE_MASTER (1u)
#define LINCFG_NODE_SLAVE (0u)
#define LINCFG_NODE_USED LINCFG_NODE_MASTER
/* the actual physical channel in MCU that be supported to be used as lin bus */
#define LINCFG_CH_IDX_0 (0u)
#define LINCFG_CH_IDX_1 (1u)
#define LINCFG_CH_IDX_2 (2u)
#define LINCFG_CH_IDX_3 (3u)
/* Define how many hard physical channel are used */
#define LINCFG_CH_ACTIVE (1u)
#define LINCFG_CH_INACTIVE (0u)
/* Select the physical channel as master used */
#if LINCFG_NODE_USED == LINCFG_NODE_MASTER
/* Define the actual channel is used by master node, the rest channels are used for slave node */
#define LINCFG_CH0_USED (LINCFG_CH_ACTIVE)
#define LINCFG_CH1_USED (LINCFG_CH_INACTIVE)
#define LINCFG_CH2_USED (LINCFG_CH_INACTIVE)
#define LINCFG_CH3_USED (LINCFG_CH_INACTIVE)
#define LINCFG_CH_NUM (LINCFG_CH0_USED + LINCFG_CH1_USED + LINCFG_CH2_USED + LINCFG_CH3_USED)
#define LINCFG_MASTER_CH_IDX LINCFG_CH_IDX_0
#else
/* Define the actual channel is used by master node, the rest channels are used for slave node */
#define LINCFG_CH0_USED (LINCFG_CH_ACTIVE)
#define LINCFG_CH1_USED (LINCFG_CH_INACTIVE)
#define LINCFG_CH2_USED (LINCFG_CH_INACTIVE)
#define LINCFG_CH3_USED (LINCFG_CH_INACTIVE)
#define LINCFG_CH_NUM (LINCFG_CH0_USED + LINCFG_CH1_USED + LINCFG_CH2_USED + LINCFG_CH3_USED)
/* Select the physical channel as slave used if more than one channels are used in the current slave node, should select one channel as a wakeup source,
No need all channels send the wakeup signal if the internal requirement
*/
#define LINCFG_SLAVE_CH_AS_WAKEUP_IDX LINCFG_CH_IDX_0
#endif
/* Define the feature of hardware detected break with sync signal together */
#if LINCFG_NODE_USED == LINCFG_NODE_MASTER
#define LINCFG_AUTO_SYNC_EN (0u)
#else
#define LINCFG_AUTO_SYNC_EN (1u)
#endif
/* Frame time slot base tick = 1ms */
#define LINCFG_TICK_BASE (1u)
/* When node is as a subscriber, no response from last received data is more than this time, timeout is existed */
#define LINCFG_RESP_BYTE_TIMEOUT_MAX_CNT (LINCFG_TICK_BASE * 5u)
/* Define the wakeup signal duration time, unit: ms default value: 2ms */
#define LINCFG_WAKEUP_SIGNAL_CHECK_VALID_MIN_CNT (2u)
#define LINCFG_WAKEUP_SIGNAL_DURATION_MIN_CNT (4u)
/* Define the duration to start communication after wakeup by bus or by self, unit: ms */
#define LINCFG_START_COM_AFTER_WKP_CNT (10u)
/* After idle timeout , bus enter into sleep mode, unit: ms */
#define LINCFG_BUS_IDLE_TICK_CNT (10000u)
/* Define the first received header for slave node after be wakeup by bus */
#define LINCFG_FAST_WAKEUP_PERIOD (100u)
/* The delay time of retry wakeup bus again after failed to wakeup bus that is up to 3 times, unit: ms */
#define LINCFG_SLOW_WAKEUP_PEIROD (1500u)
/* Define the value of retry to wakeup the bus */
#define LINCFG_WAKEUP_RETRY_MAX_CNT (3u)
/* If slave node wakeup the bus actively, but in the period, no valid header is received from master, the slave can retry to wakeup */
#define LINCFG_WAKEUP_FAILED_TIMEOUT (200u)
/*******************************************************************************
* the typedefs
******************************************************************************/
typedef struct
{
uint32_t protocolVersion;
uint8_t configNad;
uint8_t initialNad;
uint32_t productId;
uint32_t p2Min;
uint32_t stMin;
uint32_t timeoutNAs;
uint32_t timeoutNCr;
uint32_t linSpeed;
} Lin_CfgType;
#if LINCFG_CH0_USED == LINCFG_CH_ACTIVE
#endif
#if LINCFG_CH1_USED == LINCFG_CH_ACTIVE
#endif
#if LINCFG_CH2_USED == LINCFG_CH_ACTIVE
#endif
#if LINCFG_CH3_USED == LINCFG_CH_ACTIVE
#endif
/*******************************************************************************
* the globals
******************************************************************************/
extern const Lin_CfgType gLin_Cfg;
/*******************************************************************************
* the function prototypes
******************************************************************************/
#ifdef __cplusplus
}
#endif /* extern "C" */
/*! @}*/
#endif /* _LIN_CFG_H_ */