From b9773b14cd3925d716520282fb50487b5b0d4fe6 Mon Sep 17 00:00:00 2001 From: rcitach Date: Sun, 10 May 2026 08:47:22 +0000 Subject: [PATCH 01/11] add ns800rt7p65 bsp --- bsp/novosns/ns800/README.md | 3 + .../ns800/libraries/HAL_Drivers/SConscript | 13 + .../libraries/HAL_Drivers/drivers/Kconfig | 1 + .../libraries/HAL_Drivers/drivers/SConscript | 24 + .../drivers/config/rt7/adc_config.h | 93 + .../drivers/config/rt7/dac_config.h | 42 + .../drivers/config/rt7/dma_config.h | 151 ++ .../drivers/config/rt7/i2c_hard_config.h | 258 ++ .../drivers/config/rt7/lptim_config.h | 67 + .../drivers/config/rt7/pwm_config.h | 197 ++ .../drivers/config/rt7/qspi_config.h | 56 + .../drivers/config/rt7/sdio_config.h | 44 + .../drivers/config/rt7/spi_config.h | 199 ++ .../drivers/config/rt7/tim_config.h | 67 + .../drivers/config/rt7/uart_config.h | 76 + .../libraries/HAL_Drivers/drivers/drv_can.c | 938 +++++++ .../libraries/HAL_Drivers/drivers/drv_can.h | 66 + .../HAL_Drivers/drivers/drv_config.h | 30 + .../libraries/HAL_Drivers/drivers/drv_dma.h | 33 + .../libraries/HAL_Drivers/drivers/drv_ecap.c | 537 ++++ .../libraries/HAL_Drivers/drivers/drv_ecap.h | 122 + .../libraries/HAL_Drivers/drivers/drv_gpio.c | 450 +++ .../libraries/HAL_Drivers/drivers/drv_gpio.h | 46 + .../libraries/HAL_Drivers/drivers/drv_log.h | 27 + .../libraries/HAL_Drivers/drivers/drv_uart.c | 495 ++++ .../libraries/HAL_Drivers/drivers/drv_uart.h | 74 + .../ns800/libraries/HAL_Drivers/drv_common.c | 216 ++ .../ns800/libraries/HAL_Drivers/drv_common.h | 37 + .../ns800/ns800rt7p65-nssinepad/.config | 1471 ++++++++++ .../ns800/ns800rt7p65-nssinepad/.gitignore | 42 + .../ns800/ns800rt7p65-nssinepad/Kconfig | 28 + .../ns800/ns800rt7p65-nssinepad/README.md | 5 + .../ns800/ns800rt7p65-nssinepad/README_zh.md | 102 + .../ns800/ns800rt7p65-nssinepad/SConscript | 15 + .../ns800/ns800rt7p65-nssinepad/SConstruct | 73 + .../applications/SConscript | 15 + .../ns800rt7p65-nssinepad/applications/main.c | 30 + .../applications/rt_can.c | 165 ++ .../applications/rt_can.h | 0 .../applications/rt_ecap.c | 57 + .../applications/rt_ecap.h | 18 + .../ns800/ns800rt7p65-nssinepad/board/Kconfig | 147 + .../ns800rt7p65-nssinepad/board/SConscript | 24 + .../ns800/ns800rt7p65-nssinepad/board/board.c | 355 +++ .../ns800/ns800rt7p65-nssinepad/board/board.h | 287 ++ .../board/linker_scripts/link.icf | 56 + .../board/linker_scripts/link.lds | 207 ++ .../board/linker_scripts/link.sct | 42 + .../ns800/ns800rt7p65-nssinepad/project.ewp | 2406 +++++++++++++++++ .../ns800/ns800rt7p65-nssinepad/project.eww | 10 + .../ns800rt7p65-nssinepad/project.uvoptx | 1292 +++++++++ .../ns800rt7p65-nssinepad/project.uvprojx | 2215 +++++++++++++++ .../ns800/ns800rt7p65-nssinepad/rtconfig.h | 433 +++ .../ns800/ns800rt7p65-nssinepad/rtconfig.py | 189 ++ .../ns800/ns800rt7p65-nssinepad/template.ewp | 2074 ++++++++++++++ .../ns800/ns800rt7p65-nssinepad/template.eww | 10 + .../ns800rt7p65-nssinepad/template.uvoptx | 184 ++ .../ns800rt7p65-nssinepad/template.uvprojx | 392 +++ bsp/novosns/ns800/tools/sdk_dist.py | 23 + 59 files changed, 16729 insertions(+) create mode 100644 bsp/novosns/ns800/README.md create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/SConscript create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/Kconfig create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/SConscript create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c create mode 100644 bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/.config create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/.gitignore create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/Kconfig create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/README.md create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/README_zh.md create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/SConscript create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/SConscript create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.h create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/SConscript create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.icf create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.lds create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.sct create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/template.ewp create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/template.eww create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvoptx create mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvprojx create mode 100644 bsp/novosns/ns800/tools/sdk_dist.py diff --git a/bsp/novosns/ns800/README.md b/bsp/novosns/ns800/README.md new file mode 100644 index 00000000000..5cada71c070 --- /dev/null +++ b/bsp/novosns/ns800/README.md @@ -0,0 +1,3 @@ +# NS800 BSP 说明 + +NS800 系列 BSP 目前支持情况如下表所示: diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/SConscript b/bsp/novosns/ns800/libraries/HAL_Drivers/SConscript new file mode 100644 index 00000000000..33146e918e5 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/SConscript @@ -0,0 +1,13 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * +import os + +cwd = GetCurrentDir() +src = ['drv_common.c'] +path = [cwd] + +group = SConscript(os.path.join(cwd, 'drivers', 'SConscript')) +group = group + DefineGroup('HAL_Driver', src, depend = [''], CPPPATH = path) + +Return('group') diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/Kconfig b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/Kconfig new file mode 100644 index 00000000000..60cf532bb71 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/Kconfig @@ -0,0 +1 @@ +# comment "HAL_Drivers driver-level patch options are kept minimal; peripheral configs live in board/Kconfig" diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/SConscript b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/SConscript new file mode 100644 index 00000000000..753aebd7656 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/SConscript @@ -0,0 +1,24 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * +import os + +cwd = GetCurrentDir() +src = [] +path = [cwd, cwd + '/config'] + +if GetDepend(['BSP_USING_GPIO', 'RT_USING_PIN']): + src += ['drv_gpio.c'] + +if GetDepend(['BSP_USING_UART', 'RT_USING_SERIAL']): + src += ['drv_uart.c'] + +if GetDepend(['BSP_USING_CAN', 'RT_USING_CAN']): + src += ['drv_can.c'] + +if GetDepend(['BSP_USING_ECAP']): + src += ['drv_ecap.c'] + +group = DefineGroup('HAL_Drivers', src, depend = [''], CPPPATH = path) + +Return('group') diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h new file mode 100644 index 00000000000..3314bc7e925 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-06 zylx first version + */ + +#ifndef __ADC_CONFIG_H__ +#define __ADC_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_ADC1 +#ifndef ADC1_CONFIG +#define ADC1_CONFIG \ + { \ + .Instance = ADC1, \ + .Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4, \ + .Init.Resolution = ADC_RESOLUTION_16B, \ + .Init.ScanConvMode = ADC_SCAN_DISABLE, \ + .Init.EOCSelection = ADC_EOC_SINGLE_CONV, \ + .Init.LowPowerAutoWait = DISABLE, \ + .Init.ContinuousConvMode = DISABLE, \ + .Init.NbrOfConversion = 1, \ + .Init.DiscontinuousConvMode = DISABLE, \ + .Init.NbrOfDiscConversion = 1, \ + .Init.ExternalTrigConv = ADC_SOFTWARE_START, \ + .Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE, \ + .Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR, \ + .Init.Overrun = ADC_OVR_DATA_OVERWRITTEN, \ + .Init.OversamplingMode = DISABLE, \ + } +#endif /* ADC1_CONFIG */ +#endif /* BSP_USING_ADC1 */ + +#ifdef BSP_USING_ADC2 +#ifndef ADC2_CONFIG +#define ADC2_CONFIG \ + { \ + .Instance = ADC2, \ + .Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4, \ + .Init.Resolution = ADC_RESOLUTION_16B, \ + .Init.ScanConvMode = ADC_SCAN_DISABLE, \ + .Init.EOCSelection = ADC_EOC_SINGLE_CONV, \ + .Init.LowPowerAutoWait = DISABLE, \ + .Init.ContinuousConvMode = DISABLE, \ + .Init.NbrOfConversion = 1, \ + .Init.DiscontinuousConvMode = DISABLE, \ + .Init.NbrOfDiscConversion = 1, \ + .Init.ExternalTrigConv = ADC_SOFTWARE_START, \ + .Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE, \ + .Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR, \ + .Init.Overrun = ADC_OVR_DATA_OVERWRITTEN, \ + .Init.OversamplingMode = DISABLE, \ + } +#endif /* ADC2_CONFIG */ +#endif /* BSP_USING_ADC2 */ + +#ifdef BSP_USING_ADC3 +#ifndef ADC3_CONFIG +#define ADC3_CONFIG \ + { \ + .Instance = ADC3, \ + .Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4, \ + .Init.Resolution = ADC_RESOLUTION_16B, \ + .Init.ScanConvMode = ADC_SCAN_DISABLE, \ + .Init.EOCSelection = ADC_EOC_SINGLE_CONV, \ + .Init.LowPowerAutoWait = DISABLE, \ + .Init.ContinuousConvMode = DISABLE, \ + .Init.NbrOfConversion = 1, \ + .Init.DiscontinuousConvMode = DISABLE, \ + .Init.NbrOfDiscConversion = 1, \ + .Init.ExternalTrigConv = ADC_SOFTWARE_START, \ + .Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE, \ + .Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR, \ + .Init.Overrun = ADC_OVR_DATA_OVERWRITTEN, \ + .Init.OversamplingMode = DISABLE, \ + } +#endif /* ADC3_CONFIG */ +#endif /* BSP_USING_ADC3 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __ADC_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h new file mode 100644 index 00000000000..568dc9ec664 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-06-16 thread-liu first version + */ + +#ifndef __DAC_CONFIG_H__ +#define __DAC_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_DAC1 +#ifndef DAC1_CONFIG +#define DAC1_CONFIG \ + { \ + .Instance = DAC1, \ + } +#endif /* DAC2_CONFIG */ +#endif /* BSP_USING_DAC2 */ + +#ifdef BSP_USING_DAC2 +#ifndef DAC2_CONFIG +#define DAC2_CONFIG \ + { \ + .Instance = DAC2, \ + } +#endif /* DAC2_CONFIG */ +#endif /* BSP_USING_DAC2 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __DAC_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h new file mode 100644 index 00000000000..922bd0aa5a7 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-01-02 zylx first version + * 2019-01-08 SummerGift clean up the code + * 2020-05-02 whj4674672 support stm32h7 dma1 and dma2 + */ + +#ifndef __DMA_CONFIG_H__ +#define __DMA_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DMA1 stream0 */ +#if defined(BSP_UART2_RX_USING_DMA) && !defined(UART2_RX_DMA_INSTANCE) +#define UART2_DMA_RX_IRQHandler DMA1_Stream0_IRQHandler +#define UART2_RX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define UART2_RX_DMA_INSTANCE DMA1_Stream0 +#define UART2_RX_DMA_REQUEST DMA_REQUEST_USART2_RX +#define UART2_RX_DMA_IRQ DMA1_Stream0_IRQn +#endif + +/* DMA1 stream1 */ +#if defined(BSP_UART2_TX_USING_DMA) && !defined(UART2_TX_DMA_INSTANCE) +#define UART2_DMA_TX_IRQHandler DMA1_Stream1_IRQHandler +#define UART2_TX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define UART2_TX_DMA_INSTANCE DMA1_Stream1 +#define UART2_TX_DMA_REQUEST DMA_REQUEST_USART2_TX +#define UART2_TX_DMA_IRQ DMA1_Stream1_IRQn +#endif + +/* DMA1 stream2 */ +#if defined(BSP_SPI3_RX_USING_DMA) && !defined(SPI3_RX_DMA_INSTANCE) +#define SPI3_DMA_RX_IRQHandler DMA1_Stream2_IRQHandler +#define SPI3_RX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define SPI3_RX_DMA_INSTANCE DMA1_Stream2 +#define SPI3_RX_DMA_IRQ DMA1_Stream2_IRQn +#endif + +/* DMA1 stream3 */ +#if defined(BSP_SPI2_RX_USING_DMA) && !defined(SPI2_RX_DMA_INSTANCE) +#define SPI2_DMA_RX_IRQHandler DMA1_Stream3_IRQHandler +#define SPI2_RX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define SPI2_RX_DMA_INSTANCE DMA1_Stream3 +#define SPI2_RX_DMA_IRQ DMA1_Stream3_IRQn +#endif + +/* DMA1 stream4 */ +#if defined(BSP_SPI2_TX_USING_DMA) && !defined(SPI2_TX_DMA_INSTANCE) +#define SPI2_DMA_TX_IRQHandler DMA1_Stream4_IRQHandler +#define SPI2_TX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define SPI2_TX_DMA_INSTANCE DMA1_Stream4 +#define SPI2_TX_DMA_IRQ DMA1_Stream4_IRQn +#endif + + +/* DMA1 stream5 */ +#if defined(BSP_SPI3_TX_USING_DMA) && !defined(SPI3_TX_DMA_INSTANCE) +#define SPI3_DMA_TX_IRQHandler DMA1_Stream5_IRQHandler +#define SPI3_TX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define SPI3_TX_DMA_INSTANCE DMA1_Stream5 +#define SPI3_TX_DMA_IRQ DMA1_Stream5_IRQn +#endif + +/* DMA1 stream6 */ + +/* DMA1 stream7 */ +#if defined(BSP_SPI3_TX_USING_DMA) && !defined(SPI3_TX_DMA_INSTANCE) +#define SPI3_DMA_TX_IRQHandler DMA1_Stream7_IRQHandler +#define SPI3_TX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define SPI3_TX_DMA_INSTANCE DMA1_Stream7 +#define SPI3_TX_DMA_IRQ DMA1_Stream7_IRQn +#endif + +/* DMA2 stream0 */ +#if defined(BSP_SPI1_RX_USING_DMA) && !defined(SPI1_RX_DMA_INSTANCE) +#define SPI1_DMA_RX_IRQHandler DMA2_Stream0_IRQHandler +#define SPI1_RX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI1_RX_DMA_INSTANCE DMA2_Stream0 +#define SPI1_RX_DMA_IRQ DMA2_Stream0_IRQn +#endif + +/* DMA2 stream1 */ +#if defined(BSP_SPI4_TX_USING_DMA) && !defined(SPI4_TX_DMA_INSTANCE) +#define SPI4_DMA_TX_IRQHandler DMA2_Stream1_IRQHandler +#define SPI4_TX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI4_TX_DMA_INSTANCE DMA2_Stream1 +#define SPI4_TX_DMA_IRQ DMA2_Stream1_IRQn +#endif + +/* DMA2 stream2 */ +#if defined(BSP_SPI1_RX_USING_DMA) && !defined(SPI1_RX_DMA_INSTANCE) +#define SPI1_DMA_RX_IRQHandler DMA2_Stream2_IRQHandler +#define SPI1_RX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI1_RX_DMA_INSTANCE DMA2_Stream2 +#define SPI1_RX_DMA_IRQ DMA2_Stream2_IRQn +#endif + +/* DMA2 stream3 */ +#if defined(BSP_SPI5_RX_USING_DMA) && !defined(SPI5_RX_DMA_INSTANCE) +#define SPI5_DMA_RX_IRQHandler DMA2_Stream3_IRQHandler +#define SPI5_RX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI5_RX_DMA_INSTANCE DMA2_Stream3 +#define SPI5_RX_DMA_IRQ DMA2_Stream3_IRQn +#endif + +/* DMA2 stream4 */ +#if defined(BSP_SPI5_TX_USING_DMA) && !defined(SPI5_TX_DMA_INSTANCE) +#define SPI5_DMA_TX_IRQHandler DMA2_Stream4_IRQHandler +#define SPI5_TX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI5_TX_DMA_INSTANCE DMA2_Stream4 +#define SPI5_TX_DMA_IRQ DMA2_Stream4_IRQn +#endif + +/* DMA2 stream5 */ +#if defined(BSP_SPI1_TX_USING_DMA) && !defined(SPI1_TX_DMA_INSTANCE) +#define SPI1_DMA_TX_IRQHandler DMA2_Stream5_IRQHandler +#define SPI1_TX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI1_TX_DMA_INSTANCE DMA2_Stream5 +#define SPI1_TX_DMA_IRQ DMA2_Stream5_IRQn +#endif + +/* DMA2 stream6 */ +#if defined(BSP_SPI5_TX_USING_DMA) && !defined(SPI5_TX_DMA_INSTANCE) +#define SPI5_DMA_TX_IRQHandler DMA2_Stream6_IRQHandler +#define SPI5_TX_DMA_RCC RCC_AHB1ENR_DMA2EN +#define SPI5_TX_DMA_INSTANCE DMA2_Stream6 +#define SPI5_TX_DMA_IRQ DMA2_Stream6_IRQn +#endif + +/* DMA2 stream7 */ +#if defined(BSP_QSPI_USING_DMA) && !defined(QSPI_DMA_INSTANCE) +#define QSPI_DMA_IRQHandler DMA2_Stream7_IRQHandler +#define QSPI_DMA_RCC RCC_AHB1ENR_DMA2EN +#define QSPI_DMA_INSTANCE DMA2_Stream7 +#define QSPI_DMA_IRQ DMA2_Stream7_IRQn +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __DMA_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h new file mode 100644 index 00000000000..55959f7324b --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-02-06 Dyyt587 first version + * 2024-04-23 Zeidan Add I2Cx_xx_DMA_CONFIG + * 2024-06-23 wdfk-prog Add H7 hard I2C config + */ +#ifndef __I2C_HARD_CONFIG_H__ +#define __I2C_HARD_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_HARD_I2C1 +#ifndef I2C1_BUS_CONFIG +#define I2C1_BUS_CONFIG \ + { \ + .Instance = I2C1, \ + .timing = 0x307075B1, \ + .timeout = 1000, \ + .name = "hwi2c1", \ + .evirq_type = I2C1_EV_IRQn, \ + .erirq_type = I2C1_ER_IRQn, \ + } +#endif /* I2C1_BUS_CONFIG */ +#endif /* BSP_USING_HARD_I2C1 */ + +#ifdef BSP_I2C1_TX_USING_DMA +#ifndef I2C1_TX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C1_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C1_TX_DMA_RCC, \ + .Instance = I2C1_TX_DMA_INSTANCE, \ + .dma_irq = I2C1_TX_DMA_IRQ, \ + .channel = I2C1_TX_DMA_CHANNEL \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C1_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C1_TX_DMA_RCC, \ + .Instance = I2C1_TX_DMA_INSTANCE, \ + .dma_irq = I2C1_TX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C1_TX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C1_TX_DMA_CONFIG */ +#endif /* BSP_I2C1_TX_USING_DMA */ + +#ifdef BSP_I2C1_RX_USING_DMA +#ifndef I2C1_RX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C1_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C1_RX_DMA_RCC, \ + .Instance = I2C1_RX_DMA_INSTANCE, \ + .dma_irq = I2C1_RX_DMA_IRQ, \ + .channel = I2C1_RX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C1_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C1_RX_DMA_RCC, \ + .Instance = I2C1_RX_DMA_INSTANCE, \ + .dma_irq = I2C1_RX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C1_RX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C1_RX_DMA_CONFIG */ +#endif /* BSP_I2C1_RX_USING_DMA */ + +#ifdef BSP_USING_HARD_I2C2 +#ifndef I2C2_BUS_CONFIG +#define I2C2_BUS_CONFIG \ + { \ + .Instance = I2C2, \ + .timing = 0x307075B1, \ + .timeout = 1000, \ + .name = "hwi2c2", \ + .evirq_type = I2C2_EV_IRQn, \ + .erirq_type = I2C2_ER_IRQn, \ + } +#endif /* I2C2_BUS_CONFIG */ +#endif /* BSP_USING_HARD_I2C2 */ + +#ifdef BSP_I2C2_TX_USING_DMA +#ifndef I2C2_TX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C2_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C2_TX_DMA_RCC, \ + .Instance = I2C2_TX_DMA_INSTANCE, \ + .dma_irq = I2C2_TX_DMA_IRQ, \ + .channel = I2C2_TX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C2_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C2_TX_DMA_RCC, \ + .Instance = I2C2_TX_DMA_INSTANCE, \ + .dma_irq = I2C2_TX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C2_TX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C2_TX_DMA_CONFIG */ +#endif /* BSP_I2C2_TX_USING_DMA */ + +#ifdef BSP_I2C2_RX_USING_DMA +#ifndef I2C2_RX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C2_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C2_RX_DMA_RCC, \ + .Instance = I2C2_RX_DMA_INSTANCE, \ + .dma_irq = I2C2_RX_DMA_IRQ, \ + .channel = I2C2_RX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C2_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C2_RX_DMA_RCC, \ + .Instance = I2C2_RX_DMA_INSTANCE, \ + .dma_irq = I2C2_RX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C2_RX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C2_RX_DMA_CONFIG */ +#endif /* BSP_I2C2_RX_USING_DMA */ + +#ifdef BSP_USING_HARD_I2C3 +#ifndef I2C3_BUS_CONFIG +#define I2C3_BUS_CONFIG \ + { \ + .Instance = I2C3, \ + .timing = 0x307075B1, \ + .timeout = 1000, \ + .name = "hwi2c3", \ + .evirq_type = I2C3_EV_IRQn, \ + .erirq_type = I2C3_ER_IRQn, \ + } +#endif /* I2C3_BUS_CONFIG */ +#endif /* BSP_USING_HARD_I2C3 */ + +#ifdef BSP_I2C3_TX_USING_DMA +#ifndef I2C3_TX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C3_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C3_TX_DMA_RCC, \ + .Instance = I2C3_TX_DMA_INSTANCE, \ + .dma_irq = I2C3_TX_DMA_IRQ, \ + .channel = I2C3_TX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C3_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C3_TX_DMA_RCC, \ + .Instance = I2C3_TX_DMA_INSTANCE, \ + .dma_irq = I2C3_TX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C3_TX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C3_TX_DMA_CONFIG */ +#endif /* BSP_I2C3_TX_USING_DMA */ + +#ifdef BSP_I2C3_RX_USING_DMA +#ifndef I2C3_RX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C3_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C3_RX_DMA_RCC, \ + .Instance = I2C3_RX_DMA_INSTANCE, \ + .dma_irq = I2C3_RX_DMA_IRQ, \ + .channel = I2C3_RX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C3_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C3_RX_DMA_RCC, \ + .Instance = I2C3_RX_DMA_INSTANCE, \ + .dma_irq = I2C3_RX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C3_RX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C3_RX_DMA_CONFIG */ +#endif /* BSP_I2C3_RX_USING_DMA */ + +#ifdef BSP_USING_HARD_I2C4 +#ifndef I2C4_BUS_CONFIG +#define I2C4_BUS_CONFIG \ + { \ + .Instance = I2C4, \ + .timing = 0x307075B1, \ + .timeout = 1000, \ + .name = "hwi2c4", \ + .evirq_type = I2C4_EV_IRQn, \ + .erirq_type = I2C4_ER_IRQn, \ + } +#endif /* I2C4_BUS_CONFIG */ +#endif /* BSP_USING_HARD_I2C4 */ + +#ifdef BSP_I2C4_TX_USING_DMA +#ifndef I2C4_TX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C4_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C4_TX_DMA_RCC, \ + .Instance = I2C4_TX_DMA_INSTANCE, \ + .dma_irq = I2C4_TX_DMA_IRQ, \ + .channel = I2C4_TX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C4_TX_DMA_CONFIG \ + { \ + .dma_rcc = I2C4_TX_DMA_RCC, \ + .Instance = I2C4_TX_DMA_INSTANCE, \ + .dma_irq = I2C4_TX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C4_TX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C4_TX_DMA_CONFIG */ +#endif /* BSP_I2C4_TX_USING_DMA */ + +#ifdef BSP_I2C4_RX_USING_DMA +#ifndef I2C4_RX_DMA_CONFIG +#if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) +#define I2C4_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C4_RX_DMA_RCC, \ + .Instance = I2C4_RX_DMA_INSTANCE, \ + .dma_irq = I2C4_RX_DMA_IRQ, \ + .channel = I2C4_RX_DMA_CHANNEL, \ + } +#elif defined(SOC_SERIES_STM32L4) || defined(SOC_SERIES_STM32G0) || defined(SOC_SERIES_STM32MP1) || defined(SOC_SERIES_STM32WB) || defined(SOC_SERIES_STM32H7) +#define I2C4_RX_DMA_CONFIG \ + { \ + .dma_rcc = I2C4_RX_DMA_RCC, \ + .Instance = I2C4_RX_DMA_INSTANCE, \ + .dma_irq = I2C4_RX_DMA_IRQ, \ + .request = DMA_REQUEST_I2C4_RX \ + } +#endif /* defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) */ +#endif /* I2C4_RX_DMA_CONFIG */ +#endif /* BSP_I2C4_RX_USING_DMA */ + + +#ifdef __cplusplus +} +#endif + +#endif /*__I2C_HARD_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h new file mode 100644 index 00000000000..507bcff446a --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2006-2024 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-07-11 wdfk-prog first version + */ + +#ifndef __LPTIM_CONFIG_H__ +#define __LPTIM_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef LPTIM_DEV_INFO_CONFIG +#define LPTIM_DEV_INFO_CONFIG \ + { \ + .maxfreq = 1000000, \ + .minfreq = 3000, \ + .maxcnt = 0xFFFF, \ + .cntmode = CLOCK_TIMER_CNTMODE_UP, \ + } +#endif /* TIM_DEV_INFO_CONFIG */ + +#ifdef BSP_USING_LPTIM1 +#ifndef LPTIM1_CONFIG +#define LPTIM1_CONFIG \ + { \ + .tim_handle.Instance = LPTIM1, \ + .tim_irqn = LPTIM1_IRQn, \ + .name = "lptim1", \ + } +#endif /* LPTIM1_CONFIG */ +#endif /* BSP_USING_LPTIM1 */ + +#ifdef BSP_USING_LPTIM2 +#ifndef LPTIM2_CONFIG +#define LPTIM2_CONFIG \ + { \ + .tim_handle.Instance = LPTIM2, \ + .tim_irqn = LPTIM2_IRQn, \ + .name = "lptim2", \ + } +#endif /* LPTIM1_CONFIG */ +#endif /* BSP_USING_LPTIM1 */ + +#ifdef BSP_USING_LPTIM3 +#ifndef LPTIM3_CONFIG +#define LPTIM3_CONFIG \ + { \ + .tim_handle.Instance = LPTIM3, \ + .tim_irqn = LPTIM3_IRQn, \ + .name = "lptim3", \ + } +#endif /* LPTIM3_CONFIG */ +#endif /* BSP_USING_LPTIM3 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __LPTIM_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h new file mode 100644 index 00000000000..5c062739fde --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-13 zylx first version + * 2022-04-14 Miaowulue add PWM1 + * 2023-04-08 Wangyuqiang complete PWM defination + */ + +#ifndef __PWM_CONFIG_H__ +#define __PWM_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_PWM1 +#define PWM1_CONFIG \ + { \ + .tim_handle.Instance = TIM1, \ + .name = "pwm1", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM1 */ + +#ifdef BSP_USING_PWM2 +#define PWM2_CONFIG \ + { \ + .tim_handle.Instance = TIM2, \ + .name = "pwm2", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM2 */ + +#ifdef BSP_USING_PWM3 +#define PWM3_CONFIG \ + { \ + .tim_handle.Instance = TIM3, \ + .name = "pwm3", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM3 */ + +#ifdef BSP_USING_PWM4 +#define PWM4_CONFIG \ + { \ + .tim_handle.Instance = TIM4, \ + .name = "pwm4", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM4 */ + +#ifdef BSP_USING_PWM5 +#define PWM5_CONFIG \ + { \ + .tim_handle.Instance = TIM5, \ + .name = "pwm5", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM5 */ + +#ifdef BSP_USING_PWM6 +#define PWM6_CONFIG \ + { \ + .tim_handle.Instance = TIM6, \ + .name = "pwm6", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM6 */ + +#ifdef BSP_USING_PWM7 +#define PWM7_CONFIG \ + { \ + .tim_handle.Instance = TIM7, \ + .name = "pwm7", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM7 */ + +#ifdef BSP_USING_PWM8 +#define PWM8_CONFIG \ + { \ + .tim_handle.Instance = TIM8, \ + .name = "pwm8", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM8 */ + +#ifdef BSP_USING_PWM9 +#define PWM9_CONFIG \ + { \ + .tim_handle.Instance = TIM9, \ + .name = "pwm9", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM9 */ + +#ifdef BSP_USING_PWM10 +#define PWM10_CONFIG \ + { \ + .tim_handle.Instance = TIM10, \ + .name = "pwm10", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM10 */ + +#ifdef BSP_USING_PWM11 +#define PWM11_CONFIG \ + { \ + .tim_handle.Instance = TIM11, \ + .name = "pwm11", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM11 */ + +#ifdef BSP_USING_PWM12 +#define PWM12_CONFIG \ + { \ + .tim_handle.Instance = TIM12, \ + .name = "pwm12", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM12 */ + +#ifdef BSP_USING_PWM13 +#define PWM13_CONFIG \ + { \ + .tim_handle.Instance = TIM13, \ + .name = "pwm13", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM13 */ + +#ifdef BSP_USING_PWM14 +#define PWM14_CONFIG \ + { \ + .tim_handle.Instance = TIM14, \ + .name = "pwm14", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM14 */ + +#ifdef BSP_USING_PWM15 +#define PWM15_CONFIG \ + { \ + .tim_handle.Instance = TIM15, \ + .name = "pwm15", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM15 */ + +#ifdef BSP_USING_PWM16 +#define PWM16_CONFIG \ + { \ + .tim_handle.Instance = TIM16, \ + .name = "pwm16", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM16 */ + +#ifdef BSP_USING_PWM17 +#define PWM17_CONFIG \ + { \ + .tim_handle.Instance = TIM17, \ + .name = "pwm17", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM17 */ + +#ifdef BSP_USING_PWM18 +#define PWM18_CONFIG \ + { \ + .tim_handle.Instance = TIM18, \ + .name = "pwm18", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM18 */ + +#ifdef BSP_USING_PWM19 +#define PWM19_CONFIG \ + { \ + .tim_handle.Instance = TIM19, \ + .name = "pwm19", \ + .channel = RT_NULL \ + } +#endif /* BSP_USING_PWM19 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __PWM_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h new file mode 100644 index 00000000000..a315b2f5cc6 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-22 zylx first version + */ + +#ifndef __QSPI_CONFIG_H__ +#define __QSPI_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_QSPI +#ifndef QSPI_BUS_CONFIG +#define QSPI_BUS_CONFIG \ + { \ + .Instance = QUADSPI, \ + .Init.FifoThreshold = 4, \ + .Init.SampleShifting = QSPI_SAMPLE_SHIFTING_HALFCYCLE, \ + .Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_4_CYCLE, \ + } +#endif /* QSPI_BUS_CONFIG */ +#endif /* BSP_USING_QSPI */ + +#ifdef BSP_QSPI_USING_DMA +#ifndef QSPI_DMA_CONFIG +#define QSPI_DMA_CONFIG \ + { \ + .Instance = QSPI_DMA_INSTANCE, \ + .Init.Channel = QSPI_DMA_CHANNEL, \ + .Init.Direction = DMA_PERIPH_TO_MEMORY, \ + .Init.PeriphInc = DMA_PINC_DISABLE, \ + .Init.MemInc = DMA_MINC_ENABLE, \ + .Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE, \ + .Init.MemDataAlignment = DMA_MDATAALIGN_BYTE, \ + .Init.Mode = DMA_NORMAL, \ + .Init.Priority = DMA_PRIORITY_LOW \ + } +#endif /* QSPI_DMA_CONFIG */ +#endif /* BSP_QSPI_USING_DMA */ + +#define QSPI_IRQn QUADSPI_IRQn +#define QSPI_IRQHandler QUADSPI_IRQHandler + +#ifdef __cplusplus +} +#endif + +#endif /* __QSPI_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h new file mode 100644 index 00000000000..e1367a9f0ba --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-13 BalanceTWK first version + */ + +#ifndef __SDIO_CONFIG_H__ +#define __SDIO_CONFIG_H__ + +#include +//#include "stm32h7xx_hal.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_SDIO +#define SDIO_BUS_CONFIG \ + { \ + .Instance = SDMMC1, \ + .dma_rx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ + .dma_tx.dma_rcc = RCC_AHB1ENR_DMA2EN, \ + .dma_rx.Instance = DMA2_Stream3, \ + .dma_rx.channel = DMA_CHANNEL_4, \ + .dma_rx.dma_irq = DMA2_Stream3_IRQn, \ + .dma_tx.Instance = DMA2_Stream6, \ + .dma_tx.channel = DMA_CHANNEL_4, \ + .dma_tx.dma_irq = DMA2_Stream6_IRQn, \ + } + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /*__SDIO_CONFIG_H__ */ + + + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h new file mode 100644 index 00000000000..7caa420c873 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 SummerGift first version + */ + +#ifndef __SPI_CONFIG_H__ +#define __SPI_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_SPI1 +#ifndef SPI1_BUS_CONFIG +#define SPI1_BUS_CONFIG \ + { \ + .Instance = SPI1, \ + .bus_name = "spi1", \ + .irq_type = SPI1_IRQn, \ + } +#endif /* SPI1_BUS_CONFIG */ +#endif /* BSP_USING_SPI1 */ + +#ifdef BSP_SPI1_TX_USING_DMA +#ifndef SPI1_TX_DMA_CONFIG +#define SPI1_TX_DMA_CONFIG \ + { \ + .dma_rcc = SPI1_TX_DMA_RCC, \ + .Instance = SPI1_TX_DMA_INSTANCE, \ + .dma_irq = SPI1_TX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI1_TX \ + } +#endif /* SPI1_TX_DMA_CONFIG */ +#endif /* BSP_SPI1_TX_USING_DMA */ + +#ifdef BSP_SPI1_RX_USING_DMA +#ifndef SPI1_RX_DMA_CONFIG +#define SPI1_RX_DMA_CONFIG \ + { \ + .dma_rcc = SPI1_RX_DMA_RCC, \ + .Instance = SPI1_RX_DMA_INSTANCE, \ + .dma_irq = SPI1_RX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI1_RX \ + } +#endif /* SPI1_RX_DMA_CONFIG */ +#endif /* BSP_SPI1_RX_USING_DMA */ + +#ifdef BSP_USING_SPI2 +#ifndef SPI2_BUS_CONFIG +#define SPI2_BUS_CONFIG \ + { \ + .Instance = SPI2, \ + .bus_name = "spi2", \ + .irq_type = SPI2_IRQn, \ + } +#endif /* SPI2_BUS_CONFIG */ +#endif /* BSP_USING_SPI2 */ + +#ifdef BSP_SPI2_TX_USING_DMA +#ifndef SPI2_TX_DMA_CONFIG +#define SPI2_TX_DMA_CONFIG \ + { \ + .dma_rcc = SPI2_TX_DMA_RCC, \ + .Instance = SPI2_TX_DMA_INSTANCE, \ + .dma_irq = SPI2_TX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI2_TX \ + } +#endif /* SPI2_TX_DMA_CONFIG */ +#endif /* BSP_SPI2_TX_USING_DMA */ + +#ifdef BSP_SPI2_RX_USING_DMA +#ifndef SPI2_RX_DMA_CONFIG +#define SPI2_RX_DMA_CONFIG \ + { \ + .dma_rcc = SPI2_RX_DMA_RCC, \ + .Instance = SPI2_RX_DMA_INSTANCE, \ + .dma_irq = SPI2_RX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI2_RX \ + } +#endif /* SPI2_RX_DMA_CONFIG */ +#endif /* BSP_SPI2_RX_USING_DMA */ + +#ifdef BSP_USING_SPI3 +#ifndef SPI3_BUS_CONFIG +#define SPI3_BUS_CONFIG \ + { \ + .Instance = SPI3, \ + .bus_name = "spi3", \ + .irq_type = SPI3_IRQn, \ + } +#endif /* SPI3_BUS_CONFIG */ +#endif /* BSP_USING_SPI3 */ + +#ifdef BSP_SPI3_TX_USING_DMA +#ifndef SPI3_TX_DMA_CONFIG +#define SPI3_TX_DMA_CONFIG \ + { \ + .dma_rcc = SPI3_TX_DMA_RCC, \ + .Instance = SPI3_TX_DMA_INSTANCE, \ + .dma_irq = SPI3_TX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI3_TX \ + } +#endif /* SPI3_TX_DMA_CONFIG */ +#endif /* BSP_SPI3_TX_USING_DMA */ + +#ifdef BSP_SPI3_RX_USING_DMA +#ifndef SPI3_RX_DMA_CONFIG +#define SPI3_RX_DMA_CONFIG \ + { \ + .dma_rcc = SPI3_RX_DMA_RCC, \ + .Instance = SPI3_RX_DMA_INSTANCE, \ + .dma_irq = SPI3_RX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI3_RX \ + } +#endif /* SPI3_RX_DMA_CONFIG */ +#endif /* BSP_SPI3_RX_USING_DMA */ + +#ifdef BSP_USING_SPI4 +#ifndef SPI4_BUS_CONFIG +#define SPI4_BUS_CONFIG \ + { \ + .Instance = SPI4, \ + .bus_name = "spi4", \ + .irq_type = SPI4_IRQn, \ + } +#endif /* SPI4_BUS_CONFIG */ +#endif /* BSP_USING_SPI4 */ + +#ifdef BSP_SPI4_TX_USING_DMA +#ifndef SPI4_TX_DMA_CONFIG +#define SPI4_TX_DMA_CONFIG \ + { \ + .dma_rcc = SPI4_TX_DMA_RCC, \ + .Instance = SPI4_TX_DMA_INSTANCE, \ + .dma_irq = SPI4_TX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI4_TX \ + } +#endif /* SPI4_TX_DMA_CONFIG */ +#endif /* BSP_SPI4_TX_USING_DMA */ + +#ifdef BSP_SPI4_RX_USING_DMA +#ifndef SPI4_RX_DMA_CONFIG +#define SPI4_RX_DMA_CONFIG \ + { \ + .dma_rcc = SPI4_RX_DMA_RCC, \ + .Instance = SPI4_RX_DMA_INSTANCE, \ + .dma_irq = SPI4_RX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI4_RX \ + } +#endif /* SPI4_RX_DMA_CONFIG */ +#endif /* BSP_SPI4_RX_USING_DMA */ + +#ifdef BSP_USING_SPI5 +#ifndef SPI5_BUS_CONFIG +#define SPI5_BUS_CONFIG \ + { \ + .Instance = SPI5, \ + .bus_name = "spi5", \ + .irq_type = SPI5_IRQn, \ + } +#endif /* SPI5_BUS_CONFIG */ +#endif /* BSP_USING_SPI5 */ + +#ifdef BSP_SPI5_TX_USING_DMA +#ifndef SPI5_TX_DMA_CONFIG +#define SPI5_TX_DMA_CONFIG \ + { \ + .dma_rcc = SPI5_TX_DMA_RCC, \ + .Instance = SPI5_TX_DMA_INSTANCE, \ + .dma_irq = SPI5_TX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI5_TX \ + } +#endif /* SPI5_TX_DMA_CONFIG */ +#endif /* BSP_SPI5_TX_USING_DMA */ + +#ifdef BSP_SPI5_RX_USING_DMA +#ifndef SPI5_RX_DMA_CONFIG +#define SPI5_RX_DMA_CONFIG \ + { \ + .dma_rcc = SPI5_RX_DMA_RCC, \ + .Instance = SPI5_RX_DMA_INSTANCE, \ + .dma_irq = SPI5_RX_DMA_IRQ, \ + .request = DMA_REQUEST_SPI5_RX \ + } +#endif /* SPI5_RX_DMA_CONFIG */ +#endif /* BSP_SPI5_RX_USING_DMA */ + +#ifdef __cplusplus +} +#endif + +#endif /*__SPI_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h new file mode 100644 index 00000000000..bf7fd577b8c --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-12-11 zylx first version + */ + +#ifndef __TIM_CONFIG_H__ +#define __TIM_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef TIM_DEV_INFO_CONFIG +#define TIM_DEV_INFO_CONFIG \ + { \ + .maxfreq = 1000000, \ + .minfreq = 3000, \ + .maxcnt = 0xFFFF, \ + .cntmode = CLOCK_TIMER_CNTMODE_UP, \ + } +#endif /* TIM_DEV_INFO_CONFIG */ + +#ifdef BSP_USING_TIM11 +#ifndef TIM11_CONFIG +#define TIM11_CONFIG \ + { \ + .tim_handle.Instance = TIM11, \ + .tim_irqn = TIM1_TRG_COM_TIM11_IRQn, \ + .name = "timer11", \ + } +#endif /* TIM11_CONFIG */ +#endif /* BSP_USING_TIM11 */ + +#ifdef BSP_USING_TIM13 +#ifndef TIM13_CONFIG +#define TIM13_CONFIG \ + { \ + .tim_handle.Instance = TIM13, \ + .tim_irqn = TIM8_UP_TIM13_IRQn, \ + .name = "timer13", \ + } +#endif /* TIM13_CONFIG */ +#endif /* BSP_USING_TIM13 */ + +#ifdef BSP_USING_TIM14 +#ifndef TIM14_CONFIG +#define TIM14_CONFIG \ + { \ + .tim_handle.Instance = TIM14, \ + .tim_irqn = TIM8_TRG_COM_TIM14_IRQn, \ + .name = "timer14", \ + } +#endif /* TIM14_CONFIG */ +#endif /* BSP_USING_TIM14 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __TIM_CONFIG_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h new file mode 100644 index 00000000000..3ac1bb05a24 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * + */ + +#ifndef __UART_CONFIG_H__ +#define __UART_CONFIG_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BSP_USING_UART1) +#ifndef UART1_CONFIG +#define UART1_CONFIG \ + { \ + .name = "uart1", \ + .Instance = UART1, \ + .rx_irq_type = UART1_RX_IRQn, \ + .tx_irq_type = UART1_TX_IRQn, \ + .irq_handler = UART1_IRQHandler, \ + } +#endif /* UART1_CONFIG */ +#endif /* BSP_USING_UART1 */ + +#if defined(BSP_USING_UART2) +#ifndef UART2_CONFIG +#define UART2_CONFIG \ + { \ + .name = "uart2", \ + .Instance = UART2, \ + .rx_irq_type = UART2_RX_IRQn, \ + .tx_irq_type = UART2_TX_IRQn, \ + .irq_handler = UART2_IRQHandler, \ + } +#endif /* UART2_CONFIG */ +#endif /* BSP_USING_UART2 */ + +#if defined(BSP_USING_UART3) +#ifndef UART3_CONFIG +#define UART3_CONFIG \ + { \ + .name = "uart3", \ + .Instance = UART3, \ + .rx_irq_type = UART3_RX_IRQn, \ + .tx_irq_type = UART3_TX_IRQn, \ + .irq_handler = UART3_IRQHandler, \ + } +#endif /* UART3_CONFIG */ +#endif /* BSP_USING_UART3 */ + +#if defined(BSP_USING_UART4) +#ifndef UART4_CONFIG +#define UART4_CONFIG \ + { \ + .name = "uart4", \ + .Instance = UART4, \ + .rx_irq_type = UART4_RX_IRQn, \ + .tx_irq_type = UART4_TX_IRQn, \ + .irq_handler = UART4_IRQHandler, \ + } +#endif /* UART4_CONFIG */ +#endif /* BSP_USING_UART4 */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c new file mode 100644 index 00000000000..b3195e24cfa --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c @@ -0,0 +1,938 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-05 Xeon Xu the first version + * 2019-01-22 YLZ port from stm324xx-HAL to bsp stm3210x-HAL + * 2019-02-19 YLZ add support EXTID RTR Frame. modify send, recv functions. + * fix bug.port to BSP [stm32] + * 2019-03-27 YLZ support double can channels, support stm32F4xx (only Legacy mode). + * 2019-06-17 YLZ port to new STM32F1xx HAL V1.1.3. + * 2021-02-02 YuZhe XU fix bug in filter config + * 2021-8-25 SVCHAO The baud rate is configured according to the different APB1 frequencies. + * f4-series only. + * 2025-09-20 wdfk_prog Implemented sendmsg_nonblocking op to support framework's async TX. + * 2026-05-10 Codex Reworked driver around BSP CAN/CANFD config selection. + */ + +#include "drv_can.h" + +#ifdef BSP_USING_CAN + +#define LOG_TAG "drv_can" +#include + +#define CAN_TX_MB_INDEX 0U +#define CAN_RX_MB_INDEX 1U +#define CAN_MSG_OBJ_NUM 2U +#define RX_MB_COUNT 1U + +struct ns800rt7_can_hw_config +{ + const char *name; + FLEXCANREG_TypeDef *instance; + IRQn_Type irqn1; + IRQn_Type irqn2; + GPIO_TypeDef *tx_port; + GPIO_PinNum tx_pin; + GPIO_AltFunc tx_mux; + GPIO_TypeDef *rx_port; + GPIO_PinNum rx_pin; + GPIO_AltFunc rx_mux; + uint8_t can_instance_idx; + rt_bool_t support_canfd; +}; + +typedef struct +{ + ns800rt7_can base; + const struct ns800rt7_can_hw_config *hw; + FLEXCANDRV_MsgObjType rx_cache[RX_MB_COUNT]; + rt_uint8_t rx_ide[RX_MB_COUNT]; + rt_uint8_t rx_rtr[RX_MB_COUNT]; +#ifdef RT_CAN_USING_CANFD + rt_uint8_t rx_brs[RX_MB_COUNT]; +#endif +} ns800rt7_can_device; + +static void ns800_can_isr_txrx(ns800rt7_can_device *drv); +static void ns800_can_isr_err(ns800rt7_can_device *drv); + +#ifdef BSP_USING_CAN1 +void CAN1_1_IRQHandler(void); +void CAN1_2_IRQHandler(void); +static const struct ns800rt7_can_hw_config can1_hw = +{ + .name = "can1", + .instance = (FLEXCANREG_TypeDef *)CAN1, + .irqn1 = CAN1_1_IRQn, + .irqn2 = CAN1_2_IRQn, + .tx_port = GPIOA, + .tx_pin = GPIO_PIN_4, + .tx_mux = ALT6_FUNCTION, + .rx_port = GPIOA, + .rx_pin = GPIO_PIN_5, + .rx_mux = ALT6_FUNCTION, + .can_instance_idx = 0U, + .support_canfd = RT_FALSE, +}; +static ns800rt7_can_device can1_dev = +{ + .base = + { + .name = "can1", + .irqn1 = CAN1_1_IRQn, + .irqn2 = CAN1_2_IRQn, + }, + .hw = &can1_hw, +}; +#endif + +#ifdef BSP_USING_CANFD1 +void CANFD1_1_IRQHandler(void); +void CANFD1_2_IRQHandler(void); +static const struct ns800rt7_can_hw_config canfd1_hw = +{ + .name = "canfd1", + .instance = (FLEXCANREG_TypeDef *)CANFD1, + .irqn1 = CANFD1_1_IRQn, + .irqn2 = CANFD1_2_IRQn, + .tx_port = GPIOA, + .tx_pin = GPIO_PIN_4, + .tx_mux = ALT9_FUNCTION, + .rx_port = GPIOA, + .rx_pin = GPIO_PIN_10, + .rx_mux = ALT9_FUNCTION, + .can_instance_idx = 1U, + .support_canfd = RT_TRUE, +}; +static ns800rt7_can_device canfd1_dev = +{ + .base = + { + .name = "canfd1", + .irqn1 = CANFD1_1_IRQn, + .irqn2 = CANFD1_2_IRQn, + }, + .hw = &canfd1_hw, +}; +#endif + +#ifdef BSP_USING_CANFD2 +void CANFD2_1_IRQHandler(void); +void CANFD2_2_IRQHandler(void); +static const struct ns800rt7_can_hw_config canfd2_hw = +{ + .name = "canfd2", + .instance = (FLEXCANREG_TypeDef *)CANFD2, + .irqn1 = CANFD2_1_IRQn, + .irqn2 = CANFD2_2_IRQn, + .tx_port = GPIOB, + .tx_pin = GPIO_PIN_9, + .tx_mux = ALT5_FUNCTION, + .rx_port = GPIOB, + .rx_pin = GPIO_PIN_8, + .rx_mux = ALT5_FUNCTION, + .can_instance_idx = 1U, + .support_canfd = RT_TRUE, +}; +static ns800rt7_can_device canfd2_dev = +{ + .base = + { + .name = "canfd2", + .irqn1 = CANFD2_1_IRQn, + .irqn2 = CANFD2_2_IRQn, + }, + .hw = &canfd2_hw, +}; +#endif + +static const struct ns800rt7_baud_rate_tab can_baud_rate_tab[] = +{ + {CAN1MBaud, CAN1MBaud}, + {CAN800kBaud, CAN800kBaud}, + {CAN500kBaud, CAN500kBaud}, + {CAN250kBaud, CAN250kBaud}, + {CAN125kBaud, CAN125kBaud}, + {CAN100kBaud, CAN100kBaud}, + {CAN50kBaud, CAN50kBaud}, + {CAN20kBaud, CAN20kBaud}, + {CAN10kBaud, CAN10kBaud}, +}; + +static FLEXCANDRV_DataLenCodeType ns800_can_len_to_dlc(rt_uint8_t len) +{ + if (len <= 8U) return (FLEXCANDRV_DataLenCodeType)len; + if (len <= 12U) return DLC_BYTE_12; + if (len <= 16U) return DLC_BYTE_16; + if (len <= 20U) return DLC_BYTE_20; + if (len <= 24U) return DLC_BYTE_24; + if (len <= 32U) return DLC_BYTE_32; + if (len <= 48U) return DLC_BYTE_48; + return DLC_BYTE_64; +} + +static rt_uint8_t ns800_can_msg_buf_size(rt_bool_t use_canfd) +{ + return use_canfd ? FLEXCANDRV_MB_SIZE_BYTE_64 : FLEXCANDRV_MB_SIZE_BYTE_8; +} + +static rt_bool_t ns800_can_is_supported_baud(rt_uint32_t baud) +{ + rt_size_t i; + + for (i = 0; i < sizeof(can_baud_rate_tab) / sizeof(can_baud_rate_tab[0]); i++) + { + if (can_baud_rate_tab[i].baud_rate == baud) + { + return RT_TRUE; + } + } + + return RT_FALSE; +} + +static void ns800_can_gpio_init(const struct ns800rt7_can_hw_config *hw) +{ + RT_ASSERT(hw != RT_NULL); + + GPIO_setPinConfig(hw->tx_port, hw->tx_pin, hw->tx_mux); + GPIO_setAnalogMode(hw->tx_port, hw->tx_pin, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(hw->tx_port, hw->tx_pin, GPIO_PIN_TYPE_STD); + GPIO_setQualificationMode(hw->tx_port, hw->tx_pin, GPIO_QUAL_SYNC); + GPIO_setDirectionMode(hw->tx_port, hw->tx_pin, GPIO_DIR_MODE_OUT); + + GPIO_setPinConfig(hw->rx_port, hw->rx_pin, hw->rx_mux); + GPIO_setAnalogMode(hw->rx_port, hw->rx_pin, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(hw->rx_port, hw->rx_pin, GPIO_PIN_TYPE_PULLUP); + GPIO_setQualificationMode(hw->rx_port, hw->rx_pin, GPIO_QUAL_SYNC); + GPIO_setDirectionMode(hw->rx_port, hw->rx_pin, GPIO_DIR_MODE_IN); +} + +static void ns800_can_wait_hxtl_ready(void) +{ + uint32_t wait_time = 5000000U; + + WRITE_REG(RCC->HXTLCR.WORDVAL, (HXTL_CONFIG | RCC_HXTLCR_KEY)); + RCC_enableHxtl(); + RCC_disableHxtlBypass(); + + while ((RCC_readHxtlRdyFlag() != 1U) && (--wait_time != 0U)) + { + } +} + +static void ns800_can_clock_init(const struct ns800rt7_can_hw_config *hw) +{ + RT_ASSERT(hw != RT_NULL); + + RCC_unlockRccRegister(); + + ns800_can_wait_hxtl_ready(); + RCC_enablePeriphKernalUseMirc2(); + RCC_enablePeriphKernalUseHxtl(); + + if (hw->support_canfd) + { + RCC_selectCanfdOscClkSource((hw->instance == (FLEXCANREG_TypeDef *)CANFD2) ? RCC_CANFD2SEL : RCC_CANFD1SEL, + RCC_CANFD_OSCCLK_SEL_HXTLKER); + + if (hw->instance == (FLEXCANREG_TypeDef *)CANFD2) + { + RCC_selectCanfd2PeripheralClkSource(RCC_CANFD2_PERIPHERAL_CLK_SEL_HCLK); + RCC_enableCanfd2Clock(); + } + else + { + RCC_selectCanfd1PeripheralClkSource(RCC_CANFD1_PERIPHERAL_CLK_SEL_HCLK); + RCC_enableCanfd1Clock(); + } + } + else + { + RCC_selectCan1OscClkSource(RCC_CAN1_OSCCLK_SEL_HXTLKER); + RCC_selectCan1PeripheralClkSource(RCC_CAN1_PERIPHERAL_CLK_SEL_HCLK); + RCC_enableCan1Clock(); + } + + RCC_lockRccRegister(); +} + +static void ns800_can_init_filter_defaults(ns800rt7_can_device *drv) +{ + RT_ASSERT(drv != RT_NULL); + + rt_memset(drv->base.FilterConfig, 0, sizeof(drv->base.FilterConfig)); + + drv->base.FilterConfig[CAN_TX_MB_INDEX].msgBufId = CAN_TX_MB_INDEX; + drv->base.FilterConfig[CAN_TX_MB_INDEX].msgBufLen = 1U; + drv->base.FilterConfig[CAN_TX_MB_INDEX].msgType = FLEXCANDRV_MSGTYPE_TX; + drv->base.FilterConfig[CAN_TX_MB_INDEX].dlc = DLC_BYTE_8; + drv->base.FilterConfig[CAN_TX_MB_INDEX].intEnable = true; + drv->base.FilterConfig[CAN_TX_MB_INDEX].individualMask = 0xFFFFFFFFU; + + drv->base.FilterConfig[CAN_RX_MB_INDEX].msgBufId = CAN_RX_MB_INDEX; + drv->base.FilterConfig[CAN_RX_MB_INDEX].msgBufLen = 1U; + drv->base.FilterConfig[CAN_RX_MB_INDEX].msgType = FLEXCANDRV_MSGTYPE_RX; + drv->base.FilterConfig[CAN_RX_MB_INDEX].dlc = DLC_BYTE_8; + drv->base.FilterConfig[CAN_RX_MB_INDEX].intEnable = true; + drv->base.FilterConfig[CAN_RX_MB_INDEX].individualMask = 0U; + drv->base.FilterNum = CAN_MSG_OBJ_NUM; +} + +static rt_bool_t ns800_can_use_canfd(ns800rt7_can_device *drv, const struct can_configure *cfg) +{ + RT_ASSERT(drv != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + +#ifdef RT_CAN_USING_CANFD + if (drv->hw->support_canfd && cfg->enable_canfd) + { + return RT_TRUE; + } +#endif + + return RT_FALSE; +} + +static void ns800_can_prepare_msg_cfg(ns800rt7_can_device *drv, const struct can_configure *cfg) +{ + rt_bool_t use_canfd; + FLEXCANDRV_DataLenCodeType default_dlc; + + RT_ASSERT(drv != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + + use_canfd = ns800_can_use_canfd(drv, cfg); + default_dlc = use_canfd ? DLC_BYTE_64 : DLC_BYTE_8; + + drv->base.FilterConfig[CAN_TX_MB_INDEX].dlc = default_dlc; + drv->base.FilterConfig[CAN_TX_MB_INDEX].isFd = use_canfd ? true : false; + + drv->base.FilterConfig[CAN_RX_MB_INDEX].dlc = default_dlc; + drv->base.FilterConfig[CAN_RX_MB_INDEX].isFd = use_canfd ? true : false; +} + +static rt_err_t ns800_can_hw_configure(ns800rt7_can_device *drv, struct can_configure *cfg) +{ + FLEXCANDRV_InitHwParType init_hw_par; + uint32_t can_clk = HXTL_FREQ_VALUE; + rt_bool_t use_canfd; + + RT_ASSERT(drv != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + + if (!ns800_can_is_supported_baud(cfg->baud_rate)) + { + return -RT_ERROR; + } + +#ifdef RT_CAN_USING_CANFD + if (drv->hw->support_canfd && cfg->enable_canfd && !ns800_can_is_supported_baud(cfg->baud_rate_fd)) + { + return -RT_ERROR; + } +#endif + + ns800_can_gpio_init(drv->hw); + ns800_can_clock_init(drv->hw); + + init_hw_par.canInstanceIdx = drv->hw->can_instance_idx; + init_hw_par.canRamNum = 4U; + + FLEXCANDRV_Init(&drv->base.CanHandle, drv->hw->instance, &init_hw_par); + FLEXCANDRV_GetDefaultCfg(&drv->base.CanCfg); + + use_canfd = ns800_can_use_canfd(drv, cfg); + ns800_can_prepare_msg_cfg(drv, cfg); + + FLEXCANDRV_BitTimingCalc(&drv->base.CanCfg.bitTiming, + can_clk, + cfg->baud_rate, + 7500U, + 2500U, + 0U); + + FLEXCANDRV_BitTimingCalc(&drv->base.CanCfg.fdBitTiming, + can_clk, +#ifdef RT_CAN_USING_CANFD + use_canfd ? cfg->baud_rate_fd : cfg->baud_rate, +#else + cfg->baud_rate, +#endif + 7500U, + 2500U, + use_canfd ? 1U : 0U); + + drv->base.CanCfg.clkSrc = FLEXCANDRV_CLKSRC_OSC; + drv->base.CanCfg.msgNum = drv->base.FilterNum; + drv->base.CanCfg.msgCfg = drv->base.FilterConfig; + drv->base.CanCfg.individualMaskEnable = true; + drv->base.CanCfg.rxMBGlobalMask = 0xFFFFFFFFU; + drv->base.CanCfg.loopbackEnable = false; + drv->base.CanCfg.listenMode = false; + drv->base.CanCfg.msgBufDataLenSel = ns800_can_msg_buf_size(use_canfd); + drv->base.CanCfg.fdEnable = use_canfd ? true : false; + drv->base.CanCfg.fdISOEnable = use_canfd ? true : false; + drv->base.CanCfg.errorIntEnable = true; + drv->base.CanCfg.warningIntEnable = true; + drv->base.CanCfg.busoffIntEnable = true; + + switch (cfg->mode) + { + case RT_CAN_MODE_NORMAL: + break; + case RT_CAN_MODE_LISTEN: + drv->base.CanCfg.listenMode = true; + break; + case RT_CAN_MODE_LOOPBACK: + drv->base.CanCfg.loopbackEnable = true; + break; + case RT_CAN_MODE_LOOPBACKANLISTEN: + drv->base.CanCfg.loopbackEnable = true; + drv->base.CanCfg.listenMode = true; + break; + default: + return -RT_ERROR; + } + + FLEXCANDRV_Configure(&drv->base.CanHandle, &drv->base.CanCfg); + rt_memset((void *)drv->base.mbState, StateIdle, sizeof(drv->base.mbState)); + + return RT_EOK; +} + +static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg) +{ + ns800rt7_can_device *drv; + + RT_ASSERT(can != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + + drv = (ns800rt7_can_device *)can->parent.user_data; + RT_ASSERT(drv != RT_NULL); + + return ns800_can_hw_configure(drv, cfg); +} + +static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) +{ + ns800rt7_can_device *drv; + rt_uint32_t argval; + + RT_ASSERT(can != RT_NULL); + + drv = (ns800rt7_can_device *)can->parent.user_data; + RT_ASSERT(drv != RT_NULL); + + switch (cmd) + { + case RT_DEVICE_CTRL_CLR_INT: + FLEXCANDRV_DisableMsgObjInterrupt(&drv->base.CanHandle, CAN_TX_MB_INDEX); + FLEXCANDRV_DisableMsgObjInterrupt(&drv->base.CanHandle, CAN_RX_MB_INDEX); + Interrupt_disable(drv->base.irqn1); + Interrupt_disable(drv->base.irqn2); + break; + + case RT_DEVICE_CTRL_SET_INT: + argval = (rt_uint32_t)arg; + if ((argval == RT_DEVICE_FLAG_INT_RX) || (argval == RT_DEVICE_FLAG_INT_TX)) + { + FLEXCANDRV_EnableMsgObjInterrupt(&drv->base.CanHandle, CAN_TX_MB_INDEX); + FLEXCANDRV_EnableMsgObjInterrupt(&drv->base.CanHandle, CAN_RX_MB_INDEX); + +#ifdef BSP_USING_CAN1 + if (drv == &can1_dev) + { + Interrupt_register(drv->base.irqn1, CAN1_1_IRQHandler); + } +#endif +#ifdef BSP_USING_CANFD1 + if (drv == &canfd1_dev) + { + Interrupt_register(drv->base.irqn1, CANFD1_1_IRQHandler); + } +#endif +#ifdef BSP_USING_CANFD2 + if (drv == &canfd2_dev) + { + Interrupt_register(drv->base.irqn1, CANFD2_1_IRQHandler); + } +#endif + Interrupt_enable(drv->base.irqn1); + } + else if (argval == RT_DEVICE_CAN_INT_ERR) + { +#ifdef BSP_USING_CAN1 + if (drv == &can1_dev) + { + Interrupt_register(drv->base.irqn2, CAN1_2_IRQHandler); + } +#endif +#ifdef BSP_USING_CANFD1 + if (drv == &canfd1_dev) + { + Interrupt_register(drv->base.irqn2, CANFD1_2_IRQHandler); + } +#endif +#ifdef BSP_USING_CANFD2 + if (drv == &canfd2_dev) + { + Interrupt_register(drv->base.irqn2, CANFD2_2_IRQHandler); + } +#endif + Interrupt_enable(drv->base.irqn2); + } + break; + + case RT_CAN_CMD_SET_FILTER: + if (arg != RT_NULL) + { + struct rt_can_filter_config *filter_cfg = (struct rt_can_filter_config *)arg; + + if (filter_cfg->count > 0U) + { + const struct rt_can_filter_item *item = &filter_cfg->items[0]; + + drv->base.FilterConfig[CAN_RX_MB_INDEX].msgId = item->id; + drv->base.FilterConfig[CAN_RX_MB_INDEX].isExtMsgId = (item->ide == RT_CAN_EXTID) ? true : false; + drv->base.FilterConfig[CAN_RX_MB_INDEX].individualMask = item->mask; + drv->base.FilterConfig[CAN_RX_MB_INDEX].rtrfilter = (item->rtr == RT_CAN_RTR) ? true : false; + + return ns800_can_hw_configure(drv, &drv->base.device.config); + } + } + break; + + case RT_CAN_CMD_SET_MODE: + argval = (rt_uint32_t)arg; + if ((argval != RT_CAN_MODE_NORMAL) && + (argval != RT_CAN_MODE_LISTEN) && + (argval != RT_CAN_MODE_LOOPBACK) && + (argval != RT_CAN_MODE_LOOPBACKANLISTEN)) + { + return -RT_ERROR; + } + + if (argval != drv->base.device.config.mode) + { + drv->base.device.config.mode = argval; + return ns800_can_hw_configure(drv, &drv->base.device.config); + } + break; + + case RT_CAN_CMD_SET_BAUD: + argval = (rt_uint32_t)arg; + if (!ns800_can_is_supported_baud(argval)) + { + return -RT_ERROR; + } + + if (argval != drv->base.device.config.baud_rate) + { + drv->base.device.config.baud_rate = argval; + return ns800_can_hw_configure(drv, &drv->base.device.config); + } + break; + + case RT_CAN_CMD_SET_PRIV: + drv->base.device.config.privmode = (rt_uint32_t)arg; + break; + + case RT_CAN_CMD_GET_STATUS: + drv->base.device.status.rcverrcnt = FLEXCANREG_GetEcrRxerrcnt(drv->base.CanHandle.flexCanReg); + drv->base.device.status.snderrcnt = FLEXCANREG_GetEcrTxerrcnt(drv->base.CanHandle.flexCanReg); + rt_memcpy(arg, &drv->base.device.status, sizeof(drv->base.device.status)); + break; + + case RT_CAN_CMD_START: + return ns800_can_hw_configure(drv, &drv->base.device.config); + +#ifdef RT_CAN_USING_CANFD + case RT_CAN_CMD_SET_CANFD: + if (!drv->hw->support_canfd) + { + return -RT_ERROR; + } + + drv->base.device.config.enable_canfd = ((rt_uint32_t)arg) ? 1U : 0U; + return ns800_can_hw_configure(drv, &drv->base.device.config); + + case RT_CAN_CMD_SET_BAUD_FD: + if (!drv->hw->support_canfd) + { + return -RT_ERROR; + } + + argval = (rt_uint32_t)arg; + if (!ns800_can_is_supported_baud(argval)) + { + return -RT_ERROR; + } + + drv->base.device.config.baud_rate_fd = argval; + return ns800_can_hw_configure(drv, &drv->base.device.config); +#endif + + default: + break; + } + + return RT_EOK; +} + +static rt_err_t ns800_can_send_common(ns800rt7_can_device *drv, const struct rt_can_msg *pmsg, rt_uint32_t box_num) +{ + FLEXCANDRV_MsgObjType msg_obj; + uint32_t *msg_buf_ptr; + rt_uint8_t len; + rt_bool_t use_canfd; + rt_bool_t msg_is_fd = RT_FALSE; + + RT_ASSERT(drv != RT_NULL); + RT_ASSERT(pmsg != RT_NULL); + + if (box_num != CAN_TX_MB_INDEX) + { + return -RT_ERROR; + } + + if (drv->base.mbState[box_num] != StateIdle) + { + return -RT_EBUSY; + } + + use_canfd = ns800_can_use_canfd(drv, &drv->base.device.config); + len = pmsg->len; + +#ifdef RT_CAN_USING_CANFD + msg_is_fd = (use_canfd && pmsg->fd_frame) ? RT_TRUE : RT_FALSE; + if (len > 64U) + { + return -RT_ERROR; + } + if (!msg_is_fd && (len > 8U)) + { + return -RT_ERROR; + } +#else + if (len > 8U) + { + return -RT_ERROR; + } +#endif + + rt_memset(&msg_obj, 0, sizeof(msg_obj)); + msg_obj.msgBufId = (uint8_t)box_num; + msg_obj.msgId = pmsg->id; + msg_obj.dlc = (uint8_t)ns800_can_len_to_dlc(len); + msg_obj.isFd = msg_is_fd ? true : false; + + rt_memcpy(msg_obj.data, pmsg->data, len); + + drv->base.mbState[box_num] = StateTxData; + + msg_buf_ptr = (uint32_t *)FLEXCANDRV_GetMsgBufStartAddr(&drv->base.CanHandle, (uint16_t)box_num); + + FLEXCANDRV_SetMsgType(msg_buf_ptr, FLEXCANDRV_MSGTYPE_TX); + FLEXCANDRV_SetMsgId(msg_buf_ptr, pmsg->id, (pmsg->ide == RT_CAN_EXTID) ? true : false); + FLEXCANDRV_SetMsgDLC(msg_buf_ptr, (FLEXCANDRV_DataLenCodeType)msg_obj.dlc); + FLEXCANDRV_SetFDEnable(msg_buf_ptr, msg_obj.isFd ? true : false); + + if (pmsg->rtr == RT_CAN_RTR) + { + msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM] |= MESSAGE_BUFFER_CS_RTR_MASK; + } + else + { + msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM] &= ~MESSAGE_BUFFER_CS_RTR_MASK; + } + +#ifdef RT_CAN_USING_CANFD + if (msg_obj.isFd && !pmsg->brs) + { + msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM] &= ~MESSAGE_BUFFER_CS_BRS_MASK; + } +#endif + + FLEXCANDRV_SetTxMsg(&drv->base.CanHandle, &msg_obj); + FLEXCANDRV_TransmitMsg(&drv->base.CanHandle, &msg_obj); + + return RT_EOK; +} + +static rt_ssize_t _can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t box_num) +{ + ns800rt7_can_device *drv; + const struct rt_can_msg *pmsg; + + RT_ASSERT(can != RT_NULL); + RT_ASSERT(buf != RT_NULL); + + drv = (ns800rt7_can_device *)can->parent.user_data; + pmsg = (const struct rt_can_msg *)buf; + + return ns800_can_send_common(drv, pmsg, box_num); +} + +static rt_ssize_t _can_sendmsg_nonblocking(struct rt_can_device *can, const void *buf) +{ + ns800rt7_can_device *drv; + const struct rt_can_msg *pmsg; + + RT_ASSERT(can != RT_NULL); + RT_ASSERT(buf != RT_NULL); + + drv = (ns800rt7_can_device *)can->parent.user_data; + pmsg = (const struct rt_can_msg *)buf; + + return ns800_can_send_common(drv, pmsg, CAN_TX_MB_INDEX); +} + +static rt_ssize_t _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo) +{ + ns800rt7_can_device *drv; + struct rt_can_msg *pmsg; + + RT_ASSERT(can != RT_NULL); + RT_ASSERT(buf != RT_NULL); + + drv = (ns800rt7_can_device *)can->parent.user_data; + RT_ASSERT(drv != RT_NULL); + + if (fifo != CAN_RX_MB_INDEX) + { + return -1; + } + + pmsg = (struct rt_can_msg *)buf; + pmsg->id = drv->rx_cache[0].msgId; + pmsg->len = drv->rx_cache[0].dlc; + pmsg->ide = drv->rx_ide[0]; + pmsg->rtr = drv->rx_rtr[0]; + pmsg->hdr_index = 0; + pmsg->rxfifo = 0; +#ifdef RT_CAN_USING_CANFD + pmsg->fd_frame = drv->rx_cache[0].isFd ? 1U : 0U; + pmsg->brs = drv->rx_brs[0]; +#endif + rt_memcpy(pmsg->data, drv->rx_cache[0].data, pmsg->len); + + return sizeof(struct rt_can_msg); +} + +static const struct rt_can_ops _can_ops = +{ + .configure = _can_config, + .control = _can_control, + .sendmsg = _can_sendmsg, + .recvmsg = _can_recvmsg, + .sendmsg_nonblocking = _can_sendmsg_nonblocking, +}; + +static uint32_t ns800_can_get_irq_flags(FLEXCANREG_TypeDef *obj) +{ + return obj->IFLAG1 | obj->IFLAG2 | obj->IFLAG3 | obj->IFLAG4; +} + +static uint8_t ns800_can_get_irq_mask(FLEXCANREG_TypeDef *obj, uint32_t msg_buffer_idx) +{ + uint32_t temp; + uint32_t bit = 0x00000001UL << (msg_buffer_idx % 32U); + + if (msg_buffer_idx > 95U) + { + temp = obj->IMASK4 & bit; + } + else if (msg_buffer_idx > 63U) + { + temp = obj->IMASK3 & bit; + } + else if (msg_buffer_idx > 31U) + { + temp = obj->IMASK2 & bit; + } + else + { + temp = obj->IMASK1 & bit; + } + + return temp ? 1U : 0U; +} + +static void ns800_can_isr_txrx(ns800rt7_can_device *drv) +{ + RT_ASSERT(drv != RT_NULL); + + while (ns800_can_get_irq_flags(drv->base.CanHandle.flexCanReg) != 0U) + { + uint32_t result; + + for (result = 0U; result < 128U; result++) + { + if ((FLEXCANDRV_GetMsgObjFlag(&drv->base.CanHandle, (uint8_t)result) != 0U) && + (ns800_can_get_irq_mask(drv->base.CanHandle.flexCanReg, result) != 0U)) + { + break; + } + } + + if (result >= 128U) + { + break; + } + + if (result == CAN_RX_MB_INDEX) + { + uint32_t *msg_buf_ptr; + uint32_t cs_word; + + msg_buf_ptr = (uint32_t *)FLEXCANDRV_GetMsgBufStartAddr(&drv->base.CanHandle, (uint16_t)result); + cs_word = msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM]; + + drv->rx_cache[0].msgBufId = (uint8_t)result; + FLEXCANDRV_GetRxMsg(&drv->base.CanHandle, &drv->rx_cache[0]); + drv->rx_ide[0] = (cs_word & MESSAGE_BUFFER_CS_IDE_MASK) ? RT_CAN_EXTID : RT_CAN_STDID; + drv->rx_rtr[0] = (cs_word & MESSAGE_BUFFER_CS_RTR_MASK) ? RT_CAN_RTR : RT_CAN_DTR; +#ifdef RT_CAN_USING_CANFD + drv->rx_brs[0] = (cs_word & MESSAGE_BUFFER_CS_BRS_MASK) ? 1U : 0U; +#endif + + drv->base.mbState[result] = StateIdle; + FLEXCANDRV_ClearMsgObjFlag(&drv->base.CanHandle, (uint8_t)result); + rt_hw_can_isr(&drv->base.device, RT_CAN_EVENT_RX_IND | (result << 8)); + } + else if (result == CAN_TX_MB_INDEX) + { + drv->base.mbState[result] = StateIdle; + FLEXCANDRV_ClearMsgObjFlag(&drv->base.CanHandle, (uint8_t)result); + rt_hw_can_isr(&drv->base.device, RT_CAN_EVENT_TX_DONE | (result << 8)); + } + else + { + FLEXCANDRV_ClearMsgObjFlag(&drv->base.CanHandle, (uint8_t)result); + } + } +} + +static void ns800_can_isr_err(ns800rt7_can_device *drv) +{ + RT_ASSERT(drv != RT_NULL); + + drv->base.device.status.rcverrcnt = FLEXCANREG_GetEcrRxerrcnt(drv->base.CanHandle.flexCanReg); + drv->base.device.status.snderrcnt = FLEXCANREG_GetEcrTxerrcnt(drv->base.CanHandle.flexCanReg); +} + +#ifdef BSP_USING_CAN1 +void CAN1_1_IRQHandler(void) +{ + rt_interrupt_enter(); + ns800_can_isr_txrx(&can1_dev); + rt_interrupt_leave(); +} + +void CAN1_2_IRQHandler(void) +{ + rt_interrupt_enter(); + ns800_can_isr_err(&can1_dev); + rt_interrupt_leave(); +} +#endif + +#ifdef BSP_USING_CANFD1 +void CANFD1_1_IRQHandler(void) +{ + rt_interrupt_enter(); + ns800_can_isr_txrx(&canfd1_dev); + rt_interrupt_leave(); +} + +void CANFD1_2_IRQHandler(void) +{ + rt_interrupt_enter(); + ns800_can_isr_err(&canfd1_dev); + rt_interrupt_leave(); +} +#endif + +#ifdef BSP_USING_CANFD2 +void CANFD2_1_IRQHandler(void) +{ + rt_interrupt_enter(); + ns800_can_isr_txrx(&canfd2_dev); + rt_interrupt_leave(); +} + +void CANFD2_2_IRQHandler(void) +{ + rt_interrupt_enter(); + ns800_can_isr_err(&canfd2_dev); + rt_interrupt_leave(); +} +#endif + +static rt_err_t ns800_can_register(ns800rt7_can_device *drv) +{ + struct can_configure config = CANDEFAULTCONFIG; + + RT_ASSERT(drv != RT_NULL); + + config.privmode = RT_CAN_MODE_NOPRIV; + config.ticks = 50U; + config.sndboxnumber = 1U; + config.msgboxsz = RX_MB_COUNT; +#ifdef RT_CAN_USING_HDR + config.maxhdr = 1U; +#endif +#ifdef RT_CAN_USING_CANFD + config.baud_rate_fd = CAN1MBaud; + config.enable_canfd = drv->hw->support_canfd ? 1U : 0U; +#endif + + drv->base.device.config = config; + drv->base.CanHandle.flexCanReg = drv->hw->instance; + drv->base.irqn1 = drv->hw->irqn1; + drv->base.irqn2 = drv->hw->irqn2; + ns800_can_init_filter_defaults(drv); + + return rt_hw_can_register(&drv->base.device, drv->hw->name, &_can_ops, drv); +} + +int rt_hw_can_init(void) +{ + int ret = RT_EOK; + +#ifdef BSP_USING_CAN1 + ret = ns800_can_register(&can1_dev); + if (ret != RT_EOK) + { + return ret; + } +#endif + +#ifdef BSP_USING_CANFD1 + ret = ns800_can_register(&canfd1_dev); + if (ret != RT_EOK) + { + return ret; + } +#endif + +#ifdef BSP_USING_CANFD2 + ret = ns800_can_register(&canfd2_dev); + if (ret != RT_EOK) + { + return ret; + } +#endif + + return ret; +} + +INIT_BOARD_EXPORT(rt_hw_can_init); + +#endif /* BSP_USING_CAN */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h new file mode 100644 index 00000000000..fcf569f4bf1 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-08-05 Xeon Xu the first version + * 2019-01-22 YLZ port from stm324xx-HAL to bsp stm3210x-HAL + * 2019-01-26 YLZ redefine `struct stm32_drv_can` add member `Rx1Message` + * 2019-02-19 YLZ port to BSP [stm32] + * 2019-06-17 YLZ modify struct stm32_drv_can. + */ + +#ifndef __DRV_CAN_H__ +#define __DRV_CAN_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define CAN_FILTER_NUM_MAX (16U) + +enum _can_state +{ + StateIdle = 0x0, /*!< MB idle.*/ + StateRxData = 0x1, /*!< MB receiving.*/ + StateRxRemote = 0x2, /*!< MB receiving remote reply.*/ + StateTxData = 0x3, /*!< MB transmitting.*/ + StateTxRemote = 0x4, /*!< MB transmitting remote request.*/ +}; + +struct ns800rt7_baud_rate_tab +{ + rt_uint32_t baud_rate; + rt_uint32_t config_data; +}; +#define BAUD_DATA(NO) (can_baud_rate_tab[NO].config_data) + + +/* stm32 can device */ +typedef struct +{ + char *name; + FLEXCANDRV_ControllerCfgType CanCfg; + IRQn_Type irqn1; + IRQn_Type irqn2; + FLEXCANDRV_Type CanHandle; + FLEXCANDRV_MsgCfgType FilterConfig[CAN_FILTER_NUM_MAX]; + uint8_t FilterNum; + volatile uint8_t mbState[128]; + struct rt_can_device device; /* inherit from can device */ +} ns800rt7_can; + +int rt_hw_can_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /*__DRV_CAN_H__ */ + +/************************** end of file ******************/ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h new file mode 100644 index 00000000000..dd931cd1e65 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2024 RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * + */ + +#ifndef __DRV_CONFIG_H__ +#define __DRV_CONFIG_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(SOC_SERIES_NS800RT7) +#include "rt7/uart_config.h" + +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h new file mode 100644 index 00000000000..0b7b8ecdde6 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-10 SummerGift first version + */ + +#ifndef __DRV_DMA_H_ +#define __DRV_DMA_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct dma_config { + EDMA_TypeDef *Instance; + rt_uint32_t dma_rcc; + IRQn_Type dma_irq; + rt_uint32_t request; + +}; + +#ifdef __cplusplus +} +#endif + +#endif /*__DRV_DMA_H_ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c new file mode 100644 index 00000000000..44fb4c72a5f --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c @@ -0,0 +1,537 @@ +/**************************************************************************//** +* +* @copyright (C) 2026 Novosense Technology Corp. All rights reserved. +* +* SPDX-License-Identifier: Apache-2.0 +* +* Change Logs: +* Date Author Notes +* 2026-5-7 Alex-J First version +* +******************************************************************************/ +#include +#include "drv_ecap.h" + +#if defined(BSP_USING_ECAP) + +#define DBG_TAG "drv.ecap" +#define DBG_LVL DBG_INFO +#include + +void ECAP1_IRQHandler (void); +static void rt_hw_ecap1_isr(void); + +#ifndef BSP_ECAP1_NAME +#define BSP_ECAP1_NAME "ecap1" +#endif +#ifndef BSP_ECAP1_GPIO_NUM +#define BSP_ECAP1_GPIO_NUM 16 +#endif +#ifndef BSP_ECAP1_GPIO_MUX +#define BSP_ECAP1_GPIO_MUX 0 +#endif +#ifndef BSP_ECAP1_INPUT_XBAR +#define BSP_ECAP1_INPUT_XBAR 7 +#endif +#ifndef BSP_ECAP1_INPUT_SOURCE +#define BSP_ECAP1_INPUT_SOURCE 16 +#endif + +static GPIO_TypeDef *ns800_ecap_gpio_port(rt_uint32_t gpio_num) +{ + if (gpio_num <= 31U) return GPIOA; + if (gpio_num <= 63U) return GPIOB; + if (gpio_num <= 95U) return GPIOC; + if (gpio_num <= 127U) return GPIOD; + if (gpio_num <= 159U) return GPIOE; + if (gpio_num <= 191U) return GPIOF; + if (gpio_num <= 223U) return GPIOG; + return GPIOH; +} + +static GPIO_PinNum ns800_ecap_gpio_pin(rt_uint32_t gpio_num) +{ + return (GPIO_PinNum)(gpio_num % 32U); +} + +static XBAR_InputNum ns800_ecap_xbar_input(rt_uint32_t input_idx) +{ + return (XBAR_InputNum)(input_idx - 1U); +} + +static rt_uint32_t ns800_ecap_input_sel(rt_uint32_t input_idx) +{ + return (rt_uint32_t)(input_idx - 1U); +} + +#ifdef BSP_USING_ECAP1 +static struct rt_ecap_config ecap1_config = +{ + .name = BSP_ECAP1_NAME, + .instance = ECAP1, + .irq_type = ECAP1_IRQn, + .input_xbar = (rt_uint32_t)XBAR_INPUT7, + .ecap_input = (rt_uint32_t)ECAP_INPUT_XBAR_INPUT7, + .input_source = BSP_ECAP1_INPUT_SOURCE, + .gpio_port = GPIOA, + .gpio_pin = GPIO_PIN_16, + .gpio_mux = (GPIO_AltFunc)BSP_ECAP1_GPIO_MUX, + .irq_handler = ECAP1_IRQHandler, +}; + +static struct rt_ecap_device ecap1_dev; +#endif + +/* + * + */ +static void ecap_gpio_init (const struct rt_ecap_config *config) +{ + RT_ASSERT(config != RT_NULL); + + GPIO_setPinConfig(config->gpio_port, config->gpio_pin, config->gpio_mux); + GPIO_setAnalogMode(config->gpio_port, config->gpio_pin, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(config->gpio_port, config->gpio_pin, GPIO_PIN_TYPE_STD); + GPIO_setQualificationMode(config->gpio_port, config->gpio_pin, GPIO_QUAL_SYNC); + GPIO_setDirectionMode(config->gpio_port, config->gpio_pin, GPIO_DIR_MODE_IN); +} + +/* + * + */ +static void ecap_xbar_init (const struct rt_ecap_config *config) +{ + RT_ASSERT(config != RT_NULL); + + XBAR_setInputPin(XBAR, config->input_xbar, config->input_source); +} + +/* + * + */ +static void ecap_hw_init (const struct rt_ecap_config *config) +{ + RT_ASSERT(config != RT_NULL); + + /* + * Disable and clear all capture flags and interrupts. + */ + ECAP_disableInterrupt(config->instance, ECAP_ECEINT_CEVT1_M | ECAP_ECEINT_CEVT2_M | ECAP_ECEINT_CEVT3_M | + ECAP_ECEINT_CEVT4_M | ECAP_ECEINT_CTROVF_M | ECAP_ECEINT_CTREQPRD_M | + ECAP_ECEINT_CTREQCMP_M); + + ECAP_clearInterrupt(config->instance, ECAP_ECCLR_CEVT1_M | ECAP_ECCLR_CEVT2_M | ECAP_ECCLR_CEVT3_M | + ECAP_ECCLR_CEVT4_M | ECAP_ECCLR_CTROVF_M | ECAP_ECCLR_CTRPRD_M | + ECAP_ECCLR_CTRCMP_M); + + ECAP_disableTimeStampCapture(config->instance); + ECAP_stopCounter(config->instance); + + /* + * Capture mode: + * Event1 falling + * Event2 rising + * Event3 falling + * Event4 rising + */ + ECAP_enableCaptureMode(config->instance); + ECAP_setCaptureMode(config->instance, ECAP_CONTINUOUS_CAPTURE_MODE, ECAP_EVENT_4); + ECAP_setEventPrescaler(config->instance, 0U); + + ECAP_setEventPolarity(config->instance, ECAP_EVENT_1, ECAP_EVNT_FALLING_EDGE); + ECAP_setEventPolarity(config->instance, ECAP_EVENT_2, ECAP_EVNT_RISING_EDGE); + ECAP_setEventPolarity(config->instance, ECAP_EVENT_3, ECAP_EVNT_FALLING_EDGE); + ECAP_setEventPolarity(config->instance, ECAP_EVENT_4, ECAP_EVNT_RISING_EDGE); + + ECAP_enableCounterResetOnEvent(config->instance, ECAP_EVENT_1); + ECAP_enableCounterResetOnEvent(config->instance, ECAP_EVENT_2); + ECAP_enableCounterResetOnEvent(config->instance, ECAP_EVENT_3); + ECAP_enableCounterResetOnEvent(config->instance, ECAP_EVENT_4); + + ECAP_selectECAPInput(config->instance, config->ecap_input); + + ECAP_setPhaseShiftCount(config->instance, 0U); + ECAP_enableLoadCounter(config->instance); + + ECAP_setSyncOutMode(config->instance, ECAP_SYNC_OUT_SYNCI); + ECAP_setEmulationMode(config->instance, ECAP_EMULATION_STOP); + ECAP_setSyncInPulseSource(config->instance, ECAP_SYNC_IN_PULSE_SRC_DISABLE); + + // ECAP_startCounter(config->instance); + // ECAP_enableTimeStampCapture(config->instance); + // ECAP_reArm(config->instance); + + /* + * 当前配置是 Event4 完成后产生中断。 + */ + // ECAP_enableInterrupt(config->instance, ECAP_ECEINT_CEVT4_M); +} + +/* + * + */ +static void ecap_hw_deinit (const struct rt_ecap_config *config) +{ + RT_ASSERT(config != RT_NULL); + + ECAP_disableInterrupt(config->instance, ECAP_ECEINT_CEVT1_M | ECAP_ECEINT_CEVT2_M | ECAP_ECEINT_CEVT3_M | + ECAP_ECEINT_CEVT4_M | ECAP_ECEINT_CTROVF_M | ECAP_ECEINT_CTREQPRD_M | + ECAP_ECEINT_CTREQCMP_M); + + ECAP_disableTimeStampCapture(config->instance); + ECAP_stopCounter(config->instance); +} + +static void ecap_hw_clear_flags (const struct rt_ecap_config *config) +{ + RT_ASSERT(config != RT_NULL); + + ECAP_clearInterrupt(config->instance, ECAP_ECCLR_CEVT1_M | ECAP_ECCLR_CEVT2_M | ECAP_ECCLR_CEVT3_M | + ECAP_ECCLR_CEVT4_M | ECAP_ECCLR_CTROVF_M | ECAP_ECCLR_CTRPRD_M | + ECAP_ECCLR_CTRCMP_M); + ECAP_clearGlobalInterrupt(config->instance); +} + +static void ecap_hw_rearm (const struct rt_ecap_config *config) +{ + RT_ASSERT(config != RT_NULL); + + ecap_hw_clear_flags(config); + ECAP_reArm(config->instance); +} + +static void ecap_calc_capture (struct rt_ecap_capture *cap) +{ + RT_ASSERT(cap != RT_NULL); + + /* + * 由于当前配置为: + * Event1 falling + * Event2 rising + * Event3 falling + * Event4 rising + * + * 且每个 event 都 reset counter。 + * + * 所以 cap1~cap4 并不是一个自由运行时间轴上的绝对时间戳, + * 而是每段边沿之间的间隔计数。 + * + * 这里给一个通用解释: + * cap2: falling -> rising + * cap3: rising -> falling + * cap4: falling -> rising + * + * 对 PWM 输入来说,需要根据实际输入波形起始边沿判断高低电平。 + */ + cap->period_high = cap->cap2; + cap->period_low = cap->cap3; + cap->period_total = cap->cap2 + cap->cap3; +} + +static rt_err_t rt_ecap_init (rt_device_t dev) +{ + struct rt_ecap_device *ecap; + + RT_ASSERT(dev != RT_NULL); + + ecap = (struct rt_ecap_device *)dev; + + ecap_gpio_init(ecap->config); + ecap_xbar_init(ecap->config); + ecap_hw_init(ecap->config); + + ecap->last_capture.status = ECAP_STATUS_IDLE; + + return RT_EOK; +} + +static rt_err_t rt_ecap_open (rt_device_t dev, rt_uint16_t oflag) +{ + struct rt_ecap_device *ecap; + + RT_ASSERT(dev != RT_NULL); + + ecap = (struct rt_ecap_device *)dev; + + rt_mutex_take(&ecap->lock, RT_WAITING_FOREVER); + + if (ecap->opened == 0U) + { + ecap_hw_clear_flags(ecap->config); + ECAP_startCounter(ecap->config->instance); + ECAP_enableTimeStampCapture(ecap->config->instance); + ECAP_reArm(ecap->config->instance); + ECAP_enableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); + + Interrupt_register(ecap->config->irq_type, ecap->config->irq_handler); + Interrupt_enable(ecap->config->irq_type); + } + + ecap->opened++; + + rt_mutex_release(&ecap->lock); + + return RT_EOK; +} + +static rt_err_t rt_ecap_close (rt_device_t dev) +{ + struct rt_ecap_device *ecap; + + RT_ASSERT(dev != RT_NULL); + + ecap = (struct rt_ecap_device *)dev; + + rt_mutex_take(&ecap->lock, RT_WAITING_FOREVER); + + if (ecap->opened > 0U) + { + ecap->opened--; + + if (ecap->opened == 0U) + { + ECAP_disableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); + ECAP_disableTimeStampCapture(ecap->config->instance); + ECAP_stopCounter(ecap->config->instance); + Interrupt_disable(ecap->config->irq_type); + } + } + + rt_mutex_release(&ecap->lock); + + return RT_EOK; +} + +static rt_ssize_t rt_ecap_read (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size) +{ + struct rt_ecap_device *ecap; + struct rt_ecap_capture *cap; + + RT_ASSERT(dev != RT_NULL); + RT_ASSERT(buffer != RT_NULL); + + ecap = (struct rt_ecap_device *)dev; + + if (size < sizeof(struct rt_ecap_capture)) + { + return 0; + } + + /* + * 阻塞等待一次完整 capture。 + * 如果不希望阻塞,可以改成 RT_WAITING_NO。 + */ + if (rt_sem_take(&ecap->rx_sem, RT_WAITING_FOREVER) != RT_EOK) + { + return 0; + } + + rt_mutex_take(&ecap->lock, RT_WAITING_FOREVER); + + cap = (struct rt_ecap_capture *)buffer; + *cap = ecap->last_capture; + + rt_mutex_release(&ecap->lock); + + return sizeof(struct rt_ecap_capture); +} + +static rt_err_t rt_ecap_control (rt_device_t dev, int cmd, void *args) +{ + struct rt_ecap_device *ecap; + + RT_ASSERT(dev != RT_NULL); + + ecap = (struct rt_ecap_device *)dev; + + switch (cmd) + { + case ECAP_CMD_ENABLE: + ECAP_startCounter(ecap->config->instance); + ECAP_enableTimeStampCapture(ecap->config->instance); + ECAP_enableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); + break; + + case ECAP_CMD_DISABLE: + ECAP_disableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); + ECAP_disableTimeStampCapture(ecap->config->instance); + ECAP_stopCounter(ecap->config->instance); + break; + + case ECAP_CMD_REARM: + ecap_hw_rearm(ecap->config); + break; + + case ECAP_CMD_GET_LAST_CAPTURE: + if (args == RT_NULL) + { + return -RT_EINVAL; + } + + rt_mutex_take(&ecap->lock, RT_WAITING_FOREVER); + *(struct rt_ecap_capture *)args = ecap->last_capture; + rt_mutex_release(&ecap->lock); + break; + + case ECAP_CMD_SET_CALLBACK: + { + struct rt_ecap_callback *cb; + + if (args == RT_NULL) + { + return -RT_EINVAL; + } + + cb = (struct rt_ecap_callback *)args; + + rt_mutex_take(&ecap->lock, RT_WAITING_FOREVER); + ecap->rx_callback = cb->callback; + ecap->rx_user_data = cb->user_data; + rt_mutex_release(&ecap->lock); + break; + } + + case ECAP_CMD_CLEAR_FLAGS: + ecap_hw_clear_flags(ecap->config); + break; + + case ECAP_CMD_ENABLE_IRQ: + ECAP_enableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); + Interrupt_register(ecap->config->irq_type, ecap->config->irq_handler); + Interrupt_enable(ecap->config->irq_type); + break; + + case ECAP_CMD_DISABLE_IRQ: + ECAP_disableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); + Interrupt_disable(ecap->config->irq_type); + break; + + default: + return -RT_EINVAL; + } + + return RT_EOK; +} + +#ifdef RT_USING_DEVICE_OPS +static const struct rt_device_ops ecap_ops = +{ + rt_ecap_init, + rt_ecap_open, + rt_ecap_close, + rt_ecap_read, + RT_NULL, + rt_ecap_control +}; +#endif + +static rt_err_t rt_hw_ecap_register (struct rt_ecap_device *ecap, const struct rt_ecap_config *config) +{ + struct rt_device *dev; + + RT_ASSERT(ecap != RT_NULL); + RT_ASSERT(config != RT_NULL); + + rt_memset(ecap, 0, sizeof(struct rt_ecap_device)); + + ecap->config = config; + + rt_mutex_init(&ecap->lock, config->name, RT_IPC_FLAG_PRIO); + rt_sem_init(&ecap->rx_sem, config->name, 0, RT_IPC_FLAG_FIFO); + + dev = &ecap->parent; + + dev->type = RT_Device_Class_Miscellaneous; + dev->rx_indicate = RT_NULL; + dev->tx_complete = RT_NULL; + +#ifdef RT_USING_DEVICE_OPS + dev->ops = &ecap_ops; +#else + dev->init = rt_ecap_init; + dev->open = rt_ecap_open; + dev->close = rt_ecap_close; + dev->read = rt_ecap_read; + dev->write = RT_NULL; + dev->control = rt_ecap_control; +#endif + + return rt_device_register(dev, config->name, RT_DEVICE_FLAG_RDONLY | RT_DEVICE_FLAG_INT_RX); +} + +int rt_hw_ecap_init (void) +{ + rt_err_t ret; + +#ifdef BSP_USING_ECAP1 + ecap1_config.input_xbar = (rt_uint32_t)ns800_ecap_xbar_input(BSP_ECAP1_INPUT_XBAR); + ecap1_config.ecap_input = ns800_ecap_input_sel(BSP_ECAP1_INPUT_XBAR); + ecap1_config.gpio_port = ns800_ecap_gpio_port(BSP_ECAP1_GPIO_NUM); + ecap1_config.gpio_pin = ns800_ecap_gpio_pin(BSP_ECAP1_GPIO_NUM); + + ret = rt_hw_ecap_register(&ecap1_dev, &ecap1_config); + + if (ret != RT_EOK) + { + LOG_E("register ecap1 failed, ret = %d", ret); + return ret; + } + + LOG_I("ecap1 register done"); +#else + ret = -RT_ENOSYS; +#endif + + return ret; +} +INIT_DEVICE_EXPORT(rt_hw_ecap_init); + +/* + * + */ +static void rt_hw_ecap1_isr(void) +{ + struct rt_ecap_device *ecap; + struct rt_ecap_capture cap; + +#ifdef BSP_USING_ECAP1 + ecap = &ecap1_dev; + + rt_interrupt_enter(); + + rt_memset(&cap, 0, sizeof(cap)); + + cap.cap1 = ECAP_getEventTimeStamp(ecap->config->instance, ECAP_EVENT_1); + cap.cap2 = ECAP_getEventTimeStamp(ecap->config->instance, ECAP_EVENT_2); + cap.cap3 = ECAP_getEventTimeStamp(ecap->config->instance, ECAP_EVENT_3); + cap.cap4 = ECAP_getEventTimeStamp(ecap->config->instance, ECAP_EVENT_4); + + cap.status = ECAP_STATUS_DONE; + ecap_calc_capture(&cap); + + ecap->last_capture = cap; + + /* + * 当前是 one-shot capture mode,所以一次捕获完成后需要 re-arm。 + */ + ecap_hw_clear_flags(ecap->config); + + rt_sem_release(&ecap->rx_sem); + + if (ecap->rx_callback != RT_NULL) + { + ecap->rx_callback((struct rt_ecap_capture *)&ecap->last_capture, + ecap->rx_user_data); + } + + rt_interrupt_leave(); +#endif +} + +void ECAP1_IRQHandler (void) +{ + rt_hw_ecap1_isr(); +} + + +#endif //#if defined(BSP_USING_ECAP) diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h new file mode 100644 index 00000000000..f1a7bf5e670 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h @@ -0,0 +1,122 @@ +/**************************************************************************//** +* +* @copyright (C) 2026 Novosense Technology Corp. All rights reserved. +* +* SPDX-License-Identifier: Apache-2.0 +* +* Change Logs: +* Date Author Notes +* 2026-5-7 Alex-J First version +* +******************************************************************************/ + +#ifndef __DRV_ECAP_H__ +#define __DRV_ECAP_H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define ECAP_DEVICE_NAME_MAX 8U + +/* + * control command + */ +#define ECAP_CMD_ENABLE (0x01) +#define ECAP_CMD_DISABLE (0x02) +#define ECAP_CMD_REARM (0x03) +#define ECAP_CMD_GET_LAST_CAPTURE (0x04) +#define ECAP_CMD_SET_CALLBACK (0x05) +#define ECAP_CMD_CLEAR_FLAGS (0x06) +#define ECAP_CMD_ENABLE_IRQ (0x07) +#define ECAP_CMD_DISABLE_IRQ (0x08) + +/* + * ECAP capture status + */ +#define ECAP_STATUS_IDLE (0x00U) +#define ECAP_STATUS_DONE (0x01U) +#define ECAP_STATUS_OVERFLOW (0x02U) +#define ECAP_STATUS_CAPTURE (0x04U) +#define ECAP_STATUS_TIMEOUT (0x05U) + +/* + * Capture result. + * + * cap1~cap4 对应 ECAP CEVT1~CEVT4 的捕获值。 + * period_high / period_low 可根据当前边沿配置计算。 + */ +struct rt_ecap_capture +{ + rt_uint32_t cap1; + rt_uint32_t cap2; + rt_uint32_t cap3; + rt_uint32_t cap4; + + rt_uint32_t period_low; + rt_uint32_t period_high; + rt_uint32_t period_total; + + rt_uint32_t status; +}; + +typedef void (*rt_ecap_rx_callback_t)(struct rt_ecap_capture *capture, void *user_data); + +struct rt_ecap_callback +{ + rt_ecap_rx_callback_t callback; + void *user_data; +}; + +/* + * Static ECAP hardware configuration. + */ +struct rt_ecap_config +{ + const char *name; + + ECAP_TypeDef *instance; + IRQn_Type irq_type; + + rt_uint32_t input_xbar; + rt_uint32_t ecap_input; + rt_uint32_t input_source; + + GPIO_TypeDef *gpio_port; + GPIO_PinNum gpio_pin; + GPIO_AltFunc gpio_mux; + void (*irq_handler)(void); +}; + +/* + * ECAP device object. + */ +struct rt_ecap_device +{ + struct rt_device parent; + + const struct rt_ecap_config *config; + + struct rt_mutex lock; + struct rt_semaphore rx_sem; + + volatile struct rt_ecap_capture last_capture; + + rt_ecap_rx_callback_t rx_callback; + void *rx_user_data; + + rt_uint8_t opened; +}; + +int rt_hw_ecap_init(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_USART_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c new file mode 100644 index 00000000000..9bbd865e9ee --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c @@ -0,0 +1,450 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * + */ + +#include +#include "drv_gpio.h" +#include "NS800RT7xxx_TI_gpio.h" +#include +#include + +#ifdef BSP_USING_GPIO + +#define PIN_ENTRY(pin_macro) {pin_macro} + +static const rt_pin_info_t pin_map_table[225] = { + // 0-21: 连续 + [0] = PIN_ENTRY(GPIO_0), + [1] = PIN_ENTRY(GPIO_1), + [2] = PIN_ENTRY(GPIO_2), + [3] = PIN_ENTRY(GPIO_3), + [4] = PIN_ENTRY(GPIO_4), + [5] = PIN_ENTRY(GPIO_5), + [6] = PIN_ENTRY(GPIO_6), + [7] = PIN_ENTRY(GPIO_7), + [8] = PIN_ENTRY(GPIO_8), + [9] = PIN_ENTRY(GPIO_9), + [10] = PIN_ENTRY(GPIO_10), + [11] = PIN_ENTRY(GPIO_11), + [12] = PIN_ENTRY(GPIO_12), + [13] = PIN_ENTRY(GPIO_13), + [14] = PIN_ENTRY(GPIO_14), + [15] = PIN_ENTRY(GPIO_15), + [16] = PIN_ENTRY(GPIO_16), + [17] = PIN_ENTRY(GPIO_17), + [18] = PIN_ENTRY(GPIO_18), + [19] = PIN_ENTRY(GPIO_19), + [20] = PIN_ENTRY(GPIO_20), + [21] = PIN_ENTRY(GPIO_21), + + // 22-32: 不连续 + [22] = PIN_ENTRY(GPIO_22), + [23] = PIN_ENTRY(GPIO_23), + [24] = PIN_ENTRY(GPIO_24), + [25] = PIN_ENTRY(GPIO_25), + [26] = PIN_ENTRY(GPIO_26), + [27] = PIN_ENTRY(GPIO_27), + [28] = PIN_ENTRY(GPIO_28), + [29] = PIN_ENTRY(GPIO_29), + [30] = PIN_ENTRY(GPIO_30), + [31] = PIN_ENTRY(GPIO_31), + [32] = PIN_ENTRY(GPIO_32), + + // 33-63: 连续 + [33] = PIN_ENTRY(GPIO_33), + [34] = PIN_ENTRY(GPIO_34), + [35] = PIN_ENTRY(GPIO_35), + [36] = PIN_ENTRY(GPIO_36), + [37] = PIN_ENTRY(GPIO_37), + [38] = PIN_ENTRY(GPIO_38), + [39] = PIN_ENTRY(GPIO_39), + [40] = PIN_ENTRY(GPIO_40), + [41] = PIN_ENTRY(GPIO_41), + [42] = PIN_ENTRY(GPIO_42), + [43] = PIN_ENTRY(GPIO_43), + [44] = PIN_ENTRY(GPIO_44), + [45] = PIN_ENTRY(GPIO_45), + [46] = PIN_ENTRY(GPIO_46), + [47] = PIN_ENTRY(GPIO_47), + [48] = PIN_ENTRY(GPIO_48), + [49] = PIN_ENTRY(GPIO_49), + [50] = PIN_ENTRY(GPIO_50), + [51] = PIN_ENTRY(GPIO_51), + [52] = PIN_ENTRY(GPIO_52), + [53] = PIN_ENTRY(GPIO_53), + [54] = PIN_ENTRY(GPIO_54), + [55] = PIN_ENTRY(GPIO_55), + [56] = PIN_ENTRY(GPIO_56), + [57] = PIN_ENTRY(GPIO_57), + [58] = PIN_ENTRY(GPIO_58), + [59] = PIN_ENTRY(GPIO_59), + [60] = PIN_ENTRY(GPIO_60), + [61] = PIN_ENTRY(GPIO_61), + [62] = PIN_ENTRY(GPIO_62), + [63] = PIN_ENTRY(GPIO_63), + + // 64-94: 连续 + [64] = PIN_ENTRY(GPIO_64), + [65] = PIN_ENTRY(GPIO_65), + [66] = PIN_ENTRY(GPIO_66), + [67] = PIN_ENTRY(GPIO_67), + [68] = PIN_ENTRY(GPIO_68), + [69] = PIN_ENTRY(GPIO_69), + [70] = PIN_ENTRY(GPIO_70), + [71] = PIN_ENTRY(GPIO_71), + [72] = PIN_ENTRY(GPIO_72), + [73] = PIN_ENTRY(GPIO_73), + [74] = PIN_ENTRY(GPIO_74), + [75] = PIN_ENTRY(GPIO_75), + [76] = PIN_ENTRY(GPIO_76), + [77] = PIN_ENTRY(GPIO_77), + [78] = PIN_ENTRY(GPIO_78), + [79] = PIN_ENTRY(GPIO_79), + [80] = PIN_ENTRY(GPIO_80), + [81] = PIN_ENTRY(GPIO_81), + [82] = PIN_ENTRY(GPIO_82), + [83] = PIN_ENTRY(GPIO_83), + [84] = PIN_ENTRY(GPIO_84), + [85] = PIN_ENTRY(GPIO_85), + [86] = PIN_ENTRY(GPIO_86), + [87] = PIN_ENTRY(GPIO_87), + [88] = PIN_ENTRY(GPIO_88), + [89] = PIN_ENTRY(GPIO_89), + [90] = PIN_ENTRY(GPIO_90), + [91] = PIN_ENTRY(GPIO_91), + [92] = PIN_ENTRY(GPIO_92), + [93] = PIN_ENTRY(GPIO_93), + [94] = PIN_ENTRY(GPIO_94), + + // 不连续引脚 + [99] = PIN_ENTRY(GPIO_99), + [100] = PIN_ENTRY(GPIO_100), + [103] = PIN_ENTRY(GPIO_103), + [104] = PIN_ENTRY(GPIO_104), + [105] = PIN_ENTRY(GPIO_105), + [106] = PIN_ENTRY(GPIO_106), + [133] = PIN_ENTRY(GPIO_133), + [183] = PIN_ENTRY(GPIO_183), + [184] = PIN_ENTRY(GPIO_184), + [198] = PIN_ENTRY(GPIO_198), + [199] = PIN_ENTRY(GPIO_199), + [200] = PIN_ENTRY(GPIO_200), + [201] = PIN_ENTRY(GPIO_201), + [202] = PIN_ENTRY(GPIO_202), + [203] = PIN_ENTRY(GPIO_203), + [204] = PIN_ENTRY(GPIO_204), + [205] = PIN_ENTRY(GPIO_205), + [206] = PIN_ENTRY(GPIO_206), + [207] = PIN_ENTRY(GPIO_207), + [208] = PIN_ENTRY(GPIO_208), + [209] = PIN_ENTRY(GPIO_209), + [210] = PIN_ENTRY(GPIO_210), + [211] = PIN_ENTRY(GPIO_211), + [212] = PIN_ENTRY(GPIO_212), + [213] = PIN_ENTRY(GPIO_213), + [214] = PIN_ENTRY(GPIO_214), + [215] = PIN_ENTRY(GPIO_215), + [216] = PIN_ENTRY(GPIO_216), + [217] = PIN_ENTRY(GPIO_217), + [218] = PIN_ENTRY(GPIO_218), + [219] = PIN_ENTRY(GPIO_219), + [220] = PIN_ENTRY(GPIO_220), + [221] = PIN_ENTRY(GPIO_221), + [222] = PIN_ENTRY(GPIO_222), + [223] = PIN_ENTRY(GPIO_223), + [224] = PIN_ENTRY(GPIO_224), +}; + +// 1. PIN_NUM: 从(port, pin)获取引脚编号 +int get_pin_num(GPIO_TypeDef *port, GPIO_PinNum pin) +{ + // 遍历数组查找匹配 + for (int i = 0; i < 225; i++) { + if (pin_map_table[i].port == port && + pin_map_table[i].pin == (uint16_t)pin) { + return i; // 返回引脚编号 + } + } + return -1; // 未找到 +} + +// 2. PIN_PORT: 从引脚编号获取端口索引 +uint8_t get_port_index(GPIO_TypeDef *port) +{ + // 由于新平台端口地址可能不连续,需要映射 + if (port == GPIOA) return 0; + if (port == GPIOB) return 1; + if (port == GPIOC) return 2; + if (port == GPIOD) return 3; + if (port == GPIOE) return 4; + if (port == GPIOF) return 5; + if (port == GPIOG) return 6; + if (port == GPIOH) return 7; + // 如果有更多端口继续添加 + return 0xFF; // 无效端口 +} + +// 3. PIN_NO: 从引脚编号获取引脚索引 +uint8_t get_pin_index(uint16_t pin) +{ + // 提取引脚位的位置 + switch (pin) { + case GPIO_PIN_0: return 0; + case GPIO_PIN_1: return 1; + case GPIO_PIN_2: return 2; + case GPIO_PIN_3: return 3; + case GPIO_PIN_4: return 4; + case GPIO_PIN_5: return 5; + case GPIO_PIN_6: return 6; + case GPIO_PIN_7: return 7; + case GPIO_PIN_8: return 8; + case GPIO_PIN_9: return 9; + case GPIO_PIN_10: return 10; + case GPIO_PIN_11: return 11; + case GPIO_PIN_12: return 12; + case GPIO_PIN_13: return 13; + case GPIO_PIN_14: return 14; + case GPIO_PIN_15: return 15; + case GPIO_PIN_16: return 16; + case GPIO_PIN_17: return 17; + case GPIO_PIN_18: return 18; + case GPIO_PIN_19: return 19; + case GPIO_PIN_20: return 20; + case GPIO_PIN_21: return 21; + case GPIO_PIN_22: return 22; + case GPIO_PIN_23: return 23; + case GPIO_PIN_24: return 24; + case GPIO_PIN_25: return 25; + case GPIO_PIN_26: return 26; + case GPIO_PIN_27: return 27; + case GPIO_PIN_28: return 28; + case GPIO_PIN_29: return 29; + case GPIO_PIN_30: return 30; + case GPIO_PIN_31: return 31; + default: return 0xFF; // 无效引脚 + } +} + +uint8_t get_port_index_by_num(int pin_num) +{ + const rt_pin_info_t *info = get_pin_info(pin_num); + + if (info == RT_NULL) + { + return 0xFF; + } + + return get_port_index(info->port); +} + +uint8_t get_pin_index_by_num(int pin_num) +{ + const rt_pin_info_t *info = get_pin_info(pin_num); + + if (info == RT_NULL) + { + return 0xFF; + } + + return get_pin_index(info->pin); +} + +const rt_pin_info_t* get_pin_info(int pin_num) +{ + if(pin_num < 0 || pin_num >=225) + return NULL; + + if(pin_map_table[pin_num].port == NULL) { + return NULL; + } + + return &pin_map_table[pin_num]; +} + +#define PIN_STPORT(pin) (pin_map_table[(pin)].port) +#define PIN_STPIN(pin) (pin_map_table[(pin)].pin) + + +static uint32_t pin_irq_enable_mask = 0; + +#define ITEM_NUM(items) (sizeof(items) / sizeof((items)[0])) + +/* e.g. PE.7 */ +static rt_base_t ns800_pin_get(const char *name) +{ + char port_name; + int pin_index; + uint8_t port_index; + GPIO_TypeDef *port = RT_NULL; + + if ((name == RT_NULL) || (name[0] == '\0')) + { + goto out; + } + + if ((name[0] != 'P') && (name[0] != 'p')) + { + goto out; + } + + port_name = (char)toupper((unsigned char)name[1]); + if (name[2] != '.') + { + goto out; + } + + pin_index = atoi(&name[3]); + if ((pin_index < 0) || (pin_index > 31)) + { + goto out; + } + + port_index = (uint8_t)(port_name - 'A'); + switch (port_index) + { + case 0: port = GPIOA; break; + case 1: port = GPIOB; break; + case 2: port = GPIOC; break; + case 3: port = GPIOD; break; + case 4: port = GPIOE; break; + case 5: port = GPIOF; break; + case 6: port = GPIOG; break; + case 7: port = GPIOH; break; + default: + goto out; + } + + return get_pin_num(port, (GPIO_PinNum)pin_index); + +out: + rt_kprintf("Px.y x:A~H y:0-31, e.g. PA.0\n"); + return -RT_EINVAL; +} + +static void ns800rt7_pin_write(rt_device_t dev, rt_base_t pin, rt_uint8_t value) +{ + const rt_pin_info_t *info = get_pin_info(pin); + + if (info == RT_NULL) + { + return ; + } + + if(value == 0) + { + GPIO_clearPin(info->port, info->pin); + } + else if(value == 1) + { + GPIO_setPin(info->port, info->pin); + } +} + +static rt_ssize_t ns800rt7_pin_read(rt_device_t dev, rt_base_t pin) +{ + const rt_pin_info_t *info = get_pin_info(pin); + + if (info == RT_NULL) + { + return -RT_EINVAL; + } + + return (GPIO_readPin(info->port, info->pin)) ? PIN_HIGH : PIN_LOW; +} + +static void ns800rt7_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode) +{ + const rt_pin_info_t *info = get_pin_info(pin); + + if (info == RT_NULL) + { + return ; + } + + GPIO_setAnalogMode(info->port, info->pin, GPIO_ANALOG_DISABLED); + GPIO_setQualificationMode(info->port, info->pin, GPIO_QUAL_SYNC); + GPIO_setPadConfig(info->port, info->pin, GPIO_PIN_TYPE_STD); + GPIO_setDriveLevel(info->port, info->pin, GPIO_DRV_MAX); + + if (mode == PIN_MODE_OUTPUT ) + { + GPIO_setPadConfig(info->port, info->pin, GPIO_PIN_TYPE_STD); + GPIO_setPinConfig(info->port, info->pin, ALT0_FUNCTION); + GPIO_clearPin(info->port, info->pin); + GPIO_setDirectionMode(info->port, info->pin, GPIO_DIR_MODE_OUT); + } + else if (mode == PIN_MODE_INPUT) + { + GPIO_setPadConfig(info->port, info->pin, GPIO_PIN_TYPE_STD); + GPIO_setPinConfig(info->port, info->pin, ALT0_FUNCTION); + GPIO_setDirectionMode(info->port, info->pin, GPIO_DIR_MODE_IN); + } + else if (mode == PIN_MODE_INPUT_PULLUP) + { + GPIO_setPadConfig(info->port, info->pin, GPIO_PIN_TYPE_PULLUP); + GPIO_setPinConfig(info->port, info->pin, ALT0_FUNCTION); + GPIO_setDirectionMode(info->port, info->pin, GPIO_DIR_MODE_IN); + } + else if (mode == PIN_MODE_INPUT_PULLDOWN) + { + GPIO_setPadConfig(info->port, info->pin, GPIO_PIN_TYPE_PULLDOWN); + GPIO_setPinConfig(info->port, info->pin, ALT0_FUNCTION); + GPIO_setDirectionMode(info->port, info->pin, GPIO_DIR_MODE_IN); + } + else if (mode == PIN_MODE_OUTPUT_OD) + { + GPIO_setPadConfig(info->port, info->pin, GPIO_PIN_TYPE_OD); + GPIO_setPinConfig(info->port, info->pin, ALT0_FUNCTION); + GPIO_clearPin(info->port, info->pin); + GPIO_setDirectionMode(info->port, info->pin, GPIO_DIR_MODE_OUT); + } + +} + +static rt_err_t ns800_pin_attach_irq(struct rt_device *device, rt_base_t pin, + rt_uint8_t mode, void (*hdr)(void *args), void *args) +{ + return RT_EOK; +} + +static rt_err_t ns800_pin_dettach_irq(struct rt_device *device, rt_base_t pin) +{ + return RT_EOK; +} + +static rt_err_t ns800_pin_irq_enable(struct rt_device *device, rt_base_t pin, + rt_uint8_t enabled) +{ + return RT_EOK; +} + + +static const struct rt_pin_ops _ns800rt7_pin_ops = +{ + ns800rt7_pin_mode, + ns800rt7_pin_write, + ns800rt7_pin_read, + ns800_pin_attach_irq, + ns800_pin_dettach_irq, + ns800_pin_irq_enable, + ns800_pin_get, + RT_NULL, +}; + +rt_inline void pin_irq_hdr(int irqno) +{ + +} + +int rt_hw_pin_init(void) +{ + return rt_device_pin_register("pin", &_ns800rt7_pin_ops, RT_NULL); +} + +#endif /* BSP_USING_GPIO */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h new file mode 100644 index 00000000000..c354f85abde --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-06 balanceTWK first version + * 2020-09-01 thread-liu add GPIOZ + * 2020-09-18 geniusgogo optimization design pin-index algorithm + */ + +#ifndef __DRV_GPIO_H__ +#define __DRV_GPIO_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + GPIO_TypeDef *port; + GPIO_PinNum pin; +} rt_pin_info_t; + + +#define PIN_NUM(...) get_pin_num(__VA_ARGS__) +#define PIN_PORT(pin) get_port_index_by_num(pin) +#define PIN_NO(pin) get_pin_index_by_num(pin) + +const rt_pin_info_t* get_pin_info(int pin_num); +int get_pin_num(GPIO_TypeDef *port, GPIO_PinNum pin); +uint8_t get_port_index(GPIO_TypeDef *port); +uint8_t get_pin_index(uint16_t pin); +uint8_t get_port_index_by_num(int pin_num); +uint8_t get_pin_index_by_num(int pin_num); + +int rt_hw_pin_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_GPIO_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h new file mode 100644 index 00000000000..2d44d4e9014 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-15 SummerGift first version + */ + +/* + * NOTE: DO NOT include this file on the header file. + */ + +#ifndef LOG_TAG +#define DBG_TAG "drv" +#else +#define DBG_TAG LOG_TAG +#endif /* LOG_TAG */ + +#ifdef DRV_DEBUG +#define DBG_LVL DBG_LOG +#else +#define DBG_LVL DBG_INFO +#endif /* DRV_DEBUG */ + +#include diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c new file mode 100644 index 00000000000..fe1428229cd --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c @@ -0,0 +1,495 @@ +/* + * Copyright (c) 2006-2026, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-30 SummerGift first version + * 2020-03-16 SummerGift add device close feature + * 2020-03-20 SummerGift fix bug caused by ORE + * 2026-05-10 Codex Reworked driver around BSP UART config tables + */ + +#include "board.h" +#include "drv_uart.h" +#include "drv_config.h" + +#ifdef RT_USING_SERIAL + +#define DRV_DEBUG +#define LOG_TAG "drv.uart" +#include + +#if !defined(BSP_USING_UART1) && !defined(BSP_USING_UART2) && !defined(BSP_USING_UART3) && \ + !defined(BSP_USING_UART4) +#error "Please define at least one BSP_USING_UARTx" +#endif + +#ifndef BSP_NS800_UART_TX_TIMEOUT +#define BSP_NS800_UART_TX_TIMEOUT 6000 +#endif + +#ifdef RT_USING_SERIAL_V2 +#define NS800_UART_CONFIG_V2(_rxbuf, _txbuf) \ + .rx_bufsz = (_rxbuf), \ + .tx_bufsz = (_txbuf), +#define NS800_UART_DEFAULT_TX_TIMEOUT 0U +#else +#define NS800_UART_CONFIG_V2(_rxbuf, _txbuf) +#define NS800_UART_DEFAULT_TX_TIMEOUT BSP_NS800_UART_TX_TIMEOUT +#endif + +enum +{ +#ifdef BSP_USING_UART1 + UART1_INDEX, +#endif +#ifdef BSP_USING_UART2 + UART2_INDEX, +#endif +#ifdef BSP_USING_UART3 + UART3_INDEX, +#endif +#ifdef BSP_USING_UART4 + UART4_INDEX, +#endif +}; + +#ifdef BSP_USING_UART1 +void UART1_IRQHandler(void); +#endif +#ifdef BSP_USING_UART2 +void UART2_IRQHandler(void); +#endif +#ifdef BSP_USING_UART3 +void UART3_IRQHandler(void); +#endif +#ifdef BSP_USING_UART4 +void UART4_IRQHandler(void); +#endif + +static struct ns800_uart_config uart_config[] = +{ +#ifdef BSP_USING_UART1 + { + .name = "uart1", + .Instance = UART1, + .rx_irq_type = UART1_RX_IRQn, + .tx_irq_type = UART1_TX_IRQn, + .irq_handler = UART1_IRQHandler, + .rx_port = GPIOA, + .rx_pin = GPIO_PIN_13, + .rx_mux = ALT6_FUNCTION, + .rx_pad = GPIO_PIN_TYPE_PULLUP, + .rx_direction = GPIO_DIR_MODE_IN, + .rx_drive_max = RT_FALSE, + .tx_port = GPIOA, + .tx_pin = GPIO_PIN_12, + .tx_mux = ALT6_FUNCTION, + .tx_pad = GPIO_PIN_TYPE_PULLUP, + .tx_direction = GPIO_DIR_MODE_IN, + .tx_drive_max = RT_FALSE, + .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, +#ifdef RT_USING_SERIAL_V2 + NS800_UART_CONFIG_V2(BSP_UART1_RX_BUFSIZE, BSP_UART1_TX_BUFSIZE) +#endif + }, +#endif +#ifdef BSP_USING_UART2 + { + .name = "uart2", + .Instance = UART2, + .rx_irq_type = UART2_RX_IRQn, + .tx_irq_type = UART2_TX_IRQn, + .irq_handler = UART2_IRQHandler, + .rx_port = GPIOB, + .rx_pin = GPIO_PIN_7, + .rx_mux = ALT1_FUNCTION, + .rx_pad = GPIO_PIN_TYPE_PULLUP, + .rx_direction = GPIO_DIR_MODE_IN, + .rx_drive_max = RT_FALSE, + .tx_port = GPIOB, + .tx_pin = GPIO_PIN_6, + .tx_mux = ALT1_FUNCTION, + .tx_pad = GPIO_PIN_TYPE_STD, + .tx_direction = GPIO_DIR_MODE_OUT, + .tx_drive_max = RT_TRUE, + .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, +#ifdef RT_USING_SERIAL_V2 + NS800_UART_CONFIG_V2(BSP_UART2_RX_BUFSIZE, BSP_UART2_TX_BUFSIZE) +#endif + }, +#endif +#ifdef BSP_USING_UART3 + { + .name = "uart3", + .Instance = UART3, + .rx_irq_type = UART3_RX_IRQn, + .tx_irq_type = UART3_TX_IRQn, + .irq_handler = UART3_IRQHandler, + .rx_port = GPIOB, + .rx_pin = GPIO_PIN_25, + .rx_mux = ALT11_FUNCTION, + .rx_pad = GPIO_PIN_TYPE_PULLUP, + .rx_direction = GPIO_DIR_MODE_IN, + .rx_drive_max = RT_FALSE, + .tx_port = GPIOB, + .tx_pin = GPIO_PIN_24, + .tx_mux = ALT11_FUNCTION, + .tx_pad = GPIO_PIN_TYPE_STD, + .tx_direction = GPIO_DIR_MODE_OUT, + .tx_drive_max = RT_TRUE, + .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, +#ifdef RT_USING_SERIAL_V2 + NS800_UART_CONFIG_V2(BSP_UART3_RX_BUFSIZE, BSP_UART3_TX_BUFSIZE) +#endif + }, +#endif +#ifdef BSP_USING_UART4 + { + .name = "uart4", + .Instance = UART4, + .rx_irq_type = UART4_RX_IRQn, + .tx_irq_type = UART4_TX_IRQn, + .irq_handler = UART4_IRQHandler, + .rx_port = GPIOB, + .rx_pin = GPIO_PIN_13, + .rx_mux = ALT7_FUNCTION, + .rx_pad = GPIO_PIN_TYPE_PULLUP, + .rx_direction = GPIO_DIR_MODE_IN, + .rx_drive_max = RT_FALSE, + .tx_port = GPIOB, + .tx_pin = GPIO_PIN_12, + .tx_mux = ALT7_FUNCTION, + .tx_pad = GPIO_PIN_TYPE_STD, + .tx_direction = GPIO_DIR_MODE_OUT, + .tx_drive_max = RT_TRUE, + .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, +#ifdef RT_USING_SERIAL_V2 + NS800_UART_CONFIG_V2(BSP_UART4_RX_BUFSIZE, BSP_UART4_TX_BUFSIZE) +#endif + }, +#endif +}; + +static struct ns800_uart uart_obj[sizeof(uart_config) / sizeof(uart_config[0])] = {0}; + +static void ns800_uart_gpio_init(const struct ns800_uart_config *config) +{ + RT_ASSERT(config != RT_NULL); + + GPIO_setPinConfig(config->rx_port, config->rx_pin, config->rx_mux); + GPIO_setAnalogMode(config->rx_port, config->rx_pin, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(config->rx_port, config->rx_pin, config->rx_pad); + GPIO_setQualificationMode(config->rx_port, config->rx_pin, GPIO_QUAL_SYNC); + GPIO_setDirectionMode(config->rx_port, config->rx_pin, config->rx_direction); + if (config->rx_drive_max) + { + GPIO_setDriveLevel(config->rx_port, config->rx_pin, GPIO_DRV_MAX); + } + + GPIO_setPinConfig(config->tx_port, config->tx_pin, config->tx_mux); + GPIO_setAnalogMode(config->tx_port, config->tx_pin, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(config->tx_port, config->tx_pin, config->tx_pad); + GPIO_setQualificationMode(config->tx_port, config->tx_pin, GPIO_QUAL_SYNC); + GPIO_setDirectionMode(config->tx_port, config->tx_pin, config->tx_direction); + if (config->tx_drive_max) + { + GPIO_setDriveLevel(config->tx_port, config->tx_pin, GPIO_DRV_MAX); + } +} + +static UART_BitCountPerChar ns800_uart_data_bits(rt_uint32_t data_bits) +{ + switch (data_bits) + { + case DATA_BITS_7: + return UART_7_BITS_PER_CHAR; + case DATA_BITS_9: + return UART_9_BITS_PER_CHAR; + case DATA_BITS_8: + default: + return UART_8_BITS_PER_CHAR; + } +} + +static void ns800_uart_apply_runtime_cfg(struct ns800_uart *uart, struct serial_configure *cfg) +{ + RT_ASSERT(uart != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + + uart->handle.Instance = uart->config->Instance; + uart->handle.baud_rate = cfg->baud_rate; + uart->handle.data_bits = cfg->data_bits; + uart->handle.stop_bits = cfg->stop_bits; + uart->handle.parity = cfg->parity; +} + +static rt_err_t ns800_configure(struct rt_serial_device *serial, struct serial_configure *cfg) +{ + struct ns800_uart *uart; + UART_BitCountPerChar bit_count; + + RT_ASSERT(serial != RT_NULL); + RT_ASSERT(cfg != RT_NULL); + + uart = rt_container_of(serial, struct ns800_uart, serial); + + ns800_uart_apply_runtime_cfg(uart, cfg); + ns800_uart_gpio_init(uart->config); + + bit_count = ns800_uart_data_bits(cfg->data_bits); + + UART_resetModule(uart->handle.Instance); + UART_setBaud(uart->handle.Instance, cfg->baud_rate); + + if (cfg->parity == PARITY_ODD) + { + UART_setBitCountPerChar(uart->handle.Instance, bit_count, true); + UART_setParityMode(uart->handle.Instance, UART_PAR_ODD); + } + else if (cfg->parity == PARITY_EVEN) + { + UART_setBitCountPerChar(uart->handle.Instance, bit_count, true); + UART_setParityMode(uart->handle.Instance, UART_PAR_EVEN); + } + else + { + UART_setBitCountPerChar(uart->handle.Instance, bit_count, false); + } + + switch (cfg->stop_bits) + { + case STOP_BITS_2: + UART_setStopBitCount(uart->handle.Instance, UART_TWO_STOP_BIT); + break; + case STOP_BITS_1: + default: + UART_setStopBitCount(uart->handle.Instance, UART_ONE_STOP_BIT); + break; + } + + UART_enableTxFifo(uart->handle.Instance); + UART_resetTxFifo(uart->handle.Instance); + UART_setTxFifoWatermark(uart->handle.Instance, UART_FIFO_TX6); + + UART_enableRxFifo(uart->handle.Instance); + UART_resetRxFifo(uart->handle.Instance); + UART_setRxFifoWatermark(uart->handle.Instance, UART_FIFO_RX6); + UART_setRxIdleCharacter(uart->handle.Instance, UART_IDLE_CHARACTER_CNT1); + + UART_enableTxModule(uart->handle.Instance); + UART_enableRxModule(uart->handle.Instance); + + uart->tx_block_timeout = uart->config->tx_block_timeout; + + return RT_EOK; +} + +static rt_err_t ns800_control(struct rt_serial_device *serial, int cmd, void *arg) +{ + struct ns800_uart *uart; + + RT_ASSERT(serial != RT_NULL); + uart = rt_container_of(serial, struct ns800_uart, serial); + + switch (cmd) + { + case RT_DEVICE_CTRL_CLR_INT: + { + rt_uint32_t direction = (rt_uint32_t)arg; + + Interrupt_disable(uart->config->rx_irq_type); + if (direction == RT_DEVICE_FLAG_INT_RX) + { + UART_disableInterrupt(uart->handle.Instance, UART_INT_RX_DATA_REG_FULL); + } + else if (direction == RT_DEVICE_FLAG_INT_TX) + { + UART_disableInterrupt(uart->handle.Instance, UART_INT_TX_COMPLETE); + Interrupt_disable(uart->config->tx_irq_type); + } + break; + } + + case RT_DEVICE_CTRL_SET_INT: + { + rt_uint32_t direction = (rt_uint32_t)arg; + + if (direction == RT_DEVICE_FLAG_INT_RX) + { + UART_enableInterrupt(uart->handle.Instance, UART_INT_RX_DATA_REG_FULL); + Interrupt_register(uart->config->rx_irq_type, uart->config->irq_handler); + Interrupt_enable(uart->config->rx_irq_type); + } + else if (direction == RT_DEVICE_FLAG_INT_TX) + { + UART_enableInterrupt(uart->handle.Instance, UART_INT_TX_COMPLETE); + Interrupt_register(uart->config->tx_irq_type, uart->config->irq_handler); + Interrupt_enable(uart->config->tx_irq_type); + } + break; + } + + case RT_DEVICE_CTRL_CLOSE: + UART_disableTxModule(uart->handle.Instance); + UART_disableRxModule(uart->handle.Instance); + break; + + case UART_CTRL_SET_BLOCK_TIMEOUT: + { + rt_uint32_t block_timeout = (rt_uint32_t)arg; + + if (block_timeout == 0U) + { + return -RT_ERROR; + } + + uart->tx_block_timeout = block_timeout; + break; + } + + default: + break; + } + + return RT_EOK; +} + +static int ns800_putc(struct rt_serial_device *serial, char c) +{ + struct ns800_uart *uart; + rt_uint32_t block_timeout; + + RT_ASSERT(serial != RT_NULL); + + uart = rt_container_of(serial, struct ns800_uart, serial); + block_timeout = uart->tx_block_timeout; + + uart->handle.Instance->DATA.WORDVAL = c; + while ((uart->handle.Instance->STAT.BIT.TC == false) && (--block_timeout != 0U)) + { + } + + return (block_timeout != 0U) ? 1 : -1; +} + +static int ns800_getc(struct rt_serial_device *serial) +{ + struct ns800_uart *uart; + + RT_ASSERT(serial != RT_NULL); + uart = rt_container_of(serial, struct ns800_uart, serial); + + if (UART_getRxFifoStatus(uart->handle.Instance) > UART_FIFO_RX0) + { + return (int)uart->handle.Instance->DATA.WORDVAL; + } + + return -1; +} + +static void uart_isr(struct rt_serial_device *serial) +{ + struct ns800_uart *uart; + + RT_ASSERT(serial != RT_NULL); + uart = rt_container_of(serial, struct ns800_uart, serial); + + if (UART_getStatusFlag(uart->handle.Instance, UART_RX_DATA_REG_FULL)) + { + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); + } + else if (UART_getStatusFlag(uart->handle.Instance, UART_TX_COMPLETE)) + { + UART_disableInterrupt(uart->handle.Instance, UART_INT_TX_COMPLETE); + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_TX_DONE); + } +} + +#ifdef BSP_USING_UART1 +void UART1_IRQHandler(void) +{ + rt_interrupt_enter(); + uart_isr(&uart_obj[UART1_INDEX].serial); + rt_interrupt_leave(); +} +#endif + +#ifdef BSP_USING_UART2 +void UART2_IRQHandler(void) +{ + rt_interrupt_enter(); + uart_isr(&uart_obj[UART2_INDEX].serial); + rt_interrupt_leave(); +} +#endif + +#ifdef BSP_USING_UART3 +void UART3_IRQHandler(void) +{ + rt_interrupt_enter(); + uart_isr(&uart_obj[UART3_INDEX].serial); + rt_interrupt_leave(); +} +#endif + +#ifdef BSP_USING_UART4 +void UART4_IRQHandler(void) +{ + rt_interrupt_enter(); + uart_isr(&uart_obj[UART4_INDEX].serial); + rt_interrupt_leave(); +} +#endif + +static void ns800_uart_fill_default_config(struct serial_configure *config, + const struct ns800_uart_config *hw) +{ + RT_ASSERT(config != RT_NULL); + RT_ASSERT(hw != RT_NULL); + + *config = (struct serial_configure)RT_SERIAL_CONFIG_DEFAULT; + +#ifdef RT_USING_SERIAL_V2 + config->rx_bufsz = hw->rx_bufsz; + config->tx_bufsz = hw->tx_bufsz; +#else + config->bufsz = hw->rx_bufsz; +#endif +} + +static const struct rt_uart_ops ns800_uart_ops = +{ + .configure = ns800_configure, + .control = ns800_control, + .putc = ns800_putc, + .getc = ns800_getc, +}; + +int rt_hw_uart_init(void) +{ + rt_err_t result = RT_EOK; + rt_size_t i; + + for (i = 0; i < sizeof(uart_obj) / sizeof(uart_obj[0]); i++) + { + uart_obj[i].config = &uart_config[i]; + uart_obj[i].serial.ops = &ns800_uart_ops; + ns800_uart_fill_default_config(&uart_obj[i].serial.config, uart_obj[i].config); + uart_obj[i].tx_block_timeout = uart_obj[i].config->tx_block_timeout; + + result = rt_hw_serial_register(&uart_obj[i].serial, + uart_obj[i].config->name, + RT_DEVICE_FLAG_RDWR | + RT_DEVICE_FLAG_INT_RX | + RT_DEVICE_FLAG_INT_TX, + RT_NULL); + RT_ASSERT(result == RT_EOK); + } + + return result; +} + +#endif /* RT_USING_SERIAL */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h new file mode 100644 index 00000000000..e8420c82209 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-30 SummerGift first version + */ + +#ifndef __DRV_USART_H__ +#define __DRV_USART_H__ + +#include +#include "rtdevice.h" +#include +#include + +#define UART_CTRL_SET_BLOCK_TIMEOUT 0x20 + +/* ns800 config class */ +struct ns800_uart_config +{ + const char *name; + UART_TypeDef *Instance; + IRQn_Type rx_irq_type; + IRQn_Type tx_irq_type; + void (*irq_handler)(void); + GPIO_TypeDef *rx_port; + GPIO_PinNum rx_pin; + GPIO_AltFunc rx_mux; + rt_uint32_t rx_pad; + GPIO_Direction rx_direction; + rt_bool_t rx_drive_max; + GPIO_TypeDef *tx_port; + GPIO_PinNum tx_pin; + GPIO_AltFunc tx_mux; + rt_uint32_t tx_pad; + GPIO_Direction tx_direction; + rt_bool_t tx_drive_max; + rt_uint32_t tx_block_timeout; + rt_uint16_t rx_bufsz; + rt_uint16_t tx_bufsz; +}; + +typedef struct { + UART_TypeDef *Instance; + + rt_uint32_t baud_rate; + + rt_uint8_t data_bits; + rt_uint8_t stop_bits; + rt_uint8_t parity; + rt_uint8_t bit_order; + rt_uint8_t invert; + rt_uint8_t bufsz; + rt_uint8_t flowcontrol; + rt_uint8_t reserved; +}UART_HandleTypeDef; + +/* ns800 uart dirver class */ +struct ns800_uart +{ + UART_HandleTypeDef handle; + struct ns800_uart_config *config; + rt_uint32_t DR_mask; + rt_uint32_t tx_block_timeout; + struct rt_serial_device serial; +}; + + +int rt_hw_uart_init(void); + +#endif /* __DRV_USART_H__ */ diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c new file mode 100644 index 00000000000..eefd008865d --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * + */ + +#include "drv_common.h" +#include + +#ifdef RT_USING_PIN +#include +#endif + +#ifdef RT_USING_SERIAL +#ifdef RT_USING_SERIAL_V2 +#include +#else +#include +#endif /* RT_USING_SERIAL */ +#endif /* RT_USING_SERIAL_V2 */ + +#define DBG_TAG "drv_common" +#define DBG_LVL DBG_INFO +#include + +#ifdef RT_USING_FINSH +#include +static void reboot(uint8_t argc, char **argv) +{ + rt_hw_cpu_reset(); +} +MSH_CMD_EXPORT(reboot, Reboot System); +#endif /* RT_USING_FINSH */ + +/* SysTick configuration */ +void rt_hw_systick_init(void) +{ + /* update the system core clock value */ + SystemCoreClockUpdate(); + /* initialize systick(base time) */ + SysTick_Config(SystemCoreClock / SYSTICK_TIME_UNIT); + /* systick interrupt control */ + Systick_setInterrupt(ENABLE); + + NVIC_SetPriority(SysTick_IRQn, 0x0F); +} + +/** + * This is the timer interrupt service routine. + * + */ +volatile rt_tick_t g_tick_test; + +void SysTick_Handler(void) +{ + rt_interrupt_enter(); + + rt_tick_increase(); + g_tick_test = rt_tick_get(); + + rt_interrupt_leave(); +} + +/** + * @brief This function is executed in case of error occurrence. + * @param None + * @retval None + */ +void _Error_Handler(char *s, int num) +{ + /* USER CODE BEGIN Error_Handler */ + /* User can add his own implementation to report the HAL error return state */ + LOG_E("Error_Handler at file:%s num:%d", s, num); + while (1) + { + } + /* USER CODE END Error_Handler */ +} + +/** + * This function will delay for some us. + * + * @param us the delay time of us + */ +void rt_hw_us_delay(rt_uint32_t us) +{ + rt_uint64_t ticks; + rt_uint32_t told, tnow, tcnt = 0; + rt_uint32_t reload = SysTick->LOAD; + + ticks = us * (reload / (1000000 / RT_TICK_PER_SECOND)); + told = SysTick->VAL; + while (1) + { + tnow = SysTick->VAL; + if (tnow != told) + { + if (tnow < told) + { + tcnt += told - tnow; + } + else + { + tcnt += reload - tnow + told; + } + told = tnow; + if (tcnt >= ticks) + { + break; + } + } + } +} + +#define BSP_SCB_ENABLE_I_CACHE +#define BSP_SCB_ENABLE_D_CACHE +/** + * This function will initial NS800 board. + */ +rt_weak void rt_hw_board_init(void) +{ +#ifdef BSP_SCB_ENABLE_I_CACHE + /* Enable I-Cache---------------------------------------------------------*/ + SCB_EnableICache(); +#endif + +#ifdef BSP_SCB_ENABLE_D_CACHE + /* Enable D-Cache---------------------------------------------------------*/ + SCB_EnableDCache(); +#endif + + /* Initialize device clock and peripherals */ + Device_init(); + /* Disable peripheral register locks */ + Device_unlockPeriphReg(); + /* Interrupt initialization. Disable global interrupts. */ + Interrupt_initModule(); + Interrupt_initVectorTable(); + + rt_hw_systick_init(); + +#if defined(RT_USING_HEAP) + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif + +#ifdef RT_USING_PIN + rt_hw_pin_init(); +#endif + +#ifdef RT_USING_SERIAL + rt_hw_uart_init(); +#endif + +#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE) + /* Set the shell console output device */ + rt_console_set_device(RT_CONSOLE_DEVICE_NAME); +#endif + +#if defined(RT_USING_CONSOLE) && defined(RT_USING_NANO) + extern void rt_hw_console_init(void); + rt_hw_console_init(); +#endif + +#ifdef RT_USING_COMPONENTS_INIT + /* Board underlying hardware initialization */ + rt_components_board_init(); +#endif +} +#ifdef RT_USING_CONSOLE + +void rt_hw_console_output(const char *str) +{ +#if defined(__ICCARM__) + rt_size_t size = rt_strlen(str); + + __write(0, str, size); +#else + rt_size_t i = 0, size = 0; + char a = '\r'; + FILE f; + + size = rt_strlen(str); + + for (i = 0; i < size; i++) + { + if (*(str + i) == '\n') + { + fputc(a, &f); + } + fputc(str[i], &f); + } +#endif +} +#endif + +#ifdef RT_USING_FINSH +char rt_hw_console_getchar(void) +{ + /* Note: the initial value of ch must < 0 */ + int ch = -1; + + if (UART1->STAT.BIT.RDRF) + { + ch = (uint8_t)UART1->DATA.WORDVAL; + } + else + { + rt_thread_mdelay(10); + } + return ch; +} +#endif diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h new file mode 100644 index 00000000000..5c746472901 --- /dev/null +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-11-7 SummerGift first version + */ + +#ifndef __DRV_COMMON_H__ +#define __DRV_COMMON_H__ + +#include +#include +#include +#ifdef RT_USING_DEVICE +#include +#endif /* RT_USING_DEVICE */ + +#ifdef __cplusplus +extern "C" { +#endif + +void _Error_Handler(char *s, int num); + +#ifndef Error_Handler +#define Error_Handler() _Error_Handler(__FILE__, __LINE__) +#endif + +#define DMA_NOT_AVAILABLE ((DMA_INSTANCE_TYPE *)0xFFFFFFFFU) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config new file mode 100644 index 00000000000..1deeaa74af3 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config @@ -0,0 +1,1471 @@ +CONFIG_SOC_SERIES_NS800RT7=y +CONFIG_SOC_NS800RT7P6XX=y +CONFIG_BOARD_NS800RT7P65X=y + +# +# RT-Thread Kernel +# + +# +# klibc options +# + +# +# rt_vsnprintf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_LONGLONG is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_STANDARD is not set +# end of rt_vsnprintf options + +# +# rt_vsscanf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSSCANF is not set +# end of rt_vsscanf options + +# +# rt_memset options +# +# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set +# end of rt_memset options + +# +# rt_memcpy options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set +# end of rt_memcpy options + +# +# rt_memmove options +# +# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set +# end of rt_memmove options + +# +# rt_memcmp options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set +# end of rt_memcmp options + +# +# rt_strstr options +# +# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set +# end of rt_strstr options + +# +# rt_strcasecmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set +# end of rt_strcasecmp options + +# +# rt_strncpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set +# end of rt_strncpy options + +# +# rt_strcpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set +# end of rt_strcpy options + +# +# rt_strncmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set +# end of rt_strncmp options + +# +# rt_strcmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set +# end of rt_strcmp options + +# +# rt_strlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set +# end of rt_strlen options + +# +# rt_strnlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set +# end of rt_strnlen options +# end of klibc options + +CONFIG_RT_NAME_MAX=12 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +# CONFIG_RT_USING_TIMER_SOFT is not set +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice options +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice options + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_USING_CI_ACTION is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart3" +CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y +CONFIG_RT_VER_NUM=0x50300 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +# CONFIG_FINSH_USING_WORD_OPERATION is not set +# CONFIG_FINSH_USING_FUNC_EXT is not set +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +# CONFIG_RT_SERIAL_USING_DMA is not set +CONFIG_RT_SERIAL_RB_BUFSZ=64 +# CONFIG_RT_USING_SERIAL_BYPASS is not set +CONFIG_RT_USING_CAN=y +# CONFIG_RT_CAN_USING_HDR is not set +# CONFIG_RT_CAN_USING_CANFD is not set +CONFIG_RT_CANMSG_BOX_SZ=16 +CONFIG_RT_CANSND_BOX_NUM=1 +CONFIG_RT_CANSND_MSG_TIMEOUT=100 +CONFIG_RT_CAN_NB_TX_FIFO_SIZE=256 +# CONFIG_RT_CAN_MALLOC_NB_TX_BUFFER is not set +# CONFIG_RT_USING_CLOCK_TIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_PHY_V2 is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +CONFIG_RT_USING_HWCRYPTO=y +CONFIG_RT_HWCRYPTO_DEFAULT_NAME="hwcryto" +CONFIG_RT_HWCRYPTO_IV_MAX_SIZE=16 +CONFIG_RT_HWCRYPTO_KEYBIT_MAX_SIZE=256 +# CONFIG_RT_HWCRYPTO_USING_GCM is not set +# CONFIG_RT_HWCRYPTO_USING_AES is not set +# CONFIG_RT_HWCRYPTO_USING_DES is not set +# CONFIG_RT_HWCRYPTO_USING_3DES is not set +# CONFIG_RT_HWCRYPTO_USING_RC4 is not set +# CONFIG_RT_HWCRYPTO_USING_MD5 is not set +# CONFIG_RT_HWCRYPTO_USING_SHA1 is not set +# CONFIG_RT_HWCRYPTO_USING_SHA2 is not set +# CONFIG_RT_HWCRYPTO_USING_RNG is not set +# CONFIG_RT_HWCRYPTO_USING_CRC is not set +# CONFIG_RT_HWCRYPTO_USING_BIGNUM is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_BLK is not set +# CONFIG_RT_USING_REGULATOR is not set +# CONFIG_RT_USING_POWER_SUPPLY is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_CHERRYUSB is not set +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set +# end of Network + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set +# end of Memory protection + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# +# Using USB legacy version +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB legacy version + +# CONFIG_RT_USING_FDT is not set +# CONFIG_RT_USING_RUST is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set +# CONFIG_PKG_USING_ESP_HOSTED is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# CONFIG_PKG_USING_PNET is not set +# CONFIG_PKG_USING_OPENER is not set +# CONFIG_PKG_USING_FREEMQTT is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# CONFIG_PKG_USING_RYAN_JSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_NES_SIMULATOR is not set +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_VECTOR is not set +# CONFIG_PKG_USING_SORCH is not set +# CONFIG_PKG_USING_DICT is not set +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_MCOREDUMP is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# CONFIG_PKG_USING_RVBACKTRACE is not set +# CONFIG_PKG_USING_HPATCHLITE is not set +# CONFIG_PKG_USING_THREAD_METRIC is not set +# CONFIG_PKG_USING_UORB is not set +# CONFIG_PKG_USING_RT_TUNNEL is not set +# CONFIG_PKG_USING_VIRTUAL_TERMINAL is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +CONFIG_PKG_USING_CMSIS_CORE=y +CONFIG_PKG_CMSIS_CORE_PATH="/packages/system/CMSIS/CMSIS-Core" +CONFIG_PKG_USING_CMSIS_CORE_LATEST_VERSION=y +CONFIG_PKG_CMSIS_CORE_VER="latest" +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_UART_FRAMEWORK is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_RMP is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# CONFIG_PKG_USING_HEARTBEAT is not set +# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set +# CONFIG_PKG_USING_CHERRYECAT is not set +# CONFIG_PKG_USING_EVENT_LOOP is not set +# CONFIG_PKG_USING_THREAD_MANAGER is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32F0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_STM32WL_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WL_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_RP2350_SDK is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# CONFIG_PKG_USING_MM32 is not set + +# +# WCH HAL & SDK Drivers +# +# CONFIG_PKG_USING_CH32V20x_SDK is not set +# CONFIG_PKG_USING_CH32V307_SDK is not set +# end of WCH HAL & SDK Drivers + +# +# AT32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_AT32A403A_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A403A_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_CMSIS_DRIVER is not set +# end of AT32 HAL & SDK Drivers + +# +# HC32 DDL Drivers +# +# CONFIG_PKG_USING_HC32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F3_SERIES_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_SERIES_DRIVER is not set +# end of HC32 DDL Drivers + +# +# NXP HAL & SDK Drivers +# +# CONFIG_PKG_USING_NXP_MCX_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NXP_MCX_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC55S_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6SX_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6UL_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMXRT_DRIVER is not set +# end of NXP HAL & SDK Drivers + +# +# NUVOTON Drivers +# +# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set +# end of NUVOTON Drivers + +# +# GD32 Drivers +# +# CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER is not set +# CONFIG_PKG_USING_GD32_RISCV_SERIES_DRIVER is not set +# CONFIG_PKG_USING_GD32VW55X_WIFI is not set +# end of GD32 Drivers + +# +# HPMicro SDK +# +# CONFIG_PKG_USING_HPM_SDK is not set +# end of HPMicro SDK + +# +# FT32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_FT32F0_STD_DRIVER is not set +# CONFIG_PKG_USING_FT32F0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set +# CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set +# end of FT32 HAL & SDK Drivers +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_MAX31855 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90382 is not set +# CONFIG_PKG_USING_MLX90384 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90394 is not set +# CONFIG_PKG_USING_MLX90396 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# CONFIG_PKG_USING_P3T1755 is not set +# CONFIG_PKG_USING_QMI8658 is not set +# CONFIG_PKG_USING_ICM20948 is not set +# CONFIG_PKG_USING_SCD4X is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_LCD_SPI_DRIVER is not set +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_BT_MX02 is not set +# CONFIG_PKG_USING_GC9A01 is not set +# CONFIG_PKG_USING_IK485 is not set +# CONFIG_PKG_USING_SERVO is not set +# CONFIG_PKG_USING_SEAN_WS2812B is not set +# CONFIG_PKG_USING_IC74HC165 is not set +# CONFIG_PKG_USING_IST8310 is not set +# CONFIG_PKG_USING_ST7789_SPI is not set +# CONFIG_PKG_USING_CAN_UDS is not set +# CONFIG_PKG_USING_ISOTP_C is not set +# CONFIG_PKG_USING_IKUNLED is not set +# CONFIG_PKG_USING_INS5T8025 is not set +# CONFIG_PKG_USING_IRUART is not set +# CONFIG_PKG_USING_ST7305 is not set +# CONFIG_PKG_USING_TM1668 is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# CONFIG_PKG_USING_LLMCHAT is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LIBCRC is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# CONFIG_PKG_USING_DRMP is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_GPIO_PIN_IRQ is not set +CONFIG_BSP_USING_UART=y +CONFIG_BSP_NS800_UART_TX_TIMEOUT=6000 +CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_USING_UART2 is not set +CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_USING_UART4 is not set +CONFIG_BSP_USING_ECAP=y +CONFIG_BSP_USING_ECAP1=y +CONFIG_BSP_ECAP1_NAME="ecap1" +CONFIG_BSP_ECAP1_GPIO_NUM=16 +CONFIG_BSP_ECAP1_GPIO_MUX=0 +CONFIG_BSP_ECAP1_INPUT_XBAR=7 +CONFIG_BSP_ECAP1_INPUT_SOURCE=16 +CONFIG_BSP_USING_CAN=y +CONFIG_BSP_USING_CAN1=y +# CONFIG_BSP_USING_CANFD1 is not set +# CONFIG_BSP_USING_CANFD2 is not set +# end of On-chip Peripheral Drivers diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.gitignore b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.gitignore new file mode 100644 index 00000000000..7221bde019d --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.bin +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +packages/ +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/Kconfig b/bsp/novosns/ns800/ns800rt7p65-nssinepad/Kconfig new file mode 100644 index 00000000000..d46bd3ba73d --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/Kconfig @@ -0,0 +1,28 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../../.. +LIB_DIR := ../libraries/HAL_Drivers +PKGS_DIR := packages + +config SOC_SERIES_NS800RT7 + bool + default y + +config SOC_NS800RT7P6XX + bool + select SOC_SERIES_NS800RT7 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + +config BOARD_NS800RT7P65X + bool + depends on SOC_NS800RT7P6XX + default y + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "board/Kconfig" +rsource "$(LIB_DIR)/drivers/Kconfig" diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/README.md b/bsp/novosns/ns800/ns800rt7p65-nssinepad/README.md new file mode 100644 index 00000000000..a108b8e303d --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/README.md @@ -0,0 +1,5 @@ +# NS800RT7P65-NSSinePad BSP Introduction + +[中文](README_zh.md) + +## MCU: NS800RT7P65D @400MHz, 1024KB FLASH, 770KB RAM diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/README_zh.md b/bsp/novosns/ns800/ns800rt7p65-nssinepad/README_zh.md new file mode 100644 index 00000000000..dabb075c8c8 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/README_zh.md @@ -0,0 +1,102 @@ +# NS800RT7P65-NSSinePad 开发板 BSP 说明 + +## 简介 + +本文档为 tyustli 为 NS800RT7P65-NSSinePad 开发板提供的 BSP (板级支持包) 说明。 + +主要内容如下: + +- 开发板资源介绍 +- BSP 快速上手 +- 进阶使用方法 + +通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。在进阶使用指南章节,将会介绍更多高级功能,帮助开发者利用 RT-Thread 驱动更多板载资源。 + +## 开发板介绍 + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **板载外设** | **支持情况** | **备注** | +| :----------------- | :----------: | :------------------------------------- | +| USB 转串口 | 支持 | +| **片上外设** | **支持情况** | **备注** | +| GPIO | 支持 | | +| UART | 支持 | UART1 | + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 + +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 为开发者提供 MDK5 和 IAR 工程,并且支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +**请注意!!!** + +在执行编译工作前请先打开ENV执行以下指令(该指令用于拉取必要的HAL库及CMSIS库,否则无法通过编译): + +```bash +pkgs --update +``` + +#### 硬件连接 + +使用数据线连接开发板到 PC,打开电源开关。 + +#### 编译下载 + +双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。 + +> 工程默认配置使用 ST_LINK 仿真器下载程序,在通过 ST_LINK 连接开发板的基础上,点击下载按钮即可下载程序到开发板 + +#### 运行结果 + +下载程序成功之后,系统会自动运行,LED闪烁。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: + +```bash + \ | / +- RT - Thread Operating System + / | \ 4.0.1 build Mar 5 2019 + 2006 - 2019 Copyright by rt-thread team +msh > +``` + +### 进阶使用 + +此 BSP 默认只开启了 GPIO 和 串口3 的功能,如果需使用更多高级功能,需要利用 ENV 工具对BSP 进行配置,步骤如下: + +1. 在 bsp 下打开 env 工具。 + +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 + +3. 输入`pkgs --update`命令更新软件包。 + +4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。 + +本章节更多详细的介绍请参考 [STM32 系列 BSP 外设驱动使用教程](../docs/STM32系列BSP外设驱动使用教程.md)。 + +## 注意事项 + +- 调试串口为串口1 映射说明 + + PD8 ------> USART1_TX + + PD9 ------> USART1_RX + +## 联系人信息 + +维护人: + +- [tyustli](https://github.com/tyustli) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConscript b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConscript new file mode 100644 index 00000000000..99007d07604 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('env') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct new file mode 100644 index 00000000000..8621cc11a46 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct @@ -0,0 +1,73 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +def bsp_pkg_check(): + import subprocess + + check_paths = [ + os.path.join("packages", "CMSIS-Core-latest"), + os.path.join("packages", "novosns-series-latest"), + ] + + need_update = not all(os.path.exists(p) for p in check_paths) + + if need_update: + print("\n===============================================================================") + print("Dependency packages missing, please running 'pkgs --update'...") + print("If no packages are fetched, run 'pkgs --upgrade' first, then 'pkgs --update'...") + print("===============================================================================") + exit(1) + +RegisterPreBuildingAction(bsp_pkg_check) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('env') +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') + +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +rtconfig.BSP_LIBRARY_TYPE = None + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'),variant_dir='build/libraries/HAL_Drivers', duplicate=0)) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/SConscript b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/SConscript new file mode 100644 index 00000000000..9bb9abae897 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/SConscript @@ -0,0 +1,15 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) + +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) + +Return('group') diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c new file mode 100644 index 00000000000..8ef80f3b8e3 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2026-05-06 Jiawei.Deng first version + */ + +#include +#include +#include + +/* defined the LED1 pin: GPIO_68 = PC4 */ +#define LED1_PIN PIN_NUM(GPIO_68) + +int main(void) +{ + rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); + + while (1) + { +// rt_kprintf("\r\n led1_thread_entry running! \r\n"); + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_thread_mdelay(1000); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_thread_mdelay(1000); + } +} diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c new file mode 100644 index 00000000000..70d0c8a3094 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c @@ -0,0 +1,165 @@ +#include +#include +#include "drivers/dev_can.h" +#include "rt_can.h" + + +#define CAN_DEV_NAME "canfd1" // The name of the CAN device + +static rt_device_t can_dev; // CAN device handle +static struct rt_semaphore rx_sem; // Semaphore for message reception + + +// Callback function for CAN reception +static rt_err_t can_rx_callback(rt_device_t dev, rt_size_t size) +{ + // The CAN interrupt calls this callback when data is received. + // Release the semaphore to notify the receiving thread. + rt_sem_release(&rx_sem); + return RT_EOK; +} + +static void can_rx_thread(void *parameter) +{ + rt_err_t res; + struct rt_can_msg rx_msg = {0}; + + // Set the receive callback function + rt_device_set_rx_indicate(can_dev, can_rx_callback); + + // Some drivers might require an explicit start command. + // This is driver-specific. + rt_uint32_t cmd_arg = 1; // Argument to enable the controller + res = rt_device_control(can_dev, RT_CAN_CMD_START, &cmd_arg); + RT_ASSERT(res == RT_EOK); + + #define CAN_RX_BATCH_SIZE 8 + + while (1) + { + // Block and wait for the semaphore, which is released by the receive callback. + rt_sem_take(&rx_sem, RT_WAITING_FOREVER); + + // Drain all pending frames in batches. + struct rt_can_msg rx_buf[CAN_RX_BATCH_SIZE]; + rt_ssize_t read_size; + rt_size_t count; + do + { + for (rt_size_t i = 0; i < CAN_RX_BATCH_SIZE; i++) + { + rx_buf[i].hdr_index = -1; + } + + read_size = rt_device_read(can_dev, 0, rx_buf, sizeof(rx_buf)); + if (read_size <= 0) + { + break; + } + count = (rt_size_t)(read_size / sizeof(rx_buf[0])); + for (rt_size_t i = 0; i < count; i++) + { + // Print the received message's ID and data. + rt_kprintf("Received a message. ID: 0x%x, Data: ", rx_buf[i].id); + for (int j = 0; j < rx_buf[i].len; j++) + { + rt_kprintf("%02x ", rx_buf[i].data[j]); + } + rt_kprintf("\n"); + } + } + while(count == CAN_RX_BATCH_SIZE); + } +} + +static void can_tx_thread(void *parameter) +{ + rt_err_t res; + static uint8_t index; + struct rt_can_msg blocking_msg = {0}; + blocking_msg.id = 0x78; + blocking_msg.ide = RT_CAN_STDID; + blocking_msg.rtr = RT_CAN_DTR; + blocking_msg.len = 8; + + while(1) + { + // The `nonblocking` flag is 0 by default for blocking mode. + for(int i = 0; i < 8; i++) blocking_msg.data[i] = i+index; + index++; + + rt_kprintf("Attempting to send a message in BLOCKING mode...\n"); + if (rt_device_write(can_dev, 0, &blocking_msg, sizeof(blocking_msg)) == sizeof(blocking_msg)) + { + rt_kprintf("Blocking message sent successfully.\n"); + } + else + { + rt_kprintf("Blocking message send failed.\n"); + } + + rt_thread_mdelay(1000); // Wait a moment for clarity in the log + } +} + +int can_sample(int argc, char *argv[]) +{ + rt_err_t res; + rt_thread_t thread; + char can_name[RT_NAME_MAX]; + + // Allow specifying the CAN device name from the command line, e.g., "can_sample can2" + if (argc == 2) + { + rt_strncpy(can_name, argv[1], RT_NAME_MAX); + } + else + { + rt_strncpy(can_name, CAN_DEV_NAME, RT_NAME_MAX); + } + + // Find the CAN device by name + can_dev = rt_device_find(can_name); + if (!can_dev) + { + rt_kprintf("find device %s failed!\n", can_name); + return -RT_ERROR; + } + + // Initialize the receive semaphore + rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); + + // Open the CAN device in interrupt-driven TX/RX mode + res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX); + RT_ASSERT(res == RT_EOK); + + // Create and start the data receiving thread + thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 1024, 25, 10); + if (thread != RT_NULL) + { + rt_thread_startup(thread); + } + else + { + rt_kprintf("create can_rx thread failed!\n"); + return -RT_ERROR; + } + + // Create and start the data receiving thread + thread = rt_thread_create("can_tx", can_tx_thread, RT_NULL, 1024, 25, 10); + if (thread != RT_NULL) + { + rt_thread_startup(thread); + } + else + { + rt_kprintf("create can_tx thread failed!\n"); + return -RT_ERROR; + } + + rt_kprintf("CAN device %s opened successfully.\n", can_name); + + return res; +} +// Export the function to the MSH command line +MSH_CMD_EXPORT(can_sample, can device usage example); diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.h new file mode 100644 index 00000000000..e69de29bb2d diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c new file mode 100644 index 00000000000..d9908fc6ec2 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c @@ -0,0 +1,57 @@ +#include +#include +#include "drv_ecap.h" +#include "rt_ecap.h" + +static void ecap_test_thread (void *parameter) +{ + rt_device_t dev; + struct rt_ecap_capture cap; + + dev = rt_device_find("ecap1"); + if (dev == RT_NULL) + { + rt_kprintf("ecap1 not found\n"); + return; + } + + if (rt_device_open(dev, RT_DEVICE_OFLAG_RDONLY) != RT_EOK) + { + rt_kprintf("ecap1 open failed\n"); + return; + } + + while (1) + { + if (rt_device_read(dev, 0, &cap, sizeof(cap)) == sizeof(cap)) + { + rt_kprintf("cap1=%u cap2=%u cap3=%u cap4=%u high=%u low=%u total=%u\n", cap.cap1, cap.cap2, cap.cap3, + cap.cap4, cap.period_high, cap.period_low, cap.period_total); + } + else + { + rt_kprintf("Capturing...\n"); + } + rt_thread_mdelay(1000); + } +} + +int rt_ecap_test_init (void) +{ + rt_thread_t tid; + + tid = rt_thread_create("ecap_test", ecap_test_thread, RT_NULL, 2048, 20, 10); + + if (tid != RT_NULL) + { + rt_kprintf("create ecap_test thread success\n"); + rt_thread_startup(tid); + } + else + { + rt_kprintf("create ecap_test thread failed\n"); + } + + return 0; +} +MSH_CMD_EXPORT(rt_ecap_test_init, ecap capture test); diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h new file mode 100644 index 00000000000..3323e64d052 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h @@ -0,0 +1,18 @@ + +#ifndef __DRV_CONFIG_H__ +#define __DRV_CONFIG_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +int rt_ecap_test_init (void); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig new file mode 100644 index 00000000000..6db24c2e316 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig @@ -0,0 +1,147 @@ +menu "On-chip Peripheral Drivers" + + menuconfig BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + if BSP_USING_GPIO + config BSP_GPIO_PIN_IRQ + bool "Enable GPIO pin IRQ hooks" + default n + endif + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + if BSP_USING_UART + config BSP_NS800_UART_TX_TIMEOUT + int "UART TX timeout" + default 6000 + depends on !RT_USING_SERIAL_V2 + + menuconfig BSP_USING_UART1 + bool "Enable UART1" + default y + if BSP_USING_UART1 + config BSP_UART1_RX_BUFSIZE + int "UART1 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART1_TX_BUFSIZE + int "UART1 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + + menuconfig BSP_USING_UART2 + bool "Enable UART2" + default n + if BSP_USING_UART2 + config BSP_UART2_RX_BUFSIZE + int "UART2 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART2_TX_BUFSIZE + int "UART2 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + + menuconfig BSP_USING_UART3 + bool "Enable UART3" + default n + if BSP_USING_UART3 + config BSP_UART3_RX_BUFSIZE + int "UART3 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART3_TX_BUFSIZE + int "UART3 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + + menuconfig BSP_USING_UART4 + bool "Enable UART4" + default n + if BSP_USING_UART4 + config BSP_UART4_RX_BUFSIZE + int "UART4 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART4_TX_BUFSIZE + int "UART4 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + endif + + menuconfig BSP_USING_ECAP + bool "Enable ECAP" + default n + if BSP_USING_ECAP + config BSP_USING_ECAP1 + bool "Enable ECAP1" + default y + + if BSP_USING_ECAP1 + config BSP_ECAP1_NAME + string "ECAP1 device name" + default "ecap1" + + config BSP_ECAP1_GPIO_NUM + int "ECAP1 input GPIO number" + range 0 224 + default 16 + + config BSP_ECAP1_GPIO_MUX + int "ECAP1 input GPIO mux" + range 0 15 + default 0 + + config BSP_ECAP1_INPUT_XBAR + int "ECAP1 XBAR input index" + range 1 16 + default 7 + + config BSP_ECAP1_INPUT_SOURCE + int "ECAP1 XBAR source GPIO number" + range 0 224 + default 16 + endif + endif + + menuconfig BSP_USING_CAN + bool "Enable CAN" + select RT_USING_CAN + default n + if BSP_USING_CAN + config BSP_USING_CAN1 + bool "Enable CAN1" + default n + + config BSP_USING_CANFD1 + bool "Enable CANFD1" + select RT_CAN_USING_CANFD + default n + + config BSP_USING_CANFD2 + bool "Enable CANFD2" + select RT_CAN_USING_CANFD + default n + endif + +endmenu diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/SConscript b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/SConscript new file mode 100644 index 00000000000..e9a27c4e21a --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/SConscript @@ -0,0 +1,24 @@ +import os +from building import * + +cwd = GetCurrentDir() + +# add the general drivers. +src = Glob('board.c') +pkg_root = os.path.join(cwd, '..', 'packages', 'novosns-series', 'NS800RT7XXX') +path = [ + cwd, + os.path.join(pkg_root, 'Device', 'Inc'), + os.path.join(pkg_root, 'StdDriver', 'Inc'), + os.path.join(pkg_root, 'StdDriver', 'Inc', 'ti'), + os.path.join(cwd, '..', 'libraries', 'HAL_Drivers'), + os.path.join(cwd, '..', 'libraries', 'HAL_Drivers', 'drivers'), +] + +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path) +list = os.listdir(cwd) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) + +Return('group') diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c new file mode 100644 index 00000000000..dfeecc944f8 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c @@ -0,0 +1,355 @@ +/** + * @file board.c + * @author Haven-X + * @brief Board setup for NS800RTxxx examples. + * + * @note Board Configurations + * Initializes the rest of the modules. + * + *

© Copyright (c) 2025 Novosense Limited. + * All rights reserved.

+ */ +#include "board.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + + +/******************************************************************************* + * Variables + ******************************************************************************/ + + +/******************************************************************************* + * Functions + ******************************************************************************/ + +/** + * @brief Board Initialization. + * @note Call this function in your application if you wish to do all module + * initialization. + * If you wish to not use some of the initializations, instead of the + * Board_init use the individual Module_inits. + */ +void Board_init (void) +{ + PinMux_init(); + SerialCOM_init(); + LED_init(); + Switch_init(); +} + +/** + * @brief PinMux Initialization. + * @note Call this function in your application if you want all + * PinMux initialization to be done. + */ +void PinMux_init (void) +{ + /* Configure GPIO pins for SCI_COM. */ + GPIO_setPinConfig(GPIO_12_SCIA_TX); + GPIO_setPinConfig(GPIO_13_SCIA_RX); + + /* Configure GPIO pins for LED1 and LED2. */ + GPIO_setPinConfig(GPIO_68_GPIO68); + GPIO_setPinConfig(GPIO_69_GPIO69); + + /* Configure GPIO pins for KEY. */ + GPIO_setPinConfig(GPIO_41_GPIO41); +} + +/** + * @brief Board Serial Communication Interface Initialization. + * @note Call this function in the application to initialize the SCI serial port + * on the board for outputting debugging information. + */ +void SerialCOM_init(void) +{ + /* uart1 rx control */ + GPIO_setAnalogMode(BOARD_SERIALCOM_RX_PIN, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(BOARD_SERIALCOM_RX_PIN, GPIO_PIN_TYPE_PULLUP); + GPIO_setQualificationMode(BOARD_SERIALCOM_RX_PIN, GPIO_QUAL_SYNC); + GPIO_setQualificationPeriod(BOARD_SERIALCOM_RX_PIN, GPIO_SMP_SYSCLK_DIV_1); + GPIO_setDirectionMode(BOARD_SERIALCOM_RX_PIN, GPIO_DIR_MODE_IN); + /* uart1 tx control */ + GPIO_setAnalogMode(BOARD_SERIALCOM_TX_PIN, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(BOARD_SERIALCOM_TX_PIN, GPIO_PIN_TYPE_STD); + GPIO_setDriveLevel(BOARD_SERIALCOM_TX_PIN, GPIO_DRV_LOW); + GPIO_setPin(BOARD_SERIALCOM_TX_PIN); + GPIO_setDirectionMode(BOARD_SERIALCOM_TX_PIN, GPIO_DIR_MODE_OUT); + /* Reset uart before configure it */ + UART_resetModule(BOARD_SERIALCOM); + /* Set baudrate */ + UART_setBaud(BOARD_SERIALCOM, BOARD_SERIALCOM_BAUDRATE); + /* Set the number of stop bits */ + UART_setStopBitCount(BOARD_SERIALCOM, UART_ONE_STOP_BIT); + /* Set MSB bit reverses the order of the bits */ + UART_setMSB(BOARD_SERIALCOM, false); + /* Config tx fifo */ + UART_enableTxFifo(BOARD_SERIALCOM); + UART_resetTxFifo(BOARD_SERIALCOM); + UART_setTxFifoWatermark(BOARD_SERIALCOM, UART_FIFO_TX6); + + /* Enable transmitter */ + UART_enableTxModule(BOARD_SERIALCOM); + /* Enable receiver */ + UART_enableRxModule(BOARD_SERIALCOM); +} + +/** + * @brief Board LED Initialization. + * @note Call this function in the application to initialize the LED + * on the board. + */ +void LED_init (void) +{ + /* led1 initialization */ + GPIO_setAnalogMode(BOARD_LED1_PIN, GPIO_ANALOG_DISABLED); + GPIO_setDriveLevel(BOARD_LED1_PIN, GPIO_DRV_MAX); + GPIO_clearPin(BOARD_LED1_PIN); + GPIO_setDirectionMode(BOARD_LED1_PIN, GPIO_DIR_MODE_OUT); + /* led2 initialization */ + GPIO_setAnalogMode(BOARD_LED2_PIN, GPIO_ANALOG_DISABLED); + GPIO_setDriveLevel(BOARD_LED2_PIN, GPIO_DRV_MAX); + GPIO_clearPin(BOARD_LED2_PIN); + GPIO_setDirectionMode(BOARD_LED2_PIN, GPIO_DIR_MODE_OUT); +} + +/** + * @brief Board Switch Initialization. + * @note Call this function in the application to initialize the Switch + * on the board. + */ +void Switch_init (void) +{ + /* KEY initialization */ + GPIO_setAnalogMode(BOARD_KEY_PIN, GPIO_ANALOG_DISABLED); + GPIO_setPadConfig(BOARD_KEY_PIN, GPIO_PIN_TYPE_OD); + GPIO_setQualificationPeriod(BOARD_KEY_PIN, GPIO_SMP_SYSCLK_DIV_510); + GPIO_setQualificationMode(BOARD_KEY_PIN, GPIO_QUAL_6SAMPLE); + GPIO_setDirectionMode(BOARD_KEY_PIN, GPIO_DIR_MODE_IN); +} + +/** + * @brief Function to initialize the device. + * @note Mainly initialize the system clock and enable all peripheral clocks. + */ +void Device_init(void) +{ + System_setClock(); +#if (DUAL_CORE_ENABLE == 0) + Device_enableAllPeripheralsInCpu1(); +#endif + Device_enableAllPeripherals(); +} + +/** + * @brief Set up clock source selection, PLL control, and clock dividers. + */ +void System_setClock (void) +{ + /* If CPU1 has been configured, do not repeat the configuration for CPU2. */ + if((MCM->CPUID.WORDVAL & 0x01) == 0x01) + { +#ifdef SYSCLK_USE_PLL +#ifdef SYSCLK_SOURCE_USE_HXTL + RCC_configHxtl(HXTL_CONFIG, RCC_HXTL_NORMAL, RCC_FUN_ON); +#endif + RCC_configPll(PLL_CONFIG, PLL_EXT_CONFIG, RCC_FUN_ON); + + RCC_setClock(RCC_SYSCLKSOURCE_PLL); +#else // !SYSCLK_USE_PLL +#ifdef SYSCLK_SOURCE_USE_HXTL + RCC_configHxtl(HXTL_CONFIG, RCC_HXTL_NORMAL, RCC_FUN_ON); + RCC_setClock(RCC_SYSCLKSOURCE_HXTL); +#endif // SYSCLK_SOURCE_USE_HXTL + +#ifdef SYSCLK_SOURCE_USE_MIRC1 + RCC_setClock(RCC_SYSCLKSOURCE_MIRC1); +#endif // SYSCLK_SOURCE_USE_MIRC1 + +#ifdef SYSCLK_SOURCE_USE_MIRC2 + RCC_setClock(RCC_SYSCLKSOURCE_MIRC2); +#endif // SYSCLK_SOURCE_USE_MIRC2 +#endif // SYSCLK_USE_PLL + RCC_configClockDiv(SYSCLOCK_CFGR_DIV_CONFIG, SYSCLOCK_CFGR2_DIV_CONFIG); + } +} + +#if (DUAL_CORE_ENABLE == 0) +/** + * @brief Enable CPU1 for peripherals. + */ +void Device_enableAllPeripheralsInCpu1 (void) +{ + SYSCON->UNLOCK.WORDVAL = 0x55aa6699; + + WRITE_REG(SYSCON->AHBCPUSEL1.WORDVAL, 0x0); + WRITE_REG(SYSCON->AHBCPUSEL2.WORDVAL, 0x0); + WRITE_REG(SYSCON->APBCPUSEL1.WORDVAL, 0x0); + WRITE_REG(SYSCON->APBCPUSEL2.WORDVAL, 0x0); + WRITE_REG(SYSCON->APBCPUSEL3.WORDVAL, 0x0); + WRITE_REG(SYSCON->APBCPUSEL5.WORDVAL, 0x0); + WRITE_REG(SYSCON->APBCPUSEL6.WORDVAL, 0x0); + WRITE_REG(SYSCON->APBCPUSEL8.WORDVAL, 0x0); + + SET_BIT(SYSCON->AHBCPUSELEN1.WORDVAL, 0x00000330); + SET_BIT(SYSCON->AHBCPUSELEN2.WORDVAL, 0x00007303); + SET_BIT(SYSCON->APBCPUSELEN1.WORDVAL, 0xFF7FFFFF); + SET_BIT(SYSCON->APBCPUSELEN2.WORDVAL, 0x07FF800F); + SET_BIT(SYSCON->APBCPUSELEN3.WORDVAL, 0x00000300); + SET_BIT(SYSCON->APBCPUSELEN5.WORDVAL, 0x01070F0F); + SET_BIT(SYSCON->APBCPUSELEN6.WORDVAL, 0x03003F03); + SET_BIT(SYSCON->APBCPUSELEN8.WORDVAL, 0x03FF0010); + + SYSCON->UNLOCK.WORDVAL = 0x55aa6698; +} +#endif + +/** + * @brief Enable clocks for all peripherals. + */ +void Device_enableAllPeripherals (void) +{ + RCC_unlockRccRegister(); + + RCC_enableAhb1PeripheralClock(RCC_HCLKEN1_UPPEN_M | RCC_HCLKEN1_EMIFEN_M | RCC_HCLKEN1_SEMAEN_M | + RCC_HCLKEN1_MUEN_M | RCC_HCLKEN1_GPIOHEN_M | RCC_HCLKEN1_GPIOGEN_M | + RCC_HCLKEN1_GPIOFEN_M | RCC_HCLKEN1_GPIOEEN_M | RCC_HCLKEN1_GPIODEN_M | + RCC_HCLKEN1_GPIOCEN_M | RCC_HCLKEN1_GPIOBEN_M | RCC_HCLKEN1_GPIOAEN_M | + RCC_HCLKEN1_EMATHEN_M | RCC_HCLKEN1_QSPIEN_M | RCC_HCLKEN1_CPUXMMATHEN_M | + RCC_HCLKEN1_EDMA2EN_M | RCC_HCLKEN1_EDMA1EN_M | RCC_HCLKEN1_DMAMUX2EN_M | + RCC_HCLKEN1_DMAMUX1EN_M | RCC_HCLKEN1_SMPUEN_M | RCC_HCLKEN1_FMUEN_M); + + RCC_enableAhb2PeripheralClock(RCC_HCLKEN2_CANFD2EN_M | RCC_HCLKEN2_CANFD1EN_M | RCC_HCLKEN2_CAN1EN_M | + RCC_HCLKEN2_LIN2EN_M | RCC_HCLKEN2_LIN1EN_M | RCC_HCLKEN2_BGCRC2EN_M | + RCC_HCLKEN2_BGCRC1EN_M | RCC_HCLKEN2_CRC2EN_M | RCC_HCLKEN2_CRC1EN_M | + RCC_HCLKEN2_AESHASHEN_M | RCC_HCLKEN2_TRNGEN_M); + + RCC_enableApb1PeripheralClock(RCC_PCLKEN1_EPWM18EN_M | RCC_PCLKEN1_EPWM17EN_M | RCC_PCLKEN1_EQEP6EN_M | + RCC_PCLKEN1_EQEP5EN_M | RCC_PCLKEN1_EQEP4EN_M | RCC_PCLKEN1_EQEP3EN_M | + RCC_PCLKEN1_EQEP2EN_M | RCC_PCLKEN1_EQEP1EN_M | RCC_PCLKEN1_ECAP7EN_M | + RCC_PCLKEN1_ECAP6EN_M | RCC_PCLKEN1_ECAP5EN_M | RCC_PCLKEN1_ECAP4EN_M | + RCC_PCLKEN1_ECAP3EN_M | RCC_PCLKEN1_ECAP2EN_M | RCC_PCLKEN1_ECAP1EN_M | + RCC_PCLKEN1_EPWM16EN_M | RCC_PCLKEN1_EPWM15EN_M | RCC_PCLKEN1_EPWM14EN_M | + RCC_PCLKEN1_EPWM13EN_M | RCC_PCLKEN1_EPWM12EN_M | RCC_PCLKEN1_EPWM11EN_M | + RCC_PCLKEN1_EPWM10EN_M | RCC_PCLKEN1_EPWM9EN_M | RCC_PCLKEN1_EPWM8EN_M | + RCC_PCLKEN1_EPWM7EN_M | RCC_PCLKEN1_EPWM6EN_M | RCC_PCLKEN1_EPWM5EN_M | + RCC_PCLKEN1_EPWM4EN_M | RCC_PCLKEN1_EPWM3EN_M | RCC_PCLKEN1_EPWM2EN_M | + RCC_PCLKEN1_EPWM1EN_M); + + RCC_enableApb2PeripheralClock(RCC_PCLKEN2_CMPSS11EN_M | RCC_PCLKEN2_CMPSS10EN_M | RCC_PCLKEN2_CMPSS9EN_M | + RCC_PCLKEN2_SDFM1EN_M | RCC_PCLKEN2_CMPSS8EN_M | RCC_PCLKEN2_CMPSS7EN_M | + RCC_PCLKEN2_CMPSS6EN_M | RCC_PCLKEN2_CMPSS5EN_M | RCC_PCLKEN2_CMPSS4EN_M | + RCC_PCLKEN2_CMPSS3EN_M | RCC_PCLKEN2_CMPSS2EN_M | RCC_PCLKEN2_CMPSS1EN_M | + RCC_PCLKEN2_XBAREN_M | RCC_PCLKEN2_ADCDEN_M | RCC_PCLKEN2_ADCCEN_M | + RCC_PCLKEN2_ADCBEN_M | RCC_PCLKEN2_ADCAEN_M | RCC_PCLKEN2_SDFM4EN_M | + RCC_PCLKEN2_SDFM3EN_M | RCC_PCLKEN2_SDFM2EN_M); + + RCC_enableApb3PeripheralClock(RCC_PCLKEN3_ANALOGSS_M | RCC_PCLKEN3_DAC3EN_M | RCC_PCLKEN3_DAC1EN_M); + + RCC_enableApb5PeripheralClock(RCC_PCLKEN5_DCC1EN_M | RCC_PCLKEN5_CPUXWWDGEN_M | RCC_PCLKEN5_EPGEN_M | + RCC_PCLKEN5_PMBUSEN_M | RCC_PCLKEN5_I2C2EN_M | RCC_PCLKEN5_I2C1EN_M | + RCC_PCLKEN5_SPI4EN_M | RCC_PCLKEN5_SPI3EN_M | RCC_PCLKEN5_SPI2EN_M | + RCC_PCLKEN5_SPI1EN_M | RCC_PCLKEN5_UART4EN_M | RCC_PCLKEN5_UART3EN_M | + RCC_PCLKEN5_UART2EN_M | RCC_PCLKEN5_UART1EN_M); + + RCC_enableApb6PeripheralClock(RCC_PCLKEN6_DCC3EN_M | RCC_PCLKEN6_DCC2EN_M | RCC_PCLKEN6_BTIM2EN_M | + RCC_PCLKEN6_BTIM1EN_M | RCC_PCLKEN6_CPUXSTIM3EN_M | RCC_PCLKEN6_CPUXSTIM2EN_M | + RCC_PCLKEN6_CPUXSTIM1EN_M | RCC_PCLKEN6_CLB6EN_M | RCC_PCLKEN6_CLB5EN_M | + RCC_PCLKEN6_CLB4EN_M | RCC_PCLKEN6_CLB3EN_M | RCC_PCLKEN6_CLB2EN_M | + RCC_PCLKEN6_CLB1EN_M | RCC_PCLKEN6_TIM2EN_M | RCC_PCLKEN6_TIM1EN_M); + + RCC_enableApb8PeripheralClock(RCC_PCLKEN8_ADCAGG2EN_M | RCC_PCLKEN8_ADCAGG1EN_M | RCC_PCLKEN8_ADCCHK8EN_M | + RCC_PCLKEN8_ADCCHK7EN_M | RCC_PCLKEN8_ADCCHK6EN_M | RCC_PCLKEN8_ADCCHK5EN_M | + RCC_PCLKEN8_ADCCHK4EN_M | RCC_PCLKEN8_ADCCHK3EN_M | RCC_PCLKEN8_ADCCHK2EN_M | + RCC_PCLKEN8_ADCCHK1EN_M | RCC_PCLKEN8_AWKEN_M | RCC_PCLKEN8_LPTIMEN_M | + RCC_PCLKEN8_IWDG2EN_M | RCC_PCLKEN8_CPUXIWDG1EN_M | RCC_PCLKEN8_PWREN_M); + + RCC_lockRccRegister(); +} + +/** + * @brief Unlock all peripheral registers. + */ +void Device_unlockPeriphReg (void) +{ + /* Enables register writing function about FMU/ECAP/EPWM/XBAR/CMPSS/SDFM/DAC/ANASS/ADC/PGA/GPIO */ + SYSCON->SYSEALLOW1.WORDVAL = 0x7FFFFFFF; + SYSCON->SYSEALLOW2.WORDVAL = 0x7FFFFFFF; + SYSCON->SYSEALLOW3.WORDVAL = 0x00003FFF; +} + +/** + * @brief Disable clocks for all peripherals. + */ +void Device_disableAllPeripherals (void) +{ + RCC_unlockRccRegister(); + + RCC_disableAhb1PeripheralClock(RCC_HCLKEN1_UPPEN_M | RCC_HCLKEN1_EMIFEN_M | RCC_HCLKEN1_SEMAEN_M | + RCC_HCLKEN1_MUEN_M | RCC_HCLKEN1_GPIOHEN_M | RCC_HCLKEN1_GPIOGEN_M | + RCC_HCLKEN1_GPIOFEN_M | RCC_HCLKEN1_GPIOEEN_M | RCC_HCLKEN1_GPIODEN_M | + RCC_HCLKEN1_GPIOCEN_M | RCC_HCLKEN1_GPIOBEN_M | RCC_HCLKEN1_GPIOAEN_M | + RCC_HCLKEN1_EMATHEN_M | RCC_HCLKEN1_QSPIEN_M | RCC_HCLKEN1_CPUXMMATHEN_M | + RCC_HCLKEN1_EDMA2EN_M | RCC_HCLKEN1_EDMA1EN_M | RCC_HCLKEN1_DMAMUX2EN_M | + RCC_HCLKEN1_DMAMUX1EN_M | RCC_HCLKEN1_SMPUEN_M | RCC_HCLKEN1_FMUEN_M); + + RCC_disableAhb2PeripheralClock(RCC_HCLKEN2_CANFD2EN_M | RCC_HCLKEN2_CANFD1EN_M | RCC_HCLKEN2_CAN1EN_M | + RCC_HCLKEN2_LIN2EN_M | RCC_HCLKEN2_LIN1EN_M | RCC_HCLKEN2_BGCRC2EN_M | + RCC_HCLKEN2_BGCRC1EN_M | RCC_HCLKEN2_CRC2EN_M | RCC_HCLKEN2_CRC1EN_M | + RCC_HCLKEN2_AESHASHEN_M |RCC_HCLKEN2_TRNGEN_M); + + RCC_disableApb1PeripheralClock(RCC_PCLKEN1_EPWM18EN_M | RCC_PCLKEN1_EPWM17EN_M | RCC_PCLKEN1_EQEP6EN_M | + RCC_PCLKEN1_EQEP5EN_M | RCC_PCLKEN1_EQEP4EN_M | RCC_PCLKEN1_EQEP3EN_M | + RCC_PCLKEN1_EQEP2EN_M | RCC_PCLKEN1_EQEP1EN_M | RCC_PCLKEN1_ECAP7EN_M | + RCC_PCLKEN1_ECAP6EN_M | RCC_PCLKEN1_ECAP5EN_M | RCC_PCLKEN1_ECAP4EN_M | + RCC_PCLKEN1_ECAP3EN_M | RCC_PCLKEN1_ECAP2EN_M | RCC_PCLKEN1_ECAP1EN_M | + RCC_PCLKEN1_EPWM16EN_M | RCC_PCLKEN1_EPWM15EN_M | RCC_PCLKEN1_EPWM14EN_M | + RCC_PCLKEN1_EPWM13EN_M | RCC_PCLKEN1_EPWM12EN_M | RCC_PCLKEN1_EPWM11EN_M | + RCC_PCLKEN1_EPWM10EN_M | RCC_PCLKEN1_EPWM9EN_M | RCC_PCLKEN1_EPWM8EN_M | + RCC_PCLKEN1_EPWM7EN_M | RCC_PCLKEN1_EPWM6EN_M | RCC_PCLKEN1_EPWM5EN_M | + RCC_PCLKEN1_EPWM4EN_M | RCC_PCLKEN1_EPWM3EN_M | RCC_PCLKEN1_EPWM2EN_M | + RCC_PCLKEN1_EPWM1EN_M); + + RCC_disableApb2PeripheralClock(RCC_PCLKEN2_CMPSS11EN_M | RCC_PCLKEN2_CMPSS10EN_M | RCC_PCLKEN2_CMPSS9EN_M | + RCC_PCLKEN2_SDFM1EN_M | RCC_PCLKEN2_CMPSS8EN_M | RCC_PCLKEN2_CMPSS7EN_M | + RCC_PCLKEN2_CMPSS6EN_M | RCC_PCLKEN2_CMPSS5EN_M | RCC_PCLKEN2_CMPSS4EN_M | + RCC_PCLKEN2_CMPSS3EN_M | RCC_PCLKEN2_CMPSS2EN_M | RCC_PCLKEN2_CMPSS1EN_M | + RCC_PCLKEN2_XBAREN_M | RCC_PCLKEN2_ADCDEN_M | RCC_PCLKEN2_ADCCEN_M | + RCC_PCLKEN2_ADCBEN_M | RCC_PCLKEN2_ADCAEN_M | RCC_PCLKEN2_SDFM4EN_M | + RCC_PCLKEN2_SDFM3EN_M | RCC_PCLKEN2_SDFM2EN_M); + + RCC_disableApb3PeripheralClock(RCC_PCLKEN3_ANALOGSS_M | RCC_PCLKEN3_DAC3EN_M | RCC_PCLKEN3_DAC1EN_M); + + RCC_disableApb5PeripheralClock(RCC_PCLKEN5_DCC1EN_M | RCC_PCLKEN5_CPUXWWDGEN_M | RCC_PCLKEN5_EPGEN_M | + RCC_PCLKEN5_PMBUSEN_M | RCC_PCLKEN5_I2C2EN_M | RCC_PCLKEN5_I2C1EN_M | + RCC_PCLKEN5_SPI4EN_M | RCC_PCLKEN5_SPI3EN_M | RCC_PCLKEN5_SPI2EN_M | + RCC_PCLKEN5_SPI1EN_M | RCC_PCLKEN5_UART4EN_M |RCC_PCLKEN5_UART3EN_M | + RCC_PCLKEN5_UART2EN_M | RCC_PCLKEN5_UART1EN_M); + + RCC_disableApb6PeripheralClock(RCC_PCLKEN6_DCC3EN_M | RCC_PCLKEN6_DCC2EN_M | RCC_PCLKEN6_BTIM2EN_M | + RCC_PCLKEN6_BTIM1EN_M | RCC_PCLKEN6_CPUXSTIM3EN_M | RCC_PCLKEN6_CPUXSTIM2EN_M | + RCC_PCLKEN6_CPUXSTIM1EN_M | RCC_PCLKEN6_CLB6EN_M | RCC_PCLKEN6_CLB5EN_M | + RCC_PCLKEN6_CLB4EN_M | RCC_PCLKEN6_CLB3EN_M | RCC_PCLKEN6_CLB2EN_M | + RCC_PCLKEN6_CLB1EN_M | RCC_PCLKEN6_TIM2EN_M | RCC_PCLKEN6_TIM1EN_M); + + RCC_disableApb8PeripheralClock(RCC_PCLKEN8_ADCAGG2EN_M | RCC_PCLKEN8_ADCAGG1EN_M | RCC_PCLKEN8_ADCCHK8EN_M | + RCC_PCLKEN8_ADCCHK7EN_M | RCC_PCLKEN8_ADCCHK6EN_M | RCC_PCLKEN8_ADCCHK5EN_M | + RCC_PCLKEN8_ADCCHK4EN_M | RCC_PCLKEN8_ADCCHK3EN_M | RCC_PCLKEN8_ADCCHK2EN_M | + RCC_PCLKEN8_ADCCHK1EN_M | RCC_PCLKEN8_AWKEN_M | RCC_PCLKEN8_LPTIMEN_M | + RCC_PCLKEN8_IWDG2EN_M | RCC_PCLKEN8_CPUXIWDG1EN_M | RCC_PCLKEN8_PWREN_M); + RCC_lockRccRegister(); +} + +/** + * @brief Lock all peripheral registers. + */ +void Device_lockPeriphReg (void) +{ + /* Enables register writing function about FMU/ECAP/EPWM/XBAR/CMPSS/SDFM/DAC/ANASS/ADC/PGA/GPIO */ + SYSCON->SYSEALLOW1.WORDVAL = 0x00000000; + SYSCON->SYSEALLOW2.WORDVAL = 0x00000000; + SYSCON->SYSEALLOW3.WORDVAL = 0x00000000; +} diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h new file mode 100644 index 00000000000..b6f0c6eb2fa --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h @@ -0,0 +1,287 @@ +/** + * @file board.h + * @author Haven-X + * @brief Header file of board.c + * + *

© Copyright (c) 2025 Novosense Limited. + * All rights reserved.

+ */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include "NS800RTxxxx.h" +#include "drv_common.h" +#include "drv_gpio.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define NS800_FLASH_START_ADRESS ((uint32_t)0x08000000) +#define NS800_FLASH_SIZE (512 * 1024) +#define NS800_FLASH_END_ADDRESS ((uint32_t)(NS800_FLASH_START_ADRESS + NS800_FLASH_SIZE)) + +#define NS800RT7P65_SRAM_SIZE (256) + +extern int Image$$RW_RT_HEAD$$Limit; +#define HEAP_BEGIN (&Image$$RW_RT_HEAD$$Limit) +#define HEAP_END ((uint32_t)&Image$$RW_RT_HEAD$$Limit + 0x4000) + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/** @defgroup BOARD_LEDx_PIN Board LEDx PIN + * @{ + * @brief Defines configuration macros for board ledx pin. + */ +#define BOARD_LED1_PIN GPIO_68 /* reserve */ +#define BOARD_LED2_PIN GPIO_69 /* reserve */ + +/** + * @} + */ + +/** @defgroup BOARD_SWITCHx_PIN Board SWITCHx PIN + * @{ + * @brief Defines configuration macros for board switchx pin. + */ +#define BOARD_KEY_PIN GPIO_41 + + +/** + * @} + */ + +/** @defgroup SERIAL_COM_PIN Serial Com port Pins + * @{ + * @brief Defines configuration macros for serial com port pin. + */ +#define BOARD_SERIALCOM_TX_PIN GPIO_12 +#define BOARD_SERIALCOM_RX_PIN GPIO_13 + +/** + * @} + */ + +#define BOARD_SERIALCOM_BAUDRATE (115200UL) +#define BOARD_SERIALCOM UART1 + + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/** @defgroup HXTL_CONFIG High-Speed Crystal Oscillator (HXTL) Configuration + * @{ + * @brief Defines configuration macros for the High-Speed Crystal Oscillator (HXTL). + */ +#ifdef SYSCLK_SOURCE_USE_HXTL +#define HXTL_CONFIG ((RCC_HXTL_FILT_ENABLE << 15) | \ + (RCC_HXTL_FEEDBACK_RES_0_8M << 13) | \ + (RCC_HXTL_FEEDBACK_ENABLE << 12) | \ + (RCC_HXTL_STARTUP_16384 << 8) | \ + RCC_HXTL_24M_AGC_DISABLE) + +#else +#define HXTL_CONFIG 0U +#endif + +/** + * @} + */ + +/** @defgroup PLL_CONFIG PLL Configuration + * @{ + * @brief Defines configuration macros for the Phase-Locked Loop (PLL). + * @note Will configure the clock as follows: + * PLL_SYSCLK = PLLSOURCE * PLLM / ( (PLLN+1) * (2 * (PLLP+1))) + * + * PLLSOURCE optional: \b HXTL_FREQ_VALUE + * \b MIRC1_FREQ_VALUE + * \b MIRC2_FREQ_VALUE + * Example: + * if PLLSOURCE = HXTL_FREQ_VALUE = 20Mhz, PLLM_40, PLLN_DIV1, PLLP_DIV2, + * + * PLL_SYSCLK = 20Mhz * 40 / ( (0+1) * (2 * (0+1)) ) = 400MHz + */ +#ifdef SYSCLK_USE_PLL +#ifdef PLLCLK_SOURCE_USE_HXTL +#define PLL_CONFIG ((RCC_PLLM_40 << 8) | \ + (RCC_PLLN_DIV1 << 4) | \ + (RCC_PLLP_DIV2 << 17) | \ + (RCC_PLLSOURCE_HXTL)) +#else // ndef PLLCLK_SOURCE_USE_HXTL +#ifdef PLLCLK_SOURCE_USE_MIRC2 +#define PLL_CONFIG ((RCC_PLLM_80 << 8) | \ + (RCC_PLLN_DIV1 << 4) | \ + (RCC_PLLP_DIV2 << 17) | \ + (RCC_PLLSOURCE_MIRC2)) +#else // ndef PLLCLK_SOURCE_USE_MIRC2 +#define PLL_CONFIG ((RCC_PLLM_52 << 8) | \ + (RCC_PLLN_DIV1 << 4) | \ + (RCC_PLLP_DIV2 << 17) | \ + (RCC_PLLSOURCE_MIRC1)) +#endif // PLLCLK_SOURCE_USE_MIRC2 +#endif // PLLCLK_SOURCE_USE_HXTL +#else // ndef SYSCLK_USE_PLL +#define PLL_CONFIG 0U +#endif // SYSCLK_USE_PLL + +/** + * @} + */ + + + +/** @defgroup PLL_EXT_CONFIG PLL Extended Configuration + * @{ + * @brief Defines configuration macros for the Phase-Locked Loop (PLL) extended settings. + */ +#ifdef SYSCLK_USE_PLL +#define PLL_EXT_CONFIG ((RCC_PLLQ_DIV8 << 27) | \ + (RCC_PLLR_DIV8 << 22) | \ + (RCC_PLL_FORCELK_DISABLE << 18) | \ + (RCC_PLL_LKDT_SEL_0 << 16) | \ + (RCC_PLL_LOOP_FILTER_CAP_84PF << 8) | \ + (RCC_PLL_CHARGE_PUMP_CURRENT_4UA << 4) | \ + (RCC_PLL_LOOP_FILTER_RES_10K << 2) | \ + (RCC_PLL_VCO_400_800M)) +#else +#define PLL_EXT_CONFIG 0U +#endif + +/** + * @} + */ + + /** @defgroup SYS_CLOCK_DIV_CONFIG Systerm Clock Division Configuration + * @{ + * @brief Defines macros for configuring system clock division settings. + */ +#ifdef SYSCLK_USE_PLL +#define SYSCLOCK_CFGR_DIV_CONFIG ((RCC_APB5_HCLK_DIV4 << 28) | \ + (RCC_APB2_4_HCLK_DIV1 << 24) | \ + (RCC_APB1_3_HCLK_DIV1 << 20) | \ + (RCC_HCLKSOURCE_CPUCLK_2 << 12) | \ + (RCC_SYSCLK_DIV1 << 8)) +#define SYSCLOCK_CFGR2_DIV_CONFIG ((RCC_FLASH_DIV_2 << 0) | \ + (RCC_TRACE_DIV_2 << 4) | \ + (RCC_EMIF_DIV_2 << 8) | \ + (RCC_EPWM_DIV_1 << 12)) + +#else +#define SYSCLOCK_CFGR_DIV_CONFIG ((RCC_APB5_HCLK_DIV1 << 28) | \ + (RCC_APB2_4_HCLK_DIV1 << 24) | \ + (RCC_APB1_3_HCLK_DIV1 << 20) | \ + (RCC_HCLKSOURCE_CPUCLK << 12) | \ + (RCC_SYSCLK_DIV1 << 8)) +#define SYSCLOCK_CFGR2_DIV_CONFIG ((RCC_FLASH_DIV_1 << 0) | \ + (RCC_TRACE_DIV_1 << 4) | \ + (RCC_EMIF_DIV_1 << 8) | \ + (RCC_EPWM_DIV_1 << 12)) +#endif + + +/** + * @} + */ + +#define SYSTICK_TIME_UNIT (1000UL) /*!< Uint: 1M */ + + + + +/******************************************************************************* + * Functions + ******************************************************************************/ + +/** + * \brief Function to initialize the device. + * \note Mainly initialize the system clock and enable all peripheral clocks. + */ +void Device_init(void); + +/** + * \brief Set up clock source selection, PLL control, and clock dividers. + */ +void System_setClock(void); + +/** + * \brief Enable clocks for all peripherals. + */ +void Device_enableAllPeripherals(void); + +/** + * \brief Unlock all peripheral registers. + */ +void Device_unlockPeriphReg (void); + +/** + * \brief Disable clocks for all peripherals. + */ +void Device_disableAllPeripherals (void); + +/** + *\@brief Lock all peripheral registers. + */ +void Device_lockPeriphReg (void); + +/** + *\@brief All peripherals are hung on the CUP1 + */ +void Device_enableAllPeripheralsInCpu1 (void); + + +/** + * \brief Board Initialization. + * \note Call this function in your application if you wish to do all module + * initialization. + * If you wish to not use some of the initializations, instead of the + * Board_init use the individual Module_inits. + */ +void Board_init (void); + +/** + * \brief PinMux Initialization. + * \note Call this function in your application if you want all + * PinMux initialization to be done. + */ +void PinMux_init (void); + +/** + * \brief Board Serial Communication Interface Initialization. + * \note Call this function in the application to initialize the SCI serial port + * on the board for outputting debugging information. + */ +void SerialCOM_init(void); + +/** + * \brief Board LED Initialization. + * \note Call this function in the application to initialize the LED + * on the board. + */ +void LED_init (void); + +/** + * \brief Board Switch Initialization. + * \note Call this function in the application to initialize the Switch + * on the board. + */ +void Switch_init (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* __BOARD_H__ */ diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.icf b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.icf new file mode 100644 index 00000000000..870bdb144ca --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.icf @@ -0,0 +1,56 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x08000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x08000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0807FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000400; +define symbol __ICFEDIT_region_RAM_end__ = 0x20011FFF; +define symbol __ICFEDIT_region_VTRAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_VTRAM_end__ = 0x200003FF; +define symbol __ICFEDIT_region_HEAP_start__ = 0x20012000; +define symbol __ICFEDIT_region_HEAP_end__ = 0x20015FFF; +define symbol __ICFEDIT_region_RAM2_start__ = 0x20016000; +define symbol __ICFEDIT_region_RAM2_end__ = 0x2001FFFF; +define symbol __ICFEDIT_region_SRAM1_start__ = 0x20100000; +define symbol __ICFEDIT_region_SRAM1_end__ = 0x2011FFFF; +define symbol __ICFEDIT_region_SRAM2_start__ = 0x20120000; +define symbol __ICFEDIT_region_SRAM2_end__ = 0x2013FFFF; +define symbol __ICFEDIT_region_BKPSRAM_start__ = 0x400B7000; +define symbol __ICFEDIT_region_BKPSRAM_end__ = 0x400B7FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x0000; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; + +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +define region VTRAM_region = mem:[from __ICFEDIT_region_VTRAM_start__ to __ICFEDIT_region_VTRAM_end__]; +define region HEAP_region = mem:[from __ICFEDIT_region_HEAP_start__ to __ICFEDIT_region_HEAP_end__]; +define region RAM2_region = mem:[from __ICFEDIT_region_RAM2_start__ to __ICFEDIT_region_RAM2_end__]; +define region SRAM1_region = mem:[from __ICFEDIT_region_SRAM1_start__ to __ICFEDIT_region_SRAM1_end__]; +define region SRAM2_region = mem:[from __ICFEDIT_region_SRAM2_start__ to __ICFEDIT_region_SRAM2_end__]; +define region BKPSRAM_region = mem:[from __ICFEDIT_region_BKPSRAM_start__ to __ICFEDIT_region_BKPSRAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit, section .bss.bkupsram }; + +define exported symbol Image$$RW_RT_HEAD$$Base = __ICFEDIT_region_HEAP_start__; +define exported symbol Image$$RW_RT_HEAD$$Limit = __ICFEDIT_region_HEAP_start__; +define exported symbol Image$$RW_RT_HEAD$$End = __ICFEDIT_region_HEAP_end__ + 1; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, last block CSTACK }; +place in VTRAM_region { section .vt_dtcm }; +place in RAM2_region { section .dtcm_ext }; +place in SRAM1_region { section .sram1 }; +place in SRAM2_region { section .sram2 }; +place in BKPSRAM_region { section .bss.bkupsram }; diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.lds b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.lds new file mode 100644 index 00000000000..b2d84435ec5 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.lds @@ -0,0 +1,207 @@ +/* + * GNU ld linker script for NS800RT7P65 (Cortex-M7) + * + * Memory layout derived from the existing MDK scatter file: + * FLASH 0x08000000 512K + * VT_DTCM 0x20000000 1K + * DTCM 0x20000400 71K (general RW/ZI/stack region) + * RT_HEAP 0x20012000 16K (reserved for rt_system_heap_init) + * DTCM_EXT 0x20016000 40K (extra named sections only) + * SRAM1 0x20100000 128K + * SRAM2 0x20120000 128K + * BKPSRAM 0x400B7000 4K + */ + +ENTRY(Reset_Handler) + +_system_stack_size = 0x1000; + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K + VT_DTCM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x400 + DTCM (rwx) : ORIGIN = 0x20000400, LENGTH = 0x11C00 + RT_HEAP (rwx) : ORIGIN = 0x20012000, LENGTH = 0x4000 + DTCM_EXT (rwx) : ORIGIN = 0x20016000, LENGTH = 0xA000 + SRAM1 (rwx) : ORIGIN = 0x20100000, LENGTH = 0x20000 + SRAM2 (rwx) : ORIGIN = 0x20120000, LENGTH = 0x20000 + BKPSRAM (rwx) : ORIGIN = 0x400B7000, LENGTH = 0x1000 +} + +SECTIONS +{ + .text : + { + . = ALIGN(4); + _stext = .; + KEEP(*(.isr_vector)) + + . = ALIGN(4); + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + *(.itcm) + *(.itcm*) + + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + PROVIDE(__ctors_start__ = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + _etext = .; + } > FLASH = 0 + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + _sidata = .; + } > FLASH + __exidx_end = .; + + .data : AT (_sidata) + { + . = ALIGN(4); + _sdata = .; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + *(.dtcm) + *(.dtcm*) + + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + _edata = .; + } > DTCM + + .stack : + { + . = ALIGN(8); + _sstack = .; + . = . + _system_stack_size; + . = ALIGN(8); + _estack = .; + } > DTCM + + __bss_start = .; + .bss (NOLOAD) : + { + . = ALIGN(4); + _sbss = .; + + *(.bss) + *(.bss.*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; + + *(.bss.init) + } > DTCM + __bss_end = .; + + .vt_dtcm (NOLOAD) : + { + . = ALIGN(4); + *(.vt_dtcm) + *(.vt_dtcm*) + . = ALIGN(4); + } > VT_DTCM + + .sram1 (NOLOAD) : + { + . = ALIGN(4); + *(.sram1) + *(.sram1*) + . = ALIGN(4); + } > SRAM1 + + .sram2 (NOLOAD) : + { + . = ALIGN(4); + *(.sram2) + *(.sram2*) + . = ALIGN(4); + } > SRAM2 + + .bkupsram (NOLOAD) : + { + . = ALIGN(4); + *(.bss.bkupsram) + *(.bss.bkupsram*) + . = ALIGN(4); + } > BKPSRAM + + .dtcm_ext (NOLOAD) : + { + . = ALIGN(4); + *(.dtcm_ext) + *(.dtcm_ext*) + . = ALIGN(4); + } > DTCM_EXT + + .rt_heap (NOLOAD) : + { + . = ALIGN(8); + PROVIDE(Image$$RW_RT_HEAD$$Base = .); + PROVIDE(Image$$RW_RT_HEAD$$Limit = .); + PROVIDE(__rt_heap_start = .); + . = . + LENGTH(RT_HEAP); + . = ALIGN(8); + PROVIDE(Image$$RW_RT_HEAD$$End = .); + PROVIDE(__rt_heap_end = .); + } > RT_HEAP + + _end = .; + + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.sct b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.sct new file mode 100644 index 00000000000..e6366728be8 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/linker_scripts/link.sct @@ -0,0 +1,42 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x08000000 0x00080000 { ; load region size_region + ER_IROM1 0x08000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + + RW_ITCM 0x00000000 0x00020000 { ; 128K ITCM -> code in sram + .ANY (.itcm) + } + + RW_VT_DTCM 0x20000000 0x00000400 { ; 1K VT_DTCM -> Vector Table + * (.vt_dtcm) + } + + RW_DTCM 0x20000400 0x0001FC00 { ; 127K DTCM -> fast sram + .ANY (.dtcm, +RW +ZI) +; startup_*.o(STACK) +; startup_*.o(HEAP) + } + + RW_RT_HEAD 0x20012000 EMPTY 0x4000 { + + } + +; RW_SRAM1 0x20100000 0x00020000 { ; sram with ECC +; * (.sram1) +; } + +; RW_SRAM2 0x20120000 0x00020000 { ; sram with ECC +; * (.sram2) +; } + +; RW_SRAMB 0x400B7000 UNINIT 0x00001000 { ; sram with backup +; * (.bss.bkupsram) +; } +} \ No newline at end of file diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp new file mode 100644 index 00000000000..79ad928889e --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp @@ -0,0 +1,2406 @@ + + 3 + + rtthread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications\main.c + + + + Compiler + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdlib.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstring.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\ctime.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cunistd.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\common\cwchar.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c + + + $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c + + + + DeviceDrivers + + $PROJ_DIR$\..\..\..\components\drivers\core\device.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_comm.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_up.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\condvar.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\dataqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\pipe.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringblk_buf.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\ringbuffer.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\waitqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\ipc\workqueue.c + + + $PROJ_DIR$\..\..\..\components\drivers\pin\dev_pin.c + + + $PROJ_DIR$\..\..\..\components\drivers\serial\dev_serial.c + + + + Drivers + + $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_gpio.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_uart.c + + + $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c + + + $PROJ_DIR$\board\board.c + + + + NS800RT7-CMSIS + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\Device\Src\system_NS800RT7xxx.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\Device\Src\iar\startup_NS800RT7xxx.s + + + + NS800RT7-StdDriver + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\crc.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\debug.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flash.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\gpio.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\interrupt.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\rcc.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\sram.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\syscon.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\uart.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\xbar.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\exti.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\dmamux.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\edma.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\ecap.c + + + $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flexcan.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c + + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\msh.c + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\components.c + + + $PROJ_DIR$\..\..\..\src\cpu_up.c + + + $PROJ_DIR$\..\..\..\src\defunct.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\scheduler_comm.c + + + $PROJ_DIR$\..\..\..\src\scheduler_up.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + klibc + + $PROJ_DIR$\..\..\..\src\klibc\kstring.c + + + $PROJ_DIR$\..\..\..\src\klibc\kerrno.c + + + $PROJ_DIR$\..\..\..\src\klibc\kstdio.c + + + $PROJ_DIR$\..\..\..\src\klibc\rt_vsscanf.c + + + $PROJ_DIR$\..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + + libcpu + + $PROJ_DIR$\..\..\..\libcpu\arm\common\atomic_arm.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + + POSIX + + + utestcases + + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww new file mode 100644 index 00000000000..c2cb02eb1e8 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx new file mode 100644 index 00000000000..edd35949094 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx @@ -0,0 +1,1292 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + JL2CM3 + -U775238036 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20120000 -FC2000 -FN2 -FF0NS800RT7xxx_FlashBank1.FLM -FS08000000 -FL080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FF1NS800RT7xxx_FlashBank2.FLM -FS18080000 -FL180000 -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=2302,262,2752,819,0)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"NSSinePad DAPLink v2" -U0700000105daff393237584757108136 -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20120000 -FC2000 -FN2 -FF0NS800RT7xxx_FlashBank1.FLM -FS08000000 -FL080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FF1NS800RT7xxx_FlashBank2.FLM -FS18080000 -FL180000 -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC2000 -FD20120000 -FF0NS800RT7xxx_FlashBank1 -FF1NS800RT7xxx_FlashBank2 -FL080000 -FL180000 -FS08000000 -FS18080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC2000 -FD20120000 -FF0NS800RT7xxx_FlashBank1 -FF1NS800RT7xxx_FlashBank2 -FL080000 -FL180000 -FS08000000 -FS18080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) + + + + + + 0 + 1 + __rt_init_rti_board_start + + + 1 + 1 + SysTick + + + 2 + 1 + SystemCoreClock,0x0A + + + 3 + 1 + _console_device + + + 4 + 1 + _console_device + + + 5 + 1 + rt_thread_priority_table + + + 6 + 1 + p_main_thread + + + 7 + 1 + rt_tick,0x0A + + + 8 + 1 + g_tick_test,0x0A + + + + + 0 + 2 + heap_begin_address + + + 1 + 2 + heap_end_address + + + 2 + 2 + rt_thread_priority_table + + + 3 + 2 + rt_timer_list + + + + + 1 + 0 + 0x20014088 + 0 + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Applications + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + applications\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + .\applications\rt_ecap.c + rt_ecap.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + .\applications\rt_can.c + rt_can.c + 0 + 0 + + + + + CPU + 0 + 0 + 0 + 0 + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\atomic_arm.c + atomic_arm.c + 0 + 0 + + + 2 + 5 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 2 + 7 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + context_rvds.S + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + cpu_cache.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + cpuport.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\core\device.c + device.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_comm.c + completion_comm.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_up.c + completion_up.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\condvar.c + condvar.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\pin\dev_pin.c + dev_pin.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\dev_serial.c + dev_serial.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\can\dev_can.c + dev_can.c + 0 + 0 + + + + + Drivers + 1 + 0 + 0 + 0 + + 4 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_uart.c + drv_uart.c + 0 + 0 + + + 4 + 24 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_ecap.c + drv_ecap.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + board\board.c + board.c + 0 + 0 + + + 4 + 28 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drivers\drv_can.c + drv_can.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_file.c + msh_file.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 6 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 6 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 6 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu_up.c + cpu_up.c + 0 + 0 + + + 6 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\defunct.c + defunct.c + 0 + 0 + + + 6 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 6 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 6 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 6 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\mempool.c + mempool.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 6 + 47 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 6 + 48 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + Libc + 0 + 0 + 0 + 0 + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 7 + 50 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cctype.c + cctype.c + 0 + 0 + + + 7 + 52 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdlib.c + cstdlib.c + 0 + 0 + + + 7 + 53 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstring.c + cstring.c + 0 + 0 + + + 7 + 54 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\ctime.c + ctime.c + 0 + 0 + + + 7 + 55 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cunistd.c + cunistd.c + 0 + 0 + + + 7 + 56 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cwchar.c + cwchar.c + 0 + 0 + + + 7 + 57 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kerrno.c + kerrno.c + 0 + 0 + + + 7 + 58 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + 7 + 59 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 7 + 60 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + rt_vsnprintf_tiny.c + 0 + 0 + + + 7 + 61 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsscanf.c + rt_vsscanf.c + 0 + 0 + + + + + NS800RT7-CMSIS + 1 + 0 + 0 + 0 + + 8 + 62 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\Device\Src\system_NS800RT7xxx.c + system_NS800RT7xxx.c + 0 + 0 + + + 8 + 63 + 2 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\Device\Src\arm\startup_NS800RT7xxx.s + startup_NS800RT7xxx.s + 0 + 0 + + + + + NS800RT7-HAL + 1 + 0 + 0 + 0 + + 9 + 64 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\crc.c + crc.c + 0 + 0 + + + 9 + 65 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\debug.c + debug.c + 0 + 0 + + + 9 + 66 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flash.c + flash.c + 0 + 0 + + + 9 + 67 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\gpio.c + gpio.c + 0 + 0 + + + 9 + 68 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\interrupt.c + interrupt.c + 0 + 0 + + + 9 + 69 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\rcc.c + rcc.c + 0 + 0 + + + 9 + 70 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\sram.c + sram.c + 0 + 0 + + + 9 + 71 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\syscon.c + syscon.c + 0 + 0 + + + 9 + 72 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\uart.c + uart.c + 0 + 0 + + + 9 + 73 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\xbar.c + xbar.c + 0 + 0 + + + 9 + 74 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\exti.c + exti.c + 0 + 0 + + + 9 + 75 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\dmamux.c + dmamux.c + 0 + 0 + + + 9 + 76 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\edma.c + edma.c + 0 + 0 + + + 9 + 77 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\ecap.c + ecap.c + 0 + 0 + + + 9 + 78 + 1 + 0 + 0 + 0 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flexcan.c + flexcan.c + 0 + 0 + + + +
diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx new file mode 100644 index 00000000000..b34232eb3ba --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx @@ -0,0 +1,2215 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 6190000::V6.19::ARMCLANG + 1 + + + NS800RT7P65D-DHQFBY2 + Novosense + NOVOSENSE.NS800RT7XXX.0.5.2 + https://www.novosns.com/ + IRAM(0x20000000,0x00020000) IRAM2(0x00000000,0x00020000) IROM(0x08000000,0x00080000) IROM2(0x08080000,0x00080000) XRAM(0x20100000,0x00020000) XRAM2(0x20120000,0x00020000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20120000 -FC2000 -FN2 -FF0NS800RT7xxx_FlashBank1 -FS08000000 -FL080000 -FF1NS800RT7xxx_FlashBank2 -FS18080000 -FL180000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM)) + 0 + + + + + + + + + + + $$Device:NS800RT7P65D-DHQFBY2$CMSIS\SVD\NS800RT7P65x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rt-thread + 1 + 0 + 0 + 1 + 1 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 3 + 0 + 0 + 0 + 1 + 1 + 8 + 1 + 0 + 0 + 0 + 4 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 1 + 1 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x20100000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x80000 + + + 1 + 0x8080000 + 0x80000 + + + 0 + 0x20100000 + 0x20000 + + + 0 + 0x20120000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 0 + 0x0 + 0x20000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 3 + 0 + 0 + 1 + 0 + 0 + 3 + 3 + 1 + 1 + 0 + 0 + 0 + + -Wno-tautological-constant-out-of-range-compare + NS800RT7P65X DUAL_CORE_ENABLE=0 SYSCLK_USE_PLL SYSCLK_SOURCE_USE_HXTL PLLCLK_SOURCE_USE_HXTL RT_USING_ARMLIBC, RT_USING_LIBC, NS800RT7P65X, USE_HAL_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND, __STDC_LIMIT_MACROS + + ..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\libc\posix\io\poll;applications;..\..\..\components\net\utest;.;..\..\..\components\drivers\include;..\..\..\libcpu\arm\common;..\..\..\components\drivers\phy;..\..\..\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\libc\compilers\common\include;..\..\..\components\libc\posix\ipc;..\..\..\components\libc\posix\io\epoll;..\libraries\HAL_Drivers\drivers;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\drivers\smp_call;..\libraries\HAL_Drivers;.\packages\novosns-series\NS800RT7XXX\StdDriver\Inc;..\..\..\components\drivers\include;..\..\..\libcpu\arm\cortex-m7;packages\CMSIS-Core-latest\Include;board;..\..\..\components\libc\posix\io\eventfd;.\packages\novosns-series\NS800RT7XXX\Device\Inc;.\packages\novosns-series\NS800RT7XXX\StdDriver\Inc\ti;..\..\..\components\drivers\can + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + Applications + + + main.c + 1 + applications\main.c + + + rt_ecap.c + 1 + .\applications\rt_ecap.c + + + rt_can.c + 1 + .\applications\rt_can.c + + + + + CPU + + + atomic_arm.c + 1 + ..\..\..\libcpu\arm\common\atomic_arm.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + + + cpu_cache.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m7\cpuport.c + + + + + DeviceDrivers + + + device.c + 1 + ..\..\..\components\drivers\core\device.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_comm.c + 1 + ..\..\..\components\drivers\ipc\completion_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_up.c + 1 + ..\..\..\components\drivers\ipc\completion_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + condvar.c + 1 + ..\..\..\components\drivers\ipc\condvar.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_pin.c + 1 + ..\..\..\components\drivers\pin\dev_pin.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_serial.c + 1 + ..\..\..\components\drivers\serial\dev_serial.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_can.c + 1 + ..\..\..\components\drivers\can\dev_can.c + + + + + Drivers + + + drv_uart.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_uart.c + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_gpio.c + + + drv_ecap.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_ecap.c + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + board.c + 1 + board\board.c + + + drv_can.c + 1 + ..\libraries\HAL_Drivers\drivers\drv_can.c + + + + + Finsh + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + msh_file.c + 1 + ..\..\..\components\finsh\msh_file.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + components.c + 1 + ..\..\..\src\components.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + cpu_up.c + 1 + ..\..\..\src\cpu_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + defunct.c + 1 + ..\..\..\src\defunct.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + object.c + 1 + ..\..\..\src\object.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_comm.c + 1 + ..\..\..\src\scheduler_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_up.c + 1 + ..\..\..\src\scheduler_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + + + Libc + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + cctype.c + 1 + ..\..\..\components\libc\compilers\common\cctype.c + + + cstdlib.c + 1 + ..\..\..\components\libc\compilers\common\cstdlib.c + + + cstring.c + 1 + ..\..\..\components\libc\compilers\common\cstring.c + + + ctime.c + 1 + ..\..\..\components\libc\compilers\common\ctime.c + + + cunistd.c + 1 + ..\..\..\components\libc\compilers\common\cunistd.c + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + + rt_vsnprintf_tiny.c + 1 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + rt_vsscanf.c + 1 + ..\..\..\src\klibc\rt_vsscanf.c + + + + + NS800RT7-CMSIS + + + system_NS800RT7xxx.c + 1 + .\packages\novosns-series\NS800RT7XXX\Device\Src\system_NS800RT7xxx.c + + + startup_NS800RT7xxx.s + 2 + .\packages\novosns-series\NS800RT7XXX\Device\Src\arm\startup_NS800RT7xxx.s + + + + + NS800RT7-HAL + + + crc.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\crc.c + + + debug.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\debug.c + + + flash.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flash.c + + + gpio.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\gpio.c + + + interrupt.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\interrupt.c + + + rcc.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\rcc.c + + + sram.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\sram.c + + + syscon.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\syscon.c + + + uart.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\uart.c + + + xbar.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\xbar.c + + + exti.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\exti.c + + + dmamux.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\dmamux.c + + + edma.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\edma.c + + + ecap.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\ecap.c + + + flexcan.c + 1 + .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flexcan.c + + + + + + + + + + + + + + + + + project + 1 + + + + +
diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h new file mode 100644 index 00000000000..805144164b6 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h @@ -0,0 +1,433 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +#define SOC_SERIES_NS800RT7 +#define SOC_NS800RT7P6XX +#define BOARD_NS800RT7P65X + +/* RT-Thread Kernel */ + +/* klibc options */ + +/* rt_vsnprintf options */ + +/* end of rt_vsnprintf options */ + +/* rt_vsscanf options */ + +/* end of rt_vsscanf options */ + +/* rt_memset options */ + +/* end of rt_memset options */ + +/* rt_memcpy options */ + +/* end of rt_memcpy options */ + +/* rt_memmove options */ + +/* end of rt_memmove options */ + +/* rt_memcmp options */ + +/* end of rt_memcmp options */ + +/* rt_strstr options */ + +/* end of rt_strstr options */ + +/* rt_strcasecmp options */ + +/* end of rt_strcasecmp options */ + +/* rt_strncpy options */ + +/* end of rt_strncpy options */ + +/* rt_strcpy options */ + +/* end of rt_strcpy options */ + +/* rt_strncmp options */ + +/* end of rt_strncmp options */ + +/* rt_strcmp options */ + +/* end of rt_strcmp options */ + +/* rt_strlen options */ + +/* end of rt_strlen options */ + +/* rt_strnlen options */ + +/* end of rt_strnlen options */ +/* end of klibc options */ +#define RT_NAME_MAX 12 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 + +/* kservice options */ + +/* end of kservice options */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart3" +#define RT_USING_CONSOLE_OUTPUT_CTL +#define RT_VER_NUM 0x50300 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_RB_BUFSZ 64 +#define RT_USING_CAN +#define RT_CANMSG_BOX_SZ 16 +#define RT_CANSND_BOX_NUM 1 +#define RT_CANSND_MSG_TIMEOUT 100 +#define RT_CAN_NB_TX_FIFO_SIZE 256 +#define RT_USING_HWCRYPTO +#define RT_HWCRYPTO_DEFAULT_NAME "hwcryto" +#define RT_HWCRYPTO_IV_MAX_SIZE 16 +#define RT_HWCRYPTO_KEYBIT_MAX_SIZE 256 +#define RT_USING_PIN +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +/* end of Utilities */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +#define PKG_USING_CMSIS_CORE +#define PKG_USING_CMSIS_CORE_LATEST_VERSION +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ + +/* WCH HAL & SDK Drivers */ + +/* end of WCH HAL & SDK Drivers */ + +/* AT32 HAL & SDK Drivers */ + +/* end of AT32 HAL & SDK Drivers */ + +/* HC32 DDL Drivers */ + +/* end of HC32 DDL Drivers */ + +/* NXP HAL & SDK Drivers */ + +/* end of NXP HAL & SDK Drivers */ + +/* NUVOTON Drivers */ + +/* end of NUVOTON Drivers */ + +/* GD32 Drivers */ + +/* end of GD32 Drivers */ + +/* HPMicro SDK */ + +/* end of HPMicro SDK */ + +/* FT32 HAL & SDK Drivers */ + +/* end of FT32 HAL & SDK Drivers */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_NS800_UART_TX_TIMEOUT 6000 +#define BSP_USING_UART1 +#define BSP_USING_UART3 +#define BSP_USING_ECAP +#define BSP_USING_ECAP1 +#define BSP_ECAP1_NAME "ecap1" +#define BSP_ECAP1_GPIO_NUM 16 +#define BSP_ECAP1_GPIO_MUX 0 +#define BSP_ECAP1_INPUT_XBAR 7 +#define BSP_ECAP1_INPUT_SOURCE 16 +#define BSP_USING_CAN +#define BSP_USING_CAN1 +/* end of On-chip Peripheral Drivers */ + +#endif diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py new file mode 100644 index 00000000000..c8ad62a6939 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py @@ -0,0 +1,189 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = '' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armcc' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'armclang': + PLATFORM = 'armclang' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' +else: + raise ValueError('Unsupported CROSS_TOOL: %s' % CROSS_TOOL) + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = os.getenv('RTT_BUILD', 'debug') + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + ' -DNS800RT7P65X' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=gnu99' + + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armcc': + # toolchains + CC = 'armcc' + CXX = 'armcc' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp' + CFLAGS = '-c ' + DEVICE + ' --apcs=interwork --c99' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + r' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rtthread.map --strict' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCC/lib' + + CFLAGS += ' -D__MICROLIB ' + AFLAGS += ' --pd "__MICROLIB SETA 1" ' + LFLAGS += ' --library_type=microlib ' + EXEC_PATH += '/ARM/ARMCC/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=gnu99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M7.fp.sp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-M7 ' + CFLAGS += ' -mcpu=cortex-M7 -mfpu=fpv5-d16 ' + CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' + CFLAGS += ' -gdwarf-3 -ffunction-sections ' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map ' + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O1' # armclang recommend + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=gnu99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +elif PLATFORM == 'iccarm': + # toolchains + CC = 'iccarm' + CXX = 'iccarm' + AS = 'iasmarm' + AR = 'iarchive' + LINK = 'ilinkarm' + TARGET_EXT = 'out' + + DEVICE = '-Dewarm' + + CFLAGS = DEVICE + CFLAGS += ' --diag_suppress Pa050' + CFLAGS += ' --no_cse' + CFLAGS += ' --no_unroll' + CFLAGS += ' --no_inline' + CFLAGS += ' --no_code_motion' + CFLAGS += ' --no_tbaa' + CFLAGS += ' --no_clustering' + CFLAGS += ' --no_scheduling' + CFLAGS += ' --endian=little' + CFLAGS += ' --cpu=Cortex-M7' + CFLAGS += ' -e' + CFLAGS += ' --fpu=VFPv5_sp' + CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"' + CFLAGS += ' --silent' + + AFLAGS = DEVICE + AFLAGS += ' -s+' + AFLAGS += ' -w+' + AFLAGS += ' -r' + AFLAGS += ' --cpu Cortex-M7' + AFLAGS += ' --fpu VFPv5_sp' + AFLAGS += ' -S' + + if BUILD == 'debug': + CFLAGS += ' --debug' + CFLAGS += ' -On' + else: + CFLAGS += ' -Oh' + + LFLAGS = ' --config "board/linker_scripts/link.icf"' + LFLAGS += ' --entry __iar_program_start' + + CXXFLAGS = CFLAGS + + EXEC_PATH = EXEC_PATH + '/arm/bin/' + POST_ACTION = 'ielftool --bin $TARGET rtthread.bin' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.ewp b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.ewp new file mode 100644 index 00000000000..1ca2a5511bd --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.ewp @@ -0,0 +1,2074 @@ + + + 3 + + rtthread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.eww b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.eww new file mode 100644 index 00000000000..bd036bb4c98 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvoptx b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvoptx new file mode 100644 index 00000000000..dc89326d3f7 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvoptx @@ -0,0 +1,184 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + rt-thread + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\build\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + ST-LINKIII-KEIL_SWO + -U0670FF495355878281171423 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 1 + 0 + 2 + 10000000 + + + + +
diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvprojx b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvprojx new file mode 100644 index 00000000000..27e84d34c00 --- /dev/null +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/template.uvprojx @@ -0,0 +1,392 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + rt-thread + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + STM32H743ZITx + STMicroelectronics + Keil.STM32H7xx_DFP.4.1.3 + https://www.keil.com/pack/ + IRAM(0x20000000-0x2001FFFF) IRAM2(0x24000000-0x2407FFFF) IROM(0x8000000-0x81FFFFF) CLOCK(12000000) FPU3(DFPU) CPUTYPE("Cortex-M7") ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM)) + 0 + $$Device:STM32F746NGHx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F746NGHx$CMSIS\SVD\STM32F7x.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\build\ + rt-thread + 1 + 0 + 0 + 1 + 0 + .\build\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + fromelf --bin !L --output rtthread.bin + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM7 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM7 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M7" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 1 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x20000 + + + 1 + 0x8000000 + 0x200000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x100000 + + + 1 + 0x200000 + 0x100000 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20010000 + 0x40000 + + + 0 + 0x20000000 + 0x10000 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 0 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + .\board\linker_scripts\link.sct + + + + + + + + + + + + + + + + + +
diff --git a/bsp/novosns/ns800/tools/sdk_dist.py b/bsp/novosns/ns800/tools/sdk_dist.py new file mode 100644 index 00000000000..7ef49f3a2ba --- /dev/null +++ b/bsp/novosns/ns800/tools/sdk_dist.py @@ -0,0 +1,23 @@ +import os +import sys +import shutil + +cwd_path = os.getcwd() +sys.path.append(os.path.join(os.path.dirname(cwd_path), 'rt-thread', 'tools')) + + +# BSP dist function +def dist_do_building(BSP_ROOT, dist_dir): + from mkdist import bsp_copy_files + import rtconfig + + print("=> copy stm32 bsp library") + library_dir = os.path.join(dist_dir, 'libraries') + library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries') + if rtconfig.BSP_LIBRARY_TYPE is not None: + bsp_copy_files(os.path.join(library_path, rtconfig.BSP_LIBRARY_TYPE), + os.path.join(library_dir, rtconfig.BSP_LIBRARY_TYPE)) + + print("=> copy bsp drivers") + bsp_copy_files(os.path.join(library_path, 'HAL_Drivers'), os.path.join(library_dir, 'HAL_Drivers')) + shutil.copyfile(os.path.join(library_path, 'Kconfig'), os.path.join(library_dir, 'Kconfig')) From fabf367cf042a41998ae49f0ffe9f60e9902d3ab Mon Sep 17 00:00:00 2001 From: rcitach Date: Sun, 10 May 2026 11:31:10 +0000 Subject: [PATCH 02/11] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A4=96=E8=AE=BE?= =?UTF-8?q?=E9=A9=B1=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libraries/HAL_Drivers/drivers/drv_can.c | 32 ++++++- .../libraries/HAL_Drivers/drivers/drv_ecap.c | 85 +++---------------- .../libraries/HAL_Drivers/drivers/drv_gpio.c | 8 +- .../libraries/HAL_Drivers/drivers/drv_uart.c | 79 ++++++++++++----- 4 files changed, 109 insertions(+), 95 deletions(-) diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c index b3195e24cfa..9bf4aac2737 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c @@ -176,6 +176,34 @@ static FLEXCANDRV_DataLenCodeType ns800_can_len_to_dlc(rt_uint8_t len) return DLC_BYTE_64; } +static rt_uint8_t ns800_can_dlc_to_len(rt_uint8_t dlc, rt_bool_t is_canfd) +{ + if (!is_canfd) + { + return (dlc <= 8U) ? dlc : 8U; + } + + switch (dlc) + { + case DLC_BYTE_12: + return 12U; + case DLC_BYTE_16: + return 16U; + case DLC_BYTE_20: + return 20U; + case DLC_BYTE_24: + return 24U; + case DLC_BYTE_32: + return 32U; + case DLC_BYTE_48: + return 48U; + case DLC_BYTE_64: + return 64U; + default: + return (dlc <= 8U) ? dlc : 8U; + } +} + static rt_uint8_t ns800_can_msg_buf_size(rt_bool_t use_canfd) { return use_canfd ? FLEXCANDRV_MB_SIZE_BYTE_64 : FLEXCANDRV_MB_SIZE_BYTE_8; @@ -711,7 +739,6 @@ static rt_ssize_t _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t pmsg = (struct rt_can_msg *)buf; pmsg->id = drv->rx_cache[0].msgId; - pmsg->len = drv->rx_cache[0].dlc; pmsg->ide = drv->rx_ide[0]; pmsg->rtr = drv->rx_rtr[0]; pmsg->hdr_index = 0; @@ -719,6 +746,9 @@ static rt_ssize_t _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t #ifdef RT_CAN_USING_CANFD pmsg->fd_frame = drv->rx_cache[0].isFd ? 1U : 0U; pmsg->brs = drv->rx_brs[0]; + pmsg->len = ns800_can_dlc_to_len(drv->rx_cache[0].dlc, drv->rx_cache[0].isFd ? RT_TRUE : RT_FALSE); +#else + pmsg->len = ns800_can_dlc_to_len(drv->rx_cache[0].dlc, RT_FALSE); #endif rt_memcpy(pmsg->data, drv->rx_cache[0].data, pmsg->len); diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c index 44fb4c72a5f..59eabba12f0 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c @@ -18,69 +18,21 @@ #define DBG_LVL DBG_INFO #include -void ECAP1_IRQHandler (void); -static void rt_hw_ecap1_isr(void); - -#ifndef BSP_ECAP1_NAME -#define BSP_ECAP1_NAME "ecap1" -#endif -#ifndef BSP_ECAP1_GPIO_NUM -#define BSP_ECAP1_GPIO_NUM 16 -#endif -#ifndef BSP_ECAP1_GPIO_MUX -#define BSP_ECAP1_GPIO_MUX 0 -#endif -#ifndef BSP_ECAP1_INPUT_XBAR -#define BSP_ECAP1_INPUT_XBAR 7 -#endif -#ifndef BSP_ECAP1_INPUT_SOURCE -#define BSP_ECAP1_INPUT_SOURCE 16 -#endif - -static GPIO_TypeDef *ns800_ecap_gpio_port(rt_uint32_t gpio_num) -{ - if (gpio_num <= 31U) return GPIOA; - if (gpio_num <= 63U) return GPIOB; - if (gpio_num <= 95U) return GPIOC; - if (gpio_num <= 127U) return GPIOD; - if (gpio_num <= 159U) return GPIOE; - if (gpio_num <= 191U) return GPIOF; - if (gpio_num <= 223U) return GPIOG; - return GPIOH; -} - -static GPIO_PinNum ns800_ecap_gpio_pin(rt_uint32_t gpio_num) -{ - return (GPIO_PinNum)(gpio_num % 32U); -} - -static XBAR_InputNum ns800_ecap_xbar_input(rt_uint32_t input_idx) +static const struct rt_ecap_config ecap1_config = { - return (XBAR_InputNum)(input_idx - 1U); -} - -static rt_uint32_t ns800_ecap_input_sel(rt_uint32_t input_idx) -{ - return (rt_uint32_t)(input_idx - 1U); -} - -#ifdef BSP_USING_ECAP1 -static struct rt_ecap_config ecap1_config = -{ - .name = BSP_ECAP1_NAME, + .name = "ecap1", .instance = ECAP1, .irq_type = ECAP1_IRQn, - .input_xbar = (rt_uint32_t)XBAR_INPUT7, - .ecap_input = (rt_uint32_t)ECAP_INPUT_XBAR_INPUT7, - .input_source = BSP_ECAP1_INPUT_SOURCE, + .input_xbar = XBAR_INPUT7, + .input_source = GPIO_PIN_16, .gpio_port = GPIOA, .gpio_pin = GPIO_PIN_16, - .gpio_mux = (GPIO_AltFunc)BSP_ECAP1_GPIO_MUX, - .irq_handler = ECAP1_IRQHandler, + .gpio_mux = ALT0_FUNCTION, }; static struct rt_ecap_device ecap1_dev; -#endif + +void ECAP1_IRQHandler (void); /* * @@ -148,7 +100,7 @@ static void ecap_hw_init (const struct rt_ecap_config *config) ECAP_enableCounterResetOnEvent(config->instance, ECAP_EVENT_3); ECAP_enableCounterResetOnEvent(config->instance, ECAP_EVENT_4); - ECAP_selectECAPInput(config->instance, config->ecap_input); + ECAP_selectECAPInput(config->instance, ECAP_INPUT_XBAR_INPUT7); ECAP_setPhaseShiftCount(config->instance, 0U); ECAP_enableLoadCounter(config->instance); @@ -263,7 +215,7 @@ static rt_err_t rt_ecap_open (rt_device_t dev, rt_uint16_t oflag) ECAP_reArm(ecap->config->instance); ECAP_enableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); - Interrupt_register(ecap->config->irq_type, ecap->config->irq_handler); + Interrupt_register(ecap->config->irq_type, &ECAP1_IRQHandler); Interrupt_enable(ecap->config->irq_type); } @@ -397,7 +349,7 @@ static rt_err_t rt_ecap_control (rt_device_t dev, int cmd, void *args) case ECAP_CMD_ENABLE_IRQ: ECAP_enableInterrupt(ecap->config->instance, ECAP_ECEINT_CEVT4_M); - Interrupt_register(ecap->config->irq_type, ecap->config->irq_handler); + Interrupt_register(ecap->config->irq_type, &ECAP1_IRQHandler); Interrupt_enable(ecap->config->irq_type); break; @@ -463,12 +415,6 @@ int rt_hw_ecap_init (void) { rt_err_t ret; -#ifdef BSP_USING_ECAP1 - ecap1_config.input_xbar = (rt_uint32_t)ns800_ecap_xbar_input(BSP_ECAP1_INPUT_XBAR); - ecap1_config.ecap_input = ns800_ecap_input_sel(BSP_ECAP1_INPUT_XBAR); - ecap1_config.gpio_port = ns800_ecap_gpio_port(BSP_ECAP1_GPIO_NUM); - ecap1_config.gpio_pin = ns800_ecap_gpio_pin(BSP_ECAP1_GPIO_NUM); - ret = rt_hw_ecap_register(&ecap1_dev, &ecap1_config); if (ret != RT_EOK) @@ -478,23 +424,19 @@ int rt_hw_ecap_init (void) } LOG_I("ecap1 register done"); -#else - ret = -RT_ENOSYS; -#endif - return ret; + return RT_EOK; } INIT_DEVICE_EXPORT(rt_hw_ecap_init); /* * */ -static void rt_hw_ecap1_isr(void) +void rt_hw_ecap1_isr(void) { struct rt_ecap_device *ecap; struct rt_ecap_capture cap; -#ifdef BSP_USING_ECAP1 ecap = &ecap1_dev; rt_interrupt_enter(); @@ -525,7 +467,6 @@ static void rt_hw_ecap1_isr(void) } rt_interrupt_leave(); -#endif } void ECAP1_IRQHandler (void) @@ -534,4 +475,4 @@ void ECAP1_IRQHandler (void) } -#endif //#if defined(BSP_USING_ECAP) +#endif //#if defined(BSP_USING_ECAP) \ No newline at end of file diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c index 9bbd865e9ee..21b239f0cb1 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c @@ -282,6 +282,7 @@ static rt_base_t ns800_pin_get(const char *name) int pin_index; uint8_t port_index; GPIO_TypeDef *port = RT_NULL; + char *endptr; if ((name == RT_NULL) || (name[0] == '\0')) { @@ -299,7 +300,12 @@ static rt_base_t ns800_pin_get(const char *name) goto out; } - pin_index = atoi(&name[3]); + pin_index = (int)strtol(&name[3], &endptr, 10); + if ((endptr == &name[3]) || (*endptr != '\0')) + { + goto out; + } + if ((pin_index < 0) || (pin_index > 31)) { goto out; diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c index fe1428229cd..ecb95242600 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c @@ -31,12 +31,18 @@ #endif #ifdef RT_USING_SERIAL_V2 -#define NS800_UART_CONFIG_V2(_rxbuf, _txbuf) \ +#define NS800_UART_BUF_CONFIG(_rxbuf, _txbuf) \ .rx_bufsz = (_rxbuf), \ .tx_bufsz = (_txbuf), #define NS800_UART_DEFAULT_TX_TIMEOUT 0U #else -#define NS800_UART_CONFIG_V2(_rxbuf, _txbuf) +#ifndef RT_SERIAL_RB_BUFSZ +#define RT_SERIAL_RB_BUFSZ 64 +#endif + +#define NS800_UART_BUF_CONFIG(_rxbuf, _txbuf) \ + .rx_bufsz = RT_SERIAL_RB_BUFSZ, \ + .tx_bufsz = 0U, #define NS800_UART_DEFAULT_TX_TIMEOUT BSP_NS800_UART_TX_TIMEOUT #endif @@ -87,13 +93,11 @@ static struct ns800_uart_config uart_config[] = .tx_port = GPIOA, .tx_pin = GPIO_PIN_12, .tx_mux = ALT6_FUNCTION, - .tx_pad = GPIO_PIN_TYPE_PULLUP, - .tx_direction = GPIO_DIR_MODE_IN, + .tx_pad = GPIO_PIN_TYPE_STD, + .tx_direction = GPIO_DIR_MODE_OUT, .tx_drive_max = RT_FALSE, .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, -#ifdef RT_USING_SERIAL_V2 - NS800_UART_CONFIG_V2(BSP_UART1_RX_BUFSIZE, BSP_UART1_TX_BUFSIZE) -#endif + NS800_UART_BUF_CONFIG(BSP_UART1_RX_BUFSIZE, BSP_UART1_TX_BUFSIZE) }, #endif #ifdef BSP_USING_UART2 @@ -116,9 +120,7 @@ static struct ns800_uart_config uart_config[] = .tx_direction = GPIO_DIR_MODE_OUT, .tx_drive_max = RT_TRUE, .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, -#ifdef RT_USING_SERIAL_V2 - NS800_UART_CONFIG_V2(BSP_UART2_RX_BUFSIZE, BSP_UART2_TX_BUFSIZE) -#endif + NS800_UART_BUF_CONFIG(BSP_UART2_RX_BUFSIZE, BSP_UART2_TX_BUFSIZE) }, #endif #ifdef BSP_USING_UART3 @@ -141,9 +143,7 @@ static struct ns800_uart_config uart_config[] = .tx_direction = GPIO_DIR_MODE_OUT, .tx_drive_max = RT_TRUE, .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, -#ifdef RT_USING_SERIAL_V2 - NS800_UART_CONFIG_V2(BSP_UART3_RX_BUFSIZE, BSP_UART3_TX_BUFSIZE) -#endif + NS800_UART_BUF_CONFIG(BSP_UART3_RX_BUFSIZE, BSP_UART3_TX_BUFSIZE) }, #endif #ifdef BSP_USING_UART4 @@ -166,9 +166,7 @@ static struct ns800_uart_config uart_config[] = .tx_direction = GPIO_DIR_MODE_OUT, .tx_drive_max = RT_TRUE, .tx_block_timeout = NS800_UART_DEFAULT_TX_TIMEOUT, -#ifdef RT_USING_SERIAL_V2 - NS800_UART_CONFIG_V2(BSP_UART4_RX_BUFSIZE, BSP_UART4_TX_BUFSIZE) -#endif + NS800_UART_BUF_CONFIG(BSP_UART4_RX_BUFSIZE, BSP_UART4_TX_BUFSIZE) }, #endif }; @@ -226,6 +224,15 @@ static void ns800_uart_apply_runtime_cfg(struct ns800_uart *uart, struct serial_ uart->handle.parity = cfg->parity; } +static void ns800_uart_clear_errors(UART_TypeDef *instance) +{ + UART_clearErrorFlags(instance, + UART_STAT_OR_M | + UART_STAT_NF_M | + UART_STAT_FE_M | + UART_STAT_PF_M); +} + static rt_err_t ns800_configure(struct rt_serial_device *serial, struct serial_configure *cfg) { struct ns800_uart *uart; @@ -270,14 +277,27 @@ static rt_err_t ns800_configure(struct rt_serial_device *serial, struct serial_c break; } + ns800_uart_clear_errors(uart->handle.Instance); + +#ifdef RT_USING_SERIAL_V2 UART_enableTxFifo(uart->handle.Instance); UART_resetTxFifo(uart->handle.Instance); UART_setTxFifoWatermark(uart->handle.Instance, UART_FIFO_TX6); UART_enableRxFifo(uart->handle.Instance); UART_resetRxFifo(uart->handle.Instance); - UART_setRxFifoWatermark(uart->handle.Instance, UART_FIFO_RX6); - UART_setRxIdleCharacter(uart->handle.Instance, UART_IDLE_CHARACTER_CNT1); + UART_setRxFifoWatermark(uart->handle.Instance, UART_FIFO_RX1); + UART_setRxIdleCharacter(uart->handle.Instance, UART_IDLE_CHARACTER_CNT0); +#else + /* + * RT-Thread serial v1 consumes RX data byte-by-byte from getc(). + * Keep the hardware in the simplest non-FIFO mode to avoid RDRF + * reasserting on idle-partial FIFO conditions. + */ + UART_disableTxFifo(uart->handle.Instance); + UART_disableRxFifo(uart->handle.Instance); + UART_setRxIdleCharacter(uart->handle.Instance, UART_IDLE_CHARACTER_CNT0); +#endif UART_enableTxModule(uart->handle.Instance); UART_enableRxModule(uart->handle.Instance); @@ -367,7 +387,16 @@ static int ns800_putc(struct rt_serial_device *serial, char c) uart = rt_container_of(serial, struct ns800_uart, serial); block_timeout = uart->tx_block_timeout; - uart->handle.Instance->DATA.WORDVAL = c; + while (!UART_isSpaceAvailable(uart->handle.Instance)) + { + if (block_timeout-- == 0U) + { + return -1; + } + } + + UART_writeChar(uart->handle.Instance, (rt_uint8_t)c); + while ((uart->handle.Instance->STAT.BIT.TC == false) && (--block_timeout != 0U)) { } @@ -382,9 +411,9 @@ static int ns800_getc(struct rt_serial_device *serial) RT_ASSERT(serial != RT_NULL); uart = rt_container_of(serial, struct ns800_uart, serial); - if (UART_getRxFifoStatus(uart->handle.Instance) > UART_FIFO_RX0) + if (UART_isDataAvailable(uart->handle.Instance)) { - return (int)uart->handle.Instance->DATA.WORDVAL; + return (int)UART_readChar(uart->handle.Instance); } return -1; @@ -397,6 +426,14 @@ static void uart_isr(struct rt_serial_device *serial) RT_ASSERT(serial != RT_NULL); uart = rt_container_of(serial, struct ns800_uart, serial); + if (UART_getStatusFlag(uart->handle.Instance, UART_RX_OVERRUN) || + UART_getStatusFlag(uart->handle.Instance, UART_NOISE_DETECT) || + UART_getStatusFlag(uart->handle.Instance, UART_FRAME_ERR) || + UART_getStatusFlag(uart->handle.Instance, UART_PARITY_ERR)) + { + ns800_uart_clear_errors(uart->handle.Instance); + } + if (UART_getStatusFlag(uart->handle.Instance, UART_RX_DATA_REG_FULL)) { rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); From 1cc374a622f7124eb5a017242e2a268d5329f6bd Mon Sep 17 00:00:00 2001 From: rcitach Date: Sun, 10 May 2026 11:31:23 +0000 Subject: [PATCH 03/11] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20menuconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ns800/ns800rt7p65-nssinepad/.config | 22 ++++--------------- .../ns800/ns800rt7p65-nssinepad/rtconfig.h | 9 ++------ 2 files changed, 6 insertions(+), 25 deletions(-) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config index 1deeaa74af3..8878aee6444 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config @@ -109,7 +109,7 @@ CONFIG_BOARD_NS800RT7P65X=y # end of rt_strnlen options # end of klibc options -CONFIG_RT_NAME_MAX=12 +CONFIG_RT_NAME_MAX=16 # CONFIG_RT_USING_ARCH_DATA_TYPE is not set # CONFIG_RT_USING_NANO is not set # CONFIG_RT_USING_AMP is not set @@ -179,7 +179,7 @@ CONFIG_RT_USING_DEVICE=y # CONFIG_RT_USING_THREADSAFE_PRINTF is not set CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 -CONFIG_RT_CONSOLE_DEVICE_NAME="uart3" +CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" CONFIG_RT_USING_CONSOLE_OUTPUT_CTL=y CONFIG_RT_VER_NUM=0x50300 # CONFIG_RT_USING_STDC_ATOMIC is not set @@ -266,21 +266,7 @@ CONFIG_RT_CAN_NB_TX_FIFO_SIZE=256 # CONFIG_RT_USING_SENSOR is not set # CONFIG_RT_USING_TOUCH is not set # CONFIG_RT_USING_LCD is not set -CONFIG_RT_USING_HWCRYPTO=y -CONFIG_RT_HWCRYPTO_DEFAULT_NAME="hwcryto" -CONFIG_RT_HWCRYPTO_IV_MAX_SIZE=16 -CONFIG_RT_HWCRYPTO_KEYBIT_MAX_SIZE=256 -# CONFIG_RT_HWCRYPTO_USING_GCM is not set -# CONFIG_RT_HWCRYPTO_USING_AES is not set -# CONFIG_RT_HWCRYPTO_USING_DES is not set -# CONFIG_RT_HWCRYPTO_USING_3DES is not set -# CONFIG_RT_HWCRYPTO_USING_RC4 is not set -# CONFIG_RT_HWCRYPTO_USING_MD5 is not set -# CONFIG_RT_HWCRYPTO_USING_SHA1 is not set -# CONFIG_RT_HWCRYPTO_USING_SHA2 is not set -# CONFIG_RT_HWCRYPTO_USING_RNG is not set -# CONFIG_RT_HWCRYPTO_USING_CRC is not set -# CONFIG_RT_HWCRYPTO_USING_BIGNUM is not set +# CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_WIFI is not set # CONFIG_RT_USING_BLK is not set # CONFIG_RT_USING_REGULATOR is not set @@ -1455,7 +1441,7 @@ CONFIG_BSP_USING_UART=y CONFIG_BSP_NS800_UART_TX_TIMEOUT=6000 CONFIG_BSP_USING_UART1=y # CONFIG_BSP_USING_UART2 is not set -CONFIG_BSP_USING_UART3=y +# CONFIG_BSP_USING_UART3 is not set # CONFIG_BSP_USING_UART4 is not set CONFIG_BSP_USING_ECAP=y CONFIG_BSP_USING_ECAP1=y diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h index 805144164b6..a27d6be2b08 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h @@ -65,7 +65,7 @@ /* end of rt_strnlen options */ /* end of klibc options */ -#define RT_NAME_MAX 12 +#define RT_NAME_MAX 16 #define RT_CPUS_NR 1 #define RT_ALIGN_SIZE 8 #define RT_THREAD_PRIORITY_32 @@ -105,7 +105,7 @@ #define RT_USING_DEVICE #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 -#define RT_CONSOLE_DEVICE_NAME "uart3" +#define RT_CONSOLE_DEVICE_NAME "uart1" #define RT_USING_CONSOLE_OUTPUT_CTL #define RT_VER_NUM 0x50300 #define RT_BACKTRACE_LEVEL_MAX_NR 32 @@ -148,10 +148,6 @@ #define RT_CANSND_BOX_NUM 1 #define RT_CANSND_MSG_TIMEOUT 100 #define RT_CAN_NB_TX_FIFO_SIZE 256 -#define RT_USING_HWCRYPTO -#define RT_HWCRYPTO_DEFAULT_NAME "hwcryto" -#define RT_HWCRYPTO_IV_MAX_SIZE 16 -#define RT_HWCRYPTO_KEYBIT_MAX_SIZE 256 #define RT_USING_PIN /* end of Device Drivers */ @@ -418,7 +414,6 @@ #define BSP_USING_UART #define BSP_NS800_UART_TX_TIMEOUT 6000 #define BSP_USING_UART1 -#define BSP_USING_UART3 #define BSP_USING_ECAP #define BSP_USING_ECAP1 #define BSP_ECAP1_NAME "ecap1" From 460043330fc2448dc619163d253a3cd5db233a38 Mon Sep 17 00:00:00 2001 From: rcitach Date: Sun, 10 May 2026 12:19:47 +0000 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../libraries/HAL_Drivers/drivers/drv_can.c | 1111 ++++++----------- .../ns800/ns800rt7p65-nssinepad/board/Kconfig | 39 - 2 files changed, 401 insertions(+), 749 deletions(-) diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c index 9bf4aac2737..ed13e75638d 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c @@ -13,9 +13,9 @@ * 2019-06-17 YLZ port to new STM32F1xx HAL V1.1.3. * 2021-02-02 YuZhe XU fix bug in filter config * 2021-8-25 SVCHAO The baud rate is configured according to the different APB1 frequencies. - * f4-series only. + f4-series only. * 2025-09-20 wdfk_prog Implemented sendmsg_nonblocking op to support framework's async TX. - * 2026-05-10 Codex Reworked driver around BSP CAN/CANFD config selection. + * 2026-02-02 wdfk_prog Drain multiple RX frames per ISR with a bounded limit. */ #include "drv_can.h" @@ -25,940 +25,629 @@ #define LOG_TAG "drv_can" #include -#define CAN_TX_MB_INDEX 0U -#define CAN_RX_MB_INDEX 1U -#define CAN_MSG_OBJ_NUM 2U -#define RX_MB_COUNT 1U -struct ns800rt7_can_hw_config -{ - const char *name; - FLEXCANREG_TypeDef *instance; - IRQn_Type irqn1; - IRQn_Type irqn2; - GPIO_TypeDef *tx_port; - GPIO_PinNum tx_pin; - GPIO_AltFunc tx_mux; - GPIO_TypeDef *rx_port; - GPIO_PinNum rx_pin; - GPIO_AltFunc rx_mux; - uint8_t can_instance_idx; - rt_bool_t support_canfd; -}; +#define RX_MB_COUNT (1) +static FLEXCANDRV_MsgObjType frame[RX_MB_COUNT]; /* one frame buffer per RX MB */ + +void CAN_Handler(void); +void CAN_Err_Handler(void); -typedef struct -{ - ns800rt7_can base; - const struct ns800rt7_can_hw_config *hw; - FLEXCANDRV_MsgObjType rx_cache[RX_MB_COUNT]; - rt_uint8_t rx_ide[RX_MB_COUNT]; - rt_uint8_t rx_rtr[RX_MB_COUNT]; -#ifdef RT_CAN_USING_CANFD - rt_uint8_t rx_brs[RX_MB_COUNT]; -#endif -} ns800rt7_can_device; -static void ns800_can_isr_txrx(ns800rt7_can_device *drv); -static void ns800_can_isr_err(ns800rt7_can_device *drv); +static const struct ns800rt7_baud_rate_tab can_baud_rate_tab[] = +{ + {CAN1MBaud, 1000000}, + {CAN800kBaud, 800000}, + {CAN500kBaud, 500000}, + {CAN250kBaud, 250000}, + {CAN125kBaud, 125000}, + {CAN100kBaud, 100000}, + {CAN50kBaud, 50000}, + {CAN20kBaud, 20000}, + {CAN10kBaud, 10000} +}; #ifdef BSP_USING_CAN1 -void CAN1_1_IRQHandler(void); -void CAN1_2_IRQHandler(void); -static const struct ns800rt7_can_hw_config can1_hw = +static ns800rt7_can drv_can1 = { .name = "can1", - .instance = (FLEXCANREG_TypeDef *)CAN1, + .CanHandle.flexCanReg = (FLEXCANREG_TypeDef *)CAN1, .irqn1 = CAN1_1_IRQn, .irqn2 = CAN1_2_IRQn, - .tx_port = GPIOA, - .tx_pin = GPIO_PIN_4, - .tx_mux = ALT6_FUNCTION, - .rx_port = GPIOA, - .rx_pin = GPIO_PIN_5, - .rx_mux = ALT6_FUNCTION, - .can_instance_idx = 0U, - .support_canfd = RT_FALSE, -}; -static ns800rt7_can_device can1_dev = -{ - .base = - { - .name = "can1", - .irqn1 = CAN1_1_IRQn, - .irqn2 = CAN1_2_IRQn, - }, - .hw = &can1_hw, }; #endif #ifdef BSP_USING_CANFD1 -void CANFD1_1_IRQHandler(void); -void CANFD1_2_IRQHandler(void); -static const struct ns800rt7_can_hw_config canfd1_hw = +static ns800rt7_can drv_can1 = { .name = "canfd1", - .instance = (FLEXCANREG_TypeDef *)CANFD1, + .CanHandle.flexCanReg = (FLEXCANREG_TypeDef *)CANFD1, .irqn1 = CANFD1_1_IRQn, .irqn2 = CANFD1_2_IRQn, - .tx_port = GPIOA, - .tx_pin = GPIO_PIN_4, - .tx_mux = ALT9_FUNCTION, - .rx_port = GPIOA, - .rx_pin = GPIO_PIN_10, - .rx_mux = ALT9_FUNCTION, - .can_instance_idx = 1U, - .support_canfd = RT_TRUE, -}; -static ns800rt7_can_device canfd1_dev = -{ - .base = - { - .name = "canfd1", - .irqn1 = CANFD1_1_IRQn, - .irqn2 = CANFD1_2_IRQn, - }, - .hw = &canfd1_hw, }; #endif #ifdef BSP_USING_CANFD2 -void CANFD2_1_IRQHandler(void); -void CANFD2_2_IRQHandler(void); -static const struct ns800rt7_can_hw_config canfd2_hw = +static ns800rt7_can drv_can1 = { .name = "canfd2", - .instance = (FLEXCANREG_TypeDef *)CANFD2, + .CanHandle.flexCanReg = (FLEXCANREG_TypeDef *)CANFD2, .irqn1 = CANFD2_1_IRQn, .irqn2 = CANFD2_2_IRQn, - .tx_port = GPIOB, - .tx_pin = GPIO_PIN_9, - .tx_mux = ALT5_FUNCTION, - .rx_port = GPIOB, - .rx_pin = GPIO_PIN_8, - .rx_mux = ALT5_FUNCTION, - .can_instance_idx = 1U, - .support_canfd = RT_TRUE, -}; -static ns800rt7_can_device canfd2_dev = -{ - .base = - { - .name = "canfd2", - .irqn1 = CANFD2_1_IRQn, - .irqn2 = CANFD2_2_IRQn, - }, - .hw = &canfd2_hw, }; #endif -static const struct ns800rt7_baud_rate_tab can_baud_rate_tab[] = +static void _can_gpio_init(void) { - {CAN1MBaud, CAN1MBaud}, - {CAN800kBaud, CAN800kBaud}, - {CAN500kBaud, CAN500kBaud}, - {CAN250kBaud, CAN250kBaud}, - {CAN125kBaud, CAN125kBaud}, - {CAN100kBaud, CAN100kBaud}, - {CAN50kBaud, CAN50kBaud}, - {CAN20kBaud, CAN20kBaud}, - {CAN10kBaud, CAN10kBaud}, -}; - -static FLEXCANDRV_DataLenCodeType ns800_can_len_to_dlc(rt_uint8_t len) -{ - if (len <= 8U) return (FLEXCANDRV_DataLenCodeType)len; - if (len <= 12U) return DLC_BYTE_12; - if (len <= 16U) return DLC_BYTE_16; - if (len <= 20U) return DLC_BYTE_20; - if (len <= 24U) return DLC_BYTE_24; - if (len <= 32U) return DLC_BYTE_32; - if (len <= 48U) return DLC_BYTE_48; - return DLC_BYTE_64; -} - -static rt_uint8_t ns800_can_dlc_to_len(rt_uint8_t dlc, rt_bool_t is_canfd) -{ - if (!is_canfd) - { - return (dlc <= 8U) ? dlc : 8U; - } - - switch (dlc) - { - case DLC_BYTE_12: - return 12U; - case DLC_BYTE_16: - return 16U; - case DLC_BYTE_20: - return 20U; - case DLC_BYTE_24: - return 24U; - case DLC_BYTE_32: - return 32U; - case DLC_BYTE_48: - return 48U; - case DLC_BYTE_64: - return 64U; - default: - return (dlc <= 8U) ? dlc : 8U; - } -} - -static rt_uint8_t ns800_can_msg_buf_size(rt_bool_t use_canfd) -{ - return use_canfd ? FLEXCANDRV_MB_SIZE_BYTE_64 : FLEXCANDRV_MB_SIZE_BYTE_8; -} - -static rt_bool_t ns800_can_is_supported_baud(rt_uint32_t baud) -{ - rt_size_t i; - - for (i = 0; i < sizeof(can_baud_rate_tab) / sizeof(can_baud_rate_tab[0]); i++) - { - if (can_baud_rate_tab[i].baud_rate == baud) - { - return RT_TRUE; - } - } - - return RT_FALSE; +#ifdef BSP_USING_CAN1 + GPIO_setAnalogMode(GPIO_4, GPIO_ANALOG_DISABLED); + GPIO_setAnalogMode(GPIO_10, GPIO_ANALOG_DISABLED); + GPIO_setPinConfig(GPIO_4_CANFD1_TX); + GPIO_setPinConfig(GPIO_10_CANFD1_RX); +#endif + +#ifdef BSP_USING_CANFD1 + GPIO_setAnalogMode(GPIO_4, GPIO_ANALOG_DISABLED); + GPIO_setAnalogMode(GPIO_10, GPIO_ANALOG_DISABLED); + GPIO_setPinConfig(GPIO_4_CANFD1_TX); + GPIO_setPinConfig(GPIO_10_CANFD1_RX); +#endif + +#ifdef BSP_USING_CANFD2 + GPIO_setAnalogMode(GPIO_4, GPIO_ANALOG_DISABLED); + GPIO_setAnalogMode(GPIO_10, GPIO_ANALOG_DISABLED); + GPIO_setPinConfig(GPIO_4_CANFD1_TX); + GPIO_setPinConfig(GPIO_10_CANFD1_RX); +#endif } -static void ns800_can_gpio_init(const struct ns800rt7_can_hw_config *hw) +static void _can_clock_init(void) { - RT_ASSERT(hw != RT_NULL); - - GPIO_setPinConfig(hw->tx_port, hw->tx_pin, hw->tx_mux); - GPIO_setAnalogMode(hw->tx_port, hw->tx_pin, GPIO_ANALOG_DISABLED); - GPIO_setPadConfig(hw->tx_port, hw->tx_pin, GPIO_PIN_TYPE_STD); - GPIO_setQualificationMode(hw->tx_port, hw->tx_pin, GPIO_QUAL_SYNC); - GPIO_setDirectionMode(hw->tx_port, hw->tx_pin, GPIO_DIR_MODE_OUT); - - GPIO_setPinConfig(hw->rx_port, hw->rx_pin, hw->rx_mux); - GPIO_setAnalogMode(hw->rx_port, hw->rx_pin, GPIO_ANALOG_DISABLED); - GPIO_setPadConfig(hw->rx_port, hw->rx_pin, GPIO_PIN_TYPE_PULLUP); - GPIO_setQualificationMode(hw->rx_port, hw->rx_pin, GPIO_QUAL_SYNC); - GPIO_setDirectionMode(hw->rx_port, hw->rx_pin, GPIO_DIR_MODE_IN); -} + /* unlock RCC register access */ + RCC_unlockRccRegister(); -static void ns800_can_wait_hxtl_ready(void) -{ - uint32_t wait_time = 5000000U; +#if CAN_CLOCK_SELECTION == CAN_USING_EXTERNAL_OSC + /* setup external OSC if selected */ + /* configure HXTL */ WRITE_REG(RCC->HXTLCR.WORDVAL, (HXTL_CONFIG | RCC_HXTLCR_KEY)); RCC_enableHxtl(); RCC_disableHxtlBypass(); - while ((RCC_readHxtlRdyFlag() != 1U) && (--wait_time != 0U)) + uint32_t wait_time = 5000000; + while ((RCC_readHxtlRdyFlag() != 1) && (--wait_time)); + while (wait_time == 0) { } -} - -static void ns800_can_clock_init(const struct ns800rt7_can_hw_config *hw) -{ - RT_ASSERT(hw != RT_NULL); - - RCC_unlockRccRegister(); - ns800_can_wait_hxtl_ready(); + /* enable MIRC2 and HXTL kernal func */ RCC_enablePeriphKernalUseMirc2(); RCC_enablePeriphKernalUseHxtl(); + /* select the HXTL as the working clocks for CANFD1 */ + RCC_selectCanfdOscClkSource(RCC_CANFD1SEL, RCC_CANFD_OSCCLK_SEL_HXTLKER); +#elif CAN_CLOCK_SELECTION == CAN_USING_INTERNAL_CLOCK + + /* enable MIRC2 kernal func */ + RCC_enableKernalUseMirc2(); + /* select the HXTL as the working clocks for CANFD1 */ + RCC_selectCanfdOscClkSource(RCC_CANFD1SEL, RCC_CANFD_OSCCLK_SEL_MIRC2KER); +#endif - if (hw->support_canfd) - { - RCC_selectCanfdOscClkSource((hw->instance == (FLEXCANREG_TypeDef *)CANFD2) ? RCC_CANFD2SEL : RCC_CANFD1SEL, - RCC_CANFD_OSCCLK_SEL_HXTLKER); - - if (hw->instance == (FLEXCANREG_TypeDef *)CANFD2) - { - RCC_selectCanfd2PeripheralClkSource(RCC_CANFD2_PERIPHERAL_CLK_SEL_HCLK); - RCC_enableCanfd2Clock(); - } - else - { - RCC_selectCanfd1PeripheralClkSource(RCC_CANFD1_PERIPHERAL_CLK_SEL_HCLK); - RCC_enableCanfd1Clock(); - } - } - else - { - RCC_selectCan1OscClkSource(RCC_CAN1_OSCCLK_SEL_HXTLKER); - RCC_selectCan1PeripheralClkSource(RCC_CAN1_PERIPHERAL_CLK_SEL_HCLK); - RCC_enableCan1Clock(); - } + /* enable CANFD clocks */ + RCC_enableCanfd1Clock(); + /* lock RCC register access */ RCC_lockRccRegister(); } -static void ns800_can_init_filter_defaults(ns800rt7_can_device *drv) -{ - RT_ASSERT(drv != RT_NULL); - - rt_memset(drv->base.FilterConfig, 0, sizeof(drv->base.FilterConfig)); - - drv->base.FilterConfig[CAN_TX_MB_INDEX].msgBufId = CAN_TX_MB_INDEX; - drv->base.FilterConfig[CAN_TX_MB_INDEX].msgBufLen = 1U; - drv->base.FilterConfig[CAN_TX_MB_INDEX].msgType = FLEXCANDRV_MSGTYPE_TX; - drv->base.FilterConfig[CAN_TX_MB_INDEX].dlc = DLC_BYTE_8; - drv->base.FilterConfig[CAN_TX_MB_INDEX].intEnable = true; - drv->base.FilterConfig[CAN_TX_MB_INDEX].individualMask = 0xFFFFFFFFU; - - drv->base.FilterConfig[CAN_RX_MB_INDEX].msgBufId = CAN_RX_MB_INDEX; - drv->base.FilterConfig[CAN_RX_MB_INDEX].msgBufLen = 1U; - drv->base.FilterConfig[CAN_RX_MB_INDEX].msgType = FLEXCANDRV_MSGTYPE_RX; - drv->base.FilterConfig[CAN_RX_MB_INDEX].dlc = DLC_BYTE_8; - drv->base.FilterConfig[CAN_RX_MB_INDEX].intEnable = true; - drv->base.FilterConfig[CAN_RX_MB_INDEX].individualMask = 0U; - drv->base.FilterNum = CAN_MSG_OBJ_NUM; -} - -static rt_bool_t ns800_can_use_canfd(ns800rt7_can_device *drv, const struct can_configure *cfg) +static rt_uint32_t get_can_baud_index(rt_uint32_t baud) { - RT_ASSERT(drv != RT_NULL); - RT_ASSERT(cfg != RT_NULL); + rt_uint32_t len, index; -#ifdef RT_CAN_USING_CANFD - if (drv->hw->support_canfd && cfg->enable_canfd) + len = sizeof(can_baud_rate_tab) / sizeof(can_baud_rate_tab[0]); + for (index = 0; index < len; index++) { - return RT_TRUE; + if (can_baud_rate_tab[index].baud_rate == baud) + return index; } -#endif - return RT_FALSE; + return 0; /* default baud is CAN1MBaud */ } -static void ns800_can_prepare_msg_cfg(ns800rt7_can_device *drv, const struct can_configure *cfg) +static rt_err_t _can_sendBlocking(ns800rt7_can *base, FLEXCANDRV_MsgObjType *TxMsgObj) { - rt_bool_t use_canfd; - FLEXCANDRV_DataLenCodeType default_dlc; - - RT_ASSERT(drv != RT_NULL); - RT_ASSERT(cfg != RT_NULL); - - use_canfd = ns800_can_use_canfd(drv, cfg); - default_dlc = use_canfd ? DLC_BYTE_64 : DLC_BYTE_8; + /* Check if Message Buffer is idle. */ + if (StateIdle == base->mbState[TxMsgObj->msgBufId]) + { + base->mbState[TxMsgObj->msgBufId] = StateTxData; - drv->base.FilterConfig[CAN_TX_MB_INDEX].dlc = default_dlc; - drv->base.FilterConfig[CAN_TX_MB_INDEX].isFd = use_canfd ? true : false; + FLEXCANDRV_SetTxMsg(&base->CanHandle, TxMsgObj); + /* transmit canfd Tx message */ + FLEXCANDRV_TransmitMsg(&base->CanHandle, TxMsgObj); - drv->base.FilterConfig[CAN_RX_MB_INDEX].dlc = default_dlc; - drv->base.FilterConfig[CAN_RX_MB_INDEX].isFd = use_canfd ? true : false; + return RT_EOK; + } + else + { + return RT_ERROR; + } } -static rt_err_t ns800_can_hw_configure(ns800rt7_can_device *drv, struct can_configure *cfg) +static rt_err_t _can_receiveNonBlocking(ns800rt7_can *base, FLEXCANDRV_MsgObjType *RxMsgObj) { - FLEXCANDRV_InitHwParType init_hw_par; - uint32_t can_clk = HXTL_FREQ_VALUE; - rt_bool_t use_canfd; - - RT_ASSERT(drv != RT_NULL); - RT_ASSERT(cfg != RT_NULL); - - if (!ns800_can_is_supported_baud(cfg->baud_rate)) + /* Check if Message Buffer is idle. */ + if (StateIdle == base->mbState[RxMsgObj->msgBufId]) { - return -RT_ERROR; - } + base->mbState[RxMsgObj->msgBufId] = StateRxData; -#ifdef RT_CAN_USING_CANFD - if (drv->hw->support_canfd && cfg->enable_canfd && !ns800_can_is_supported_baud(cfg->baud_rate_fd)) + return RT_EOK; + } + else { - return -RT_ERROR; + return RT_ERROR; } -#endif - - ns800_can_gpio_init(drv->hw); - ns800_can_clock_init(drv->hw); - - init_hw_par.canInstanceIdx = drv->hw->can_instance_idx; - init_hw_par.canRamNum = 4U; - - FLEXCANDRV_Init(&drv->base.CanHandle, drv->hw->instance, &init_hw_par); - FLEXCANDRV_GetDefaultCfg(&drv->base.CanCfg); - - use_canfd = ns800_can_use_canfd(drv, cfg); - ns800_can_prepare_msg_cfg(drv, cfg); - - FLEXCANDRV_BitTimingCalc(&drv->base.CanCfg.bitTiming, - can_clk, - cfg->baud_rate, - 7500U, - 2500U, - 0U); +} - FLEXCANDRV_BitTimingCalc(&drv->base.CanCfg.fdBitTiming, - can_clk, -#ifdef RT_CAN_USING_CANFD - use_canfd ? cfg->baud_rate_fd : cfg->baud_rate, -#else - cfg->baud_rate, -#endif - 7500U, - 2500U, - use_canfd ? 1U : 0U); - - drv->base.CanCfg.clkSrc = FLEXCANDRV_CLKSRC_OSC; - drv->base.CanCfg.msgNum = drv->base.FilterNum; - drv->base.CanCfg.msgCfg = drv->base.FilterConfig; - drv->base.CanCfg.individualMaskEnable = true; - drv->base.CanCfg.rxMBGlobalMask = 0xFFFFFFFFU; - drv->base.CanCfg.loopbackEnable = false; - drv->base.CanCfg.listenMode = false; - drv->base.CanCfg.msgBufDataLenSel = ns800_can_msg_buf_size(use_canfd); - drv->base.CanCfg.fdEnable = use_canfd ? true : false; - drv->base.CanCfg.fdISOEnable = use_canfd ? true : false; - drv->base.CanCfg.errorIntEnable = true; - drv->base.CanCfg.warningIntEnable = true; - drv->base.CanCfg.busoffIntEnable = true; +static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg) +{ + ns800rt7_can *drv_can; + rt_uint32_t baud_index; + uint32_t FlexcanClockFreq = HXTL_FREQ_VALUE; + + RT_ASSERT(can); + RT_ASSERT(cfg); + drv_can = (ns800rt7_can *)can->parent.user_data; + RT_ASSERT(drv_can); + + _can_gpio_init(); + _can_clock_init(); + + FLEXCANDRV_InitHwParType initHwPar; + initHwPar.canRamNum = 4; + initHwPar.canInstanceIdx = 1; + FLEXCANDRV_Init(&(drv_can->CanHandle), drv_can->CanHandle.flexCanReg, &initHwPar); + + /* get FLEXCAN controller default configuration */ + FLEXCANDRV_GetDefaultCfg(&(drv_can->CanCfg)); + + baud_index = get_can_baud_index(cfg->baud_rate); + + FLEXCANDRV_BitTimingCalc(&(drv_can->CanCfg.bitTiming), + FlexcanClockFreq, /* module clock source*/ + BAUD_DATA(baud_index), /* baudrate: 500K */ + 7500, /* sample point: 75% */ + 2500, /* SJW: 25% */ + 0); /* classic CAN bit timing */ + + FLEXCANDRV_BitTimingCalc(&(drv_can->CanCfg.fdBitTiming), + FlexcanClockFreq, /* module clock source*/ + BAUD_DATA(baud_index), /* baudrate: 500K */ + 7500, /* sample point: 75% */ + 2500, /* SJW: 25% */ + 1); /* CANFD bit timing */ + + drv_can->CanCfg.clkSrc = FLEXCANDRV_CLKSRC_OSC; + drv_can->CanCfg.msgNum = drv_can->FilterNum; + drv_can->CanCfg.msgCfg = drv_can->FilterConfig; + drv_can->CanCfg.individualMaskEnable = true; + drv_can->CanCfg.rxMBGlobalMask = 0xFFFFFFFF; + drv_can->CanCfg.loopbackEnable = false; + drv_can->CanCfg.msgBufDataLenSel = FLEXCANDRV_MB_SIZE_BYTE_8; + drv_can->CanCfg.fdEnable = true; + drv_can->CanCfg.fdISOEnable = true; switch (cfg->mode) { case RT_CAN_MODE_NORMAL: + /* default mode */ break; case RT_CAN_MODE_LISTEN: - drv->base.CanCfg.listenMode = true; + drv_can->CanCfg.listenMode = true; break; case RT_CAN_MODE_LOOPBACK: - drv->base.CanCfg.loopbackEnable = true; + drv_can->CanCfg.loopbackEnable = true; break; case RT_CAN_MODE_LOOPBACKANLISTEN: - drv->base.CanCfg.loopbackEnable = true; - drv->base.CanCfg.listenMode = true; break; - default: - return -RT_ERROR; } - FLEXCANDRV_Configure(&drv->base.CanHandle, &drv->base.CanCfg); - rt_memset((void *)drv->base.mbState, StateIdle, sizeof(drv->base.mbState)); + /* init can */ + /* initialize FLEXCAN module */ + FLEXCANDRV_Configure(&(drv_can->CanHandle), &(drv_can->CanCfg)); return RT_EOK; } -static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg) -{ - ns800rt7_can_device *drv; - - RT_ASSERT(can != RT_NULL); - RT_ASSERT(cfg != RT_NULL); - - drv = (ns800rt7_can_device *)can->parent.user_data; - RT_ASSERT(drv != RT_NULL); - - return ns800_can_hw_configure(drv, cfg); -} - static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) { - ns800rt7_can_device *drv; rt_uint32_t argval; + ns800rt7_can *drv_can; + struct rt_can_filter_config *filter_cfg; + struct rt_can_filter_item *item; + rt_uint8_t i, count, index; RT_ASSERT(can != RT_NULL); - - drv = (ns800rt7_can_device *)can->parent.user_data; - RT_ASSERT(drv != RT_NULL); + drv_can = (ns800rt7_can *)can->parent.user_data; + RT_ASSERT(drv_can != RT_NULL); + FLEXCANREG_TypeDef *canReg = drv_can->CanHandle.flexCanReg; switch (cmd) { case RT_DEVICE_CTRL_CLR_INT: - FLEXCANDRV_DisableMsgObjInterrupt(&drv->base.CanHandle, CAN_TX_MB_INDEX); - FLEXCANDRV_DisableMsgObjInterrupt(&drv->base.CanHandle, CAN_RX_MB_INDEX); - Interrupt_disable(drv->base.irqn1); - Interrupt_disable(drv->base.irqn2); + Interrupt_disable(drv_can->irqn1); + Interrupt_disable(drv_can->irqn2); break; - case RT_DEVICE_CTRL_SET_INT: - argval = (rt_uint32_t)arg; - if ((argval == RT_DEVICE_FLAG_INT_RX) || (argval == RT_DEVICE_FLAG_INT_TX)) + argval = (rt_uint32_t) arg; + if (argval == RT_DEVICE_FLAG_INT_RX || argval == RT_DEVICE_FLAG_INT_TX) { - FLEXCANDRV_EnableMsgObjInterrupt(&drv->base.CanHandle, CAN_TX_MB_INDEX); - FLEXCANDRV_EnableMsgObjInterrupt(&drv->base.CanHandle, CAN_RX_MB_INDEX); - -#ifdef BSP_USING_CAN1 - if (drv == &can1_dev) - { - Interrupt_register(drv->base.irqn1, CAN1_1_IRQHandler); - } -#endif -#ifdef BSP_USING_CANFD1 - if (drv == &canfd1_dev) - { - Interrupt_register(drv->base.irqn1, CANFD1_1_IRQHandler); - } -#endif -#ifdef BSP_USING_CANFD2 - if (drv == &canfd2_dev) - { - Interrupt_register(drv->base.irqn1, CANFD2_1_IRQHandler); - } -#endif - Interrupt_enable(drv->base.irqn1); + Interrupt_register(drv_can->irqn1, &CAN_Handler); + Interrupt_enable(drv_can->irqn1); } else if (argval == RT_DEVICE_CAN_INT_ERR) { -#ifdef BSP_USING_CAN1 - if (drv == &can1_dev) - { - Interrupt_register(drv->base.irqn2, CAN1_2_IRQHandler); - } -#endif -#ifdef BSP_USING_CANFD1 - if (drv == &canfd1_dev) - { - Interrupt_register(drv->base.irqn2, CANFD1_2_IRQHandler); - } -#endif -#ifdef BSP_USING_CANFD2 - if (drv == &canfd2_dev) - { - Interrupt_register(drv->base.irqn2, CANFD2_2_IRQHandler); - } -#endif - Interrupt_enable(drv->base.irqn2); + Interrupt_register(drv_can->irqn2, &CAN_Err_Handler); + Interrupt_enable(drv_can->irqn2); } break; - case RT_CAN_CMD_SET_FILTER: - if (arg != RT_NULL) - { - struct rt_can_filter_config *filter_cfg = (struct rt_can_filter_config *)arg; - - if (filter_cfg->count > 0U) - { - const struct rt_can_filter_item *item = &filter_cfg->items[0]; - - drv->base.FilterConfig[CAN_RX_MB_INDEX].msgId = item->id; - drv->base.FilterConfig[CAN_RX_MB_INDEX].isExtMsgId = (item->ide == RT_CAN_EXTID) ? true : false; - drv->base.FilterConfig[CAN_RX_MB_INDEX].individualMask = item->mask; - drv->base.FilterConfig[CAN_RX_MB_INDEX].rtrfilter = (item->rtr == RT_CAN_RTR) ? true : false; - - return ns800_can_hw_configure(drv, &drv->base.device.config); - } - } break; - case RT_CAN_CMD_SET_MODE: - argval = (rt_uint32_t)arg; - if ((argval != RT_CAN_MODE_NORMAL) && - (argval != RT_CAN_MODE_LISTEN) && - (argval != RT_CAN_MODE_LOOPBACK) && - (argval != RT_CAN_MODE_LOOPBACKANLISTEN)) + argval = (rt_uint32_t) arg; + if (argval != RT_CAN_MODE_NORMAL && + argval != RT_CAN_MODE_LISTEN && + argval != RT_CAN_MODE_LOOPBACK && + argval != RT_CAN_MODE_LOOPBACKANLISTEN) { return -RT_ERROR; } - - if (argval != drv->base.device.config.mode) + if (argval != drv_can->device.config.mode) { - drv->base.device.config.mode = argval; - return ns800_can_hw_configure(drv, &drv->base.device.config); + drv_can->device.config.mode = argval; + return _can_config(&drv_can->device, &drv_can->device.config); } break; - case RT_CAN_CMD_SET_BAUD: - argval = (rt_uint32_t)arg; - if (!ns800_can_is_supported_baud(argval)) + argval = (rt_uint32_t) arg; + if (argval != CAN1MBaud && + argval != CAN800kBaud && + argval != CAN500kBaud && + argval != CAN250kBaud && + argval != CAN125kBaud && + argval != CAN100kBaud && + argval != CAN50kBaud && + argval != CAN20kBaud && + argval != CAN10kBaud) { return -RT_ERROR; } - - if (argval != drv->base.device.config.baud_rate) + if (argval != drv_can->device.config.baud_rate) { - drv->base.device.config.baud_rate = argval; - return ns800_can_hw_configure(drv, &drv->base.device.config); + drv_can->device.config.baud_rate = argval; + return _can_config(&drv_can->device, &drv_can->device.config); } break; - case RT_CAN_CMD_SET_PRIV: - drv->base.device.config.privmode = (rt_uint32_t)arg; + return -RT_ERROR; break; - case RT_CAN_CMD_GET_STATUS: - drv->base.device.status.rcverrcnt = FLEXCANREG_GetEcrRxerrcnt(drv->base.CanHandle.flexCanReg); - drv->base.device.status.snderrcnt = FLEXCANREG_GetEcrTxerrcnt(drv->base.CanHandle.flexCanReg); - rt_memcpy(arg, &drv->base.device.status, sizeof(drv->base.device.status)); - break; + drv_can->device.status.rcverrcnt = FLEXCANREG_GetEcrRxerrcnt(canReg); + drv_can->device.status.snderrcnt = FLEXCANREG_GetEcrTxerrcnt(canReg); + //drv_can->device.status.lasterrtype = errtype & 0x70; + //drv_can->device.status.errcode = errtype & 0x07; - case RT_CAN_CMD_START: - return ns800_can_hw_configure(drv, &drv->base.device.config); - -#ifdef RT_CAN_USING_CANFD - case RT_CAN_CMD_SET_CANFD: - if (!drv->hw->support_canfd) - { - return -RT_ERROR; - } - - drv->base.device.config.enable_canfd = ((rt_uint32_t)arg) ? 1U : 0U; - return ns800_can_hw_configure(drv, &drv->base.device.config); - - case RT_CAN_CMD_SET_BAUD_FD: - if (!drv->hw->support_canfd) - { - return -RT_ERROR; - } - - argval = (rt_uint32_t)arg; - if (!ns800_can_is_supported_baud(argval)) - { - return -RT_ERROR; - } - - drv->base.device.config.baud_rate_fd = argval; - return ns800_can_hw_configure(drv, &drv->base.device.config); -#endif - - default: + rt_memcpy(arg, &drv_can->device.status, sizeof(drv_can->device.status)); break; } return RT_EOK; } -static rt_err_t ns800_can_send_common(ns800rt7_can_device *drv, const struct rt_can_msg *pmsg, rt_uint32_t box_num) -{ - FLEXCANDRV_MsgObjType msg_obj; - uint32_t *msg_buf_ptr; - rt_uint8_t len; - rt_bool_t use_canfd; - rt_bool_t msg_is_fd = RT_FALSE; - - RT_ASSERT(drv != RT_NULL); - RT_ASSERT(pmsg != RT_NULL); - - if (box_num != CAN_TX_MB_INDEX) - { - return -RT_ERROR; - } - - if (drv->base.mbState[box_num] != StateIdle) - { - return -RT_EBUSY; - } - - use_canfd = ns800_can_use_canfd(drv, &drv->base.device.config); - len = pmsg->len; - -#ifdef RT_CAN_USING_CANFD - msg_is_fd = (use_canfd && pmsg->fd_frame) ? RT_TRUE : RT_FALSE; - if (len > 64U) - { - return -RT_ERROR; - } - if (!msg_is_fd && (len > 8U)) - { - return -RT_ERROR; - } -#else - if (len > 8U) - { - return -RT_ERROR; - } -#endif - - rt_memset(&msg_obj, 0, sizeof(msg_obj)); - msg_obj.msgBufId = (uint8_t)box_num; - msg_obj.msgId = pmsg->id; - msg_obj.dlc = (uint8_t)ns800_can_len_to_dlc(len); - msg_obj.isFd = msg_is_fd ? true : false; - - rt_memcpy(msg_obj.data, pmsg->data, len); - - drv->base.mbState[box_num] = StateTxData; - - msg_buf_ptr = (uint32_t *)FLEXCANDRV_GetMsgBufStartAddr(&drv->base.CanHandle, (uint16_t)box_num); - - FLEXCANDRV_SetMsgType(msg_buf_ptr, FLEXCANDRV_MSGTYPE_TX); - FLEXCANDRV_SetMsgId(msg_buf_ptr, pmsg->id, (pmsg->ide == RT_CAN_EXTID) ? true : false); - FLEXCANDRV_SetMsgDLC(msg_buf_ptr, (FLEXCANDRV_DataLenCodeType)msg_obj.dlc); - FLEXCANDRV_SetFDEnable(msg_buf_ptr, msg_obj.isFd ? true : false); - - if (pmsg->rtr == RT_CAN_RTR) - { - msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM] |= MESSAGE_BUFFER_CS_RTR_MASK; - } - else - { - msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM] &= ~MESSAGE_BUFFER_CS_RTR_MASK; - } - -#ifdef RT_CAN_USING_CANFD - if (msg_obj.isFd && !pmsg->brs) - { - msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM] &= ~MESSAGE_BUFFER_CS_BRS_MASK; - } -#endif - - FLEXCANDRV_SetTxMsg(&drv->base.CanHandle, &msg_obj); - FLEXCANDRV_TransmitMsg(&drv->base.CanHandle, &msg_obj); - - return RT_EOK; -} +#define IS_CAN_DLC(DLC) ((DLC) <= ((uint8_t)0x08)) +/** + * @internal + * @brief Low-level function to send a CAN message to a specific hardware mailbox. + * + * This function is part of the **blocking** send mechanism. It is called by + * `_can_int_tx` after a hardware mailbox has already been acquired. Its role is + * to format the message according to the STM32 hardware requirements and place + * it into the specified mailbox for transmission. + * + * @param[in] can A pointer to the CAN device structure. + * @param[in] buf A pointer to the `rt_can_msg` to be sent. + * @param[in] box_num The specific hardware mailbox index (0, 1, or 2) to use for this tran + * + * @return `RT_EOK` on success, or an error code on failure. + */ static rt_ssize_t _can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_t box_num) { - ns800rt7_can_device *drv; - const struct rt_can_msg *pmsg; - - RT_ASSERT(can != RT_NULL); - RT_ASSERT(buf != RT_NULL); - - drv = (ns800rt7_can_device *)can->parent.user_data; - pmsg = (const struct rt_can_msg *)buf; - - return ns800_can_send_common(drv, pmsg, box_num); -} - -static rt_ssize_t _can_sendmsg_nonblocking(struct rt_can_device *can, const void *buf) -{ - ns800rt7_can_device *drv; - const struct rt_can_msg *pmsg; - - RT_ASSERT(can != RT_NULL); - RT_ASSERT(buf != RT_NULL); - - drv = (ns800rt7_can_device *)can->parent.user_data; - pmsg = (const struct rt_can_msg *)buf; - - return ns800_can_send_common(drv, pmsg, CAN_TX_MB_INDEX); + rt_ssize_t status; + ns800rt7_can *hcan; + hcan = (ns800rt7_can *) can->parent.user_data; + struct rt_can_msg *pmsg = (struct rt_can_msg *) buf; + FLEXCANDRV_MsgObjType fdTxMsgObj; + + /* Check the parameters */ + RT_ASSERT(IS_CAN_DLC(pmsg->len)); + + fdTxMsgObj.msgBufId = box_num; + + /* Set up the DLC */ + fdTxMsgObj.dlc = pmsg->len & 0x0FU; + /* Set up the data field */ + for(uint8_t i=0u; i<8u; i++) + { + fdTxMsgObj.data[i] = pmsg->data[i]; + } + + status = _can_sendBlocking(hcan, &fdTxMsgObj); + + return status; } static rt_ssize_t _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t fifo) { - ns800rt7_can_device *drv; + FLEXCANDRV_Type *hcan; struct rt_can_msg *pmsg; - RT_ASSERT(can != RT_NULL); - RT_ASSERT(buf != RT_NULL); - - drv = (ns800rt7_can_device *)can->parent.user_data; - RT_ASSERT(drv != RT_NULL); - - if (fifo != CAN_RX_MB_INDEX) - { - return -1; - } + RT_ASSERT(can); + + hcan = &(((ns800rt7_can *)can->parent.user_data)->CanHandle); + pmsg = (struct rt_can_msg *) buf; + + rt_uint8_t index; + + pmsg->hdr_index = index; /* one hdr filter per MB */ + pmsg->len = frame[0].dlc; + pmsg->id = frame[0].msgId; + pmsg->data[0] = frame[0].data[0]; + pmsg->data[1] = frame[0].data[1]; + pmsg->data[2] = frame[0].data[2]; + pmsg->data[3] = frame[0].data[3]; + pmsg->data[4] = frame[0].data[4]; + pmsg->data[5] = frame[0].data[5]; + pmsg->data[6] = frame[0].data[6]; + pmsg->data[7] = frame[0].data[7]; - pmsg = (struct rt_can_msg *)buf; - pmsg->id = drv->rx_cache[0].msgId; - pmsg->ide = drv->rx_ide[0]; - pmsg->rtr = drv->rx_rtr[0]; - pmsg->hdr_index = 0; - pmsg->rxfifo = 0; -#ifdef RT_CAN_USING_CANFD - pmsg->fd_frame = drv->rx_cache[0].isFd ? 1U : 0U; - pmsg->brs = drv->rx_brs[0]; - pmsg->len = ns800_can_dlc_to_len(drv->rx_cache[0].dlc, drv->rx_cache[0].isFd ? RT_TRUE : RT_FALSE); -#else - pmsg->len = ns800_can_dlc_to_len(drv->rx_cache[0].dlc, RT_FALSE); -#endif - rt_memcpy(pmsg->data, drv->rx_cache[0].data, pmsg->len); - - return sizeof(struct rt_can_msg); + return RT_EOK; } static const struct rt_can_ops _can_ops = { - .configure = _can_config, - .control = _can_control, - .sendmsg = _can_sendmsg, - .recvmsg = _can_recvmsg, - .sendmsg_nonblocking = _can_sendmsg_nonblocking, + .configure = _can_config, + .control = _can_control, + .sendmsg = _can_sendmsg, + .recvmsg = _can_recvmsg, }; -static uint32_t ns800_can_get_irq_flags(FLEXCANREG_TypeDef *obj) +static uint32_t FLEXCANREG_GetMsgBufInterruptFlagAll(FLEXCANREG_TypeDef *obj) { - return obj->IFLAG1 | obj->IFLAG2 | obj->IFLAG3 | obj->IFLAG4; + return obj->IFLAG1 | obj->IFLAG2 | obj->IFLAG3 | obj->IFLAG4; } -static uint8_t ns800_can_get_irq_mask(FLEXCANREG_TypeDef *obj, uint32_t msg_buffer_idx) +static uint8_t FLEXCANREG_GetMsgBufInterruptMask (FLEXCANREG_TypeDef *obj, uint32_t msgBufferIdx) { - uint32_t temp; - uint32_t bit = 0x00000001UL << (msg_buffer_idx % 32U); + uint32_t temp, temp1 = 0; + + temp1 = msgBufferIdx % 32; + temp = 0x00000001UL << temp1; - if (msg_buffer_idx > 95U) + if (msgBufferIdx > 95) { - temp = obj->IMASK4 & bit; + temp &= obj->IMASK4; } - else if (msg_buffer_idx > 63U) + else if (msgBufferIdx > 63) { - temp = obj->IMASK3 & bit; + temp &= obj->IMASK3; } - else if (msg_buffer_idx > 31U) + else if (msgBufferIdx > 31) { - temp = obj->IMASK2 & bit; + temp &= obj->IMASK2; } else { - temp = obj->IMASK1 & bit; + temp &= obj->IMASK1; } - return temp ? 1U : 0U; + if (temp) + { + return (1); + } + else + { + return (0); + } } -static void ns800_can_isr_txrx(ns800rt7_can_device *drv) +static void _can_tx_rx_isr(struct rt_can_device *can) { - RT_ASSERT(drv != RT_NULL); + uint8_t flag, mask; + RT_ASSERT(can); + ns800rt7_can *hcan; + hcan = (ns800rt7_can *) can->parent.user_data; + FLEXCANDRV_MsgObjType msgObj; + + /* Assertion. */ + RT_ASSERT(hcan); - while (ns800_can_get_irq_flags(drv->base.CanHandle.flexCanReg) != 0U) - { - uint32_t result; + uint32_t result; - for (result = 0U; result < 128U; result++) + do + { + /* For this implementation, we solve the Message with lowest MB index first. */ + for (result = 0; result < 128; result++) { - if ((FLEXCANDRV_GetMsgObjFlag(&drv->base.CanHandle, (uint8_t)result) != 0U) && - (ns800_can_get_irq_mask(drv->base.CanHandle.flexCanReg, result) != 0U)) + flag = FLEXCANDRV_GetMsgObjFlag(&(hcan->CanHandle), result); + mask = FLEXCANREG_GetMsgBufInterruptMask(hcan->CanHandle.flexCanReg, result); + /* Get the lowest unhandled Message Buffer */ + if ((flag != 0) && (mask != 0)) { break; } } - if (result >= 128U) + /* Does not find Message to deal with. */ + if (result == 128) { break; } - if (result == CAN_RX_MB_INDEX) + /* Get current State of Message Buffer. */ + switch (result) { - uint32_t *msg_buf_ptr; - uint32_t cs_word; - - msg_buf_ptr = (uint32_t *)FLEXCANDRV_GetMsgBufStartAddr(&drv->base.CanHandle, (uint16_t)result); - cs_word = msg_buf_ptr[MESSAGE_BUFFER_CS_WORD_NUM]; - - drv->rx_cache[0].msgBufId = (uint8_t)result; - FLEXCANDRV_GetRxMsg(&drv->base.CanHandle, &drv->rx_cache[0]); - drv->rx_ide[0] = (cs_word & MESSAGE_BUFFER_CS_IDE_MASK) ? RT_CAN_EXTID : RT_CAN_STDID; - drv->rx_rtr[0] = (cs_word & MESSAGE_BUFFER_CS_RTR_MASK) ? RT_CAN_RTR : RT_CAN_DTR; -#ifdef RT_CAN_USING_CANFD - drv->rx_brs[0] = (cs_word & MESSAGE_BUFFER_CS_BRS_MASK) ? 1U : 0U; -#endif + /* Solve Rx Data Frame. */ + case 1: + msgObj.msgBufId = result; + FLEXCANDRV_GetRxMsg(&hcan->CanHandle, &msgObj); + FLEXCANDRV_ClearMsgObjFlag(&hcan->CanHandle, result); + memcpy(&frame[0], &msgObj, sizeof(msgObj)); + rt_hw_can_isr(can, RT_CAN_EVENT_RX_IND | result << 8); + hcan->mbState[result] = StateIdle; + break; - drv->base.mbState[result] = StateIdle; - FLEXCANDRV_ClearMsgObjFlag(&drv->base.CanHandle, (uint8_t)result); - rt_hw_can_isr(&drv->base.device, RT_CAN_EVENT_RX_IND | (result << 8)); - } - else if (result == CAN_TX_MB_INDEX) - { - drv->base.mbState[result] = StateIdle; - FLEXCANDRV_ClearMsgObjFlag(&drv->base.CanHandle, (uint8_t)result); - rt_hw_can_isr(&drv->base.device, RT_CAN_EVENT_TX_DONE | (result << 8)); - } - else - { - FLEXCANDRV_ClearMsgObjFlag(&drv->base.CanHandle, (uint8_t)result); + /* Solve Tx Data Frame. */ + case 0: + rt_hw_can_isr(can, RT_CAN_EVENT_TX_DONE | result << 8); + hcan->mbState[result] = StateIdle; + break; + + default: + break; } + + /* Clear resolved Message Buffer IRQ. */ + FLEXCANDRV_ClearMsgObjFlag(&(hcan->CanHandle), result); } + while((0 != FLEXCANREG_GetMsgBufInterruptFlagAll(hcan->CanHandle.flexCanReg))); } -static void ns800_can_isr_err(ns800rt7_can_device *drv) +static void _can_err_isr(struct rt_can_device *can) { - RT_ASSERT(drv != RT_NULL); - - drv->base.device.status.rcverrcnt = FLEXCANREG_GetEcrRxerrcnt(drv->base.CanHandle.flexCanReg); - drv->base.device.status.snderrcnt = FLEXCANREG_GetEcrTxerrcnt(drv->base.CanHandle.flexCanReg); + } #ifdef BSP_USING_CAN1 +/** + * @brief This function handles CAN1 RX0 interrupts. + */ void CAN1_1_IRQHandler(void) { rt_interrupt_enter(); - ns800_can_isr_txrx(&can1_dev); +#if 0 + if() + { + _can_rx_isr(&drv_can1.device); + } + else + { + _can_tx_isr(&drv_can1.device); + } +#endif rt_interrupt_leave(); } +/** + * @brief This function handles CAN1 RX1 interrupts. + */ void CAN1_2_IRQHandler(void) { rt_interrupt_enter(); - ns800_can_isr_err(&can1_dev); +#if 0 + if() + { + _can_rx_isr(&drv_can1.device); + } + else + { + _can_tx_isr(&drv_can1.device); + } +#endif rt_interrupt_leave(); } -#endif + +#endif /* BSP_USING_CAN1 */ #ifdef BSP_USING_CANFD1 -void CANFD1_1_IRQHandler(void) +void CAN_Handler(void) { rt_interrupt_enter(); - ns800_can_isr_txrx(&canfd1_dev); + _can_tx_rx_isr(&drv_can1.device); rt_interrupt_leave(); } -void CANFD1_2_IRQHandler(void) +void CAN_Err_Handler(void) { rt_interrupt_enter(); - ns800_can_isr_err(&canfd1_dev); + _can_err_isr(&drv_can1.device); rt_interrupt_leave(); } -#endif +#endif /* BSP_USING_CANFD1 */ #ifdef BSP_USING_CANFD2 void CANFD2_1_IRQHandler(void) { rt_interrupt_enter(); - ns800_can_isr_txrx(&canfd2_dev); + _can_sce_isr(&drv_can1.device); rt_interrupt_leave(); } void CANFD2_2_IRQHandler(void) { rt_interrupt_enter(); - ns800_can_isr_err(&canfd2_dev); + _can_sce_isr(&drv_can1.device); rt_interrupt_leave(); } -#endif +#endif /* BSP_USING_CANFD2 */ -static rt_err_t ns800_can_register(ns800rt7_can_device *drv) +int rt_hw_can_init(void) { + int ret = RT_EOK; struct can_configure config = CANDEFAULTCONFIG; - - RT_ASSERT(drv != RT_NULL); - config.privmode = RT_CAN_MODE_NOPRIV; - config.ticks = 50U; - config.sndboxnumber = 1U; + + config.ticks = 50; + config.sndboxnumber = 1; config.msgboxsz = RX_MB_COUNT; #ifdef RT_CAN_USING_HDR - config.maxhdr = 1U; -#endif -#ifdef RT_CAN_USING_CANFD - config.baud_rate_fd = CAN1MBaud; - config.enable_canfd = drv->hw->support_canfd ? 1U : 0U; -#endif - - drv->base.device.config = config; - drv->base.CanHandle.flexCanReg = drv->hw->instance; - drv->base.irqn1 = drv->hw->irqn1; - drv->base.irqn2 = drv->hw->irqn2; - ns800_can_init_filter_defaults(drv); - - return rt_hw_can_register(&drv->base.device, drv->hw->name, &_can_ops, drv); -} - -int rt_hw_can_init(void) -{ - int ret = RT_EOK; - -#ifdef BSP_USING_CAN1 - ret = ns800_can_register(&can1_dev); - if (ret != RT_EOK) - { - return ret; - } + config.maxhdr = RX_MB_COUNT; /* filter count,one filter per MB */ #endif + /* config default filter */ + FLEXCANDRV_MsgCfgType fdMsgCfgObj[2] = {0}; + + drv_can1.FilterConfig[0].msgBufId = 0; + drv_can1.FilterConfig[0].msgBufLen = 1; + drv_can1.FilterConfig[0].msgId = 0x78; + drv_can1.FilterConfig[0].isExtMsgId = false; + drv_can1.FilterConfig[0].msgType = FLEXCANDRV_MSGTYPE_TX; + drv_can1.FilterConfig[0].dlc = DLC_BYTE_8; + drv_can1.FilterConfig[0].isFd = false; + drv_can1.FilterConfig[0].intEnable = true; + drv_can1.FilterConfig[0].individualMask = 0xFFFFFFFF; + drv_can1.FilterConfig[0].rtrmask = false; + drv_can1.FilterConfig[0].rtrfilter = false; + + drv_can1.FilterConfig[1].msgBufId = 1; + drv_can1.FilterConfig[1].msgBufLen = 1; + drv_can1.FilterConfig[1].msgId = 0x400; + drv_can1.FilterConfig[1].isExtMsgId = false; + drv_can1.FilterConfig[1].msgType = FLEXCANDRV_MSGTYPE_RX; + drv_can1.FilterConfig[1].dlc = DLC_BYTE_8; + drv_can1.FilterConfig[1].isFd = false; + drv_can1.FilterConfig[1].intEnable = true; + drv_can1.FilterConfig[1].individualMask = 0; + drv_can1.FilterConfig[1].rtrmask = false; + drv_can1.FilterConfig[1].rtrfilter = false; + + drv_can1.FilterNum = 2; #ifdef BSP_USING_CANFD1 - ret = ns800_can_register(&canfd1_dev); - if (ret != RT_EOK) - { - return ret; - } -#endif - -#ifdef BSP_USING_CANFD2 - ret = ns800_can_register(&canfd2_dev); - if (ret != RT_EOK) - { - return ret; - } -#endif + drv_can1.device.config = config; + /* register CAN1 device */ + ret = rt_hw_can_register(&drv_can1.device, + drv_can1.name, + &_can_ops, + &drv_can1); +#endif /* BSP_USING_CAN1 */ return ret; } @@ -966,3 +655,5 @@ int rt_hw_can_init(void) INIT_BOARD_EXPORT(rt_hw_can_init); #endif /* BSP_USING_CAN */ + +/************************** end of file ******************/ diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig index 6db24c2e316..c4bbdf3080b 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig @@ -92,56 +92,17 @@ menu "On-chip Peripheral Drivers" menuconfig BSP_USING_ECAP bool "Enable ECAP" default n - if BSP_USING_ECAP - config BSP_USING_ECAP1 - bool "Enable ECAP1" - default y - - if BSP_USING_ECAP1 - config BSP_ECAP1_NAME - string "ECAP1 device name" - default "ecap1" - - config BSP_ECAP1_GPIO_NUM - int "ECAP1 input GPIO number" - range 0 224 - default 16 - - config BSP_ECAP1_GPIO_MUX - int "ECAP1 input GPIO mux" - range 0 15 - default 0 - - config BSP_ECAP1_INPUT_XBAR - int "ECAP1 XBAR input index" - range 1 16 - default 7 - - config BSP_ECAP1_INPUT_SOURCE - int "ECAP1 XBAR source GPIO number" - range 0 224 - default 16 - endif - endif menuconfig BSP_USING_CAN bool "Enable CAN" select RT_USING_CAN default n if BSP_USING_CAN - config BSP_USING_CAN1 - bool "Enable CAN1" - default n - config BSP_USING_CANFD1 bool "Enable CANFD1" select RT_CAN_USING_CANFD default n - config BSP_USING_CANFD2 - bool "Enable CANFD2" - select RT_CAN_USING_CANFD - default n endif endmenu From 46a641fc7fb4d84ff3348700e988cd31a0a6b04c Mon Sep 17 00:00:00 2001 From: rcitach Date: Sun, 10 May 2026 12:19:58 +0000 Subject: [PATCH 05/11] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20menuconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/novosns/ns800/ns800rt7p65-nssinepad/.config | 12 ++---------- bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h | 9 ++------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config index 8878aee6444..eeb6ca5a321 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config @@ -237,7 +237,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_SERIAL_BYPASS is not set CONFIG_RT_USING_CAN=y # CONFIG_RT_CAN_USING_HDR is not set -# CONFIG_RT_CAN_USING_CANFD is not set +CONFIG_RT_CAN_USING_CANFD=y CONFIG_RT_CANMSG_BOX_SZ=16 CONFIG_RT_CANSND_BOX_NUM=1 CONFIG_RT_CANSND_MSG_TIMEOUT=100 @@ -1444,14 +1444,6 @@ CONFIG_BSP_USING_UART1=y # CONFIG_BSP_USING_UART3 is not set # CONFIG_BSP_USING_UART4 is not set CONFIG_BSP_USING_ECAP=y -CONFIG_BSP_USING_ECAP1=y -CONFIG_BSP_ECAP1_NAME="ecap1" -CONFIG_BSP_ECAP1_GPIO_NUM=16 -CONFIG_BSP_ECAP1_GPIO_MUX=0 -CONFIG_BSP_ECAP1_INPUT_XBAR=7 -CONFIG_BSP_ECAP1_INPUT_SOURCE=16 CONFIG_BSP_USING_CAN=y -CONFIG_BSP_USING_CAN1=y -# CONFIG_BSP_USING_CANFD1 is not set -# CONFIG_BSP_USING_CANFD2 is not set +CONFIG_BSP_USING_CANFD1=y # end of On-chip Peripheral Drivers diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h index a27d6be2b08..08758673ebf 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h @@ -144,6 +144,7 @@ #define RT_USING_SERIAL_V1 #define RT_SERIAL_RB_BUFSZ 64 #define RT_USING_CAN +#define RT_CAN_USING_CANFD #define RT_CANMSG_BOX_SZ 16 #define RT_CANSND_BOX_NUM 1 #define RT_CANSND_MSG_TIMEOUT 100 @@ -415,14 +416,8 @@ #define BSP_NS800_UART_TX_TIMEOUT 6000 #define BSP_USING_UART1 #define BSP_USING_ECAP -#define BSP_USING_ECAP1 -#define BSP_ECAP1_NAME "ecap1" -#define BSP_ECAP1_GPIO_NUM 16 -#define BSP_ECAP1_GPIO_MUX 0 -#define BSP_ECAP1_INPUT_XBAR 7 -#define BSP_ECAP1_INPUT_SOURCE 16 #define BSP_USING_CAN -#define BSP_USING_CAN1 +#define BSP_USING_CANFD1 /* end of On-chip Peripheral Drivers */ #endif From 7ea74ec3adc13d5a95ef114e01597e3507a693bd Mon Sep 17 00:00:00 2001 From: rcitach Date: Sun, 10 May 2026 12:23:51 +0000 Subject: [PATCH 06/11] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drivers/config/rt7/adc_config.h | 3 +- .../drivers/config/rt7/dac_config.h | 3 +- .../drivers/config/rt7/dma_config.h | 3 +- .../drivers/config/rt7/i2c_hard_config.h | 3 +- .../drivers/config/rt7/lptim_config.h | 3 +- .../drivers/config/rt7/pwm_config.h | 3 +- .../drivers/config/rt7/qspi_config.h | 3 +- .../drivers/config/rt7/sdio_config.h | 6 +- .../drivers/config/rt7/spi_config.h | 3 +- .../drivers/config/rt7/tim_config.h | 3 +- .../drivers/config/rt7/uart_config.h | 3 +- .../libraries/HAL_Drivers/drivers/drv_can.c | 53 +- .../libraries/HAL_Drivers/drivers/drv_can.h | 9 +- .../HAL_Drivers/drivers/drv_config.h | 3 +- .../libraries/HAL_Drivers/drivers/drv_dma.h | 3 +- .../libraries/HAL_Drivers/drivers/drv_ecap.c | 19 +- .../libraries/HAL_Drivers/drivers/drv_ecap.h | 1 + .../libraries/HAL_Drivers/drivers/drv_gpio.c | 61 +- .../libraries/HAL_Drivers/drivers/drv_gpio.h | 3 +- .../libraries/HAL_Drivers/drivers/drv_log.h | 3 +- .../libraries/HAL_Drivers/drivers/drv_uart.c | 1 + .../libraries/HAL_Drivers/drivers/drv_uart.h | 3 +- .../ns800/libraries/HAL_Drivers/drv_common.c | 15 +- .../ns800/libraries/HAL_Drivers/drv_common.h | 3 +- .../ns800/ns800rt7p65-nssinepad/SConstruct | 2 +- .../ns800rt7p65-nssinepad/applications/main.c | 7 +- .../applications/rt_can.c | 53 +- .../applications/rt_ecap.c | 1 + .../applications/rt_ecap.h | 7 +- .../ns800/ns800rt7p65-nssinepad/board/board.c | 33 +- .../ns800/ns800rt7p65-nssinepad/board/board.h | 39 +- .../ns800/ns800rt7p65-nssinepad/project.ewp | 4862 +++++++++-------- .../ns800/ns800rt7p65-nssinepad/project.eww | 20 +- .../ns800rt7p65-nssinepad/project.uvoptx | 1140 +--- .../ns800rt7p65-nssinepad/project.uvprojx | 1929 +++---- .../ns800/ns800rt7p65-nssinepad/rtconfig.h | 1 + 36 files changed, 3357 insertions(+), 4950 deletions(-) diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h index 3314bc7e925..ae9f9d1a23d 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/adc_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -91,3 +91,4 @@ extern "C" { #endif #endif /* __ADC_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h index 568dc9ec664..fae6be33b8a 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dac_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -40,3 +40,4 @@ extern "C" { #endif #endif /* __DAC_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h index 922bd0aa5a7..135ee6d5434 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/dma_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -149,3 +149,4 @@ extern "C" { #endif #endif /* __DMA_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h index 55959f7324b..7168665eba2 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/i2c_hard_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2024, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -256,3 +256,4 @@ extern "C" { #endif #endif /*__I2C_HARD_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h index 507bcff446a..a2bf17fc95d 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/lptim_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2024 RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -65,3 +65,4 @@ extern "C" { #endif #endif /* __LPTIM_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h index 5c062739fde..2a71f0a4b0d 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/pwm_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -195,3 +195,4 @@ extern "C" { #endif #endif /* __PWM_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h index a315b2f5cc6..b62430e9853 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/qspi_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -54,3 +54,4 @@ extern "C" { #endif #endif /* __QSPI_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h index e1367a9f0ba..bc3eb175550 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/sdio_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -12,7 +12,7 @@ #define __SDIO_CONFIG_H__ #include -//#include "stm32h7xx_hal.h" +/* #include "stm32h7xx_hal.h" */ #ifdef __cplusplus extern "C" { @@ -40,5 +40,3 @@ extern "C" { #endif /*__SDIO_CONFIG_H__ */ - - diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h index 7caa420c873..73259bf95c0 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/spi_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -197,3 +197,4 @@ extern "C" { #endif #endif /*__SPI_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h index bf7fd577b8c..d325a4ac530 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/tim_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -65,3 +65,4 @@ extern "C" { #endif #endif /* __TIM_CONFIG_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h index 3ac1bb05a24..f01b721eab5 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/config/rt7/uart_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -74,3 +74,4 @@ extern "C" { #endif #endif + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c index ed13e75638d..ddba6a3f0f7 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2025, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -84,14 +84,14 @@ static void _can_gpio_init(void) GPIO_setPinConfig(GPIO_4_CANFD1_TX); GPIO_setPinConfig(GPIO_10_CANFD1_RX); #endif - + #ifdef BSP_USING_CANFD1 GPIO_setAnalogMode(GPIO_4, GPIO_ANALOG_DISABLED); GPIO_setAnalogMode(GPIO_10, GPIO_ANALOG_DISABLED); GPIO_setPinConfig(GPIO_4_CANFD1_TX); GPIO_setPinConfig(GPIO_10_CANFD1_RX); #endif - + #ifdef BSP_USING_CANFD2 GPIO_setAnalogMode(GPIO_4, GPIO_ANALOG_DISABLED); GPIO_setAnalogMode(GPIO_10, GPIO_ANALOG_DISABLED); @@ -168,7 +168,7 @@ static rt_err_t _can_sendBlocking(ns800rt7_can *base, FLEXCANDRV_MsgObjType *TxM } else { - return RT_ERROR; + return -RT_ERROR; } } @@ -183,7 +183,7 @@ static rt_err_t _can_receiveNonBlocking(ns800rt7_can *base, FLEXCANDRV_MsgObjTyp } else { - return RT_ERROR; + return -RT_ERROR; } } @@ -197,10 +197,10 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg RT_ASSERT(cfg); drv_can = (ns800rt7_can *)can->parent.user_data; RT_ASSERT(drv_can); - + _can_gpio_init(); _can_clock_init(); - + FLEXCANDRV_InitHwParType initHwPar; initHwPar.canRamNum = 4; initHwPar.canInstanceIdx = 1; @@ -208,16 +208,16 @@ static rt_err_t _can_config(struct rt_can_device *can, struct can_configure *cfg /* get FLEXCAN controller default configuration */ FLEXCANDRV_GetDefaultCfg(&(drv_can->CanCfg)); - + baud_index = get_can_baud_index(cfg->baud_rate); - + FLEXCANDRV_BitTimingCalc(&(drv_can->CanCfg.bitTiming), FlexcanClockFreq, /* module clock source*/ BAUD_DATA(baud_index), /* baudrate: 500K */ 7500, /* sample point: 75% */ 2500, /* SJW: 25% */ 0); /* classic CAN bit timing */ - + FLEXCANDRV_BitTimingCalc(&(drv_can->CanCfg.fdBitTiming), FlexcanClockFreq, /* module clock source*/ BAUD_DATA(baud_index), /* baudrate: 500K */ @@ -300,6 +300,7 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) { return -RT_ERROR; } + if (argval != drv_can->device.config.mode) { drv_can->device.config.mode = argval; @@ -320,6 +321,7 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) { return -RT_ERROR; } + if (argval != drv_can->device.config.baud_rate) { drv_can->device.config.baud_rate = argval; @@ -332,8 +334,8 @@ static rt_err_t _can_control(struct rt_can_device *can, int cmd, void *arg) case RT_CAN_CMD_GET_STATUS: drv_can->device.status.rcverrcnt = FLEXCANREG_GetEcrRxerrcnt(canReg); drv_can->device.status.snderrcnt = FLEXCANREG_GetEcrTxerrcnt(canReg); - //drv_can->device.status.lasterrtype = errtype & 0x70; - //drv_can->device.status.errcode = errtype & 0x07; + /* drv_can->device.status.lasterrtype = errtype & 0x70; */ + /* drv_can->device.status.errcode = errtype & 0x07; */ rt_memcpy(arg, &drv_can->device.status, sizeof(drv_can->device.status)); break; @@ -369,9 +371,9 @@ static rt_ssize_t _can_sendmsg(struct rt_can_device *can, const void *buf, rt_ui /* Check the parameters */ RT_ASSERT(IS_CAN_DLC(pmsg->len)); - + fdTxMsgObj.msgBufId = box_num; - + /* Set up the DLC */ fdTxMsgObj.dlc = pmsg->len & 0x0FU; /* Set up the data field */ @@ -379,9 +381,9 @@ static rt_ssize_t _can_sendmsg(struct rt_can_device *can, const void *buf, rt_ui { fdTxMsgObj.data[i] = pmsg->data[i]; } - + status = _can_sendBlocking(hcan, &fdTxMsgObj); - + return status; } @@ -394,7 +396,7 @@ static rt_ssize_t _can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t hcan = &(((ns800rt7_can *)can->parent.user_data)->CanHandle); pmsg = (struct rt_can_msg *) buf; - + rt_uint8_t index; pmsg->hdr_index = index; /* one hdr filter per MB */ @@ -422,7 +424,7 @@ static const struct rt_can_ops _can_ops = static uint32_t FLEXCANREG_GetMsgBufInterruptFlagAll(FLEXCANREG_TypeDef *obj) { - return obj->IFLAG1 | obj->IFLAG2 | obj->IFLAG3 | obj->IFLAG4; + return obj->IFLAG1 | obj->IFLAG2 | obj->IFLAG3 | obj->IFLAG4; } static uint8_t FLEXCANREG_GetMsgBufInterruptMask (FLEXCANREG_TypeDef *obj, uint32_t msgBufferIdx) @@ -466,7 +468,7 @@ static void _can_tx_rx_isr(struct rt_can_device *can) ns800rt7_can *hcan; hcan = (ns800rt7_can *) can->parent.user_data; FLEXCANDRV_MsgObjType msgObj; - + /* Assertion. */ RT_ASSERT(hcan); @@ -523,7 +525,7 @@ static void _can_tx_rx_isr(struct rt_can_device *can) static void _can_err_isr(struct rt_can_device *can) { - + } #ifdef BSP_USING_CAN1 @@ -536,7 +538,7 @@ void CAN1_1_IRQHandler(void) #if 0 if() { - _can_rx_isr(&drv_can1.device); + _can_rx_isr(&drv_can1.device); } else { @@ -555,7 +557,7 @@ void CAN1_2_IRQHandler(void) #if 0 if() { - _can_rx_isr(&drv_can1.device); + _can_rx_isr(&drv_can1.device); } else { @@ -613,7 +615,7 @@ int rt_hw_can_init(void) #endif /* config default filter */ FLEXCANDRV_MsgCfgType fdMsgCfgObj[2] = {0}; - + drv_can1.FilterConfig[0].msgBufId = 0; drv_can1.FilterConfig[0].msgBufLen = 1; drv_can1.FilterConfig[0].msgId = 0x78; @@ -625,7 +627,7 @@ int rt_hw_can_init(void) drv_can1.FilterConfig[0].individualMask = 0xFFFFFFFF; drv_can1.FilterConfig[0].rtrmask = false; drv_can1.FilterConfig[0].rtrfilter = false; - + drv_can1.FilterConfig[1].msgBufId = 1; drv_can1.FilterConfig[1].msgBufLen = 1; drv_can1.FilterConfig[1].msgId = 0x400; @@ -637,7 +639,7 @@ int rt_hw_can_init(void) drv_can1.FilterConfig[1].individualMask = 0; drv_can1.FilterConfig[1].rtrmask = false; drv_can1.FilterConfig[1].rtrfilter = false; - + drv_can1.FilterNum = 2; #ifdef BSP_USING_CANFD1 @@ -657,3 +659,4 @@ INIT_BOARD_EXPORT(rt_hw_can_init); #endif /* BSP_USING_CAN */ /************************** end of file ******************/ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h index fcf569f4bf1..9c9bac4c8e0 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_can.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -42,16 +42,16 @@ struct ns800rt7_baud_rate_tab /* stm32 can device */ -typedef struct +typedef struct { char *name; FLEXCANDRV_ControllerCfgType CanCfg; IRQn_Type irqn1; IRQn_Type irqn2; - FLEXCANDRV_Type CanHandle; + FLEXCANDRV_Type CanHandle; FLEXCANDRV_MsgCfgType FilterConfig[CAN_FILTER_NUM_MAX]; uint8_t FilterNum; - volatile uint8_t mbState[128]; + volatile uint8_t mbState[128]; struct rt_can_device device; /* inherit from can device */ } ns800rt7_can; @@ -64,3 +64,4 @@ int rt_hw_can_init(void); #endif /*__DRV_CAN_H__ */ /************************** end of file ******************/ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h index dd931cd1e65..9907a5c283e 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2024 RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -28,3 +28,4 @@ extern "C" { #endif #endif + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h index 0b7b8ecdde6..bb4293e09ee 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_dma.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -31,3 +31,4 @@ struct dma_config { #endif #endif /*__DRV_DMA_H_ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c index 59eabba12f0..aca167fc794 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.c @@ -35,7 +35,7 @@ static struct rt_ecap_device ecap1_dev; void ECAP1_IRQHandler (void); /* - * + * */ static void ecap_gpio_init (const struct rt_ecap_config *config) { @@ -49,7 +49,7 @@ static void ecap_gpio_init (const struct rt_ecap_config *config) } /* - * + * */ static void ecap_xbar_init (const struct rt_ecap_config *config) { @@ -59,7 +59,7 @@ static void ecap_xbar_init (const struct rt_ecap_config *config) } /* - * + * */ static void ecap_hw_init (const struct rt_ecap_config *config) { @@ -109,18 +109,18 @@ static void ecap_hw_init (const struct rt_ecap_config *config) ECAP_setEmulationMode(config->instance, ECAP_EMULATION_STOP); ECAP_setSyncInPulseSource(config->instance, ECAP_SYNC_IN_PULSE_SRC_DISABLE); - // ECAP_startCounter(config->instance); - // ECAP_enableTimeStampCapture(config->instance); - // ECAP_reArm(config->instance); + /* ECAP_startCounter(config->instance); */ + /* ECAP_enableTimeStampCapture(config->instance); */ + /* ECAP_reArm(config->instance); */ /* * 当前配置是 Event4 完成后产生中断。 */ - // ECAP_enableInterrupt(config->instance, ECAP_ECEINT_CEVT4_M); + /* ECAP_enableInterrupt(config->instance, ECAP_ECEINT_CEVT4_M); */ } /* - * + * */ static void ecap_hw_deinit (const struct rt_ecap_config *config) { @@ -475,4 +475,5 @@ void ECAP1_IRQHandler (void) } -#endif //#if defined(BSP_USING_ECAP) \ No newline at end of file +#endif /* #if defined(BSP_USING_ECAP) */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h index f1a7bf5e670..23ffb0ac369 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_ecap.h @@ -120,3 +120,4 @@ int rt_hw_ecap_init(void); #endif #endif /* __DRV_USART_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c index 21b239f0cb1..b3e67ae04df 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2025, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -19,7 +19,7 @@ #define PIN_ENTRY(pin_macro) {pin_macro} static const rt_pin_info_t pin_map_table[225] = { - // 0-21: 连续 + /* 0-21: 连续 */ [0] = PIN_ENTRY(GPIO_0), [1] = PIN_ENTRY(GPIO_1), [2] = PIN_ENTRY(GPIO_2), @@ -42,8 +42,8 @@ static const rt_pin_info_t pin_map_table[225] = { [19] = PIN_ENTRY(GPIO_19), [20] = PIN_ENTRY(GPIO_20), [21] = PIN_ENTRY(GPIO_21), - - // 22-32: 不连续 + + /* 22-32: 不连续 */ [22] = PIN_ENTRY(GPIO_22), [23] = PIN_ENTRY(GPIO_23), [24] = PIN_ENTRY(GPIO_24), @@ -55,8 +55,8 @@ static const rt_pin_info_t pin_map_table[225] = { [30] = PIN_ENTRY(GPIO_30), [31] = PIN_ENTRY(GPIO_31), [32] = PIN_ENTRY(GPIO_32), - - // 33-63: 连续 + + /* 33-63: 连续 */ [33] = PIN_ENTRY(GPIO_33), [34] = PIN_ENTRY(GPIO_34), [35] = PIN_ENTRY(GPIO_35), @@ -88,8 +88,8 @@ static const rt_pin_info_t pin_map_table[225] = { [61] = PIN_ENTRY(GPIO_61), [62] = PIN_ENTRY(GPIO_62), [63] = PIN_ENTRY(GPIO_63), - - // 64-94: 连续 + + /* 64-94: 连续 */ [64] = PIN_ENTRY(GPIO_64), [65] = PIN_ENTRY(GPIO_65), [66] = PIN_ENTRY(GPIO_66), @@ -121,8 +121,8 @@ static const rt_pin_info_t pin_map_table[225] = { [92] = PIN_ENTRY(GPIO_92), [93] = PIN_ENTRY(GPIO_93), [94] = PIN_ENTRY(GPIO_94), - - // 不连续引脚 + + /* 不连续引脚 */ [99] = PIN_ENTRY(GPIO_99), [100] = PIN_ENTRY(GPIO_100), [103] = PIN_ENTRY(GPIO_103), @@ -150,7 +150,7 @@ static const rt_pin_info_t pin_map_table[225] = { [213] = PIN_ENTRY(GPIO_213), [214] = PIN_ENTRY(GPIO_214), [215] = PIN_ENTRY(GPIO_215), - [216] = PIN_ENTRY(GPIO_216), + [216] = PIN_ENTRY(GPIO_216), [217] = PIN_ENTRY(GPIO_217), [218] = PIN_ENTRY(GPIO_218), [219] = PIN_ENTRY(GPIO_219), @@ -161,23 +161,25 @@ static const rt_pin_info_t pin_map_table[225] = { [224] = PIN_ENTRY(GPIO_224), }; -// 1. PIN_NUM: 从(port, pin)获取引脚编号 +/* 1. PIN_NUM: 从(port, pin)获取引脚编号 */ int get_pin_num(GPIO_TypeDef *port, GPIO_PinNum pin) { - // 遍历数组查找匹配 - for (int i = 0; i < 225; i++) { - if (pin_map_table[i].port == port && - pin_map_table[i].pin == (uint16_t)pin) { - return i; // 返回引脚编号 + /* 遍历数组查找匹配 */ + for (int i = 0; i < 225; i++) + { + if (pin_map_table[i].port == port && + pin_map_table[i].pin == (uint16_t)pin) + { + return i; /* 返回引脚编号 */ } } - return -1; // 未找到 + return -1; /* 未找到 */ } -// 2. PIN_PORT: 从引脚编号获取端口索引 +/* 2. PIN_PORT: 从引脚编号获取端口索引 */ uint8_t get_port_index(GPIO_TypeDef *port) { - // 由于新平台端口地址可能不连续,需要映射 + /* 由于新平台端口地址可能不连续,需要映射 */ if (port == GPIOA) return 0; if (port == GPIOB) return 1; if (port == GPIOC) return 2; @@ -186,15 +188,16 @@ uint8_t get_port_index(GPIO_TypeDef *port) if (port == GPIOF) return 5; if (port == GPIOG) return 6; if (port == GPIOH) return 7; - // 如果有更多端口继续添加 - return 0xFF; // 无效端口 + /* 如果有更多端口继续添加 */ + return 0xFF; /* 无效端口 */ } -// 3. PIN_NO: 从引脚编号获取引脚索引 +/* 3. PIN_NO: 从引脚编号获取引脚索引 */ uint8_t get_pin_index(uint16_t pin) { - // 提取引脚位的位置 - switch (pin) { + /* 提取引脚位的位置 */ + switch (pin) + { case GPIO_PIN_0: return 0; case GPIO_PIN_1: return 1; case GPIO_PIN_2: return 2; @@ -227,7 +230,7 @@ uint8_t get_pin_index(uint16_t pin) case GPIO_PIN_29: return 29; case GPIO_PIN_30: return 30; case GPIO_PIN_31: return 31; - default: return 0xFF; // 无效引脚 + default: return 0xFF; /* 无效引脚 */ } } @@ -260,7 +263,8 @@ const rt_pin_info_t* get_pin_info(int pin_num) if(pin_num < 0 || pin_num >=225) return NULL; - if(pin_map_table[pin_num].port == NULL) { + if(pin_map_table[pin_num].port == NULL) + { return NULL; } @@ -345,7 +349,7 @@ static void ns800rt7_pin_write(rt_device_t dev, rt_base_t pin, rt_uint8_t value) if(value == 0) { GPIO_clearPin(info->port, info->pin); - } + } else if(value == 1) { GPIO_setPin(info->port, info->pin); @@ -454,3 +458,4 @@ int rt_hw_pin_init(void) } #endif /* BSP_USING_GPIO */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h index c354f85abde..24a5980dbfa 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_gpio.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -44,3 +44,4 @@ int rt_hw_pin_init(void); #endif #endif /* __DRV_GPIO_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h index 2d44d4e9014..a1b3a9190dd 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_log.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -25,3 +25,4 @@ #endif /* DRV_DEBUG */ #include + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c index ecb95242600..76c084038a0 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.c @@ -530,3 +530,4 @@ int rt_hw_uart_init(void) } #endif /* RT_USING_SERIAL */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h index e8420c82209..cc6bf6ff967 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drivers/drv_uart.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2024, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -72,3 +72,4 @@ struct ns800_uart int rt_hw_uart_init(void); #endif /* __DRV_USART_H__ */ + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c index eefd008865d..b47fb793e0c 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.c @@ -1,11 +1,11 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes - * + * */ #include "drv_common.h" @@ -58,7 +58,7 @@ volatile rt_tick_t g_tick_test; void SysTick_Handler(void) { rt_interrupt_enter(); - + rt_tick_increase(); g_tick_test = rt_tick_get(); @@ -142,7 +142,7 @@ rt_weak void rt_hw_board_init(void) Interrupt_initVectorTable(); rt_hw_systick_init(); - + #if defined(RT_USING_HEAP) rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); #endif @@ -176,7 +176,7 @@ void rt_hw_console_output(const char *str) { #if defined(__ICCARM__) rt_size_t size = rt_strlen(str); - + __write(0, str, size); #else rt_size_t i = 0, size = 0; @@ -192,7 +192,7 @@ void rt_hw_console_output(const char *str) fputc(a, &f); } fputc(str[i], &f); - } + } #endif } #endif @@ -202,7 +202,7 @@ char rt_hw_console_getchar(void) { /* Note: the initial value of ch must < 0 */ int ch = -1; - + if (UART1->STAT.BIT.RDRF) { ch = (uint8_t)UART1->DATA.WORDVAL; @@ -214,3 +214,4 @@ char rt_hw_console_getchar(void) return ch; } #endif + diff --git a/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h index 5c746472901..9c56486a6d8 100644 --- a/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h +++ b/bsp/novosns/ns800/libraries/HAL_Drivers/drv_common.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -35,3 +35,4 @@ void _Error_Handler(char *s, int num); #endif #endif + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct index 8621cc11a46..8847239bfd1 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct @@ -32,7 +32,7 @@ def bsp_pkg_check(): print("===============================================================================") exit(1) -RegisterPreBuildingAction(bsp_pkg_check) +# RegisterPreBuildingAction(bsp_pkg_check) TARGET = 'rt-thread.' + rtconfig.TARGET_EXT diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c index 8ef80f3b8e3..62ab0863ff1 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006-2023, RT-Thread Development Team + * Copyright (c) 2006-2026, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * @@ -18,13 +18,14 @@ int main(void) { rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); - + while (1) { -// rt_kprintf("\r\n led1_thread_entry running! \r\n"); +/* rt_kprintf("\r\n led1_thread_entry running! \r\n"); */ rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(1000); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(1000); } } + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c index 70d0c8a3094..b102b2e46eb 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c @@ -4,17 +4,17 @@ #include "rt_can.h" -#define CAN_DEV_NAME "canfd1" // The name of the CAN device +#define CAN_DEV_NAME "canfd1" /* The name of the CAN device */ -static rt_device_t can_dev; // CAN device handle -static struct rt_semaphore rx_sem; // Semaphore for message reception +static rt_device_t can_dev; /* CAN device handle */ +static struct rt_semaphore rx_sem; /* Semaphore for message reception */ -// Callback function for CAN reception +/* Callback function for CAN reception */ static rt_err_t can_rx_callback(rt_device_t dev, rt_size_t size) { - // The CAN interrupt calls this callback when data is received. - // Release the semaphore to notify the receiving thread. + /* The CAN interrupt calls this callback when data is received. */ + /* Release the semaphore to notify the receiving thread. */ rt_sem_release(&rx_sem); return RT_EOK; } @@ -24,12 +24,12 @@ static void can_rx_thread(void *parameter) rt_err_t res; struct rt_can_msg rx_msg = {0}; - // Set the receive callback function + /* Set the receive callback function */ rt_device_set_rx_indicate(can_dev, can_rx_callback); - // Some drivers might require an explicit start command. - // This is driver-specific. - rt_uint32_t cmd_arg = 1; // Argument to enable the controller + /* Some drivers might require an explicit start command. */ + /* This is driver-specific. */ + rt_uint32_t cmd_arg = 1; /* Argument to enable the controller */ res = rt_device_control(can_dev, RT_CAN_CMD_START, &cmd_arg); RT_ASSERT(res == RT_EOK); @@ -37,10 +37,10 @@ static void can_rx_thread(void *parameter) while (1) { - // Block and wait for the semaphore, which is released by the receive callback. + /* Block and wait for the semaphore, which is released by the receive callback. */ rt_sem_take(&rx_sem, RT_WAITING_FOREVER); - // Drain all pending frames in batches. + /* Drain all pending frames in batches. */ struct rt_can_msg rx_buf[CAN_RX_BATCH_SIZE]; rt_ssize_t read_size; rt_size_t count; @@ -59,7 +59,7 @@ static void can_rx_thread(void *parameter) count = (rt_size_t)(read_size / sizeof(rx_buf[0])); for (rt_size_t i = 0; i < count; i++) { - // Print the received message's ID and data. + /* Print the received message's ID and data. */ rt_kprintf("Received a message. ID: 0x%x, Data: ", rx_buf[i].id); for (int j = 0; j < rx_buf[i].len; j++) { @@ -81,13 +81,13 @@ static void can_tx_thread(void *parameter) blocking_msg.ide = RT_CAN_STDID; blocking_msg.rtr = RT_CAN_DTR; blocking_msg.len = 8; - + while(1) { - // The `nonblocking` flag is 0 by default for blocking mode. + /* The `nonblocking` flag is 0 by default for blocking mode. */ for(int i = 0; i < 8; i++) blocking_msg.data[i] = i+index; index++; - + rt_kprintf("Attempting to send a message in BLOCKING mode...\n"); if (rt_device_write(can_dev, 0, &blocking_msg, sizeof(blocking_msg)) == sizeof(blocking_msg)) { @@ -97,8 +97,8 @@ static void can_tx_thread(void *parameter) { rt_kprintf("Blocking message send failed.\n"); } - - rt_thread_mdelay(1000); // Wait a moment for clarity in the log + + rt_thread_mdelay(1000); /* Wait a moment for clarity in the log */ } } @@ -108,7 +108,7 @@ int can_sample(int argc, char *argv[]) rt_thread_t thread; char can_name[RT_NAME_MAX]; - // Allow specifying the CAN device name from the command line, e.g., "can_sample can2" + /* Allow specifying the CAN device name from the command line, e.g., "can_sample can2" */ if (argc == 2) { rt_strncpy(can_name, argv[1], RT_NAME_MAX); @@ -118,7 +118,7 @@ int can_sample(int argc, char *argv[]) rt_strncpy(can_name, CAN_DEV_NAME, RT_NAME_MAX); } - // Find the CAN device by name + /* Find the CAN device by name */ can_dev = rt_device_find(can_name); if (!can_dev) { @@ -126,14 +126,14 @@ int can_sample(int argc, char *argv[]) return -RT_ERROR; } - // Initialize the receive semaphore + /* Initialize the receive semaphore */ rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); - // Open the CAN device in interrupt-driven TX/RX mode + /* Open the CAN device in interrupt-driven TX/RX mode */ res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX); RT_ASSERT(res == RT_EOK); - // Create and start the data receiving thread + /* Create and start the data receiving thread */ thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 1024, 25, 10); if (thread != RT_NULL) { @@ -144,8 +144,8 @@ int can_sample(int argc, char *argv[]) rt_kprintf("create can_rx thread failed!\n"); return -RT_ERROR; } - - // Create and start the data receiving thread + + /* Create and start the data receiving thread */ thread = rt_thread_create("can_tx", can_tx_thread, RT_NULL, 1024, 25, 10); if (thread != RT_NULL) { @@ -161,5 +161,6 @@ int can_sample(int argc, char *argv[]) return res; } -// Export the function to the MSH command line +/* Export the function to the MSH command line */ MSH_CMD_EXPORT(can_sample, can device usage example); + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c index d9908fc6ec2..fed5a1b4613 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c @@ -55,3 +55,4 @@ int rt_ecap_test_init (void) return 0; } MSH_CMD_EXPORT(rt_ecap_test_init, ecap capture test); + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h index 3323e64d052..9b0461cadd3 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h @@ -8,11 +8,12 @@ #ifdef __cplusplus extern "C" { #endif - + int rt_ecap_test_init (void); - + #ifdef __cplusplus } #endif -#endif \ No newline at end of file +#endif + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c index dfeecc944f8..69a33795e68 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c @@ -2,9 +2,9 @@ * @file board.c * @author Haven-X * @brief Board setup for NS800RTxxx examples. - * + * * @note Board Configurations - * Initializes the rest of the modules. + * Initializes the rest of the modules. * *

© Copyright (c) 2025 Novosense Limited. * All rights reserved.

@@ -27,9 +27,9 @@ /** * @brief Board Initialization. - * @note Call this function in your application if you wish to do all module + * @note Call this function in your application if you wish to do all module * initialization. - * If you wish to not use some of the initializations, instead of the + * If you wish to not use some of the initializations, instead of the * Board_init use the individual Module_inits. */ void Board_init (void) @@ -42,7 +42,7 @@ void Board_init (void) /** * @brief PinMux Initialization. - * @note Call this function in your application if you want all + * @note Call this function in your application if you want all * PinMux initialization to be done. */ void PinMux_init (void) @@ -61,7 +61,7 @@ void PinMux_init (void) /** * @brief Board Serial Communication Interface Initialization. - * @note Call this function in the application to initialize the SCI serial port + * @note Call this function in the application to initialize the SCI serial port * on the board for outputting debugging information. */ void SerialCOM_init(void) @@ -90,7 +90,7 @@ void SerialCOM_init(void) UART_enableTxFifo(BOARD_SERIALCOM); UART_resetTxFifo(BOARD_SERIALCOM); UART_setTxFifoWatermark(BOARD_SERIALCOM, UART_FIFO_TX6); - + /* Enable transmitter */ UART_enableTxModule(BOARD_SERIALCOM); /* Enable receiver */ @@ -99,7 +99,7 @@ void SerialCOM_init(void) /** * @brief Board LED Initialization. - * @note Call this function in the application to initialize the LED + * @note Call this function in the application to initialize the LED * on the board. */ void LED_init (void) @@ -118,7 +118,7 @@ void LED_init (void) /** * @brief Board Switch Initialization. - * @note Call this function in the application to initialize the Switch + * @note Call this function in the application to initialize the Switch * on the board. */ void Switch_init (void) @@ -157,22 +157,22 @@ void System_setClock (void) RCC_configHxtl(HXTL_CONFIG, RCC_HXTL_NORMAL, RCC_FUN_ON); #endif RCC_configPll(PLL_CONFIG, PLL_EXT_CONFIG, RCC_FUN_ON); - + RCC_setClock(RCC_SYSCLKSOURCE_PLL); -#else // !SYSCLK_USE_PLL +#else /* !SYSCLK_USE_PLL */ #ifdef SYSCLK_SOURCE_USE_HXTL RCC_configHxtl(HXTL_CONFIG, RCC_HXTL_NORMAL, RCC_FUN_ON); RCC_setClock(RCC_SYSCLKSOURCE_HXTL); -#endif // SYSCLK_SOURCE_USE_HXTL +#endif /* SYSCLK_SOURCE_USE_HXTL */ #ifdef SYSCLK_SOURCE_USE_MIRC1 RCC_setClock(RCC_SYSCLKSOURCE_MIRC1); -#endif // SYSCLK_SOURCE_USE_MIRC1 +#endif /* SYSCLK_SOURCE_USE_MIRC1 */ #ifdef SYSCLK_SOURCE_USE_MIRC2 RCC_setClock(RCC_SYSCLKSOURCE_MIRC2); -#endif // SYSCLK_SOURCE_USE_MIRC2 -#endif // SYSCLK_USE_PLL +#endif /* SYSCLK_SOURCE_USE_MIRC2 */ +#endif /* SYSCLK_USE_PLL */ RCC_configClockDiv(SYSCLOCK_CFGR_DIV_CONFIG, SYSCLOCK_CFGR2_DIV_CONFIG); } } @@ -297,7 +297,7 @@ void Device_disableAllPeripherals (void) RCC_HCLKEN1_DMAMUX1EN_M | RCC_HCLKEN1_SMPUEN_M | RCC_HCLKEN1_FMUEN_M); RCC_disableAhb2PeripheralClock(RCC_HCLKEN2_CANFD2EN_M | RCC_HCLKEN2_CANFD1EN_M | RCC_HCLKEN2_CAN1EN_M | - RCC_HCLKEN2_LIN2EN_M | RCC_HCLKEN2_LIN1EN_M | RCC_HCLKEN2_BGCRC2EN_M | + RCC_HCLKEN2_LIN2EN_M | RCC_HCLKEN2_LIN1EN_M | RCC_HCLKEN2_BGCRC2EN_M | RCC_HCLKEN2_BGCRC1EN_M | RCC_HCLKEN2_CRC2EN_M | RCC_HCLKEN2_CRC1EN_M | RCC_HCLKEN2_AESHASHEN_M |RCC_HCLKEN2_TRNGEN_M); @@ -353,3 +353,4 @@ void Device_lockPeriphReg (void) SYSCON->SYSEALLOW2.WORDVAL = 0x00000000; SYSCON->SYSEALLOW3.WORDVAL = 0x00000000; } + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h index b6f0c6eb2fa..0a69dcbe5f8 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.h @@ -103,14 +103,14 @@ extern int Image$$RW_RT_HEAD$$Limit; * @{ * @brief Defines configuration macros for the Phase-Locked Loop (PLL). * @note Will configure the clock as follows: - * PLL_SYSCLK = PLLSOURCE * PLLM / ( (PLLN+1) * (2 * (PLLP+1))) - * + * PLL_SYSCLK = PLLSOURCE * PLLM / ( (PLLN+1) * (2 * (PLLP+1))) + * * PLLSOURCE optional: \b HXTL_FREQ_VALUE * \b MIRC1_FREQ_VALUE * \b MIRC2_FREQ_VALUE - * Example: + * Example: * if PLLSOURCE = HXTL_FREQ_VALUE = 20Mhz, PLLM_40, PLLN_DIV1, PLLP_DIV2, - * + * * PLL_SYSCLK = 20Mhz * 40 / ( (0+1) * (2 * (0+1)) ) = 400MHz */ #ifdef SYSCLK_USE_PLL @@ -119,22 +119,22 @@ extern int Image$$RW_RT_HEAD$$Limit; (RCC_PLLN_DIV1 << 4) | \ (RCC_PLLP_DIV2 << 17) | \ (RCC_PLLSOURCE_HXTL)) -#else // ndef PLLCLK_SOURCE_USE_HXTL +#else /* ndef PLLCLK_SOURCE_USE_HXTL */ #ifdef PLLCLK_SOURCE_USE_MIRC2 #define PLL_CONFIG ((RCC_PLLM_80 << 8) | \ (RCC_PLLN_DIV1 << 4) | \ (RCC_PLLP_DIV2 << 17) | \ (RCC_PLLSOURCE_MIRC2)) -#else // ndef PLLCLK_SOURCE_USE_MIRC2 +#else /* ndef PLLCLK_SOURCE_USE_MIRC2 */ #define PLL_CONFIG ((RCC_PLLM_52 << 8) | \ (RCC_PLLN_DIV1 << 4) | \ (RCC_PLLP_DIV2 << 17) | \ (RCC_PLLSOURCE_MIRC1)) -#endif // PLLCLK_SOURCE_USE_MIRC2 -#endif // PLLCLK_SOURCE_USE_HXTL -#else // ndef SYSCLK_USE_PLL +#endif /* PLLCLK_SOURCE_USE_MIRC2 */ +#endif /* PLLCLK_SOURCE_USE_HXTL */ +#else /* ndef SYSCLK_USE_PLL */ #define PLL_CONFIG 0U -#endif // SYSCLK_USE_PLL +#endif /* SYSCLK_USE_PLL */ /** * @} @@ -178,7 +178,7 @@ extern int Image$$RW_RT_HEAD$$Limit; (RCC_EMIF_DIV_2 << 8) | \ (RCC_EPWM_DIV_1 << 12)) -#else +#else #define SYSCLOCK_CFGR_DIV_CONFIG ((RCC_APB5_HCLK_DIV1 << 28) | \ (RCC_APB2_4_HCLK_DIV1 << 24) | \ (RCC_APB1_3_HCLK_DIV1 << 20) | \ @@ -194,8 +194,8 @@ extern int Image$$RW_RT_HEAD$$Limit; /** * @} */ - -#define SYSTICK_TIME_UNIT (1000UL) /*!< Uint: 1M */ + +#define SYSTICK_TIME_UNIT (1000UL) /*!< Uint: 1M */ @@ -243,37 +243,37 @@ void Device_enableAllPeripheralsInCpu1 (void); /** * \brief Board Initialization. - * \note Call this function in your application if you wish to do all module + * \note Call this function in your application if you wish to do all module * initialization. - * If you wish to not use some of the initializations, instead of the + * If you wish to not use some of the initializations, instead of the * Board_init use the individual Module_inits. */ void Board_init (void); /** * \brief PinMux Initialization. - * \note Call this function in your application if you want all + * \note Call this function in your application if you want all * PinMux initialization to be done. */ void PinMux_init (void); /** * \brief Board Serial Communication Interface Initialization. - * \note Call this function in the application to initialize the SCI serial port + * \note Call this function in the application to initialize the SCI serial port * on the board for outputting debugging information. */ void SerialCOM_init(void); /** * \brief Board LED Initialization. - * \note Call this function in the application to initialize the LED + * \note Call this function in the application to initialize the LED * on the board. */ void LED_init (void); /** * \brief Board Switch Initialization. - * \note Call this function in the application to initialize the Switch + * \note Call this function in the application to initialize the Switch * on the board. */ void Switch_init (void); @@ -285,3 +285,4 @@ void Switch_init (void); #endif /* __BOARD_H__ */ + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp index 79ad928889e..ca465a67483 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.ewp @@ -1,2406 +1,2546 @@ - - 3 - - rtthread - - ARM - - 1 - - General - 3 - - 31 - 1 - 1 - - - - - - - - - - - - - - - + + 3 + + rtthread + + ARM + + 1 + + General + 3 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 35 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 10 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 35 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 10 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - 0 - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 22 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - BILINK - 0 - - - - - Release - - ARM - - 0 - - General - 3 - - 31 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 35 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 10 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - 0 - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 22 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - BILINK - 0 - - - - - Applications - - $PROJ_DIR$\applications\main.c - - - - Compiler - - $PROJ_DIR$\..\..\..\components\libc\compilers\common\cctype.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstdlib.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\common\cstring.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\common\ctime.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\common\cunistd.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\common\cwchar.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\environ.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_close.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_lseek.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_mem.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_open.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_read.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_remove.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscall_write.c - - - $PROJ_DIR$\..\..\..\components\libc\compilers\dlib\syscalls.c - - - - DeviceDrivers - - $PROJ_DIR$\..\..\..\components\drivers\core\device.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_comm.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\completion_up.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\condvar.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\dataqueue.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\pipe.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\ringblk_buf.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\ringbuffer.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\waitqueue.c - - - $PROJ_DIR$\..\..\..\components\drivers\ipc\workqueue.c - - - $PROJ_DIR$\..\..\..\components\drivers\pin\dev_pin.c - - - $PROJ_DIR$\..\..\..\components\drivers\serial\dev_serial.c - - - - Drivers - - $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_gpio.c - - - $PROJ_DIR$\..\libraries\HAL_Drivers\drivers\drv_uart.c - - - $PROJ_DIR$\..\libraries\HAL_Drivers\drv_common.c - - - $PROJ_DIR$\board\board.c + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + Applications + + $PROJ_DIR$\applications/main.c + + + $PROJ_DIR$\applications/rt_can.c + + + $PROJ_DIR$\applications/rt_ecap.c + + + + CMSIS-Core + + + CPU + + $PROJ_DIR$\../../../../libcpu/arm/common/div0.c + + + $PROJ_DIR$\../../../../libcpu/arm/common/showmem.c + + + $PROJ_DIR$\../../../../libcpu/arm/cortex-m7/context_iar.S + + + $PROJ_DIR$\../../../../libcpu/arm/cortex-m7/cpu_cache.c + + + $PROJ_DIR$\../../../../libcpu/arm/cortex-m7/cpuport.c + + + + Device + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/Device/Src/system_NS800RT7xxx.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/Device/Src/iar/startup_NS800RT7xxx.s + + + + DeviceDrivers + + $PROJ_DIR$\../../../../components/drivers/can/dev_can.c + + + $PROJ_DIR$\../../../../components/drivers/core/device.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/completion_comm.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/completion_up.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/condvar.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/dataqueue.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/pipe.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/ringblk_buf.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/ringbuffer.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/waitqueue.c + + + $PROJ_DIR$\../../../../components/drivers/ipc/workqueue.c + + + $PROJ_DIR$\../../../../components/drivers/pin/dev_pin.c + + + $PROJ_DIR$\../../../../components/drivers/serial/dev_serial.c + + + + Drivers + + $PROJ_DIR$\board/board.c + + + + Finsh + + $PROJ_DIR$\../../../../components/finsh/shell.c + + + $PROJ_DIR$\../../../../components/finsh/msh.c + + + $PROJ_DIR$\../../../../components/finsh/msh_parse.c + + + $PROJ_DIR$\../../../../components/finsh/cmd.c + + + + HAL_Driver + + $PROJ_DIR$\../libraries/HAL_Drivers/drv_common.c + + + + HAL_Drivers + + $PROJ_DIR$\../libraries/HAL_Drivers/drivers/drv_gpio.c + + + $PROJ_DIR$\../libraries/HAL_Drivers/drivers/drv_uart.c + + + $PROJ_DIR$\../libraries/HAL_Drivers/drivers/drv_can.c + + + $PROJ_DIR$\../libraries/HAL_Drivers/drivers/drv_ecap.c + + + + Kernel + + $PROJ_DIR$\../../../../src/clock.c + + + $PROJ_DIR$\../../../../src/components.c + + + $PROJ_DIR$\../../../../src/cpu_up.c + + + $PROJ_DIR$\../../../../src/defunct.c + + + $PROJ_DIR$\../../../../src/idle.c + + + $PROJ_DIR$\../../../../src/ipc.c + + + $PROJ_DIR$\../../../../src/irq.c + + + $PROJ_DIR$\../../../../src/kservice.c + + + $PROJ_DIR$\../../../../src/mem.c + + + $PROJ_DIR$\../../../../src/mempool.c + + + $PROJ_DIR$\../../../../src/object.c + + + $PROJ_DIR$\../../../../src/scheduler_comm.c + + + $PROJ_DIR$\../../../../src/scheduler_up.c + + + $PROJ_DIR$\../../../../src/thread.c + + + $PROJ_DIR$\../../../../src/timer.c - NS800RT7-CMSIS + Libc + + $PROJ_DIR$\../../../../components/libc/compilers/common/cctype.c + + + $PROJ_DIR$\../../../../components/libc/compilers/common/cstdlib.c + + + $PROJ_DIR$\../../../../components/libc/compilers/common/cstring.c + + + $PROJ_DIR$\../../../../components/libc/compilers/common/ctime.c + + + $PROJ_DIR$\../../../../components/libc/compilers/common/cunistd.c + + + $PROJ_DIR$\../../../../components/libc/compilers/common/cwchar.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/environ.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_close.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_lseek.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_mem.c + - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\Device\Src\system_NS800RT7xxx.c + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_open.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\Device\Src\iar\startup_NS800RT7xxx.s + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_read.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_remove.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscall_write.c + + + $PROJ_DIR$\../../../../components/libc/compilers/dlib/syscalls.c + + + $PROJ_DIR$\../../../../src/klibc/kerrno.c + + + $PROJ_DIR$\../../../../src/klibc/kstdio.c + + + $PROJ_DIR$\../../../../src/klibc/kstring.c + + + $PROJ_DIR$\../../../../src/klibc/rt_vsnprintf_tiny.c + + + $PROJ_DIR$\../../../../src/klibc/rt_vsscanf.c - NS800RT7-StdDriver + StdDriver + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/adc.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/aeshash.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/anass.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/awk.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/bgcrc.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/btim.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/clb.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/cmpss.c + - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\crc.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/crc.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\debug.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/dac.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flash.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/dcc.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\gpio.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/debug.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\interrupt.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/dmamux.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\rcc.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/ecap.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\sram.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/edma.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\syscon.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_basic.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\uart.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_filter.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\xbar.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_matrix.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\exti.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_transform.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\dmamux.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/epg.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\edma.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/epwm.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\ecap.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/eqep.c - $PROJ_DIR$\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flexcan.c + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/exti.c + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/flash.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/flexcan.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/fmu.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/gpio.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/i2c.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/interrupt.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/iwdg1.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/iwdg2.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/lin.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/lptim.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/mcm.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/mu.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/pmbus.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/pwr.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/qspi.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/rcc.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/sdfm.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/sema.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/smpu.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/spi.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/sram.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/stim.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/syscon.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/tim.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/trng.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/uart.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/upp.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/version.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/wwdg.c + + + $PROJ_DIR$\packages/novosns-series/NS800RT7XXX/StdDriver/Src/xbar.c + + + + utc_UTest + + + utestcases - - Finsh - - $PROJ_DIR$\..\..\..\components\finsh\msh_parse.c - - - $PROJ_DIR$\..\..\..\components\finsh\shell.c - - - $PROJ_DIR$\..\..\..\components\finsh\cmd.c - - - $PROJ_DIR$\..\..\..\components\finsh\msh.c - - - - Kernel - - $PROJ_DIR$\..\..\..\src\clock.c - - - $PROJ_DIR$\..\..\..\src\components.c - - - $PROJ_DIR$\..\..\..\src\cpu_up.c - - - $PROJ_DIR$\..\..\..\src\defunct.c - - - $PROJ_DIR$\..\..\..\src\idle.c - - - $PROJ_DIR$\..\..\..\src\ipc.c - - - $PROJ_DIR$\..\..\..\src\irq.c - - - $PROJ_DIR$\..\..\..\src\kservice.c - - - $PROJ_DIR$\..\..\..\src\mem.c - - - $PROJ_DIR$\..\..\..\src\mempool.c - - - $PROJ_DIR$\..\..\..\src\object.c - - - $PROJ_DIR$\..\..\..\src\scheduler_comm.c - - - $PROJ_DIR$\..\..\..\src\scheduler_up.c - - - $PROJ_DIR$\..\..\..\src\thread.c - - - $PROJ_DIR$\..\..\..\src\timer.c - - - - klibc - - $PROJ_DIR$\..\..\..\src\klibc\kstring.c - - - $PROJ_DIR$\..\..\..\src\klibc\kerrno.c - - - $PROJ_DIR$\..\..\..\src\klibc\kstdio.c - - - $PROJ_DIR$\..\..\..\src\klibc\rt_vsscanf.c - - - $PROJ_DIR$\..\..\..\src\klibc\rt_vsnprintf_tiny.c - - - - libcpu - - $PROJ_DIR$\..\..\..\libcpu\arm\common\atomic_arm.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\common\div0.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\common\showmem.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\context_iar.S - - - $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpu_cache.c - - - $PROJ_DIR$\..\..\..\libcpu\arm\cortex-m7\cpuport.c - - - - POSIX - - - utestcases - - + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww index c2cb02eb1e8..faa93f37cdf 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.eww @@ -1,10 +1,10 @@ - - - - - $WS_DIR$\project.ewp - - - - - + + + + + $WS_DIR$\project.ewp + + + + + diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx index edd35949094..dc89326d3f7 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvoptx @@ -73,11 +73,11 @@ 0 - 1 + 0 0 1 - 255 + 18 0 1 @@ -103,7 +103,7 @@ 1 0 0 - 4 + 6 @@ -114,140 +114,33 @@ - Segger\JL2CM3.dll + STLink\ST-LINKIII-KEIL_SWO.dll 0 - JL2CM3 - -U775238036 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20120000 -FC2000 -FN2 -FF0NS800RT7xxx_FlashBank1.FLM -FS08000000 -FL080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FF1NS800RT7xxx_FlashBank2.FLM -FS18080000 -FL180000 -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) - - - 0 - ARMRTXEVENTFLAGS - -L70 -Z18 -C0 -M0 -T1 - - - 0 - DLGTARM - (1010=2302,262,2752,819,0)(6017=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(6016=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0) - - - 0 - ARMDBGFLAGS - - - - 0 - DLGUARM - - - - 0 - CMSIS_AGDI - -X"NSSinePad DAPLink v2" -U0700000105daff393237584757108136 -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20120000 -FC2000 -FN2 -FF0NS800RT7xxx_FlashBank1.FLM -FS08000000 -FL080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FF1NS800RT7xxx_FlashBank2.FLM -FS18080000 -FL180000 -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) + ST-LINKIII-KEIL_SWO + -U0670FF495355878281171423 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048.FLM -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM) 0 UL2CM3 - UL2CM3(-S0 -C0 -P0 ) -FN2 -FC2000 -FD20120000 -FF0NS800RT7xxx_FlashBank1 -FF1NS800RT7xxx_FlashBank2 -FL080000 -FL180000 -FS08000000 -FS18080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) - - - 0 - ST-LINKIII-KEIL_SWO - UL2CM3(-S0 -C0 -P0 ) -FN2 -FC2000 -FD20120000 -FF0NS800RT7xxx_FlashBank1 -FF1NS800RT7xxx_FlashBank2 -FL080000 -FL180000 -FS08000000 -FS18080000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM) + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32H7x_2048 -FS08000000 -FL0200000 -FP0($$Device:STM32H743ZITx$CMSIS\Flash\STM32H7x_2048.FLM)) - - - 0 - 1 - __rt_init_rti_board_start - - - 1 - 1 - SysTick - - - 2 - 1 - SystemCoreClock,0x0A - - - 3 - 1 - _console_device - - - 4 - 1 - _console_device - - - 5 - 1 - rt_thread_priority_table - - - 6 - 1 - p_main_thread - - - 7 - 1 - rt_tick,0x0A - - - 8 - 1 - g_tick_test,0x0A - - - - - 0 - 2 - heap_begin_address - - - 1 - 2 - heap_end_address - - - 2 - 2 - rt_thread_priority_table - - - 3 - 2 - rt_timer_list - - - - - 1 - 0 - 0x20014088 - 0 - - 0 0 0 - 1 + 0 0 0 0 0 - 1 + 0 0 0 0 @@ -278,1015 +171,14 @@ + + 1 + 1 + 0 + 2 + 10000000 + - - Applications - 1 - 0 - 0 - 0 - - 1 - 1 - 1 - 0 - 0 - 0 - applications\main.c - main.c - 0 - 0 - - - 1 - 2 - 1 - 0 - 0 - 0 - .\applications\rt_ecap.c - rt_ecap.c - 0 - 0 - - - 1 - 3 - 1 - 0 - 0 - 0 - .\applications\rt_can.c - rt_can.c - 0 - 0 - - - - - CPU - 0 - 0 - 0 - 0 - - 2 - 4 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\common\atomic_arm.c - atomic_arm.c - 0 - 0 - - - 2 - 5 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\common\div0.c - div0.c - 0 - 0 - - - 2 - 6 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\common\showmem.c - showmem.c - 0 - 0 - - - 2 - 7 - 2 - 0 - 0 - 0 - ..\..\..\libcpu\arm\cortex-m7\context_rvds.S - context_rvds.S - 0 - 0 - - - 2 - 8 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c - cpu_cache.c - 0 - 0 - - - 2 - 9 - 1 - 0 - 0 - 0 - ..\..\..\libcpu\arm\cortex-m7\cpuport.c - cpuport.c - 0 - 0 - - - - - DeviceDrivers - 0 - 0 - 0 - 0 - - 3 - 10 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\core\device.c - device.c - 0 - 0 - - - 3 - 11 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\completion_comm.c - completion_comm.c - 0 - 0 - - - 3 - 12 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\completion_up.c - completion_up.c - 0 - 0 - - - 3 - 13 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\condvar.c - condvar.c - 0 - 0 - - - 3 - 14 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\dataqueue.c - dataqueue.c - 0 - 0 - - - 3 - 15 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\pipe.c - pipe.c - 0 - 0 - - - 3 - 16 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\ringblk_buf.c - ringblk_buf.c - 0 - 0 - - - 3 - 17 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\ringbuffer.c - ringbuffer.c - 0 - 0 - - - 3 - 18 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\waitqueue.c - waitqueue.c - 0 - 0 - - - 3 - 19 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\ipc\workqueue.c - workqueue.c - 0 - 0 - - - 3 - 20 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\pin\dev_pin.c - dev_pin.c - 0 - 0 - - - 3 - 21 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\serial\dev_serial.c - dev_serial.c - 0 - 0 - - - 3 - 22 - 1 - 0 - 0 - 0 - ..\..\..\components\drivers\can\dev_can.c - dev_can.c - 0 - 0 - - - - - Drivers - 1 - 0 - 0 - 0 - - 4 - 23 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drivers\drv_uart.c - drv_uart.c - 0 - 0 - - - 4 - 24 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drivers\drv_gpio.c - drv_gpio.c - 0 - 0 - - - 4 - 25 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drivers\drv_ecap.c - drv_ecap.c - 0 - 0 - - - 4 - 26 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drv_common.c - drv_common.c - 0 - 0 - - - 4 - 27 - 1 - 0 - 0 - 0 - board\board.c - board.c - 0 - 0 - - - 4 - 28 - 1 - 0 - 0 - 0 - ..\libraries\HAL_Drivers\drivers\drv_can.c - drv_can.c - 0 - 0 - - - - - Finsh - 0 - 0 - 0 - 0 - - 5 - 29 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\cmd.c - cmd.c - 0 - 0 - - - 5 - 30 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\msh.c - msh.c - 0 - 0 - - - 5 - 31 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\msh_file.c - msh_file.c - 0 - 0 - - - 5 - 32 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\msh_parse.c - msh_parse.c - 0 - 0 - - - 5 - 33 - 1 - 0 - 0 - 0 - ..\..\..\components\finsh\shell.c - shell.c - 0 - 0 - - - - - Kernel - 0 - 0 - 0 - 0 - - 6 - 34 - 1 - 0 - 0 - 0 - ..\..\..\src\clock.c - clock.c - 0 - 0 - - - 6 - 35 - 1 - 0 - 0 - 0 - ..\..\..\src\components.c - components.c - 0 - 0 - - - 6 - 36 - 1 - 0 - 0 - 0 - ..\..\..\src\cpu_up.c - cpu_up.c - 0 - 0 - - - 6 - 37 - 1 - 0 - 0 - 0 - ..\..\..\src\defunct.c - defunct.c - 0 - 0 - - - 6 - 38 - 1 - 0 - 0 - 0 - ..\..\..\src\idle.c - idle.c - 0 - 0 - - - 6 - 39 - 1 - 0 - 0 - 0 - ..\..\..\src\ipc.c - ipc.c - 0 - 0 - - - 6 - 40 - 1 - 0 - 0 - 0 - ..\..\..\src\irq.c - irq.c - 0 - 0 - - - 6 - 41 - 1 - 0 - 0 - 0 - ..\..\..\src\kservice.c - kservice.c - 0 - 0 - - - 6 - 42 - 1 - 0 - 0 - 0 - ..\..\..\src\mem.c - mem.c - 0 - 0 - - - 6 - 43 - 1 - 0 - 0 - 0 - ..\..\..\src\mempool.c - mempool.c - 0 - 0 - - - 6 - 44 - 1 - 0 - 0 - 0 - ..\..\..\src\object.c - object.c - 0 - 0 - - - 6 - 45 - 1 - 0 - 0 - 0 - ..\..\..\src\scheduler_comm.c - scheduler_comm.c - 0 - 0 - - - 6 - 46 - 1 - 0 - 0 - 0 - ..\..\..\src\scheduler_up.c - scheduler_up.c - 0 - 0 - - - 6 - 47 - 1 - 0 - 0 - 0 - ..\..\..\src\thread.c - thread.c - 0 - 0 - - - 6 - 48 - 1 - 0 - 0 - 0 - ..\..\..\src\timer.c - timer.c - 0 - 0 - - - - - Libc - 0 - 0 - 0 - 0 - - 7 - 49 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\armlibc\syscall_mem.c - syscall_mem.c - 0 - 0 - - - 7 - 50 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\armlibc\syscalls.c - syscalls.c - 0 - 0 - - - 7 - 51 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cctype.c - cctype.c - 0 - 0 - - - 7 - 52 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cstdlib.c - cstdlib.c - 0 - 0 - - - 7 - 53 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cstring.c - cstring.c - 0 - 0 - - - 7 - 54 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\ctime.c - ctime.c - 0 - 0 - - - 7 - 55 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cunistd.c - cunistd.c - 0 - 0 - - - 7 - 56 - 1 - 0 - 0 - 0 - ..\..\..\components\libc\compilers\common\cwchar.c - cwchar.c - 0 - 0 - - - 7 - 57 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\kerrno.c - kerrno.c - 0 - 0 - - - 7 - 58 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\kstdio.c - kstdio.c - 0 - 0 - - - 7 - 59 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\kstring.c - kstring.c - 0 - 0 - - - 7 - 60 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\rt_vsnprintf_tiny.c - rt_vsnprintf_tiny.c - 0 - 0 - - - 7 - 61 - 1 - 0 - 0 - 0 - ..\..\..\src\klibc\rt_vsscanf.c - rt_vsscanf.c - 0 - 0 - - - - - NS800RT7-CMSIS - 1 - 0 - 0 - 0 - - 8 - 62 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\Device\Src\system_NS800RT7xxx.c - system_NS800RT7xxx.c - 0 - 0 - - - 8 - 63 - 2 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\Device\Src\arm\startup_NS800RT7xxx.s - startup_NS800RT7xxx.s - 0 - 0 - - - - - NS800RT7-HAL - 1 - 0 - 0 - 0 - - 9 - 64 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\crc.c - crc.c - 0 - 0 - - - 9 - 65 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\debug.c - debug.c - 0 - 0 - - - 9 - 66 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flash.c - flash.c - 0 - 0 - - - 9 - 67 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\gpio.c - gpio.c - 0 - 0 - - - 9 - 68 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\interrupt.c - interrupt.c - 0 - 0 - - - 9 - 69 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\rcc.c - rcc.c - 0 - 0 - - - 9 - 70 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\sram.c - sram.c - 0 - 0 - - - 9 - 71 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\syscon.c - syscon.c - 0 - 0 - - - 9 - 72 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\uart.c - uart.c - 0 - 0 - - - 9 - 73 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\xbar.c - xbar.c - 0 - 0 - - - 9 - 74 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\exti.c - exti.c - 0 - 0 - - - 9 - 75 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\dmamux.c - dmamux.c - 0 - 0 - - - 9 - 76 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\edma.c - edma.c - 0 - 0 - - - 9 - 77 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\ecap.c - ecap.c - 0 - 0 - - - 9 - 78 - 1 - 0 - 0 - 0 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flexcan.c - flexcan.c - 0 - 0 - - - diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx index b34232eb3ba..21d4a4accc9 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/project.uvprojx @@ -1,46 +1,43 @@ - 2.1 -
### uVision Project, (C) Keil Software
- rt-thread 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG - 1 + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 - NS800RT7P65D-DHQFBY2 - Novosense - NOVOSENSE.NS800RT7XXX.0.5.2 - https://www.novosns.com/ - IRAM(0x20000000,0x00020000) IRAM2(0x00000000,0x00020000) IROM(0x08000000,0x00080000) IROM2(0x08080000,0x00080000) XRAM(0x20100000,0x00020000) XRAM2(0x20120000,0x00020000) CPUTYPE("Cortex-M7") FPU3(DFPU) CLOCK(12000000) ELITTLE - - - UL2CM3(-S0 -C0 -P0 -FD20120000 -FC2000 -FN2 -FF0NS800RT7xxx_FlashBank1 -FS08000000 -FL080000 -FF1NS800RT7xxx_FlashBank2 -FS18080000 -FL180000 -FP0($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank1.FLM) -FP1($$Device:NS800RT7P65D-DHQFBY2$CMSIS\Flash\NS800RT7xxx_FlashBank2.FLM)) + STM32H743ZITx + STMicroelectronics + Keil.STM32H7xx_DFP.4.1.3 + https://www.keil.com/pack/ + IRAM(0x20000000-0x2001FFFF) IRAM2(0x24000000-0x2407FFFF) IROM(0x8000000-0x81FFFFF) CLOCK(12000000) FPU3(DFPU) CPUTYPE("Cortex-M7") ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20010000 -FC1000 -FN1 -FF0STM32F7x_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F746NGHx$CMSIS\Flash\STM32F7x_1024.FLM)) 0 - - - - - - - - - - - $$Device:NS800RT7P65D-DHQFBY2$CMSIS\SVD\NS800RT7P65x.svd + $$Device:STM32F746NGHx$Drivers\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h + + + + + + + + + + $$Device:STM32F746NGHx$CMSIS\SVD\STM32F7x.svd 0 0 - - - - - + + + + + 0 0 @@ -54,7 +51,7 @@ 0 0 1 - 1 + 0 .\build\ 1 0 @@ -62,8 +59,8 @@ 0 0 - - + + 0 0 0 @@ -72,8 +69,8 @@ 0 0 - - + + 0 0 0 @@ -83,14 +80,14 @@ 1 0 fromelf --bin !L --output rtthread.bin - + 0 0 0 0 0 - + 0 @@ -104,8 +101,8 @@ 0 0 3 - - + + 1 @@ -139,10 +136,10 @@ 1 BIN\UL2CM3.DLL "" () - - - - + + + + 0 @@ -175,27 +172,27 @@ 0 0 "Cortex-M7" - + 0 0 0 1 1 - 1 + 0 0 - 3 + 2 0 0 0 1 - 1 + 0 8 1 0 0 0 - 4 - 4 + 3 + 3 0 0 0 @@ -207,12 +204,12 @@ 0 0 1 - 1 + 0 0 0 0 1 - 1 + 0 0 @@ -252,12 +249,12 @@ 1 0x8000000 - 0x80000 + 0x200000 - 1 - 0x20100000 - 0x20000 + 0 + 0x0 + 0x0 1 @@ -277,22 +274,22 @@ 1 0x8000000 - 0x80000 + 0x100000 1 - 0x8080000 - 0x80000 + 0x200000 + 0x100000 0 - 0x20100000 - 0x20000 + 0x0 + 0x0 0 - 0x20120000 - 0x20000 + 0x0 + 0x0 0 @@ -301,16 +298,16 @@ 0 - 0x20000000 - 0x20000 + 0x20010000 + 0x40000 0 - 0x0 - 0x20000 + 0x20000000 + 0x10000 - + 1 @@ -323,24 +320,24 @@ 1 0 0 - 3 + 0 0 0 1 0 0 - 3 - 3 + 0 + 0 1 1 0 0 0 - -Wno-tautological-constant-out-of-range-compare - NS800RT7P65X DUAL_CORE_ENABLE=0 SYSCLK_USE_PLL SYSCLK_SOURCE_USE_HXTL PLLCLK_SOURCE_USE_HXTL RT_USING_ARMLIBC, RT_USING_LIBC, NS800RT7P65X, USE_HAL_DRIVER, __RTTHREAD__, __CLK_TCK=RT_TICK_PER_SECOND, __STDC_LIMIT_MACROS - - ..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\libc\posix\io\poll;applications;..\..\..\components\net\utest;.;..\..\..\components\drivers\include;..\..\..\libcpu\arm\common;..\..\..\components\drivers\phy;..\..\..\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\drivers\config;..\..\..\components\libc\compilers\common\include;..\..\..\components\libc\posix\ipc;..\..\..\components\libc\posix\io\epoll;..\libraries\HAL_Drivers\drivers;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\drivers\smp_call;..\libraries\HAL_Drivers;.\packages\novosns-series\NS800RT7XXX\StdDriver\Inc;..\..\..\components\drivers\include;..\..\..\libcpu\arm\cortex-m7;packages\CMSIS-Core-latest\Include;board;..\..\..\components\libc\posix\io\eventfd;.\packages\novosns-series\NS800RT7XXX\Device\Inc;.\packages\novosns-series\NS800RT7XXX\StdDriver\Inc\ti;..\..\..\components\drivers\can + + __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, RT_USING_LIBC, RT_USING_ARMLIBC, __RTTHREAD__ + + ../../../../components/drivers/include;../../../../libcpu/arm/cortex-m7;../../../../components/libc/posix/ipc;packages/novosns-series/NS800RT7XXX/StdDriver/Inc/ti;../../../../components/net/utest;.;../../../../components/libc/posix/io/eventfd;applications;libraries/HAL_Drivers;../libraries/HAL_Drivers;../../../../components/libc/compilers/common/include;../../../../components/drivers/smp_call;../../../../components/libc/compilers/common/extension/fcntl/octal;../../../../components/drivers/include;../../../../components/finsh;packages/CMSIS-Core-latest/Include;../../../../components/libc/posix/io/epoll;../../../../libcpu/arm/common;../../../../components/drivers/include;board;../../../../components/libc/posix/io/poll;../../../../components/drivers/include;packages/novosns-series/NS800RT7XXX/Device/Inc;../../../../components/drivers/include;../libraries/HAL_Drivers/drivers;../../../../include;packages/novosns-series/NS800RT7XXX/StdDriver/Inc/ti;packages/novosns-series/NS800RT7XXX/StdDriver/Inc;libraries/HAL_Drivers/drivers;packages/novosns-series/NS800RT7XXX/StdDriver/Inc;../../../../components/libc/compilers/common/extension;../../../../components/drivers/phy;packages/novosns-series/NS800RT7XXX/Device/Inc;../../../../components/drivers/include;../libraries/HAL_Drivers/drivers/config;../../../../components/drivers/include @@ -355,10 +352,10 @@ 0 4 - - - - + + + + @@ -370,13 +367,13 @@ 0 0x08000000 0x20000000 - + .\board\linker_scripts\link.sct - - - - - + + + + + @@ -387,799 +384,408 @@ main.c 1 - applications\main.c + applications/main.c + + - rt_ecap.c + rt_can.c 1 - .\applications\rt_ecap.c + applications/rt_can.c + + - rt_can.c + rt_ecap.c 1 - .\applications\rt_can.c + applications/rt_ecap.c CPU - - atomic_arm.c - 1 - ..\..\..\libcpu\arm\common\atomic_arm.c - div0.c 1 - ..\..\..\libcpu\arm\common\div0.c + ../../../../libcpu/arm/common/div0.c + + showmem.c 1 - ..\..\..\libcpu\arm\common\showmem.c + ../../../../libcpu/arm/common/showmem.c + + context_rvds.S 2 - ..\..\..\libcpu\arm\cortex-m7\context_rvds.S + ../../../../libcpu/arm/cortex-m7/context_rvds.S + + cpu_cache.c 1 - ..\..\..\libcpu\arm\cortex-m7\cpu_cache.c + ../../../../libcpu/arm/cortex-m7/cpu_cache.c + + cpuport.c 1 - ..\..\..\libcpu\arm\cortex-m7\cpuport.c + ../../../../libcpu/arm/cortex-m7/cpuport.c + + + + + Device + + + system_NS800RT7xxx.c + 1 + packages/novosns-series/NS800RT7XXX/Device/Src/system_NS800RT7xxx.c + + + + + startup_NS800RT7xxx.s + 2 + packages/novosns-series/NS800RT7XXX/Device/Src/arm/startup_NS800RT7xxx.s DeviceDrivers + + + dev_can.c + 1 + ../../../../components/drivers/can/dev_can.c + + + + + + __RT_IPC_SOURCE__ + + + + + + + + device.c 1 - ..\..\..\components\drivers\core\device.c + ../../../../components/drivers/core/device.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + completion_comm.c 1 - ..\..\..\components\drivers\ipc\completion_comm.c + ../../../../components/drivers/ipc/completion_comm.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + completion_up.c 1 - ..\..\..\components\drivers\ipc\completion_up.c + ../../../../components/drivers/ipc/completion_up.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + condvar.c 1 - ..\..\..\components\drivers\ipc\condvar.c + ../../../../components/drivers/ipc/condvar.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + dataqueue.c 1 - ..\..\..\components\drivers\ipc\dataqueue.c + ../../../../components/drivers/ipc/dataqueue.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + pipe.c 1 - ..\..\..\components\drivers\ipc\pipe.c + ../../../../components/drivers/ipc/pipe.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + ringblk_buf.c 1 - ..\..\..\components\drivers\ipc\ringblk_buf.c + ../../../../components/drivers/ipc/ringblk_buf.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + ringbuffer.c 1 - ..\..\..\components\drivers\ipc\ringbuffer.c + ../../../../components/drivers/ipc/ringbuffer.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + waitqueue.c 1 - ..\..\..\components\drivers\ipc\waitqueue.c + ../../../../components/drivers/ipc/waitqueue.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + workqueue.c 1 - ..\..\..\components\drivers\ipc\workqueue.c + ../../../../components/drivers/ipc/workqueue.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + dev_pin.c 1 - ..\..\..\components\drivers\pin\dev_pin.c + ../../../../components/drivers/pin/dev_pin.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + + + dev_serial.c 1 - ..\..\..\components\drivers\serial\dev_serial.c + ../../../../components/drivers/serial/dev_serial.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_IPC_SOURCE__ - + - - dev_can.c - 1 - ..\..\..\components\drivers\can\dev_can.c - Drivers - drv_uart.c - 1 - ..\libraries\HAL_Drivers\drivers\drv_uart.c - - - drv_gpio.c + board.c 1 - ..\libraries\HAL_Drivers\drivers\drv_gpio.c + board/board.c + + + + Finsh + - drv_ecap.c + shell.c 1 - ..\libraries\HAL_Drivers\drivers\drv_ecap.c + ../../../../components/finsh/shell.c + + - drv_common.c + msh.c 1 - ..\libraries\HAL_Drivers\drv_common.c + ../../../../components/finsh/msh.c + + - board.c + msh_parse.c 1 - board\board.c + ../../../../components/finsh/msh_parse.c + + - drv_can.c + cmd.c 1 - ..\libraries\HAL_Drivers\drivers\drv_can.c + ../../../../components/finsh/cmd.c - Finsh + HAL_Driver - cmd.c + drv_common.c 1 - ..\..\..\components\finsh\cmd.c + ../libraries/HAL_Drivers/drv_common.c + + + + HAL_Drivers + - msh.c + drv_gpio.c 1 - ..\..\..\components\finsh\msh.c + ../libraries/HAL_Drivers/drivers/drv_gpio.c + + - msh_file.c + drv_uart.c 1 - ..\..\..\components\finsh\msh_file.c + ../libraries/HAL_Drivers/drivers/drv_uart.c + + - msh_parse.c + drv_can.c 1 - ..\..\..\components\finsh\msh_parse.c + ../libraries/HAL_Drivers/drivers/drv_can.c + + - shell.c + drv_ecap.c 1 - ..\..\..\components\finsh\shell.c + ../libraries/HAL_Drivers/drivers/drv_ecap.c @@ -1189,838 +795,281 @@ clock.c 1 - ..\..\..\src\clock.c + ../../../../src/clock.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + components.c 1 - ..\..\..\src\components.c + ../../../../src/components.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + cpu_up.c 1 - ..\..\..\src\cpu_up.c + ../../../../src/cpu_up.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + defunct.c 1 - ..\..\..\src\defunct.c + ../../../../src/defunct.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + idle.c 1 - ..\..\..\src\idle.c + ../../../../src/idle.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + ipc.c 1 - ..\..\..\src\ipc.c + ../../../../src/ipc.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + irq.c 1 - ..\..\..\src\irq.c + ../../../../src/irq.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + kservice.c 1 - ..\..\..\src\kservice.c + ../../../../src/kservice.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + mem.c 1 - ..\..\..\src\mem.c + ../../../../src/mem.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + mempool.c 1 - ..\..\..\src\mempool.c + ../../../../src/mempool.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + object.c 1 - ..\..\..\src\object.c + ../../../../src/object.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + scheduler_comm.c 1 - ..\..\..\src\scheduler_comm.c + ../../../../src/scheduler_comm.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + scheduler_up.c 1 - ..\..\..\src\scheduler_up.c + ../../../../src/scheduler_up.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + thread.c 1 - ..\..\..\src\thread.c + ../../../../src/thread.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + + + timer.c 1 - ..\..\..\src\timer.c + ../../../../src/timer.c - - 2 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 3 - - - 1 - - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 2 - 0 - 2 - 2 - 2 - 2 - 2 - 0 - 0 - 2 - 2 - 2 - 2 - 2 __RT_KERNEL_SOURCE__ - + @@ -2034,182 +1083,474 @@ syscall_mem.c 1 - ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + ../../../../components/libc/compilers/armlibc/syscall_mem.c + + syscalls.c 1 - ..\..\..\components\libc\compilers\armlibc\syscalls.c + ../../../../components/libc/compilers/armlibc/syscalls.c + + cctype.c 1 - ..\..\..\components\libc\compilers\common\cctype.c + ../../../../components/libc/compilers/common/cctype.c + + cstdlib.c 1 - ..\..\..\components\libc\compilers\common\cstdlib.c + ../../../../components/libc/compilers/common/cstdlib.c + + cstring.c 1 - ..\..\..\components\libc\compilers\common\cstring.c + ../../../../components/libc/compilers/common/cstring.c + + ctime.c 1 - ..\..\..\components\libc\compilers\common\ctime.c + ../../../../components/libc/compilers/common/ctime.c + + cunistd.c 1 - ..\..\..\components\libc\compilers\common\cunistd.c + ../../../../components/libc/compilers/common/cunistd.c + + cwchar.c 1 - ..\..\..\components\libc\compilers\common\cwchar.c + ../../../../components/libc/compilers/common/cwchar.c + + kerrno.c 1 - ..\..\..\src\klibc\kerrno.c + ../../../../src/klibc/kerrno.c + + kstdio.c 1 - ..\..\..\src\klibc\kstdio.c + ../../../../src/klibc/kstdio.c + + kstring.c 1 - ..\..\..\src\klibc\kstring.c + ../../../../src/klibc/kstring.c + + rt_vsnprintf_tiny.c 1 - ..\..\..\src\klibc\rt_vsnprintf_tiny.c + ../../../../src/klibc/rt_vsnprintf_tiny.c + + rt_vsscanf.c 1 - ..\..\..\src\klibc\rt_vsscanf.c + ../../../../src/klibc/rt_vsscanf.c - NS800RT7-CMSIS + StdDriver - system_NS800RT7xxx.c + adc.c 1 - .\packages\novosns-series\NS800RT7XXX\Device\Src\system_NS800RT7xxx.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/adc.c + + - startup_NS800RT7xxx.s - 2 - .\packages\novosns-series\NS800RT7XXX\Device\Src\arm\startup_NS800RT7xxx.s + aeshash.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/aeshash.c + + + + + anass.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/anass.c + + + + + awk.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/awk.c + + + + + bgcrc.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/bgcrc.c + + + + + btim.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/btim.c + + + + + clb.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/clb.c + + + + + cmpss.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/cmpss.c - - - NS800RT7-HAL crc.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\crc.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/crc.c + + + + dac.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/dac.c + + + + + dcc.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/dcc.c + + + debug.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\debug.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/debug.c + + + + + dmamux.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/dmamux.c + + + + + ecap.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/ecap.c + + + + edma.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/edma.c + + + + + emath_basic.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_basic.c + + + + + emath_filter.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_filter.c + + + + + emath_matrix.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_matrix.c + + + + + emath_transform.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/emath_transform.c + + + + + epg.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/epg.c + + + + + epwm.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/epwm.c + + + + + eqep.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/eqep.c + + + + + exti.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/exti.c + + + flash.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flash.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/flash.c + + + + + flexcan.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/flexcan.c + + + + fmu.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/fmu.c + + + gpio.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\gpio.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/gpio.c + + + + i2c.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/i2c.c + + + interrupt.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\interrupt.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/interrupt.c + + + + + iwdg1.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/iwdg1.c + + + + + iwdg2.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/iwdg2.c + + + + + lin.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/lin.c + + + + + lptim.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/lptim.c + + + + + mcm.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/mcm.c + + + + + mu.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/mu.c + + + + + pmbus.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/pmbus.c + + + + pwr.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/pwr.c + + + + + qspi.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/qspi.c + + + rcc.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\rcc.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/rcc.c + + + + sdfm.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/sdfm.c + + + + + sema.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/sema.c + + + + + smpu.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/smpu.c + + + + + spi.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/spi.c + + + sram.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\sram.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/sram.c + + + + + stim.c + 1 + packages/novosns-series/NS800RT7XXX/StdDriver/Src/stim.c + + syscon.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\syscon.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/syscon.c + + - uart.c + tim.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\uart.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/tim.c + + - xbar.c + trng.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\xbar.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/trng.c + + - exti.c + uart.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\exti.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/uart.c + + - dmamux.c + upp.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\dmamux.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/upp.c + + - edma.c + version.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\edma.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/version.c + + - ecap.c + wwdg.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\ecap.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/wwdg.c + + - flexcan.c + xbar.c 1 - .\packages\novosns-series\NS800RT7XXX\StdDriver\Src\flexcan.c + packages/novosns-series/NS800RT7XXX/StdDriver/Src/xbar.c - - - - + + + - - - - - project - 1 - - - -
diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h index 08758673ebf..d1863e8389e 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h @@ -421,3 +421,4 @@ /* end of On-chip Peripheral Drivers */ #endif + From daa7f06c400469e9ef60f789753706db3566e4ba Mon Sep 17 00:00:00 2001 From: rcitach Date: Mon, 11 May 2026 05:34:43 +0000 Subject: [PATCH 07/11] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applications/rt_can.c | 166 ------------------ .../applications/rt_can.h | 0 .../applications/rt_ecap.c | 58 ------ .../applications/rt_ecap.h | 19 -- 4 files changed, 243 deletions(-) delete mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c delete mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.h delete mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c delete mode 100644 bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c deleted file mode 100644 index b102b2e46eb..00000000000 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.c +++ /dev/null @@ -1,166 +0,0 @@ -#include -#include -#include "drivers/dev_can.h" -#include "rt_can.h" - - -#define CAN_DEV_NAME "canfd1" /* The name of the CAN device */ - -static rt_device_t can_dev; /* CAN device handle */ -static struct rt_semaphore rx_sem; /* Semaphore for message reception */ - - -/* Callback function for CAN reception */ -static rt_err_t can_rx_callback(rt_device_t dev, rt_size_t size) -{ - /* The CAN interrupt calls this callback when data is received. */ - /* Release the semaphore to notify the receiving thread. */ - rt_sem_release(&rx_sem); - return RT_EOK; -} - -static void can_rx_thread(void *parameter) -{ - rt_err_t res; - struct rt_can_msg rx_msg = {0}; - - /* Set the receive callback function */ - rt_device_set_rx_indicate(can_dev, can_rx_callback); - - /* Some drivers might require an explicit start command. */ - /* This is driver-specific. */ - rt_uint32_t cmd_arg = 1; /* Argument to enable the controller */ - res = rt_device_control(can_dev, RT_CAN_CMD_START, &cmd_arg); - RT_ASSERT(res == RT_EOK); - - #define CAN_RX_BATCH_SIZE 8 - - while (1) - { - /* Block and wait for the semaphore, which is released by the receive callback. */ - rt_sem_take(&rx_sem, RT_WAITING_FOREVER); - - /* Drain all pending frames in batches. */ - struct rt_can_msg rx_buf[CAN_RX_BATCH_SIZE]; - rt_ssize_t read_size; - rt_size_t count; - do - { - for (rt_size_t i = 0; i < CAN_RX_BATCH_SIZE; i++) - { - rx_buf[i].hdr_index = -1; - } - - read_size = rt_device_read(can_dev, 0, rx_buf, sizeof(rx_buf)); - if (read_size <= 0) - { - break; - } - count = (rt_size_t)(read_size / sizeof(rx_buf[0])); - for (rt_size_t i = 0; i < count; i++) - { - /* Print the received message's ID and data. */ - rt_kprintf("Received a message. ID: 0x%x, Data: ", rx_buf[i].id); - for (int j = 0; j < rx_buf[i].len; j++) - { - rt_kprintf("%02x ", rx_buf[i].data[j]); - } - rt_kprintf("\n"); - } - } - while(count == CAN_RX_BATCH_SIZE); - } -} - -static void can_tx_thread(void *parameter) -{ - rt_err_t res; - static uint8_t index; - struct rt_can_msg blocking_msg = {0}; - blocking_msg.id = 0x78; - blocking_msg.ide = RT_CAN_STDID; - blocking_msg.rtr = RT_CAN_DTR; - blocking_msg.len = 8; - - while(1) - { - /* The `nonblocking` flag is 0 by default for blocking mode. */ - for(int i = 0; i < 8; i++) blocking_msg.data[i] = i+index; - index++; - - rt_kprintf("Attempting to send a message in BLOCKING mode...\n"); - if (rt_device_write(can_dev, 0, &blocking_msg, sizeof(blocking_msg)) == sizeof(blocking_msg)) - { - rt_kprintf("Blocking message sent successfully.\n"); - } - else - { - rt_kprintf("Blocking message send failed.\n"); - } - - rt_thread_mdelay(1000); /* Wait a moment for clarity in the log */ - } -} - -int can_sample(int argc, char *argv[]) -{ - rt_err_t res; - rt_thread_t thread; - char can_name[RT_NAME_MAX]; - - /* Allow specifying the CAN device name from the command line, e.g., "can_sample can2" */ - if (argc == 2) - { - rt_strncpy(can_name, argv[1], RT_NAME_MAX); - } - else - { - rt_strncpy(can_name, CAN_DEV_NAME, RT_NAME_MAX); - } - - /* Find the CAN device by name */ - can_dev = rt_device_find(can_name); - if (!can_dev) - { - rt_kprintf("find device %s failed!\n", can_name); - return -RT_ERROR; - } - - /* Initialize the receive semaphore */ - rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); - - /* Open the CAN device in interrupt-driven TX/RX mode */ - res = rt_device_open(can_dev, RT_DEVICE_FLAG_INT_TX | RT_DEVICE_FLAG_INT_RX); - RT_ASSERT(res == RT_EOK); - - /* Create and start the data receiving thread */ - thread = rt_thread_create("can_rx", can_rx_thread, RT_NULL, 1024, 25, 10); - if (thread != RT_NULL) - { - rt_thread_startup(thread); - } - else - { - rt_kprintf("create can_rx thread failed!\n"); - return -RT_ERROR; - } - - /* Create and start the data receiving thread */ - thread = rt_thread_create("can_tx", can_tx_thread, RT_NULL, 1024, 25, 10); - if (thread != RT_NULL) - { - rt_thread_startup(thread); - } - else - { - rt_kprintf("create can_tx thread failed!\n"); - return -RT_ERROR; - } - - rt_kprintf("CAN device %s opened successfully.\n", can_name); - - return res; -} -/* Export the function to the MSH command line */ -MSH_CMD_EXPORT(can_sample, can device usage example); - diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_can.h deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c deleted file mode 100644 index fed5a1b4613..00000000000 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.c +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include "drv_ecap.h" -#include "rt_ecap.h" - -static void ecap_test_thread (void *parameter) -{ - rt_device_t dev; - struct rt_ecap_capture cap; - - dev = rt_device_find("ecap1"); - if (dev == RT_NULL) - { - rt_kprintf("ecap1 not found\n"); - return; - } - - if (rt_device_open(dev, RT_DEVICE_OFLAG_RDONLY) != RT_EOK) - { - rt_kprintf("ecap1 open failed\n"); - return; - } - - while (1) - { - if (rt_device_read(dev, 0, &cap, sizeof(cap)) == sizeof(cap)) - { - rt_kprintf("cap1=%u cap2=%u cap3=%u cap4=%u high=%u low=%u total=%u\n", cap.cap1, cap.cap2, cap.cap3, - cap.cap4, cap.period_high, cap.period_low, cap.period_total); - } - else - { - rt_kprintf("Capturing...\n"); - } - rt_thread_mdelay(1000); - } -} - -int rt_ecap_test_init (void) -{ - rt_thread_t tid; - - tid = rt_thread_create("ecap_test", ecap_test_thread, RT_NULL, 2048, 20, 10); - - if (tid != RT_NULL) - { - rt_kprintf("create ecap_test thread success\n"); - rt_thread_startup(tid); - } - else - { - rt_kprintf("create ecap_test thread failed\n"); - } - - return 0; -} -MSH_CMD_EXPORT(rt_ecap_test_init, ecap capture test); - diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h deleted file mode 100644 index 9b0461cadd3..00000000000 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/applications/rt_ecap.h +++ /dev/null @@ -1,19 +0,0 @@ - -#ifndef __DRV_CONFIG_H__ -#define __DRV_CONFIG_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -int rt_ecap_test_init (void); - -#ifdef __cplusplus -} -#endif - -#endif - From 7558df046b1d3e55e39a6aea3dc6f26bcb52d87d Mon Sep 17 00:00:00 2001 From: rcitach Date: Mon, 11 May 2026 06:35:47 +0000 Subject: [PATCH 08/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20bsp=20=E7=9C=8B?= =?UTF-8?q?=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ALL_BSP_COMPILE.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/ALL_BSP_COMPILE.json b/.github/ALL_BSP_COMPILE.json index 9977e293f41..01d68bc74fd 100644 --- a/.github/ALL_BSP_COMPILE.json +++ b/.github/ALL_BSP_COMPILE.json @@ -518,6 +518,13 @@ "SUB_RTT_BSP": [ "allwinner/d1s" ] + }, + { + "RTT_BSP": "novosns", + "RTT_TOOL_CHAIN": "sourcery-arm", + "SUB_RTT_BSP": [ + "novosns/ns800/ns800rt7p65-nssinepad" + ] } ] } From d5d63a50998c53bc7b18ce0957e44ae242d6c880 Mon Sep 17 00:00:00 2001 From: rcitach Date: Mon, 11 May 2026 08:20:54 +0000 Subject: [PATCH 09/11] =?UTF-8?q?=E5=BC=80=E5=90=AF=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=8C=85=E6=A3=80=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct index 8847239bfd1..8621cc11a46 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/SConstruct @@ -32,7 +32,7 @@ def bsp_pkg_check(): print("===============================================================================") exit(1) -# RegisterPreBuildingAction(bsp_pkg_check) +RegisterPreBuildingAction(bsp_pkg_check) TARGET = 'rt-thread.' + rtconfig.TARGET_EXT From 11d9142f2405629e0e85f31f316592fb550e9de6 Mon Sep 17 00:00:00 2001 From: rcitach Date: Mon, 11 May 2026 08:21:15 +0000 Subject: [PATCH 10/11] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ns800/ns800rt7p65-nssinepad/board/Kconfig | 18 ++++++++++++++++++ .../ns800/ns800rt7p65-nssinepad/board/board.c | 2 +- .../ns800/ns800rt7p65-nssinepad/rtconfig.py | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig index c4bbdf3080b..e98f3308b0b 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/Kconfig @@ -1,5 +1,23 @@ menu "On-chip Peripheral Drivers" + menuconfig BOARD_CLK_CONF + bool "Clock Configuration" + default y + if BOARD_CLK_CONF + config SYSCLK_USE_PLL + bool "Use PLL as system clock source" + default y + + config SYSCLK_SOURCE_USE_HXTL + bool "Use High-Speed Crystal Oscillator (HXTL) as system clock source" + default y + depends on SYSCLK_USE_PLL + config PLLCLK_SOURCE_USE_HXTL + bool "Use High-Speed Crystal Oscillator (HXTL) as PLL clock source" + default y + depends on SYSCLK_USE_PLL + endif + menuconfig BSP_USING_GPIO bool "Enable GPIO" select RT_USING_PIN diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c index 69a33795e68..76eb83934c9 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/board/board.c @@ -138,7 +138,7 @@ void Switch_init (void) void Device_init(void) { System_setClock(); -#if (DUAL_CORE_ENABLE == 0) +#ifndef RT_USING_SMP Device_enableAllPeripheralsInCpu1(); #endif Device_enableAllPeripherals(); diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py index c8ad62a6939..701999b1061 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.py @@ -48,9 +48,9 @@ OBJDUMP = PREFIX + 'objdump' OBJCPY = PREFIX + 'objcopy' - DEVICE = ' -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' + DEVICE = ' -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections' CFLAGS = DEVICE + ' -Dgcc' + ' -DNS800RT7P65X' - AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp' LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds' CPATH = '' From 495d129fc4d39f563c5991420c45f1aaf1684acd Mon Sep 17 00:00:00 2001 From: rcitach Date: Mon, 11 May 2026 08:21:29 +0000 Subject: [PATCH 11/11] =?UTF-8?q?=E5=88=B7=E6=96=B0menuconfig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/novosns/ns800/ns800rt7p65-nssinepad/.config | 15 +++++++++++++-- .../ns800/ns800rt7p65-nssinepad/rtconfig.h | 11 ++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config index eeb6ca5a321..65ac116100b 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/.config @@ -883,9 +883,7 @@ CONFIG_PKG_CMSIS_CORE_VER="latest" # # NUVOTON Drivers # -# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set # CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set -# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set # end of NUVOTON Drivers # @@ -911,6 +909,15 @@ CONFIG_PKG_CMSIS_CORE_VER="latest" # CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set # CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set # end of FT32 HAL & SDK Drivers + +# +# NOVOSNS Drivers +# +CONFIG_PKG_USING_NOVOSNS_SERIES_DRIVER=y +CONFIG_PKG_NOVOSNS_SERIES_DRIVER_PATH="/packages/peripherals/hal-sdk/novosns/novosns-series" +CONFIG_PKG_USING_NOVOSNS_SERIES_DRIVER_LATEST_VERSION=y +CONFIG_PKG_NOVOSNS_SERIES_DRIVER_VER="latest" +# end of NOVOSNS Drivers # end of HAL & SDK Drivers # @@ -1435,6 +1442,10 @@ CONFIG_PKG_CMSIS_CORE_VER="latest" # # On-chip Peripheral Drivers # +CONFIG_BOARD_CLK_CONF=y +CONFIG_SYSCLK_USE_PLL=y +CONFIG_SYSCLK_SOURCE_USE_HXTL=y +CONFIG_PLLCLK_SOURCE_USE_HXTL=y CONFIG_BSP_USING_GPIO=y # CONFIG_BSP_GPIO_PIN_IRQ is not set CONFIG_BSP_USING_UART=y diff --git a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h index d1863e8389e..3986a908b5f 100644 --- a/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h +++ b/bsp/novosns/ns800/ns800rt7p65-nssinepad/rtconfig.h @@ -329,6 +329,12 @@ /* FT32 HAL & SDK Drivers */ /* end of FT32 HAL & SDK Drivers */ + +/* NOVOSNS Drivers */ + +#define PKG_USING_NOVOSNS_SERIES_DRIVER +#define PKG_USING_NOVOSNS_SERIES_DRIVER_LATEST_VERSION +/* end of NOVOSNS Drivers */ /* end of HAL & SDK Drivers */ /* sensors drivers */ @@ -411,6 +417,10 @@ /* On-chip Peripheral Drivers */ +#define BOARD_CLK_CONF +#define SYSCLK_USE_PLL +#define SYSCLK_SOURCE_USE_HXTL +#define PLLCLK_SOURCE_USE_HXTL #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_NS800_UART_TX_TIMEOUT 6000 @@ -421,4 +431,3 @@ /* end of On-chip Peripheral Drivers */ #endif -