Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Infineon XMC4xxx CAN driver #67057

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions boards/arm/xmc47_relax_kit/xmc47_relax_kit-pinctrl.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,14 @@
drive-strength = "strong-medium-edge";
hwctrl = "disabled";
};

&can_tx_p1_12_node1 {
drive-strength = "strong-soft-edge";
drive-push-pull;
hwctrl = "disabled";
};

&can_rx_p1_13_node1 {
drive-strength = "strong-soft-edge";
hwctrl = "disabled";
};
14 changes: 14 additions & 0 deletions boards/arm/xmc47_relax_kit/xmc47_relax_kit.dts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
zephyr,shell-uart = &usic0ch0;
zephyr,flash-controller = &flash_controller;
zephyr,code-partition = &code_partition;
zephyr,canbus = &can_node1;
};

};
Expand Down Expand Up @@ -199,3 +200,16 @@
reg = <0>;
};
};

&can {
clock-prescaler = <6>;
};

&can_node1 {
status = "okay";
bus-speed = <125000>;
sample-point = <875>;
input-src = "RXDC";
pinctrl-0 = <&can_tx_p1_12_node1 &can_rx_p1_13_node1>;
pinctrl-names = "default";
};
1 change: 1 addition & 0 deletions drivers/can/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ zephyr_library_sources_ifdef(CONFIG_CAN_STM32H7_FDCAN can_stm32h7_fdcan.c)
zephyr_library_sources_ifdef(CONFIG_CAN_TCAN4X5X can_tcan4x5x.c)
zephyr_library_sources_ifdef(CONFIG_CAN_RCAR can_rcar.c)
zephyr_library_sources_ifdef(CONFIG_CAN_NUMAKER can_numaker.c)
zephyr_library_sources_ifdef(CONFIG_CAN_XMC4XXX can_xmc4xxx.c)
zephyr_library_sources_ifdef(CONFIG_CAN_SJA1000 can_sja1000.c)
zephyr_library_sources_ifdef(CONFIG_CAN_ESP32_TWAI can_esp32_twai.c)
zephyr_library_sources_ifdef(CONFIG_CAN_KVASER_PCI can_kvaser_pci.c)
Expand Down
1 change: 1 addition & 0 deletions drivers/can/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ source "drivers/can/Kconfig.fake"
source "drivers/can/Kconfig.nxp_s32"
source "drivers/can/Kconfig.tcan4x5x"
source "drivers/can/Kconfig.mcp251xfd"
source "drivers/can/Kconfig.xmc4xxx"

source "drivers/can/transceiver/Kconfig"

Expand Down
43 changes: 43 additions & 0 deletions drivers/can/Kconfig.xmc4xxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Infineon XMC4xxx CAN configuration options
# Copyright (c) 2023 Andriy Gelman
# SPDX-License-Identifier: Apache-2.0

config CAN_XMC4XXX
bool "Infineon XMC4xxx CAN Driver"
default y
depends on DT_HAS_INFINEON_XMC4XXX_CAN_NODE_ENABLED
help
Enable Infineon XMC4xxx CAN Driver

if CAN_XMC4XXX

config CAN_XMC4XXX_MAX_TX_QUEUE
int "Maximum number of queued messages"
default 8
range 1 32
help
Defines the array size of transmit callback pointers and semaphores,
as well as the number of messages in the TX queue.

config CAN_XMC4XXX_RX_FIFO_ITEMS
int "Number of CAN messages allocated to each RX FIFO"
default 8
range 1 32
help
Defines the number of CAN messages in each RX FIFO. A separate RX FIFO
is created for each RX filter.

config CAN_XMC4XXX_INTERNAL_BUS_MODE
bool "Internal bus mode"
help
Connects all XMC4XXX CAN devices to an internal bus. Enables
message exchange between MCU CAN devices without any external connectors.

config CAN_MAX_FILTER
int "Maximum number of concurrent active filters"
default 4
range 1 32
help
Maximum number of filters supported by the can_add_rx_callback() API call.

endif # CAN_XMC4XXX
Loading
Loading