diff --git a/boards/arm/cc2650_sensortag/Kconfig b/boards/arm/cc2650_sensortag/Kconfig new file mode 100644 index 00000000000..9500cc0f386 --- /dev/null +++ b/boards/arm/cc2650_sensortag/Kconfig @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Kconfig - TI CC2650 SensorTag configuration +# + +if BOARD_CC2650_SENSORTAG + +endif # BOARD_CC2650_SENSORTAG diff --git a/boards/arm/cc2650_sensortag/Kconfig.board b/boards/arm/cc2650_sensortag/Kconfig.board new file mode 100644 index 00000000000..9567ae64bd9 --- /dev/null +++ b/boards/arm/cc2650_sensortag/Kconfig.board @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Kconfig - TI SimpleLink CC2650 SensorTag Board +# + +config BOARD_CC2650_SENSORTAG + bool "TI CC2650 SensorTag" + depends on SOC_CC2650 diff --git a/boards/arm/cc2650_sensortag/Kconfig.defconfig b/boards/arm/cc2650_sensortag/Kconfig.defconfig new file mode 100644 index 00000000000..50afc605789 --- /dev/null +++ b/boards/arm/cc2650_sensortag/Kconfig.defconfig @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: Apache-2.0 +# +# Kconfig - TI CC2650 SensorTag board configuration +# + +if BOARD_CC2650_SENSORTAG + +config BOARD + default cc2650_sensortag + +endif # BOARD_CC2650_SENSORTAG diff --git a/boards/arm/cc2650_sensortag/Makefile b/boards/arm/cc2650_sensortag/Makefile new file mode 100644 index 00000000000..16f5448ec87 --- /dev/null +++ b/boards/arm/cc2650_sensortag/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Temporary solution: always launch pinmux init +obj-y += pinmux.o diff --git a/boards/arm/cc2650_sensortag/board.h b/boards/arm/cc2650_sensortag/board.h new file mode 100644 index 00000000000..2adc914cf75 --- /dev/null +++ b/boards/arm/cc2650_sensortag/board.h @@ -0,0 +1,58 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Board-specific information for Texas Instruments' + * SensorTag device. + */ + + +#ifndef _CC2650_SENSORTAG_BOARD_H_ +#define _CC2650_SENSORTAG_BOARD_H_ + +/* Match a feature on the board to an I/O pin + * (DIOx in local jargon) + */ +#define SENSORTAG_BUTTON2 0 +#define SENSORTAG_TMP_RDY 1 +#define SENSORTAG_AUDIO_D 2 +#define SENSORTAG_REED 3 +#define SENSORTAG_BUTTON1 4 +#define SENSORTAG_SDA 5 +#define SENSORTAG_SCL 6 +#define SENSORTAG_MPU_INT 7 +#define SENSORTAG_SDA_HP 8 +#define SENSORTAG_SCL_HP 9 +#define SENSORTAG_LED1 10 +#define SENSORTAG_DP7 11 +#define SENSORTAG_AUDIO_CLK SENSORTAG_DP7 +#define SENSORTAG_MPU_PWR 12 +#define SENSORTAG_MIC_PWR 13 +#define SENSORTAG_FLASH_CS 14 +#define SENSORTAG_LED2 15 +#define SENSORTAG_DP12 16 +#define SENSORTAG_AUDIO_FS SENSORTAG_DP12 +#define SENSORTAG_TDO SENSORTAG_DP12 +#define SENSORTAG_DP8 17 +#define SENSORTAG_SCLK SENSORTAG_DP8 +#define SENSORTAG_TDI SENSORTAG_DP8 +#define SENSORTAG_DP9 18 +#define SENSORTAG_MISO SENSORTAG_DP9 +#define SENSORTAG_DP10 19 +#define SENSORTAG_MOSI SENSORTAG_DP10 +#define SENSORTAG_DP11 20 +#define SENSORTAG_CSN SENSORTAG_DP11 +#define SENSORTAG_BUZZER 21 +#define SENSORTAG_DP6 22 +#define SENSORTAG_AUDIO_DO SENSORTAG_DP6 +#define SENSORTAG_DP2 23 +#define SENSORTAG_DP1 24 +#define SENSORTAG_DP0 25 +#define SENSORTAG_VDD 26 +#define SENSORTAG_DP3 27 +#define SENSORTAG_DP4 28 +#define SENSORTAG_UART_RX SENSORTAG_DP4 +#define SENSORTAG_DP5 29 +#define SENSORTAG_UART_TX SENSORTAG_DP5 +#define SENSORTAG_DP_D 30 + +#endif /* _CC2650_SENSORTAG_BOARD_H_ */ diff --git a/boards/arm/cc2650_sensortag/cc2650_sensortag_defconfig b/boards/arm/cc2650_sensortag/cc2650_sensortag_defconfig new file mode 100644 index 00000000000..4926f745451 --- /dev/null +++ b/boards/arm/cc2650_sensortag/cc2650_sensortag_defconfig @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: Apache-2.0 + +# General options + +CONFIG_HAS_DTS=y +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=48000000 +CONFIG_FLASH=y +CONFIG_FLASH_BASE_ADDRESS=0x00000000 +CONFIG_SRAM_BASE_ADDRESS=0x20000000 +CONFIG_BOOTLOADER_SRAM_SIZE=0 +CONFIG_XIP=y +CONFIG_PRINTK=y + +# Platform-specific options + +CONFIG_ARM=y +CONFIG_CORTEX_M_SYSTICK=y +CONFIG_BOARD_CC2650_SENSORTAG=y +CONFIG_SOC_FAMILY_TISIMPLELINK=y +CONFIG_SOC_SERIES_CC2650=y +CONFIG_SOC_CC2650=y + +# Pinmux driver +CONFIG_PINMUX=y +CONFIG_PINMUX_CC2650=y +CONFIG_PINMUX_CC2650_INIT_PRIO=1 + +# GPIO driver +CONFIG_GPIO=y +CONFIG_GPIO_CC2650=y +CONFIG_GPIO_CC2650_INIT_PRIO=0 + +# UART driver +CONFIG_SERIAL=y +CONFIG_SERIAL_HAS_DRIVER=y +CONFIG_UART_STELLARIS=y +CONFIG_UART_STELLARIS_PORT_0=y + +# Console driver +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# Random number generator driver +CONFIG_RANDOM_GENERATOR=y +CONFIG_CC2650_TRNG_RANDOM_GENERATOR=y +CONFIG_CC2650_TRNG_IRQ_PRIO=0 diff --git a/boards/arm/cc2650_sensortag/pinmux.c b/boards/arm/cc2650_sensortag/pinmux.c new file mode 100644 index 00000000000..b722f0445ea --- /dev/null +++ b/boards/arm/cc2650_sensortag/pinmux.c @@ -0,0 +1,43 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * Board-specific pin multiplexing for Texas Instruments' + * SensorTag device. + * + * For now, this only setups a default configuration + * at initialization (not a real pinmux driver). + */ + +#include +#include +#include +#include + +#include "board.h" + + +static int sensortag_pinmux_init(struct device *dev) +{ + dev = device_get_binding(CONFIG_PINMUX_NAME); + + /* DIO10 is LED 1 */ + pinmux_pin_set(dev, SENSORTAG_LED1, CC2650_IOC_GPIO); + pinmux_pin_input_enable(dev, SENSORTAG_LED1, PINMUX_OUTPUT_ENABLED); + + /* DIO15 is LED 2 */ + pinmux_pin_set(dev, SENSORTAG_LED2, CC2650_IOC_GPIO); + pinmux_pin_input_enable(dev, SENSORTAG_LED2, PINMUX_OUTPUT_ENABLED); + + /* UART RX */ + pinmux_pin_set(dev, SENSORTAG_UART_RX, CC2650_IOC_MCU_UART0_RX); + pinmux_pin_input_enable(dev, SENSORTAG_UART_RX, PINMUX_INPUT_ENABLED); + + /* UART TX */ + pinmux_pin_set(dev, SENSORTAG_UART_TX, CC2650_IOC_MCU_UART0_TX); + pinmux_pin_input_enable(dev, SENSORTAG_UART_TX, PINMUX_OUTPUT_ENABLED); + + return 0; +} + +SYS_INIT(sensortag_pinmux_init, PRE_KERNEL_1, + CONFIG_PINMUX_INIT_PRIORITY); diff --git a/dts/arm/Makefile b/dts/arm/Makefile index 7df3c98877d..f84c23bb680 100644 --- a/dts/arm/Makefile +++ b/dts/arm/Makefile @@ -41,6 +41,6 @@ dtb-$(CONFIG_BOARD_SAM_E70_XPLAINED) = sam_e70_xplained.dts_compiled dtb-$(CONFIG_BOARD_ARDUINO_DUE) = arduino_due.dts_compiled dtb-$(CONFIG_BOARD_SAM4S_XPLAINED) = sam4s_xplained.dts_compiled dtb-$(CONFIG_BOARD_OLIMEX_STM32_E407) = olimex_stm32_e407.dts_compiled - +dtb-$(CONFIG_BOARD_CC2650_SENSORTAG) = cc2650_sensortag.dts_compiled always := $(dtb-y) endif diff --git a/dts/arm/cc2650_sensortag.dts b/dts/arm/cc2650_sensortag.dts new file mode 100644 index 00000000000..82c1e41f1d2 --- /dev/null +++ b/dts/arm/cc2650_sensortag.dts @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: Apache-2.0 */ + +/dts-v1/; + +#include "ti/cc2650.dtsi" + +/ { + model = "TI CC2650 SensorTag"; + compatible = "ti,cc2650"; + + aliases { + gpio_a = &gpioa; + pinmux_a = &pinmux_a; + prcm0 = &prcm0; + trng0 = &trng0; + uart_0 = &uart0; + }; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; +}; + +&gpioa { + status = "ok"; +}; + +&trng0 { + status = "ok"; +}; + +&uart0 { + status = "ok"; + current-speed = <115200>; +}; + diff --git a/dts/arm/cc2650_sensortag.fixup b/dts/arm/cc2650_sensortag.fixup new file mode 100644 index 00000000000..fc0383227d3 --- /dev/null +++ b/dts/arm/cc2650_sensortag.fixup @@ -0,0 +1,8 @@ +#define CONFIG_NUM_IRQ_PRIO_BITS ARM_V7M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS + +#define TI_STELLARIS_UART_4000C000_BASE_ADDRESS TI_STELLARIS_UART_40001000_BASE_ADDRESS +#define TI_STELLARIS_UART_4000C000_CURRENT_SPEED TI_STELLARIS_UART_40001000_CURRENT_SPEED +#define UART_STELLARIS_CLK_FREQ CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC +#define TI_STELLARIS_UART_4000C000_IRQ_0 TI_STELLARIS_UART_40001000_IRQ_0 +#define TI_STELLARIS_UART_4000C000_IRQ_0_PRIORITY TI_STELLARIS_UART_40001000_IRQ_0_PRIORITY +#define TI_STELLARIS_UART_4000C000_LABEL TI_STELLARIS_UART_40001000_LABEL diff --git a/dts/arm/ti/cc2650.dtsi b/dts/arm/ti/cc2650.dtsi index bb70c71d6ad..7255f831ba9 100644 --- a/dts/arm/ti/cc2650.dtsi +++ b/dts/arm/ti/cc2650.dtsi @@ -57,6 +57,7 @@ reg = <0x40001000 0x4C>; interrupts = <5 0>, <6 0>; status = "disabled"; + label = "UART_0"; }; }; };