From fd91af4f702c64c313cc42c1199f8a633f8157d2 Mon Sep 17 00:00:00 2001 From: Michal Lenc Date: Sat, 11 Feb 2023 01:11:40 +0100 Subject: [PATCH] teensy-4.x: update pikron-bb configuration with PMSM control abilities This commit updates configuration pikron-bb (configuration for open hardware experimental board) to support permanent magnet sychnronous motor control. This includes setup of PWM, GPIO and ADC peripherals. Required follow up changes are done to pinout definition. Signed-off-by: Michal Lenc --- boards/arm/imxrt/teensy-4.x/Kconfig | 10 +++++ .../teensy-4.x/configs/pikron-bb/defconfig | 45 +++++++++++++------ boards/arm/imxrt/teensy-4.x/include/board.h | 8 ++++ boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c | 8 ++++ boards/arm/imxrt/teensy-4.x/src/imxrt_gpio.c | 5 +++ boards/arm/imxrt/teensy-4.x/src/teensy-4.h | 26 ++++++++--- 6 files changed, 83 insertions(+), 19 deletions(-) diff --git a/boards/arm/imxrt/teensy-4.x/Kconfig b/boards/arm/imxrt/teensy-4.x/Kconfig index ed40dd19b44..9d55a707a64 100644 --- a/boards/arm/imxrt/teensy-4.x/Kconfig +++ b/boards/arm/imxrt/teensy-4.x/Kconfig @@ -39,4 +39,14 @@ config NET_USE_OTP_ETHERNET_MAC (the vendor ID of 'PJRC.COM, LLC') when this feature is enabled. It may also be used with other boards that have the OCOTP programmed with a valid MAC. +if TEENSY_41 + +config TEENSY_41_PIKRON_BB + bool "Base board for Teensy 4.1 configuration" + ---help--- + Configuration pikron-bb contains setup for open hardware based board fo Teensy 4.1. This option + sets up HW pinout as ADC channels for example. + +endif + endif diff --git a/boards/arm/imxrt/teensy-4.x/configs/pikron-bb/defconfig b/boards/arm/imxrt/teensy-4.x/configs/pikron-bb/defconfig index d7a391523a1..806ad7601d1 100644 --- a/boards/arm/imxrt/teensy-4.x/configs/pikron-bb/defconfig +++ b/boards/arm/imxrt/teensy-4.x/configs/pikron-bb/defconfig @@ -7,7 +7,12 @@ # # CONFIG_ARCH_LEDS is not set # CONFIG_NSH_DISABLE_DATE is not set +# CONFIG_NSH_DISABLE_MB is not set +# CONFIG_NSH_DISABLE_MH is not set +# CONFIG_NSH_DISABLE_MW is not set +CONFIG_ADC=y CONFIG_ALLOW_GPL_COMPONENTS=y +CONFIG_ANALOG=y CONFIG_ARCH="arm" CONFIG_ARCH_BOARD="teensy-4.x" CONFIG_ARCH_BOARD_TEENSY_4X=y @@ -29,12 +34,12 @@ CONFIG_CANCELLATION_POINTS=y CONFIG_CANUTILS_CANDUMP=y CONFIG_CANUTILS_CANSEND=y CONFIG_CAN_FD=y +CONFIG_DEV_GPIO=y CONFIG_DEV_LOOP=y CONFIG_DEV_ZERO=y -CONFIG_DRIVERS_VIDEO=y CONFIG_ELF=y +CONFIG_ENC1_XIE=y CONFIG_ETH0_PHY_DP83825I=y -CONFIG_EXAMPLES_FB=y CONFIG_EXECFUNCS_HAVE_SYMTAB=y CONFIG_EXECFUNCS_SYSTEM_SYMTAB=y CONFIG_FAT_LCNAMES=y @@ -48,23 +53,33 @@ CONFIG_FS_PROCFS_REGISTER=y CONFIG_FS_ROMFS=y CONFIG_FS_TMPFS=y CONFIG_IDLETHREAD_STACKSIZE=2048 +CONFIG_IMXRT_ADC2=y +CONFIG_IMXRT_ADC2_ETC=54 +CONFIG_IMXRT_ENC1=y CONFIG_IMXRT_ENET=y -CONFIG_IMXRT_ENET_NRXBUFFERS=16 -CONFIG_IMXRT_ENET_NTXBUFFERS=8 CONFIG_IMXRT_FLEXCAN1=y CONFIG_IMXRT_FLEXCAN2=y CONFIG_IMXRT_FLEXCAN3=y CONFIG_IMXRT_FLEXCAN3_AS_CAN0=y CONFIG_IMXRT_FLEXCAN_TXMB=1 -CONFIG_IMXRT_LPSPI4=y +CONFIG_IMXRT_FLEXPWM1=y +CONFIG_IMXRT_FLEXPWM1_MOD4=y +CONFIG_IMXRT_FLEXPWM1_MOD4_TRIG=y +CONFIG_IMXRT_FLEXPWM2=y +CONFIG_IMXRT_FLEXPWM2_MOD3=y +CONFIG_IMXRT_FLEXPWM2_MOD3_SYNC_SRC=43 +CONFIG_IMXRT_FLEXPWM3=y +CONFIG_IMXRT_FLEXPWM3_MOD2=y +CONFIG_IMXRT_FLEXPWM3_MOD2_SYNC_SRC=43 +CONFIG_IMXRT_FLEXPWM4=y +CONFIG_IMXRT_FLEXPWM4_MOD3=y +CONFIG_IMXRT_FLEXPWM4_MOD3_SYNC_SRC=43 +CONFIG_IMXRT_FLEXPWM4_MOD3_TRIG=y +CONFIG_IMXRT_FLEXPWM4_MOD3_TRIG_DUTY=y CONFIG_IMXRT_LPUART1=y CONFIG_IMXRT_SNVS_LPSRTC=y CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INTELHEX_BINARY=y -CONFIG_LCD=y -CONFIG_LCD_FRAMEBUFFER=y -CONFIG_LCD_PORTRAIT=y -CONFIG_LCD_ST7789=y CONFIG_LIBC_DLFCN=y CONFIG_LIBC_ENVPATH=y CONFIG_LIBC_EXECFUNCS=y @@ -84,6 +99,7 @@ CONFIG_NET_ARP_SEND=y CONFIG_NET_BROADCAST=y CONFIG_NET_CAN=y CONFIG_NET_CAN_SOCK_OPTS=y +CONFIG_NET_ETH_PKTSIZE=1518 CONFIG_NET_ICMP=y CONFIG_NET_ICMP_SOCKET=y CONFIG_NET_ICMPv6=y @@ -122,18 +138,20 @@ CONFIG_PTHREAD_CLEANUP=y CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_INHERIT=y CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_PTHREAD_STACK_MIN=1024 +CONFIG_PWM=y CONFIG_RAM_SIZE=1048576 CONFIG_RAM_START=0x20200000 CONFIG_READLINE_CMD_HISTORY=y CONFIG_RR_INTERVAL=10 CONFIG_SCHED_CPULOAD=y -CONFIG_SCHED_CPULOAD_EXTCLK=y CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_TICKLESS=y +CONFIG_SCHED_TICKLESS_ALARM=y CONFIG_SCHED_USER_IDENTITY=y CONFIG_SCHED_WAITPID=y +CONFIG_SENSORS=y +CONFIG_SENSORS_QENCODER=y CONFIG_SERIAL_TERMIOS=y -CONFIG_SPI=y -CONFIG_SPI_CMDDATA=y CONFIG_START_DAY=14 CONFIG_START_MONTH=3 CONFIG_SYMTAB_ORDEREDBYNAME=y @@ -145,5 +163,4 @@ CONFIG_SYSTEM_PING6=y CONFIG_SYSTEM_PING=y CONFIG_SYSTEM_TEE=y CONFIG_TEENSY_41=y -CONFIG_USEC_PER_TICK=1000 -CONFIG_VIDEO_FB=y +CONFIG_TEENSY_41_PIKRON_BB=y diff --git a/boards/arm/imxrt/teensy-4.x/include/board.h b/boards/arm/imxrt/teensy-4.x/include/board.h index 356e0068c20..11140e77525 100644 --- a/boards/arm/imxrt/teensy-4.x/include/board.h +++ b/boards/arm/imxrt/teensy-4.x/include/board.h @@ -281,6 +281,14 @@ #define GPIO_FLEXPWM2_MOD1_A (GPIO_FLEXPWM2_PWMA00_1|IOMUX_PWM_DEFAULT) /* GPIO_EMC_06 */ #define GPIO_FLEXPWM2_MOD2_A (GPIO_FLEXPWM2_PWMA01_1|IOMUX_PWM_DEFAULT) /* GPIO_EMC_08 */ +/* FlexPWM setup for PMSM control - used in pikron-bb configuration */ + +#define GPIO_FLEXPWM3_MOD2_A (GPIO_FLEXPWM3_PWMA01_1 | IOMUX_PWM_DEFAULT) /* GPIO_EMC_31 */ +#define GPIO_FLEXPWM2_MOD3_A (GPIO_FLEXPWM2_PWMA02_2 | IOMUX_PWM_DEFAULT) /* GPIO_B0_10 */ +#define GPIO_FLEXPWM1_MOD4_A (GPIO_FLEXPWM1_PWMA03_5 | IOMUX_PWM_DEFAULT) /* GPIO_B1_00 */ + +#define GPIO_FLEXPWM4_MOD3_A (IOMUX_PWM_DEFAULT) /* PWM: ADC Trigger */ + /**************************************************************************** * Public Types ****************************************************************************/ diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c index e6280214ecf..30672e4a681 100644 --- a/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c +++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_adc.c @@ -40,7 +40,11 @@ /* channels 1 and 2 have the same number of pins on Teensy */ +#ifdef CONFIG_TEENSY_41_PIKRON_BB +#define ADC_NCHANNELS 3 +#else #define ADC_NCHANNELS 16 +#endif /**************************************************************************** * Private Data @@ -48,7 +52,11 @@ static const uint8_t g_chanlist[ADC_NCHANNELS] = { +#ifdef CONFIG_TEENSY_41_PIKRON_BB + 4, 2, 9 +#else 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15 +#endif }; /**************************************************************************** diff --git a/boards/arm/imxrt/teensy-4.x/src/imxrt_gpio.c b/boards/arm/imxrt/teensy-4.x/src/imxrt_gpio.c index f7e57c49650..f9eb02c850f 100644 --- a/boards/arm/imxrt/teensy-4.x/src/imxrt_gpio.c +++ b/boards/arm/imxrt/teensy-4.x/src/imxrt_gpio.c @@ -92,6 +92,8 @@ static const struct gpio_operations_s gpout_ops = static const uint32_t g_gpioinputs[BOARD_NGPIOIN] = { GPIO_IN1, + GPIO_IN2, + GPIO_IN3, }; static struct imxrtgpio_dev_s g_gpin[BOARD_NGPIOIN]; @@ -103,6 +105,9 @@ static struct imxrtgpio_dev_s g_gpin[BOARD_NGPIOIN]; static const uint32_t g_gpiooutputs[BOARD_NGPIOOUT] = { GPIO_OUT1, + GPIO_OUT2, + GPIO_OUT3, + GPIO_OUT4, }; static struct imxrtgpio_dev_s g_gpout[BOARD_NGPIOOUT]; diff --git a/boards/arm/imxrt/teensy-4.x/src/teensy-4.h b/boards/arm/imxrt/teensy-4.x/src/teensy-4.h index 17362cac038..94b9371e541 100644 --- a/boards/arm/imxrt/teensy-4.x/src/teensy-4.h +++ b/boards/arm/imxrt/teensy-4.x/src/teensy-4.h @@ -118,14 +118,30 @@ #define GPIO_ENC1_PHASE_B (GPIO_XBAR1_INOUT08_1|IOMUX_ENC_DEFAULT|PADMUX_MUXMODE_ALT3) /* EMC_06 */ #define GPIO_ENC1_INDEX (GPIO_XBAR1_INOUT10_1|IOMUX_ENC_DEFAULT|PADMUX_MUXMODE_ALT1) /* B0_12 */ -/* GPIO pins used by the GPIO subsystem */ +/* GPIO pins used by the GPIO subsystem + * The following GPIOs are used for PMSM control in pikron-bb configuration. + */ -#define BOARD_NGPIOIN 1 /* Amount of GPIO input pins */ -#define BOARD_NGPIOOUT 1 /* Amount of GPIO output pins */ +#define BOARD_NGPIOIN 3 /* Amount of GPIO input pins */ +#define BOARD_NGPIOOUT 4 /* Amount of GPIO output pins */ -#define GPIO_IN1 (GPIO_INPUT | GPIO_PORT4 | GPIO_PIN4) /* EMC_04 */ #define GPIO_OUT1 (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \ - GPIO_PORT4 | GPIO_PIN5) /* EMC_05 */ + GPIO_PORT3 | GPIO_PIN18) /* EMC_32 */ +#define GPIO_OUT2 (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \ + GPIO_PORT2 | GPIO_PIN11) /* B0_11 */ +#define GPIO_OUT3 (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \ + GPIO_PORT2 | GPIO_PIN17) /* B1_01 */ +#define GPIO_OUT4 (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | IOMUX_GOUT_DEFAULT | \ + GPIO_PORT4 | GPIO_PIN5) /* EMC_05 */ + +#define GPIO_IN1 (GPIO_INPUT| GPIO_PORT2 | GPIO_PIN19 | IOMUX_PULL_UP_100K | \ + _IOMUX_PULL_ENABLE) /* B1_03 */ +#define GPIO_IN2 (GPIO_INPUT| GPIO_PORT2 | GPIO_PIN18 | IOMUX_PULL_UP_100K | \ + _IOMUX_PULL_ENABLE) /* B1_02 */ +#define GPIO_IN3 (GPIO_INPUT| GPIO_PORT2 | GPIO_PIN0 | IOMUX_PULL_UP_100K | \ + _IOMUX_PULL_ENABLE) /* B0_00 */ +#define GPIO_IN4 (GPIO_INPUT| GPIO_PORT2 | GPIO_PIN2 | IOMUX_PULL_UP_100K | \ + _IOMUX_PULL_ENABLE) /* B0_0 */ /**************************************************************************** * Public Types