You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by je...@apache.org on 2023/01/18 11:16:01 UTC
[nuttx] 02/02: Add support of CAN character device for tm4c1294 launchpad.
This is an automated email from the ASF dual-hosted git repository.
jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit c19b5eeb8d8f37394c79ff85876c7ba6d846fc12
Author: David <dv...@gmail.com>
AuthorDate: Mon Jan 16 14:29:31 2023 +0100
Add support of CAN character device for tm4c1294 launchpad.
---
boards/arm/tiva/tm4c1294-launchpad/Kconfig | 42 +++++++
boards/arm/tiva/tm4c1294-launchpad/include/board.h | 12 ++
boards/arm/tiva/tm4c1294-launchpad/src/Makefile | 4 +
.../tm4c1294-launchpad/src/tm4c1294-launchpad.h | 18 ++-
.../arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c | 22 ++++
boards/arm/tiva/tm4c1294-launchpad/src/tm4c_can.c | 136 +++++++++++++++++++++
6 files changed, 233 insertions(+), 1 deletion(-)
diff --git a/boards/arm/tiva/tm4c1294-launchpad/Kconfig b/boards/arm/tiva/tm4c1294-launchpad/Kconfig
index ec8c2464fa..6b28e98da6 100644
--- a/boards/arm/tiva/tm4c1294-launchpad/Kconfig
+++ b/boards/arm/tiva/tm4c1294-launchpad/Kconfig
@@ -72,4 +72,46 @@ config TM4C1294_LAUNCHPAD_TIMER_ALTCLK
endif # TM4C1294_LAUNCHPAD_TIMER
endif # TIVA_TIMER32_PERIODIC
+config TM4C1294_LAUNCHPAD_JUMPERS_CAN
+ bool "Use CAN jumpers configuration"
+ default n
+ select TIVA_UART2
+ ---help---
+ If set, NuttX will assume the jumpers JP4 and JP5 are set in CAN configuration.
+ This means UART2 will be connected to the ICDI serial port.
+
+choice
+ prompt "UART2 Rx pin selection"
+ depends on TIVA_UART2
+ default TM4C1294_LAUNCHPAD_UART2_RX_A6
+
+config TM4C1294_LAUNCHPAD_UART2_RX_A6
+ bool "Use A6 as UART Rx pin"
+ default n
+ depends on TIVA_UART2 && !TM4C1294_LAUNCHPAD_JUMPERS_CAN
+
+config TM4C1294_LAUNCHPAD_UART2_RX_D4
+ bool "Use D4 as UART Rx pin"
+ default n
+ depends on TIVA_UART2
+
+endchoice # UART2 Rx pin selection
+
+choice
+ prompt "UART2 Tx pin selection"
+ default TM4C1294_LAUNCHPAD_UART2_TX_A7
+ depends on TIVA_UART2
+
+config TM4C1294_LAUNCHPAD_UART2_TX_A7
+ bool "Use A7 as UART Tx pin"
+ default n
+ depends on TIVA_UART2 && !TM4C1294_LAUNCHPAD_JUMPERS_CAN
+
+config TM4C1294_LAUNCHPAD_UART2_TX_D5
+ bool "Use D5 as UART Tx pin"
+ default n
+ depends on TIVA_UART2
+
+endchoice # UART2 Tx pin selection
+
endif # ARCH_BOARD_TM4C1294_LAUNCHPAD
diff --git a/boards/arm/tiva/tm4c1294-launchpad/include/board.h b/boards/arm/tiva/tm4c1294-launchpad/include/board.h
index 159f4be6b8..a7b57c1907 100644
--- a/boards/arm/tiva/tm4c1294-launchpad/include/board.h
+++ b/boards/arm/tiva/tm4c1294-launchpad/include/board.h
@@ -190,6 +190,18 @@
#define GPIO_EN0_LED1 GPIO_EN0_LED1_1
#define GPIO_EN0_LED2 GPIO_EN0_LED2_1
+#if CONFIG_TM4C1294_LAUNCHPAD_UART2_RX_D4
+#define GPIO_UART2_RX GPIO_UART2_RX_2
+#elif CONFIG_TM4C1294_LAUNCHPAD_UART2_RX_A6
+#define GPIO_UART2_RX GPIO_UART2_RX_1
+#endif
+
+#if CONFIG_TM4C1294_LAUNCHPAD_UART2_TX_D5
+#define GPIO_UART2_TX GPIO_UART2_TX_2
+#elif CONFIG_TM4C1294_LAUNCHPAD_UART2_TX_A7
+#define GPIO_UART2_TX GPIO_UART2_TX_1
+#endif
+
/* Control pins for BOOST-CC2564MODA plugged into BoosterPack1
*
* --- ------------
diff --git a/boards/arm/tiva/tm4c1294-launchpad/src/Makefile b/boards/arm/tiva/tm4c1294-launchpad/src/Makefile
index 87e3452492..db6912670a 100644
--- a/boards/arm/tiva/tm4c1294-launchpad/src/Makefile
+++ b/boards/arm/tiva/tm4c1294-launchpad/src/Makefile
@@ -36,6 +36,10 @@ ifeq ($(CONFIG_TIVA_ETHERNET),y)
CSRCS += tm4c_ethernet.c
endif
+ifeq ($(CONFIG_TIVA_CAN),y)
+CSRCS += tm4c_can.c
+endif
+
ifeq ($(CONFIG_DK_TM4C129X_TIMER),y)
CSRCS += tm4c_timer.c
endif
diff --git a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c1294-launchpad.h b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c1294-launchpad.h
index 0836d16df8..b9792254d7 100644
--- a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c1294-launchpad.h
+++ b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c1294-launchpad.h
@@ -41,7 +41,7 @@
#if !defined(CONFIG_TIVA_HCIUART) || !defined(CONFIG_BLUETOOTH_UART)
# undef HAVE_HCIUART
-#elif defined(CONFIG_TIVA_UART0_HCIUART)
+#elif defined(CONFIG_TIVA_UART0_HCIUART) && !defined(TM4C1294_LAUNCHPAD_JUMPERS_CAN)
# define HCIUART_SERDEV HCIUART0
#elif defined(CONFIG_TIVA_UART1_HCIUART)
# define HCIUART_SERDEV HCIUART1
@@ -77,6 +77,10 @@
# undef HAVE_I2CTOOL
#endif
+/* Define the procfs mounting point */
+
+#define TIVA_PROCFS_MOUNTPOINT "/proc"
+
/* LED definitions **********************************************************/
/* The EK-TM4C1294XL has a four green LEDs.
@@ -211,6 +215,18 @@ int tm4c_bringup(void);
int tiva_timer_configure(void);
#endif
+/****************************************************************************
+ * Name: tm4c_can_setup
+ *
+ * Description:
+ * Initialize CAN modules and register the CAN driver.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_TIVA_CAN
+int tm4c_can_setup(void);
+#endif
+
/****************************************************************************
* Name: hciuart_dev_initialize
*
diff --git a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c
index 1288ea5ad0..5d73175e37 100644
--- a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c
+++ b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_bringup.c
@@ -31,6 +31,7 @@
#include <nuttx/i2c/i2c_master.h>
#include <nuttx/sensors/qencoder.h>
#include <arch/board/board.h>
+#include <nuttx/fs/fs.h>
#include <nuttx/timers/pwm.h>
@@ -305,6 +306,17 @@ int tm4c_bringup(void)
tm4c_i2ctool();
+#ifdef CONFIG_FS_PROCFS
+ /* Mount the procfs file system */
+
+ ret = nx_mount(NULL, TIVA_PROCFS_MOUNTPOINT, "procfs", 0, NULL);
+ if (ret < 0)
+ {
+ syslog(LOG_ERR, "ERROR: Failed to mount procfs at %s: %d\n",
+ TIVA_PROCFS_MOUNTPOINT, ret);
+ }
+#endif
+
#ifdef HAVE_PWM
/* Register PWM drivers */
@@ -317,6 +329,16 @@ int tm4c_bringup(void)
tm4c_qei();
#endif
+#ifdef CONFIG_TIVA_CAN
+ /* Initialize CAN module and register the CAN driver(s) */
+
+ ret = tm4c_can_setup();
+ if (ret < 0)
+ {
+ syslog(LOG_ERR, "ERROR: tm4c_can_setup failed %d\n", ret);
+ }
+#endif
+
#ifdef HAVE_TIMER
/* Initialize the timer driver */
diff --git a/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_can.c b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_can.c
new file mode 100644
index 0000000000..5649a4ca4f
--- /dev/null
+++ b/boards/arm/tiva/tm4c1294-launchpad/src/tm4c_can.c
@@ -0,0 +1,136 @@
+/****************************************************************************
+ * boards/arm/tiva/tm4c1294-launchpad/src/tm4c_can.c
+ * Based heavily on tiva_can.c from the tm4c1293-launchpad board
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <errno.h>
+#include <debug.h>
+
+#include <nuttx/can/can.h>
+#include <arch/board/board.h>
+
+#include "chip.h"
+#include "arm_internal.h"
+
+#include "tiva_can.h"
+#include "tm4c1294-launchpad.h"
+
+#include "tiva_enableclks.h"
+#include "tiva_gpio.h"
+#include "hardware/tiva_pinmap.h"
+
+#ifdef CONFIG_CAN
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: tm4c_can_setup
+ *
+ * Description:
+ * Initialize CAN and register the CAN device
+ *
+ ****************************************************************************/
+
+int tm4c_can_setup(void)
+{
+#ifdef CONFIG_TIVA_CAN
+ int ret;
+
+# ifdef CONFIG_TIVA_CAN0
+ tiva_can0_enableclk();
+
+ ret = tiva_configgpio(GPIO_CAN0_RX);
+
+ if (ret < 0)
+ {
+ goto configgpio_error;
+ }
+
+ ret = tiva_configgpio(GPIO_CAN0_TX);
+
+ if (ret < 0)
+ {
+ goto configgpio_error;
+ }
+
+ /* Call tiva_can_initialize() to get an instance of CAN interface 0
+ * and register it.
+ */
+
+ ret = tiva_can_initialize("/dev/can0", 0);
+ if (ret < 0)
+ {
+ canerr("ERROR: Failed to get/register CAN interface 0\n");
+ return ret;
+ }
+# endif /* CONFIG_TIVA_CAN0 */
+
+# ifdef CONFIG_TIVA_CAN1
+ tiva_can1_enableclk();
+
+ ret = tiva_configgpio(GPIO_CAN1_RX);
+
+ if (ret < 0)
+ {
+ goto configgpio_error;
+ }
+
+ ret = tiva_configgpio(GPIO_CAN1_TX);
+
+ if (ret < 0)
+ {
+ goto configgpio_error;
+ }
+
+ /* Call tiva_can_initialize() to get an instance of CAN interface 1
+ * and register it.
+ */
+
+ ret = tiva_can_initialize("/dev/can1", 1);
+ if (ret < 0)
+ {
+ canerr("ERROR: Failed to get/register CAN interface 1\n");
+ return ret;
+ }
+# endif /* CONFIG_TIVA_CAN1 */
+
+ return OK;
+
+configgpio_error:
+ canerr("ERROR: failed to configure CAN GPIO pin.\n");
+ return ret;
+#else
+ return -ENODEV;
+#endif
+}
+
+#endif /* CONFIG_CAN */
+