mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-25 06:13:56 +08:00
[DM/CAN] Update CAN for DM
1. Kconfig import wtih DM 2. Add DM API for Drivers Signed-off-by: GuEe-GUI <2991707448@qq.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
config RT_USING_CAN
|
||||
menuconfig RT_USING_CAN
|
||||
bool "Using CAN device drivers"
|
||||
default n
|
||||
help
|
||||
@@ -73,4 +73,8 @@ if RT_USING_CAN
|
||||
consumes static RAM but guarantees the memory is always available
|
||||
and avoids heap fragmentation.
|
||||
|
||||
endif
|
||||
endif
|
||||
|
||||
if RT_USING_DM && RT_USING_CAN
|
||||
osource "$(SOC_DM_CAN_DIR)/Kconfig"
|
||||
endif
|
||||
|
||||
@@ -3,6 +3,10 @@ from building import *
|
||||
cwd = GetCurrentDir()
|
||||
src = Glob('*.c')
|
||||
CPPPATH = [cwd + '/../include']
|
||||
|
||||
if not GetDepend('RT_USING_DM'):
|
||||
SrcRemove(src, ['can_dm.c'])
|
||||
|
||||
group = DefineGroup('DeviceDrivers', src, depend = ['RT_USING_CAN'], CPPPATH = CPPPATH)
|
||||
|
||||
Return('group')
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2022-11-26 GuEe-GUI first version
|
||||
*/
|
||||
|
||||
#include "can_dm.h"
|
||||
|
||||
static const rt_uint8_t dlc2len[] =
|
||||
{
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 16, 20, 24, 32, 48, 64
|
||||
};
|
||||
|
||||
rt_uint8_t can_dlc2len(rt_uint8_t can_dlc)
|
||||
{
|
||||
return dlc2len[can_dlc & 0x0F];
|
||||
}
|
||||
|
||||
static const rt_uint8_t len2dlc[] =
|
||||
{
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, /* 0 - 8 */
|
||||
9, 9, 9, 9, /* 9 - 12 */
|
||||
10, 10, 10, 10, /* 13 - 16 */
|
||||
11, 11, 11, 11, /* 17 - 20 */
|
||||
12, 12, 12, 12, /* 21 - 24 */
|
||||
13, 13, 13, 13, 13, 13, 13, 13, /* 25 - 32 */
|
||||
14, 14, 14, 14, 14, 14, 14, 14, /* 33 - 40 */
|
||||
14, 14, 14, 14, 14, 14, 14, 14, /* 41 - 48 */
|
||||
15, 15, 15, 15, 15, 15, 15, 15, /* 49 - 56 */
|
||||
15, 15, 15, 15, 15, 15, 15, 15, /* 57 - 64 */
|
||||
};
|
||||
|
||||
rt_uint8_t can_len2dlc(rt_uint8_t len)
|
||||
{
|
||||
if (len <= 64)
|
||||
{
|
||||
return len2dlc[len];
|
||||
}
|
||||
|
||||
return 0xf;
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2022-11-26 GuEe-GUI first version
|
||||
*/
|
||||
|
||||
#ifndef __CAN_DM_H__
|
||||
#define __CAN_DM_H__
|
||||
|
||||
#include <drivers/misc.h>
|
||||
|
||||
/* Special address description flags for the CAN_ID */
|
||||
#define CAN_EFF_FLAG 0x80000000U /* EFF/SFF is set in the MSB */
|
||||
#define CAN_RTR_FLAG 0x40000000U /* Remote transmission request */
|
||||
#define CAN_ERR_FLAG 0x20000000U /* Error message frame */
|
||||
|
||||
/* Valid bits in CAN ID for frame formats */
|
||||
#define CAN_SFF_MASK 0x000007ffU /* Standard frame format (SFF) */
|
||||
#define CAN_EFF_MASK 0x1fffffffU /* Extended frame format (EFF) */
|
||||
#define CAN_ERR_MASK 0x1fffffffU /* Omit EFF, RTR, ERR flags */
|
||||
#define CANXL_PRIO_MASK CAN_SFF_MASK /* 11 bit priority mask */
|
||||
|
||||
/* CAN payload length and DLC definitions according to ISO 11898-1 */
|
||||
#define CAN_MAX_DLC 8
|
||||
#define CAN_MAX_RAW_DLC 15
|
||||
#define CAN_MAX_DLEN 8
|
||||
|
||||
/* CAN FD payload length and DLC definitions according to ISO 11898-7 */
|
||||
#define CANFD_MAX_DLC 15
|
||||
#define CANFD_MAX_DLEN 64
|
||||
|
||||
/*
|
||||
* To be used in the CAN netdriver receive path to ensure conformance with
|
||||
* ISO 11898-1 Chapter 8.4.2.3 (DLC field)
|
||||
*/
|
||||
#define can_get_dlc(v) (rt_min_t(rt_uint8_t, (v), CAN_MAX_DLC))
|
||||
#define canfd_get_dlc(v) (rt_min_t(rt_uint8_t, (v), CANFD_MAX_DLC))
|
||||
|
||||
/**
|
||||
* @brief Convert CAN DLC value to actual data length
|
||||
*
|
||||
* Converts a CAN Data Length Code (DLC) to the actual number of data bytes
|
||||
* according to ISO 11898-1 and ISO 11898-7 (CAN FD) specifications.
|
||||
*
|
||||
* @param can_dlc The DLC value (0-15)
|
||||
* @return The actual data length in bytes
|
||||
*/
|
||||
rt_uint8_t can_dlc2len(rt_uint8_t can_dlc);
|
||||
|
||||
/**
|
||||
* @brief Convert data length to CAN DLC value
|
||||
*
|
||||
* Converts a data length in bytes to the appropriate CAN Data Length Code (DLC)
|
||||
* according to ISO 11898-1 and ISO 11898-7 (CAN FD) specifications.
|
||||
*
|
||||
* @param len The data length in bytes (0-64)
|
||||
* @return The corresponding DLC value (0-15)
|
||||
*/
|
||||
rt_uint8_t can_len2dlc(rt_uint8_t len);
|
||||
|
||||
#endif /* __CAN_DM_H__ */
|
||||
Reference in New Issue
Block a user