From 772ddd7f5e3c489130b62fef00ab21b84535c152 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Sat, 22 Feb 2020 00:59:20 -0500 Subject: [PATCH] px4_fmu-v2/v3: add board_dma_map.h and enable SPI1/SPI4 DMA --- .../px4/fmu-v2/nuttx-config/include/board.h | 16 +----- .../nuttx-config/include/board_dma_map.h | 56 +++++++++++++++++++ boards/px4/fmu-v2/nuttx-config/nsh/defconfig | 3 + boards/px4/fmu-v2/src/board_config.h | 6 +- .../px4/fmu-v3/nuttx-config/include/board.h | 16 +----- .../nuttx-config/include/board_dma_map.h | 56 +++++++++++++++++++ boards/px4/fmu-v3/nuttx-config/nsh/defconfig | 3 + boards/px4/fmu-v3/src/board_config.h | 6 +- 8 files changed, 126 insertions(+), 36 deletions(-) create mode 100644 boards/px4/fmu-v2/nuttx-config/include/board_dma_map.h create mode 100644 boards/px4/fmu-v3/nuttx-config/include/board_dma_map.h diff --git a/boards/px4/fmu-v2/nuttx-config/include/board.h b/boards/px4/fmu-v2/nuttx-config/include/board.h index f5ce3bb6e0..00cbe9f0f2 100644 --- a/boards/px4/fmu-v2/nuttx-config/include/board.h +++ b/boards/px4/fmu-v2/nuttx-config/include/board.h @@ -40,6 +40,7 @@ /************************************************************************************ * Included Files ************************************************************************************/ +#include "board_dma_map.h" #include #ifndef __ASSEMBLY__ @@ -195,17 +196,6 @@ # define SDIO_SDXFR_CLKDIV (2 << SDIO_CLKCR_CLKDIV_SHIFT) #endif -/* DMA Channl/Stream Selections *****************************************************/ -/* Stream selections are arbitrary for now but might become important in the future - * is we set aside more DMA channels/streams. - * - * SDIO DMA - *   DMAMAP_SDIO_1 = Channel 4, Stream 3 <- may later be used by SPI DMA - *   DMAMAP_SDIO_2 = Channel 4, Stream 6 - */ - -#define DMAMAP_SDIO DMAMAP_SDIO_1 - /* Alternate function pin selections ************************************************/ /* UARTs */ @@ -234,10 +224,6 @@ /* UART8 has no alternate pin config */ -/* UART RX DMA configurations */ - -#define DMAMAP_USART6_RX DMAMAP_USART6_RX_2 - /* CAN * * CAN1 is routed to the onboard transceiver. diff --git a/boards/px4/fmu-v2/nuttx-config/include/board_dma_map.h b/boards/px4/fmu-v2/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..d8055e1dd8 --- /dev/null +++ b/boards/px4/fmu-v2/nuttx-config/include/board_dma_map.h @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * Copyright (c) 2020 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + + +// DMA1 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +// DMAMAP_USART3_RX // DMA1, Stream 1, Channel 4 +// DMAMAP_UART4_RX // DMA1, Stream 2, Channel 4 +// DMAMAP_UART7_RX // DMA1, Stream 3, Channel 5 +// AVAILABLE // DMA1, Stream 4 +// DMAMAP_USART2_RX // DMA1, Stream 5, Channel 4 +// DMAMAP_TIM4_UP // DMA1, Stream 6, Channel 2 (DSHOT) + + +// DMA2 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +#define DMACHAN_SPI4_RX DMAMAP_SPI4_RX_1 // DMA2, Stream 0, Channel 4 (SPI4 sensors RX) +#define DMAMAP_USART6_RX DMAMAP_USART6_RX_1 // DMA2, Stream 1, Channel 4 (PX4IO RX) +#define DMACHAN_SPI1_RX DMAMAP_SPI1_RX_2 // DMA2, Stream 2, Channel 3 (SPI1 sensors RX) +#define DMACHAN_SPI1_TX DMAMAP_SPI1_TX_1 // DMA2, Stream 3, Channel 3 (SPI1 sensors TX) +#define DMACHAN_SPI4_TX DMAMAP_SPI4_TX_2 // DMA2, Stream 4, Channel 5 (SPI4 sensors TX) +// DMAMAP_TIM1_UP // DMA2, Stream 5, Channel 6 (DSHOT) +#define DMAMAP_SDIO DMAMAP_SDIO_2 // DMA2, Stream 6, Channel 4 +#define DMAMAP_USART6_TX DMAMAP_USART6_TX_2 // DMA2, Stream 7, Channel 5 (PX4IO TX) diff --git a/boards/px4/fmu-v2/nuttx-config/nsh/defconfig b/boards/px4/fmu-v2/nuttx-config/nsh/defconfig index a5251584e1..f9dc4a1c1e 100644 --- a/boards/px4/fmu-v2/nuttx-config/nsh/defconfig +++ b/boards/px4/fmu-v2/nuttx-config/nsh/defconfig @@ -188,8 +188,11 @@ CONFIG_STM32_SDIO_CARD=y CONFIG_STM32_SERIALBRK_BSDCOMPAT=y CONFIG_STM32_SERIAL_DISABLE_REORDERING=y CONFIG_STM32_SPI1=y +CONFIG_STM32_SPI1_DMA=y CONFIG_STM32_SPI2=y CONFIG_STM32_SPI4=y +CONFIG_STM32_SPI4_DMA=y +CONFIG_STM32_SPI_DMA=y CONFIG_STM32_TIM10=y CONFIG_STM32_TIM11=y CONFIG_STM32_TIM3=y diff --git a/boards/px4/fmu-v2/src/board_config.h b/boards/px4/fmu-v2/src/board_config.h index 9e8448baf6..8753c176ca 100644 --- a/boards/px4/fmu-v2/src/board_config.h +++ b/boards/px4/fmu-v2/src/board_config.h @@ -74,8 +74,8 @@ #define PX4IO_SERIAL_RX_GPIO GPIO_USART6_RX #define PX4IO_SERIAL_BASE STM32_USART6_BASE /* hardwired on the board */ #define PX4IO_SERIAL_VECTOR STM32_IRQ_USART6 -#define PX4IO_SERIAL_TX_DMAMAP DMAMAP_USART6_TX_2 -#define PX4IO_SERIAL_RX_DMAMAP DMAMAP_USART6_RX_2 +#define PX4IO_SERIAL_TX_DMAMAP DMAMAP_USART6_TX +#define PX4IO_SERIAL_RX_DMAMAP DMAMAP_USART6_RX #define PX4IO_SERIAL_RCC_REG STM32_RCC_APB2ENR #define PX4IO_SERIAL_RCC_EN RCC_APB2ENR_USART6EN #define PX4IO_SERIAL_CLOCK STM32_PCLK2_FREQUENCY @@ -421,7 +421,7 @@ #define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS /* This board provides a DMA pool and APIs */ -#define BOARD_DMA_ALLOC_POOL_SIZE 5120 +#define BOARD_DMA_ALLOC_POOL_SIZE (5120 + 512 + 512) // 5120 fat + 512 + 512 spi #define BOARD_HAS_ON_RESET 1 diff --git a/boards/px4/fmu-v3/nuttx-config/include/board.h b/boards/px4/fmu-v3/nuttx-config/include/board.h index 45beb07129..d61f0fab90 100644 --- a/boards/px4/fmu-v3/nuttx-config/include/board.h +++ b/boards/px4/fmu-v3/nuttx-config/include/board.h @@ -40,6 +40,7 @@ /************************************************************************************ * Included Files ************************************************************************************/ +#include "board_dma_map.h" #include #ifndef __ASSEMBLY__ @@ -195,17 +196,6 @@ # define SDIO_SDXFR_CLKDIV (2 << SDIO_CLKCR_CLKDIV_SHIFT) #endif -/* DMA Channl/Stream Selections *****************************************************/ -/* Stream selections are arbitrary for now but might become important in the future - * is we set aside more DMA channels/streams. - * - * SDIO DMA - *   DMAMAP_SDIO_1 = Channel 4, Stream 3 <- may later be used by SPI DMA - *   DMAMAP_SDIO_2 = Channel 4, Stream 6 - */ - -#define DMAMAP_SDIO DMAMAP_SDIO_1 - /* Alternate function pin selections ************************************************/ /* UARTs */ @@ -234,10 +224,6 @@ /* UART8 has no alternate pin config */ -/* UART RX DMA configurations */ - -#define DMAMAP_USART6_RX DMAMAP_USART6_RX_2 - /* CAN * * CAN1 is routed to the onboard transceiver. diff --git a/boards/px4/fmu-v3/nuttx-config/include/board_dma_map.h b/boards/px4/fmu-v3/nuttx-config/include/board_dma_map.h new file mode 100644 index 0000000000..d8055e1dd8 --- /dev/null +++ b/boards/px4/fmu-v3/nuttx-config/include/board_dma_map.h @@ -0,0 +1,56 @@ +/**************************************************************************** + * + * Copyright (c) 2020 PX4 Development Team. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name PX4 nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +#pragma once + + +// DMA1 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +// DMAMAP_USART3_RX // DMA1, Stream 1, Channel 4 +// DMAMAP_UART4_RX // DMA1, Stream 2, Channel 4 +// DMAMAP_UART7_RX // DMA1, Stream 3, Channel 5 +// AVAILABLE // DMA1, Stream 4 +// DMAMAP_USART2_RX // DMA1, Stream 5, Channel 4 +// DMAMAP_TIM4_UP // DMA1, Stream 6, Channel 2 (DSHOT) + + +// DMA2 Channel/Stream Selections +//--------------------------------------------//---------------------------//---------------- +#define DMACHAN_SPI4_RX DMAMAP_SPI4_RX_1 // DMA2, Stream 0, Channel 4 (SPI4 sensors RX) +#define DMAMAP_USART6_RX DMAMAP_USART6_RX_1 // DMA2, Stream 1, Channel 4 (PX4IO RX) +#define DMACHAN_SPI1_RX DMAMAP_SPI1_RX_2 // DMA2, Stream 2, Channel 3 (SPI1 sensors RX) +#define DMACHAN_SPI1_TX DMAMAP_SPI1_TX_1 // DMA2, Stream 3, Channel 3 (SPI1 sensors TX) +#define DMACHAN_SPI4_TX DMAMAP_SPI4_TX_2 // DMA2, Stream 4, Channel 5 (SPI4 sensors TX) +// DMAMAP_TIM1_UP // DMA2, Stream 5, Channel 6 (DSHOT) +#define DMAMAP_SDIO DMAMAP_SDIO_2 // DMA2, Stream 6, Channel 4 +#define DMAMAP_USART6_TX DMAMAP_USART6_TX_2 // DMA2, Stream 7, Channel 5 (PX4IO TX) diff --git a/boards/px4/fmu-v3/nuttx-config/nsh/defconfig b/boards/px4/fmu-v3/nuttx-config/nsh/defconfig index 56a21ff764..f7e2f63b71 100644 --- a/boards/px4/fmu-v3/nuttx-config/nsh/defconfig +++ b/boards/px4/fmu-v3/nuttx-config/nsh/defconfig @@ -187,8 +187,11 @@ CONFIG_STM32_SDIO_CARD=y CONFIG_STM32_SERIALBRK_BSDCOMPAT=y CONFIG_STM32_SERIAL_DISABLE_REORDERING=y CONFIG_STM32_SPI1=y +CONFIG_STM32_SPI1_DMA=y CONFIG_STM32_SPI2=y CONFIG_STM32_SPI4=y +CONFIG_STM32_SPI4_DMA=y +CONFIG_STM32_SPI_DMA=y CONFIG_STM32_TIM10=y CONFIG_STM32_TIM11=y CONFIG_STM32_TIM3=y diff --git a/boards/px4/fmu-v3/src/board_config.h b/boards/px4/fmu-v3/src/board_config.h index 9e8448baf6..8753c176ca 100644 --- a/boards/px4/fmu-v3/src/board_config.h +++ b/boards/px4/fmu-v3/src/board_config.h @@ -74,8 +74,8 @@ #define PX4IO_SERIAL_RX_GPIO GPIO_USART6_RX #define PX4IO_SERIAL_BASE STM32_USART6_BASE /* hardwired on the board */ #define PX4IO_SERIAL_VECTOR STM32_IRQ_USART6 -#define PX4IO_SERIAL_TX_DMAMAP DMAMAP_USART6_TX_2 -#define PX4IO_SERIAL_RX_DMAMAP DMAMAP_USART6_RX_2 +#define PX4IO_SERIAL_TX_DMAMAP DMAMAP_USART6_TX +#define PX4IO_SERIAL_RX_DMAMAP DMAMAP_USART6_RX #define PX4IO_SERIAL_RCC_REG STM32_RCC_APB2ENR #define PX4IO_SERIAL_RCC_EN RCC_APB2ENR_USART6EN #define PX4IO_SERIAL_CLOCK STM32_PCLK2_FREQUENCY @@ -421,7 +421,7 @@ #define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS /* This board provides a DMA pool and APIs */ -#define BOARD_DMA_ALLOC_POOL_SIZE 5120 +#define BOARD_DMA_ALLOC_POOL_SIZE (5120 + 512 + 512) // 5120 fat + 512 + 512 spi #define BOARD_HAS_ON_RESET 1