diff --git a/bsp/hc32l196/.config b/bsp/hc32l196/.config index 4f284469ca87f73e8a142dbdcf8d059edf543917..d2717164a01a241bb2e9ea4385052ae835ea7093 100644 --- a/bsp/hc32l196/.config +++ b/bsp/hc32l196/.config @@ -181,7 +181,7 @@ CONFIG_RT_USING_DEVICE=y CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" -CONFIG_RT_VER_NUM=0x50201 +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 @@ -346,8 +346,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_RT_USING_RT_LINK is not set # end of Utilities -# CONFIG_RT_USING_VBUS is not set - # # Using USB legacy version # @@ -356,6 +354,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # @@ -384,7 +383,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 @@ -490,9 +488,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # @@ -520,7 +515,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # @@ -582,7 +576,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # tools packages # # 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 @@ -627,9 +620,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_VOFA_PLUS is not set # CONFIG_PKG_USING_RT_TRACE 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 # end of tools packages # @@ -641,6 +631,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # CONFIG_PKG_USING_RT_MEMCPY_CM is not set # CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set # end of enhanced kernel services # CONFIG_PKG_USING_AUNITY is not set @@ -658,6 +649,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # CONFIG_PKG_USING_CMSIS_5 is not set # CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set # CONFIG_PKG_USING_CMSIS_NN is not set # CONFIG_PKG_USING_CMSIS_RTOS1 is not set # CONFIG_PKG_USING_CMSIS_RTOS2 is not set @@ -709,6 +701,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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_CHERRYUSB 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 @@ -716,14 +709,10 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # end of system packages # @@ -737,44 +726,10 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # # 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 # @@ -805,81 +760,7 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 -# end of GD32 Drivers # end of HAL & SDK Drivers # @@ -917,17 +798,14 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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_MLX90393 is not set # CONFIG_PKG_USING_MLX90392 is not set -# CONFIG_PKG_USING_MLX90394 is not set # CONFIG_PKG_USING_MLX90397 is not set # CONFIG_PKG_USING_MS5611 is not set # CONFIG_PKG_USING_MAX31865 is not set @@ -953,9 +831,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # end of sensors drivers # @@ -1044,14 +919,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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_SPI_TOOLS is not set # end of peripheral libraries and drivers @@ -1068,7 +935,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # @@ -1080,7 +946,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # CONFIG_PKG_USING_UKAL is not set # CONFIG_PKG_USING_DIGITALCTRL is not set # CONFIG_PKG_USING_KISSFFT is not set -# CONFIG_PKG_USING_CMSIS_DSP is not set # end of Signal Processing and Control Algorithm Packages # @@ -1141,7 +1006,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 @@ -1152,7 +1016,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 # @@ -1166,7 +1029,6 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 # 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 @@ -1400,6 +1262,8 @@ CONFIG_MCU_HC32L196=y # # Onboard Peripheral Drivers # +# CONFIG_BSP_USING_SPI_FLASH is not set +# end of Onboard Peripheral Drivers # # On-chip Peripheral Drivers @@ -1407,7 +1271,13 @@ CONFIG_MCU_HC32L196=y CONFIG_BSP_USING_GPIO=y CONFIG_BSP_USING_UART=y CONFIG_BSP_USING_UART0=y -CONFIG_BSP_USING_UART1=y +# CONFIG_BSP_UART0_TX_USING_DMA is not set +# CONFIG_BSP_UART0_RX_USING_DMA is not set +# CONFIG_BSP_USING_UART1 is not set +# CONFIG_BSP_USING_UART2 is not set +# CONFIG_BSP_USING_UART3 is not set +# CONFIG_BSP_USING_I2C is not set +# CONFIG_BSP_USING_SPI is not set # end of On-chip Peripheral Drivers # diff --git a/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Include/hc32l19x.h b/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Include/hc32l19x.h index 7b06a96493ddecacef2a41f984d86819ce726119..d5b21b16f60764322c81b8bdf251f3ea3868674a 100644 --- a/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Include/hc32l19x.h +++ b/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Include/hc32l19x.h @@ -1,55 +1,21 @@ -/******************************************************************************* -* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \\file HC32L19X.h -** -** Auto generate. -** Headerfile for HC32L19X series MCU -** -** History: -** -** - 2019-07-01 0.1 Lux First version. -** -******************************************************************************/ +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file HC32l19x.h + * + * @brief Header file for HC32L19x series MCU + * + * @author MADS Team + * + ******************************************************************************/ #ifndef __HC32L19X_H__ #define __HC32L19X_H__ @@ -1380,8 +1346,8 @@ typedef struct typedef struct { - __IO uint32_t TPGS : 8; - __IO uint32_t RSV :24; + __IO uint32_t TPGS : 9; + __IO uint32_t RSV :23; } stc_flash_tpgs_field_t; typedef struct diff --git a/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/interrupts_hc32l19x.c b/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/interrupts_hc32l19x.c index 8ffcc70f30706b63e1ef0f6ed484fb45f0705018..bac65fc8066b98595d8dd82ad732dfdf871ab387 100644 --- a/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/interrupts_hc32l19x.c +++ b/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/interrupts_hc32l19x.c @@ -1,53 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file interrupts_hc32l136.c - ** - ** Interrupt management - ** @link Driver Group Some description @endlink - ** - ** - 2018-04-15 1.0 Lux First version. - ** - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file interrupts_hc32l19x.c + * + * @brief Source file for INTERRUPTS functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* @@ -61,207 +28,47 @@ ******************************************************************************/ __WEAK void SysTick_IRQHandler(void); -__WEAK void PortA_IRQHandler(void) -{ - -} - -__WEAK void PortB_IRQHandler(void) -{ - -} - -__WEAK void PortC_IRQHandler(void) -{ - -} - -__WEAK void PortD_IRQHandler(void) -{ - -} - -__WEAK void PortE_IRQHandler(void) -{ - -} - -__WEAK void PortF_IRQHandler(void) -{ - -} - -__WEAK void Dmac_IRQHandler(void) -{ - -} - -__WEAK void Tim3_IRQHandler(void) -{ - -} - - -__WEAK void Uart0_IRQHandler(void) -{ - -} - -__WEAK void Uart1_IRQHandler(void) -{ - -} - -__WEAK void Uart2_IRQHandler(void) -{ - -} - -__WEAK void Uart3_IRQHandler(void) -{ - -} - -__WEAK void LpUart0_IRQHandler(void) -{ - -} - -__WEAK void LpUart1_IRQHandler(void) -{ - -} - -__WEAK void Spi0_IRQHandler(void) -{ - -} - -__WEAK void Spi1_IRQHandler(void) -{ - -} - -__WEAK void I2c0_IRQHandler(void) -{ - -} - -__WEAK void I2c1_IRQHandler(void) -{ - -} - -__WEAK void Tim0_IRQHandler(void) -{ - -} - -__WEAK void Tim1_IRQHandler(void) -{ - -} - -__WEAK void Tim2_IRQHandler(void) -{ - -} - -__WEAK void LpTim0_IRQHandler(void) -{ - -} - -__WEAK void LpTim1_IRQHandler(void) -{ - -} - -__WEAK void Tim4_IRQHandler(void) -{ - -} - -__WEAK void Tim5_IRQHandler(void) -{ - -} - -__WEAK void Tim6_IRQHandler(void) -{ - -} - -__WEAK void Pca_IRQHandler(void) -{ - -} - -__WEAK void Wdt_IRQHandler(void) -{ - -} - -__WEAK void Rtc_IRQHandler(void) -{ - -} - -__WEAK void Adc_IRQHandler(void) -{ - -} - -__WEAK void Dac_IRQHandler(void) -{ - -} - -__WEAK void Pcnt_IRQHandler(void) -{ - -} - -__WEAK void Vc0_IRQHandler(void) -{ - -} - -__WEAK void Vc1_IRQHandler(void) -{ - -} - -__WEAK void Vc2_IRQHandler(void) -{ - -} - -__WEAK void Lvd_IRQHandler(void) -{ - -} - -__WEAK void Lcd_IRQHandler(void) -{ - -} - -__WEAK void Flash_IRQHandler(void) -{ - -} - -__WEAK void Ram_IRQHandler(void) -{ - -} - -__WEAK void ClkTrim_IRQHandler(void) -{ - -} +__WEAK void PortA_IRQHandler(void); +__WEAK void PortB_IRQHandler(void); +__WEAK void PortC_IRQHandler(void); +__WEAK void PortD_IRQHandler(void); +__WEAK void PortE_IRQHandler(void); +__WEAK void PortF_IRQHandler(void); +__WEAK void Dmac_IRQHandler(void); +__WEAK void Tim3_IRQHandler(void); +__WEAK void Uart0_IRQHandler(void); +__WEAK void Uart1_IRQHandler(void); +__WEAK void Uart2_IRQHandler(void); +__WEAK void Uart3_IRQHandler(void); +__WEAK void LpUart0_IRQHandler(void); +__WEAK void LpUart1_IRQHandler(void); +__WEAK void Spi0_IRQHandler(void); +__WEAK void Spi1_IRQHandler(void); +__WEAK void I2c0_IRQHandler(void); +__WEAK void I2c1_IRQHandler(void); +__WEAK void Tim0_IRQHandler(void); +__WEAK void Tim1_IRQHandler(void); +__WEAK void Tim2_IRQHandler(void); +__WEAK void LpTim0_IRQHandler(void); +__WEAK void LpTim1_IRQHandler(void); +__WEAK void Tim4_IRQHandler(void); +__WEAK void Tim5_IRQHandler(void); +__WEAK void Tim6_IRQHandler(void); +__WEAK void Pca_IRQHandler(void); +__WEAK void Wdt_IRQHandler(void); +__WEAK void Rtc_IRQHandler(void); +__WEAK void Adc_IRQHandler(void); +__WEAK void Dac_IRQHandler(void); +__WEAK void Pcnt_IRQHandler(void); +__WEAK void Vc0_IRQHandler(void); +__WEAK void Vc1_IRQHandler(void); +__WEAK void Vc2_IRQHandler(void); +__WEAK void Lvd_IRQHandler(void); +__WEAK void Lcd_IRQHandler(void); +__WEAK void Flash_IRQHandler(void); +__WEAK void Ram_IRQHandler(void); +__WEAK void ClkTrim_IRQHandler(void); /** ******************************************************************************* @@ -295,14 +102,13 @@ void EnableNvic(IRQn_Type enIrq, en_irq_level_t enLevel, boolean_t bEn) ** \retval ******************************************************************************/ //void HardFault_Handler(void) -//{ +//{ // volatile int a = 0; - +// // while( 0 == a) // { // ; // } -// //} diff --git a/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/system_hc32l19x.c b/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/system_hc32l19x.c index 6d433f15e54f7088affa0c1971dbef2f361fe9e1..4c4937e158314f72651fdcd96871a164ae791f07 100644 --- a/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/system_hc32l19x.c +++ b/bsp/hc32l196/Libraries/CMSIS/Device/HDSC/HC32L196/Source/system_hc32l19x.c @@ -1,52 +1,20 @@ -/******************************************************************************* -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file system_hc32l136.c - ** - ** System clock initialization. - ** @link SampleGroup Some description @endlink - ** - ** - 2019-03-01 1.0 Lux First version. - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file system_hc32l19x.c + * + * @brief Source file for SYSTEM functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ @@ -68,6 +36,9 @@ uint32_t SystemCoreClock = 4000000; void SystemCoreClockUpdate (void) // Update SystemCoreClock variable { SystemCoreClock = Sysctrl_GetHClkFreq(); + SysTick->LOAD = 0xFFFFFF; + SysTick->VAL = 0; + SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; } /** @@ -80,85 +51,85 @@ void SystemCoreClockUpdate (void) // Update SystemCoreClock variable static void _InitHidePin(void) { uint32_t tmpReg = M0P_SYSCTRL->PERI_CLKEN0; - - M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = 1; - -#if defined(HC32L19xPxxx) //100PIN MCU - M0P_GPIO->PFADS &= 0xFF4F; ///< PF04/PF05/PF07配置为数字端口 - - M0P_GPIO->PFDIR |= 0x00B0; ///< PF04/PF05/PF07配置为端口输入 - - M0P_GPIO->PFPU |= 0x00B0; ///< PF04/PF05/PF07配置为上拉 - -#elif defined(HC32L19xMxxx) //80PIN MCU - M0P_GPIO->PDADS &= 0x0F1F; ///< PD05~07/PD12~15配置为数字端口 - M0P_GPIO->PEADS &= 0x783C; ///< PE00/PE01/PE06~10/PE15配置为数字端口 - M0P_GPIO->PFADS &= 0xF9F3; ///< PF02/PF03/PF09/PF10配置为数字端口 - - M0P_GPIO->PDDIR |= 0xF0E0; ///< PD05~07/PD12~15配置为端口输入 - M0P_GPIO->PEDIR |= 0x87C3; ///< PE00/PE01/PE06~10/PE15配置为端口输入 - M0P_GPIO->PFDIR |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 - - - M0P_GPIO->PDPU |= 0xF0E0; ///< PD05~07/PD12~15配置为上拉 - M0P_GPIO->PEPU |= 0x87C3; ///< PE00/PE01/PE06~10/PE15配置为上拉 - M0P_GPIO->PFPU |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 - -#elif defined(HC32L19xKxxx) //64PIN MCU - M0P_GPIO->PDADS &= 0x0004; ///< PD00/PD01/PD03~15配置为数字端口 - M0P_GPIO->PEADS &= 0x0000; ///< PE00~15配置为数字端口 - M0P_GPIO->PFADS &= 0xF9F3; ///< PF02/PF03/PF09/PF10配置为数字端口 - - M0P_GPIO->PDDIR |= 0xFFFB; ///< PD00/PD01/PD03~15配置为端口输入 - M0P_GPIO->PEDIR |= 0xFFFF; ///< PE00~15配置为端口输入 - M0P_GPIO->PFDIR |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 - - M0P_GPIO->PDPU |= 0xFFFB; ///< PD00/PD01/PD03~15配置为上拉 - M0P_GPIO->PEPU |= 0xFFFF; ///< PE00~15配置为上拉 - M0P_GPIO->PFPU |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 - -#elif defined(HC32L19xJxxx) //48PIN MCU - M0P_GPIO->PCADS &= 0xE000; ///< PC00~12配置为数字端口 - M0P_GPIO->PDADS &= 0x0000; ///< PD00~15配置为数字端口 - M0P_GPIO->PEADS &= 0x0000; ///< PE00~15配置为数字端口 - M0P_GPIO->PFADS &= 0xF9C3; ///< PF02~05/PF09/PF10配置为数字端口 - - M0P_GPIO->PCDIR |= 0x1FFF; ///< PC00~12配置为端口输入 - M0P_GPIO->PDDIR |= 0xFFFF; ///< PD00~15配置为端口输入 - M0P_GPIO->PEDIR |= 0xFFFF; ///< PE00~15配置为端口输入 - M0P_GPIO->PFDIR |= 0x063C; ///< PF02~05/PF09/PF10配置为数字端口 - - - M0P_GPIO->PCPU |= 0x1FFF; ///< PC00~12配置为上拉 - M0P_GPIO->PDPU |= 0xFFFF; ///< PD00~15配置为上拉 - M0P_GPIO->PEPU |= 0xFFFF; ///< PE00~15配置为上拉 - M0P_GPIO->PFPU |= 0x063C; ///< PF02~05/PF09/PF10配置为数字端口 - -#elif defined(HC32L19xFxxx) //32PIN MCU - M0P_GPIO->PAADS &= 0xFFF4; ///< PA00/PA01/PA03配置为数字端口 - M0P_GPIO->PBADS &= 0x08FB; ///< PB02/PB08~10/PB12~15配置为数字端口 - M0P_GPIO->PCADS &= 0xC000; ///< PC00~13配置为数字端口 - M0P_GPIO->PDADS &= 0x0000; ///< PD00~15配置为数字端口 - M0P_GPIO->PEADS &= 0x0000; ///< PE00~15配置为数字端口 - M0P_GPIO->PFADS &= 0xF903; ///< PF02~07/PF09/PF10配置为数字端口 - - M0P_GPIO->PADIR |= 0x000B; ///< PA00/PA01/PA03配置为端口输入 - M0P_GPIO->PBDIR |= 0xF704; ///< PB02/PB08~10/PB12~15配置为端口输入 - M0P_GPIO->PCDIR |= 0x3FFF; ///< PC00~13配置为端口输入 - M0P_GPIO->PDDIR |= 0xFFFF; ///< PD00~15配置为端口输入 - M0P_GPIO->PEDIR |= 0xFFFF; ///< PE00~15配置为端口输入 - M0P_GPIO->PFDIR |= 0x06FC; ///< PF02~07/PF09/PF10配置为数字端口 - - M0P_GPIO->PAPU |= 0x000B; ///< PA00/PA01/PA03配置为上拉 - M0P_GPIO->PBPU |= 0xF704; ///< PB02/PB08~10/PB12~15配置为上拉 - M0P_GPIO->PCPU |= 0x3FFF; ///< PC00~13配置为上拉 - M0P_GPIO->PDPU |= 0xFFFF; ///< PD00~15配置为上拉 - M0P_GPIO->PEPU |= 0xFFFF; ///< PE00~15配置为上拉 - M0P_GPIO->PFPU |= 0x06FC; ///< PF02~07/PF09/PF10配置为数字端口 - + + M0P_SYSCTRL->PERI_CLKEN0_f.GPIO = 1; + +#if defined(HC32L19xPxxx) //100PIN MCU + M0P_GPIO->PFADS &= 0xFF4F; ///< PF04/PF05/PF07配置为数字端口 + + M0P_GPIO->PFDIR |= 0x00B0; ///< PF04/PF05/PF07配置为端口输入 + + M0P_GPIO->PFPU |= 0x00B0; ///< PF04/PF05/PF07配置为上拉 + +#elif defined(HC32L19xMxxx) //80PIN MCU + M0P_GPIO->PDADS &= 0x0F1F; ///< PD05~07/PD12~15配置为数字端口 + M0P_GPIO->PEADS &= 0x783C; ///< PE00/PE01/PE06~10/PE15配置为数字端口 + M0P_GPIO->PFADS &= 0xF9F3; ///< PF02/PF03/PF09/PF10配置为数字端口 + + M0P_GPIO->PDDIR |= 0xF0E0; ///< PD05~07/PD12~15配置为端口输入 + M0P_GPIO->PEDIR |= 0x87C3; ///< PE00/PE01/PE06~10/PE15配置为端口输入 + M0P_GPIO->PFDIR |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 + + + M0P_GPIO->PDPU |= 0xF0E0; ///< PD05~07/PD12~15配置为上拉 + M0P_GPIO->PEPU |= 0x87C3; ///< PE00/PE01/PE06~10/PE15配置为上拉 + M0P_GPIO->PFPU |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 + +#elif defined(HC32L19xKxxx) //64PIN MCU + M0P_GPIO->PDADS &= 0x0004; ///< PD00/PD01/PD03~15配置为数字端口 + M0P_GPIO->PEADS &= 0x0000; ///< PE00~15配置为数字端口 + M0P_GPIO->PFADS &= 0xF9F3; ///< PF02/PF03/PF09/PF10配置为数字端口 + + M0P_GPIO->PDDIR |= 0xFFFB; ///< PD00/PD01/PD03~15配置为端口输入 + M0P_GPIO->PEDIR |= 0xFFFF; ///< PE00~15配置为端口输入 + M0P_GPIO->PFDIR |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 + + M0P_GPIO->PDPU |= 0xFFFB; ///< PD00/PD01/PD03~15配置为上拉 + M0P_GPIO->PEPU |= 0xFFFF; ///< PE00~15配置为上拉 + M0P_GPIO->PFPU |= 0x060C; ///< PF02/PF03/PF09/PF10配置为数字端口 + +#elif defined(HC32L19xJxxx) //48PIN MCU + M0P_GPIO->PCADS &= 0xE000; ///< PC00~12配置为数字端口 + M0P_GPIO->PDADS &= 0x0000; ///< PD00~15配置为数字端口 + M0P_GPIO->PEADS &= 0x0000; ///< PE00~15配置为数字端口 + M0P_GPIO->PFADS &= 0xF9C3; ///< PF02~05/PF09/PF10配置为数字端口 + + M0P_GPIO->PCDIR |= 0x1FFF; ///< PC00~12配置为端口输入 + M0P_GPIO->PDDIR |= 0xFFFF; ///< PD00~15配置为端口输入 + M0P_GPIO->PEDIR |= 0xFFFF; ///< PE00~15配置为端口输入 + M0P_GPIO->PFDIR |= 0x063C; ///< PF02~05/PF09/PF10配置为数字端口 + + + M0P_GPIO->PCPU |= 0x1FFF; ///< PC00~12配置为上拉 + M0P_GPIO->PDPU |= 0xFFFF; ///< PD00~15配置为上拉 + M0P_GPIO->PEPU |= 0xFFFF; ///< PE00~15配置为上拉 + M0P_GPIO->PFPU |= 0x063C; ///< PF02~05/PF09/PF10配置为数字端口 + +#elif defined(HC32L19xFxxx) //32PIN MCU + M0P_GPIO->PAADS &= 0xFFF4; ///< PA00/PA01/PA03配置为数字端口 + M0P_GPIO->PBADS &= 0x08FB; ///< PB02/PB08~10/PB12~15配置为数字端口 + M0P_GPIO->PCADS &= 0xC000; ///< PC00~13配置为数字端口 + M0P_GPIO->PDADS &= 0x0000; ///< PD00~15配置为数字端口 + M0P_GPIO->PEADS &= 0x0000; ///< PE00~15配置为数字端口 + M0P_GPIO->PFADS &= 0xF903; ///< PF02~07/PF09/PF10配置为数字端口 + + M0P_GPIO->PADIR |= 0x000B; ///< PA00/PA01/PA03配置为端口输入 + M0P_GPIO->PBDIR |= 0xF704; ///< PB02/PB08~10/PB12~15配置为端口输入 + M0P_GPIO->PCDIR |= 0x3FFF; ///< PC00~13配置为端口输入 + M0P_GPIO->PDDIR |= 0xFFFF; ///< PD00~15配置为端口输入 + M0P_GPIO->PEDIR |= 0xFFFF; ///< PE00~15配置为端口输入 + M0P_GPIO->PFDIR |= 0x06FC; ///< PF02~07/PF09/PF10配置为数字端口 + + M0P_GPIO->PAPU |= 0x000B; ///< PA00/PA01/PA03配置为上拉 + M0P_GPIO->PBPU |= 0xF704; ///< PB02/PB08~10/PB12~15配置为上拉 + M0P_GPIO->PCPU |= 0x3FFF; ///< PC00~13配置为上拉 + M0P_GPIO->PDPU |= 0xFFFF; ///< PD00~15配置为上拉 + M0P_GPIO->PEPU |= 0xFFFF; ///< PE00~15配置为上拉 + M0P_GPIO->PFPU |= 0x06FC; ///< PF02~07/PF09/PF10配置为数字端口 + #endif - - M0P_SYSCTRL->PERI_CLKEN0 = tmpReg; + + M0P_SYSCTRL->PERI_CLKEN0 = tmpReg; } /** @@ -174,6 +145,5 @@ void SystemInit(void) M0P_SYSCTRL->RCL_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C22ul))); M0P_SYSCTRL->RCH_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C08ul))); SystemCoreClockUpdate(); - _InitHidePin(); + _InitHidePin(); } - diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adc.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adc.h index f1eccb9a96f5c4f590b37a9e3fe0291cdba08881..b729aaeaf5ac9acafeeb7fe7140f4efcacff99e8 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adc.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adc.h @@ -1,62 +1,30 @@ /****************************************************************************** -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file adc.h - ** - ** Header file for AD Converter functions - ** @link ADC Group Some description @endlink - ** - ** - 2017-06-28 Alex First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * ******************************************************************************/ -#ifndef __ADC_H__ -#define __ADC_H__ +/****************************************************************************** + * @file adc.h + * + * @brief Header file for ADC functions + * + * @author MADS Team + * + ******************************************************************************/ + +#ifndef __HC32L196_ADC_H__ +#define __HC32L196_ADC_H__ /******************************************************************************/ /* Include files */ /******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" /* C binding of definitions if building with C++ compiler */ @@ -156,11 +124,9 @@ typedef enum en_adc_samp_ch_sel AdcExInputCH23 = 23u, /*!<使用PE15*/ AdcExInputCH24 = 24u, /*!<使用PE14*/ AdcExInputCH25 = 25u, /*!<使用PE13*/ - AdcDacInput = 26u, /*!<使用DAC输出(必须使用输入增益)*/ AdcAVccdiv3Input = 27u, /*!<使用1/3 AVCC(必须使用输入增益)*/ AdcAiTsInput = 28u, /*!<使用内置温度传感器BGR_TS(必须使用输入增益)*/ - AdcVref1_2Input = 29u, /*!<使用内部基准1.2V(必须使用输入增益)*/ }en_adc_samp_ch_sel_t; @@ -199,7 +165,7 @@ typedef enum en_adc_in_ref /** ****************************************************************************** - ** \brief ADC周边模块反射源选择 + ** \brief ADC周边模块触发源选择 *****************************************************************************/ typedef enum en_adc_trig_sel { @@ -464,7 +430,7 @@ void Adc_ClrAccResult(void); } #endif -#endif /* __ADC_H__ */ +#endif /* __HC32L196_ADC_H__ */ /******************************************************************************/ /* EOF (not truncated) */ /******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/ahc32l196_dt.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adt.h similarity index 93% rename from bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/ahc32l196_dt.h rename to bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adt.h index fdab155922262a8083bb93d872d4e5de8d75eefc..a7fc48921adc32812f63d54abf4c11cc6a4a3827 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/ahc32l196_dt.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_adt.h @@ -1,61 +1,29 @@ -/******************************************************************************* -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file adt.h - ** - ** Headerfile for Advance Timer functions - ** @link ADT Group Some description @endlink - ** - ** - 2018-04-19 Husj First Version - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file adt.h + * + * @brief Header file for Advance Timer functions + * + * @author MADS Team + * ******************************************************************************/ -#ifndef __ADT_H__ -#define __ADT_H__ +#ifndef __HC32L196_ADT_H__ +#define __HC32L196_ADT_H__ /****************************************************************************** * Include files ******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" /* C binding of definitions if building with C++ compiler */ @@ -353,7 +321,7 @@ typedef enum en_adt_ttrig_trigxs AdtTrigxSelPD1 = 11u, ///< PD1 AdtTrigxSelPA15 = 12u, ///< PA15 AdtTrigxSelPB15 = 13u, ///< PB15 - AdtTrigxSelPC5 = 14u, ///< PC5 + AdtTrigxSelPC15 = 14u, ///< PC15 AdtTrigxSelPD5 = 15u, ///< PD5 }en_adt_ttrig_trigxs_t; @@ -872,7 +840,7 @@ en_result_t Adt_CfgZMask(M0P_ADTIM_TypeDef *ADTx, } #endif -#endif /* __ADT_H__ */ +#endif /* __HC32L196_ADT_H__ */ /****************************************************************************** * EOF (not truncated) ******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_aes.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_aes.h index a241be690bc6a88016f195f8170c3b3858c953af..ca1f36271cefa6ca35d3524017d9a81309af5415 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_aes.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_aes.h @@ -1,60 +1,29 @@ /****************************************************************************** -* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file aes.h - ** - ** AES 数据结构及API声明. - ** - ** - 2016-05-04 LuX V1.0. - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * ******************************************************************************/ -#ifndef __AES_H__ -#define __AES_H__ +/****************************************************************************** + * @file aes.h + * + * @brief Header file for AES functions + * + * @author MADS Team + * + ******************************************************************************/ + +#ifndef __HC32L196_AES_H__ +#define __HC32L196_AES_H__ /****************************************************************************** * Include files ******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" /* C binding of definitions if building with C++ compiler */ #ifdef __cplusplus @@ -125,7 +94,7 @@ en_result_t AES_Decrypt(stc_aes_cfg_t* pstcAesCfg); } #endif -#endif /* __AES_H__ */ +#endif /* __HC32L196_AES_H__ */ /****************************************************************************** * EOF (not truncated) ******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bgr.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bgr.h index a1b97c7bf8a6efa160d0dfc0611ee64c91297fc2..ee974df89242f3e05a7f96bbd7fdbeac03e675e7 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bgr.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bgr.h @@ -1,60 +1,29 @@ /****************************************************************************** -* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file bgr.h - ** - ** BGR 数据结构及API声明. - ** - ** - 2018-04-21 LuX V1.0. - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * ******************************************************************************/ -#ifndef __CRC_H__ -#define __CRC_H__ +/****************************************************************************** + * @file bgr.h + * + * @brief Header file for GBR functions + * + * @author MADS Team + * + ******************************************************************************/ + +#ifndef __HC32L196_CRC_H__ +#define __HC32L196_CRC_H__ /****************************************************************************** * Include files ******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" /* C binding of definitions if building with C++ compiler */ #ifdef __cplusplus @@ -102,7 +71,7 @@ void Bgr_BgrDisable(void); } #endif -#endif /* __BGR_H__ */ +#endif /* __HC32L196_BGR_H__ */ /****************************************************************************** * EOF (not truncated) ******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bt.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bt.h index 3caa00defc66eab8d0f3db00a507d92f5d4aacc5..5ff961fc52502cabbdf4e574ebf6e0b65ec8c6c0 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bt.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_bt.h @@ -1,62 +1,29 @@ -/******************************************************************************* -* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file bt.h - ** - ** 基本定时器数据结构及API声明 - ** @link BT Group Some description @endlink - ** - ** History: - ** - 2018-04-18 Husj First Version - ** - *****************************************************************************/ +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file bt.h + * + * @brief Header file for General Timer(Base Timer) functions + * + * @author MADS Team + * + ******************************************************************************/ -#ifndef __BT_H__ -#define __BT_H__ +#ifndef __HC32L196_BT_H__ +#define __HC32L196_BT_H__ /***************************************************************************** * Include files *****************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" #ifdef __cplusplus @@ -763,7 +730,7 @@ en_result_t Bt_M23_EnSwBk(en_bt_unit_t enUnit); #endif -#endif /* __BT_H__ */ +#endif /* __HC32L196_BT_H__ */ /****************************************************************************** * EOF (not truncated) *****************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_crc.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_crc.h index e85102e64b171f06b3fb1602278fbe3712935d2b..34c051720676b3a88bde0f98a8f9f320f5c8aac5 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_crc.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_crc.h @@ -1,60 +1,29 @@ /****************************************************************************** -* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file crc.h - ** - ** CRC 数据结构及API声明. - ** - ** - 2016-05-04 LuX V1.0. - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * ******************************************************************************/ -#ifndef __CRC_H__ -#define __CRC_H__ +/****************************************************************************** + * @file crc.h + * + * @brief Header file for CRC functions + * + * @author MADS Team + * + ******************************************************************************/ + +#ifndef __HC32L196_CRC_H__ +#define __HC32L196_CRC_H__ /****************************************************************************** * Include files ******************************************************************************/ -#include "sysctrl.h" +#include "hc32l196_sysctrl.h" /* C binding of definitions if building with C++ compiler */ #ifdef __cplusplus @@ -113,7 +82,7 @@ en_result_t CRC32_Check32(uint32_t* pu32Data, uint32_t u32Len, uint32_t u32CRC); } #endif -#endif /* __CRC_H__ */ +#endif /* __HC32L196_CRC_H__ */ /****************************************************************************** * EOF (not truncated) ******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dac.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dac.h index 0dfa10b454599cea19eae845019003f3b8ada336..bbff9599d4505bb88df6c1742db380fdee4f49a7 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dac.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dac.h @@ -1,60 +1,29 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file dac.h - ** - ** Header file for dac Converter functions - ** @link DAC Group Some description @endlink - ** - ** - 2019-04-10 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * ******************************************************************************/ -#ifndef __DAC_H__ -#define __DAC_H__ + +/****************************************************************************** + * @file dac.h + * + * @brief Header file for DAC functions + * + * @author MADS Team + * + ******************************************************************************/ + +#ifndef __HC32L196_DAC_H__ +#define __HC32L196_DAC_H__ /******************************************************************************/ /* Include files */ /******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" /* C binding of definitions if building with C++ compiler */ #ifdef __cplusplus @@ -227,7 +196,7 @@ extern uint16_t Dac_GetDataOutputValue(void); #ifdef __cplusplus } #endif -#endif //__DAC_H__ +#endif //__HC32L196_DAC_H__ /******************************************************************************/ /* EOF (not truncated) */ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_ddl.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_ddl.h index 5f7aedda71c6b8af58a3c492b790f42075c447fd..45ea9698834826d346810cda84c3f361e1f6844b 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_ddl.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_ddl.h @@ -1,56 +1,24 @@ -/******************************************************************************* -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file ddl.h - ** - ** DDL common define. - ** @link SampleGroup Some description @endlink - ** - ** - 2019-10-17 1.1 Lux - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file ddl.h + * + * @brief Header file for DDL functions + * + * @author MADS Team + * ******************************************************************************/ -#ifndef __DDL_H__ -#define __DDL_H__ +#ifndef __HC32L196_DDL_H__ +#define __HC32L196_DDL_H__ /******************************************************************************/ /* Include files */ @@ -94,7 +62,7 @@ extern "C" ****************************************************************************** ** Global Device Series List ******************************************************************************/ -#define DDL_DEVICE_SERIES_HC32L17X (0u) +#define DDL_DEVICE_SERIES_HC32L9X (0u) /** ****************************************************************************** @@ -166,7 +134,7 @@ boolean_t GetBit(uint32_t addr, uint32_t offset); } #endif -#endif /* __DDL_H__ */ +#endif /* __HC32L196_DDL_H__ */ /******************************************************************************/ /* EOF (not truncated) */ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_debug.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_debug.h index 4f33fde9393afcd5ef0c9c755c01d9cbf5068bb7..d9456d7ddb376f358183f4f5b6b323c0a22ce0c1 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_debug.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_debug.h @@ -1,62 +1,29 @@ -/******************************************************************************* -* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file debug.h - ** - ** Headerfile for DEBUG functions - ** @link Debug Group Some description @endlink - ** - ** History: - ** - 2018-04-15 Lux First Version - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file debug.h + * + * @brief Header file for DEBUG functions + * + * @author MADS Team + * ******************************************************************************/ -#ifndef __DEBUG_H__ -#define __DEBUG_H__ +#ifndef __HC32L196_DEBUG_H__ +#define __HC32L196_DEBUG_H__ /******************************************************************************* * Include files ******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" #ifdef __cplusplus @@ -121,7 +88,7 @@ en_result_t Debug_ActiveDisable(en_debug_module_active_t enModule); #ifdef __cplusplus #endif -#endif /* __DEBUG_H__ */ +#endif /* __HC32L196_DEBUG_H__ */ /******************************************************************************* * EOF (not truncated) ******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dmac.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dmac.h index bdd93b0ba603c2715e9aacc006a0b4a2b1f70486..e344ea67ec92f2642eded6478395b65de019973c 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dmac.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_dmac.h @@ -1,60 +1,29 @@ -/***************************************************************************** -* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file dma.h -** -** A detailed description is available at -** @link DmacGroup Dmac description @endlink -** -** - 2018-03-09 1.0 Hongjh First version for Device Driver Library of Dmac. -** -******************************************************************************/ -#ifndef __DMAC_H__ -#define __DMAC_H__ +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file dma.h + * + * @brief Header file for DMAC functions + * + * @author MADS Team + * + ******************************************************************************/ + +#ifndef __HC32L196_DMAC_H__ +#define __HC32L196_DMAC_H__ /******************************************************************************* * Include files ******************************************************************************/ -#include "ddl.h" +#include "hc32l196_ddl.h" /* C binding of definitions if building with C++ compiler */ #ifdef __cplusplus @@ -349,7 +318,7 @@ extern "C" } #endif -#endif /* __DMAC_H__ */ +#endif /* __HC32L196_DMAC_H__ */ /******************************************************************************* * EOF (not truncated) diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_flash.h b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_flash.h index b232e6ba6831e89bb4c11b74efe3158999508336..35c42f7e0147875d8e5dfe2b22f235822cf8f14d 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_flash.h +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/inc/hc32l196_flash.h @@ -1,55 +1,24 @@ -/************************************************************************************* -* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file flash.h - ** - ** FLASH 数据结构及API声明. - ** - ** - 2017-05-02 LuX V1.0 - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file flash.h + * + * @brief Header file for FLASH functions + * + * @author MADS Team + * ******************************************************************************/ -#ifndef __FLASH_H__ -#define __FLASH_H__ +#ifndef __HC32L196_FLASH_H__ +#define __HC32L196_FLASH_H__ /******************************************************************************/ /* Include files */ @@ -107,6 +76,18 @@ typedef enum en_flash_lock FlashLock3 = 5u, ///CR1_f.DMASQR = pstcAdcJqrCfg->bJqrDmaTrig; + M0P_ADC->CR1_f.DMAJQR = pstcAdcJqrCfg->bJqrDmaTrig; M0P_ADC->JQR_f.CNT = pstcAdcJqrCfg->u8JqrCnt - 1; diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_adt.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_adt.c index 8e270ad4f56d11855252b276ef95154c4a1d0390..b8a86da0d9d16c18d500dd4bc822586cd1ef2a0a 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_adt.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_adt.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file adt.c - ** - ** Low Voltage Detect driver API. - ** @link Lvd Group Some description @endlink - ** - ** - 2019-04-19 Husj First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file adt.c + * + * @brief Source file for Advanced Timer functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_aes.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_aes.c index 6ad7b95d34604e94f8375752d71a00ce53d2ebf8..b059f2f4323f3b157fe7245969d08a8da7a06e52 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_aes.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_aes.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ -/** \file aes.c - ** - ** Common API of AES. - ** @link AesGroup Some description @endlink - ** - ** - 2019-04-16 - ** +/****************************************************************************** + * @file aes.c + * + * @brief Source file for AES functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bgr.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bgr.c index 1657ff6d55f80428b46cac4b3d57281bb0333e9d..7ce9f98a6b9c0ae03b97e4f651c7c4fb73cb4b40 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bgr.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bgr.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ -/** \file bgr.c - ** - ** Common API of bgr. - ** @link flashGroup Some description @endlink - ** - ** - 2018-05-08 - ** +/****************************************************************************** + * @file bgr.c + * + * @brief Source file for BGR functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bt.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bt.c index 82852eaf8d07f5b11d7451a3da2c19b3306b211a..92002e102305f3d055c402da655380dcbb0ce557 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bt.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_bt.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file bt.c - ** - ** Common API of base timer. - ** @link btGroup Some description @endlink - ** - ** - 2019-04-15 Husj First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file bt.c + * + * @brief Source file for General Timer(Base Timer) functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_crc.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_crc.c index 06e98806c6800880e231aff776a811c10430a845..ed85c529debcb62c2c2f98bc96a460147b61922c 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_crc.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_crc.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ -/** \file crc.c - ** - ** Common API of crc. - ** @link crcGroup Some description @endlink - ** - ** - 2017-05-16 - ** +/****************************************************************************** + * @file crc.c + * + * @brief Source file for CRC functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dac.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dac.c index 7249e4c87d698f76b2fc89d41c86506694aef012..9c8fb0e9c97bd8c5726458ce7e779640bd6e9215 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dac.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dac.c @@ -1,51 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file dac.c - ** - ** dac driver API. - ** - ** - 2019-04-10 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file dac.c + * + * @brief Source file for DAC functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ddl.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ddl.c index d6d8f6968cff23dcd21ca5773fa99c1c990e5005..3637255dec78078ecf643023eb9f4e50b3c94f7e 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ddl.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ddl.c @@ -1,52 +1,20 @@ -/******************************************************************************* -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file ddl.c - ** - ** Common API of DDL. - ** @link ddlGroup Some description @endlink - ** - ** - 2019-03-03 - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file ddl.c + * + * @brief Source file for DDL functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ @@ -133,24 +101,32 @@ void ddl_memclr(void *pu8Address, uint32_t u32Count) * \retval void */ void delay1ms(uint32_t u32Cnt) -{ - uint32_t u32end; - - SysTick->LOAD = 0xFFFFFF; - SysTick->VAL = 0; - SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; - - while(u32Cnt-- > 0) - { - SysTick->VAL = 0; - u32end = 0x1000000 - SystemCoreClock/1000; - while(SysTick->VAL > u32end) - { - ; - } - } - - SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk)); +{ + uint32_t ValNow,CNT = 0; + uint32_t end = (u32Cnt*(SystemCoreClock/1000)); + + uint32_t StaVal = SysTick->VAL; + while(1) + { + ValNow=SysTick->VAL; + + if(ValNow != StaVal) + { + if(ValNowLOAD - ValNow+StaVal; + } + StaVal = ValNow; + if(CNT >= end ) + { + break; + } + } + } } /** @@ -161,24 +137,33 @@ void delay1ms(uint32_t u32Cnt) */ void delay100us(uint32_t u32Cnt) { - uint32_t u32end; - - SysTick->LOAD = 0xFFFFFF; - SysTick->VAL = 0; - SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; - - while(u32Cnt-- > 0) - { - SysTick->VAL = 0; - - u32end = 0x1000000 - SystemCoreClock/10000; - while(SysTick->VAL > u32end) - { - ; - } - } - - SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk)); + uint32_t ValNow,CNT = 0; + uint32_t end = (u32Cnt*(SystemCoreClock/10000)); + + uint32_t StaVal = SysTick->VAL; + while(1) + { + ValNow=SysTick->VAL; + + if(ValNow != StaVal) + { + if(ValNowLOAD - ValNow+StaVal; + } + + StaVal = ValNow; + + if(CNT >=end) + { + break; + } + } + } } /** @@ -189,24 +174,32 @@ void delay100us(uint32_t u32Cnt) */ void delay10us(uint32_t u32Cnt) { - uint32_t u32end; - - SysTick->LOAD = 0xFFFFFF; - SysTick->VAL = 0; - SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; - - while(u32Cnt-- > 0) - { - SysTick->VAL = 0; - - u32end = 0x1000000 - SystemCoreClock/100000; - while(SysTick->VAL > u32end) - { - ; - } - } - - SysTick->CTRL = (SysTick->CTRL & (~SysTick_CTRL_ENABLE_Msk)); + uint32_t ValNow,CNT = 0; + + uint32_t StaVal = SysTick->VAL; + while(1) + { + ValNow=SysTick->VAL; + + if(ValNow != StaVal) + { + if(ValNowLOAD - ValNow+StaVal; + } + + StaVal = ValNow; + + if(CNT >=(u32Cnt*(SystemCoreClock/100000))) + { + break; + } + } + } } /** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_debug.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_debug.c index 0e35c8b2cd580fba9f0b38af5bb9de07aae657e7..5adf64067afefe068081214ed4aee349f7c4bdc2 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_debug.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_debug.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ -/** \file debug.c - ** - ** Common API of debug. - ** @link flashGroup Some description @endlink - ** - ** - 2018-05-08 - ** +/****************************************************************************** + * @file debug.c + * + * @brief Source file for DEBUG functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dmac.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dmac.c index 85f72c2241473e19c29cbd2635dee08c730de38f..e5d1f414ff81cfef21fdbf76a1b7a698be66b4ff 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dmac.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_dmac.c @@ -1,53 +1,21 @@ /****************************************************************************** -* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file dmac.c -** -** A detailed description is available at -** @link DmacGroup Dmac description @endlink -** -** - 2018-03-09 1.0 Hongjh First version for Device Driver Library of Dmac. -** -******************************************************************************/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file dmac.c + * + * @brief Source file for DMAC functions + * + * @author MADS Team + * + ******************************************************************************/ /******************************************************************************* * Include files @@ -532,7 +500,7 @@ void Dma_RecoverChannelTranfer(en_dma_channel_t enCh) ******************************************************************************/ void Dma_SetTransferWidth(en_dma_channel_t enCh, en_dma_transfer_width_t enWidth) { - volatile uint32_t *pReg = (&M0P_DMAC->CONFA0+enCh); + volatile uint32_t *pReg = (&M0P_DMAC->CONFB0+enCh); *pReg = ((*pReg)&((uint32_t)~DMA_TRANSFER_WIDTH_Msk))|((uint32_t)enWidth); } diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_flash.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_flash.c index 2678d8d873173ee6cdc8031bbf3106c7f6403e90..8fd4c2602672462d7e31a2e946dcd533992203e4 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_flash.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_flash.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file flash.c - ** - ** Common API of flash. - ** @link flashGroup Some description @endlink - ** - ** - 2018-05-08 - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file flash.c + * + * @brief Source file for FLASH functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* @@ -63,8 +31,9 @@ * Local pre-processor symbols/macros ('#define') ******************************************************************************/ #define FLASH_END_ADDR (0x0003FFFFu) -#define FLASH_BYPASS() M0P_FLASH->BYPASS = 0x5A5A;\ - M0P_FLASH->BYPASS = 0xA5A5; +#define FLASH_BYPASS() do{ M0P_FLASH->BYPASS = 0x5A5A;\ + M0P_FLASH->BYPASS = 0xA5A5;\ + }while(0); #define FLASH_IE_TRUE (0x03) #define FLASH_IE_FALSE (0x00) @@ -81,19 +50,6 @@ /******************************************************************************* * Local type definitions ('typedef') ******************************************************************************/ -/** - ****************************************************************************** - ** \brief FLASH OP - ** - ** Flash 操作控制数据类型重定义 - ******************************************************************************/ -typedef enum en_flash_op -{ - Read = 0u, ///<读配置值 - Program = 1u, ///<编程配置值 - SectorErase = 2u, ///<扇区擦除配置值 - ChipErase = 3u, ///<全片擦除配置值 -} en_flash_op_t; /** ****************************************************************************** @@ -230,7 +186,7 @@ en_result_t Flash_Init(uint8_t u8FreqCfg, boolean_t bDpstbEn) { uint32_t u32Index = 0; volatile uint32_t u32TimeOut = FLASH_TIMEOUT_INIT; - en_result_t enResult = Ok; + en_result_t enResult = Error; uint32_t u32PrgTimer[8] = {0}; volatile uint32_t *pu32PrgTimerReg = (volatile uint32_t*)M0P_FLASH; @@ -242,7 +198,13 @@ en_result_t Flash_Init(uint8_t u8FreqCfg, boolean_t bDpstbEn) return (enResult); } + FLASH_BYPASS(); M0P_FLASH->CR_f.DPSTB_EN = bDpstbEn; + if(bDpstbEn != M0P_FLASH->CR_f.DPSTB_EN) + { + enResult = ErrorUninitialized; + return (enResult); + } //flash时间参数配置值计算 for(u32Index=0; u32Index<8; u32Index++) @@ -263,33 +225,44 @@ en_result_t Flash_Init(uint8_t u8FreqCfg, boolean_t bDpstbEn) } else { + enResult = ErrorUninitialized; return ErrorUninitialized; } } } + enResult = Ok; return (enResult); } /** ***************************************************************************** - ** \brief FLASH 字节写 + ** \brief FLASH 连续字节编程 ** - ** 用于向FLASH写入1字节数据. + ** 以字节方式向FLASH写入连续的数据. ** - ** \param [in] u32Addr Flash地址 - ** \param [in] u8Data 1字节数据 + ** \param [in] u32Addr Flash目标首地址 + ** \param [in] pu8Data[] 数据Buffer首地址 + ** \param [in] u32Len 写入数据长度 ** ** \retval Ok 写入成功. ** \retval ErrorInvalidParameter FLASH地址无效 ** \retval ErrorTimeout 操作超时 + ** \retval Error 编程、校验失败 + ** \retval ErrorInvalidMode 操作模式无效 *****************************************************************************/ -en_result_t Flash_WriteByte(uint32_t u32Addr, uint8_t u8Data) +en_result_t Flash_Write8(uint32_t u32Addr, uint8_t pu8Data[], uint32_t u32Len) { - en_result_t enResult = Ok; + en_result_t enResult = Error; volatile uint32_t u32TimeOut = FLASH_TIMEOUT_PGM; + uint32_t u32Index = 0; + + if(FlashWriteMode != M0P_FLASH->CR_f.OP) + { + return ErrorInvalidMode; + } - if (FLASH_END_ADDR < u32Addr) + if (FLASH_END_ADDR < (u32Addr + u32Len - 1)) { enResult = ErrorInvalidParameter; return (enResult); @@ -305,62 +278,60 @@ en_result_t Flash_WriteByte(uint32_t u32Addr, uint8_t u8Data) } } - //set OP - u32TimeOut = FLASH_TIMEOUT_PGM; - while(Program != M0P_FLASH->CR_f.OP) + //write data byte + for(u32Index=0; u32IndexCR_f.OP = Program; - } - else + *((volatile uint8_t*)u32Addr) = pu8Data[u32Index]; + + //busy? + u32TimeOut = FLASH_TIMEOUT_PGM; + while (TRUE == M0P_FLASH->CR_f.BUSY) { - return ErrorTimeout; + if(0 == u32TimeOut--) + { + return ErrorTimeout; + } } - } - - //Flash 解锁 - Flash_UnlockAll(); - - //write data - *((volatile uint8_t*)u32Addr) = u8Data; - - //busy? - u32TimeOut = FLASH_TIMEOUT_PGM; - while (TRUE == M0P_FLASH->CR_f.BUSY) - { - if(0 == u32TimeOut--) + + if(pu8Data[u32Index] != *((volatile uint8_t*)u32Addr)) { - return ErrorTimeout; + return Error; } + u32Addr++; } - - //Flash 加锁 - Flash_LockAll(); - + + enResult = Ok; return (enResult); } /** ***************************************************************************** - ** \brief FLASH 半字写 + ** \brief FLASH 连续半字(16位方式)编程 ** - ** 用于向FLASH写入半字(2字节)数据. + ** 以半字方式向FLASH写入连续的数据. ** - ** \param [in] u32Addr Flash地址 - ** \param [in] u16Data 半字(2字节)数据 + ** \param [in] u32Addr Flash目标首地址 + ** \param [in] pu16Data[] 数据Buffer首地址 + ** \param [in] u32Len 写入数据长度 ** ** \retval Ok 写入成功. ** \retval ErrorInvalidParameter FLASH地址无效 ** \retval ErrorTimeout 操作超时 + ** \retval Error 编程、校验失败 + ** \retval ErrorInvalidMode 操作模式无效 *****************************************************************************/ -en_result_t Flash_WriteHalfWord(uint32_t u32Addr, uint16_t u16Data) +en_result_t Flash_Write16(uint32_t u32Addr, uint16_t pu16Data[], uint32_t u32Len) { - en_result_t enResult = Ok; + en_result_t enResult = Error; volatile uint32_t u32TimeOut = FLASH_TIMEOUT_PGM; + uint32_t u32Index = 0; + + if(FlashWriteMode != M0P_FLASH->CR_f.OP) + { + return ErrorInvalidMode; + } - if (FLASH_END_ADDR < u32Addr) + if (FLASH_END_ADDR < (u32Addr + (u32Len << 1UL) - 1UL)) { enResult = ErrorInvalidParameter; return (enResult); @@ -376,62 +347,60 @@ en_result_t Flash_WriteHalfWord(uint32_t u32Addr, uint16_t u16Data) } } - //set OP - u32TimeOut = FLASH_TIMEOUT_PGM; - while(Program != M0P_FLASH->CR_f.OP) + //write data byte + for(u32Index=0; u32IndexCR_f.BUSY) { - FLASH_BYPASS(); - M0P_FLASH->CR_f.OP = Program; + if(0 == u32TimeOut--) + { + return ErrorTimeout; + } } - else + + if(pu16Data[u32Index] != *((volatile uint16_t*)u32Addr)) { - return ErrorTimeout; + return Error; } + u32Addr+=2; } - - //Flash 解锁 - Flash_UnlockAll(); - - //write data - *((volatile uint16_t*)u32Addr) = u16Data; - - //busy? - u32TimeOut = FLASH_TIMEOUT_PGM; - while (TRUE == M0P_FLASH->CR_f.BUSY) - { - if(0 == u32TimeOut--) - { - return ErrorTimeout; - } - } - - //Flash 加锁 - Flash_LockAll(); - + + enResult = Ok; return (enResult); } /** ***************************************************************************** - ** \brief FLASH 字写 + ** \brief FLASH 连续字(32位方式)编程 ** - ** 用于向FLASH写入1个字的数据. + ** 以字方式向FLASH写入连续的数据. ** - ** \param [in] u32Addr Flash地址 - ** \param [in] u32Data 1个字数据 + ** \param [in] u32Addr Flash目标首地址 + ** \param [in] pu32Data[] 数据Buffer首地址 + ** \param [in] u32Len 写入数据长度 ** ** \retval Ok 写入成功. ** \retval ErrorInvalidParameter FLASH地址无效 ** \retval ErrorTimeout 操作超时 + ** \retval Error 编程、校验失败 + ** \retval ErrorInvalidMode 操作模式无效 *****************************************************************************/ -en_result_t Flash_WriteWord(uint32_t u32Addr, uint32_t u32Data) +en_result_t Flash_Write32(uint32_t u32Addr, uint32_t pu32Data[], uint32_t u32Len) { - en_result_t enResult = Ok; + en_result_t enResult = Error; volatile uint32_t u32TimeOut = FLASH_TIMEOUT_PGM; + uint32_t u32Index = 0; + + if(FlashWriteMode != M0P_FLASH->CR_f.OP) + { + return ErrorInvalidMode; + } - if (FLASH_END_ADDR < u32Addr) + if (FLASH_END_ADDR < (u32Addr + (u32Len << 2UL) - 1)) { enResult = ErrorInvalidParameter; return (enResult); @@ -447,40 +416,29 @@ en_result_t Flash_WriteWord(uint32_t u32Addr, uint32_t u32Data) } } - //Flash 解锁 - Flash_UnlockAll(); - - //set OP - u32TimeOut = FLASH_TIMEOUT_PGM; - while(Program != M0P_FLASH->CR_f.OP) + //write data byte + for(u32Index=0; u32IndexCR_f.OP = Program; - } - else + *((volatile uint32_t*)u32Addr) = pu32Data[u32Index]; + + //busy? + u32TimeOut = FLASH_TIMEOUT_PGM; + while (TRUE == M0P_FLASH->CR_f.BUSY) { - return ErrorTimeout; + if(0 == u32TimeOut--) + { + return ErrorTimeout; + } } - } - - //write data - *((volatile uint32_t*)u32Addr) = u32Data; - - //busy? - u32TimeOut = FLASH_TIMEOUT_PGM; - while (TRUE == M0P_FLASH->CR_f.BUSY) - { - if(0 == u32TimeOut--) + + if(pu32Data[u32Index] != *((volatile uint32_t*)u32Addr)) { - return ErrorTimeout; + return Error; } + u32Addr+=4; } - //Flash 加锁 - Flash_LockAll(); - + enResult = Ok; return (enResult); } @@ -488,19 +446,25 @@ en_result_t Flash_WriteWord(uint32_t u32Addr, uint32_t u32Data) ***************************************************************************** ** \brief FLASH 扇区擦除 ** - ** FLASH 扇区擦除. + ** 对目标地址所在的FLASH 扇区进行擦除,擦除后该扇区FLASH数据为全0xFF. ** ** \param [in] u32SectorAddr 所擦除扇区内的地址 ** ** \retval Ok 擦除成功. ** \retval ErrorInvalidParameter FLASH地址无效 ** \retval ErrorTimeout 操作超时 + ** \retval ErrorInvalidMode 操作模式无效 *****************************************************************************/ en_result_t Flash_SectorErase(uint32_t u32SectorAddr) { en_result_t enResult = Ok; volatile uint32_t u32TimeOut = FLASH_TIMEOUT_ERASE; + if(FlashSectorEraseMode != M0P_FLASH->CR_f.OP) + { + return ErrorInvalidMode; + } + if (FLASH_END_ADDR < u32SectorAddr) { enResult = ErrorInvalidParameter; @@ -517,26 +481,8 @@ en_result_t Flash_SectorErase(uint32_t u32SectorAddr) } } - //Flash 解锁 - Flash_UnlockAll(); - - //set OP - u32TimeOut = FLASH_TIMEOUT_ERASE; - while(SectorErase != M0P_FLASH->CR_f.OP) - { - if(u32TimeOut--) - { - FLASH_BYPASS(); - M0P_FLASH->CR_f.OP = SectorErase; - } - else - { - return ErrorTimeout; - } - } - //write data - *((volatile uint8_t*)u32SectorAddr) = 0; + *((volatile uint32_t*)u32SectorAddr) = 0; //busy? u32TimeOut = FLASH_TIMEOUT_ERASE; @@ -548,73 +494,33 @@ en_result_t Flash_SectorErase(uint32_t u32SectorAddr) } } - //Flash 加锁 - Flash_LockAll(); - return (enResult); } /** ***************************************************************************** - ** \brief FLASH 全片擦除(该函数仅限RAM中运行!!!) + ** \brief FLASH 操作模式配置 ** - ** FLASH 全片擦除. + ** FLASH 操作模式配置. ** + ** \param [in] enFlashOpMode @ref en_flash_op_mode_t ** - ** \retval Ok 擦除成功. - ** \retval ErrorTimeout 操作超时 - ** + ** \retval Ok 配置成功 + ** \retval Error 配置失败 *****************************************************************************/ -en_result_t Flash_ChipErase(void) +en_result_t Flash_OpModeConfig(en_flash_op_mode_t enFlashOpMode) { - en_result_t enResult = Ok; - volatile uint32_t u32TimeOut = FLASH_TIMEOUT_ERASE; - - //busy? - u32TimeOut = FLASH_TIMEOUT_ERASE; - while (TRUE == M0P_FLASH->CR_f.BUSY) - { - if(0 == u32TimeOut--) - { - return ErrorTimeout; - } - } - - //set OP - u32TimeOut = FLASH_TIMEOUT_ERASE; - while(ChipErase != M0P_FLASH->CR_f.OP) - { - if(u32TimeOut--) - { - FLASH_BYPASS(); - M0P_FLASH->CR_f.OP = ChipErase; - } - else - { - return ErrorTimeout; - } - } - - //Flash 解锁 - Flash_UnlockAll(); - - //write data - *((volatile uint8_t*)0) = 0; + en_result_t enResult = Error; + + FLASH_BYPASS(); + M0P_FLASH->CR_f.OP = enFlashOpMode; - //busy? - u32TimeOut = FLASH_TIMEOUT_ERASE; - while (TRUE == M0P_FLASH->CR_f.BUSY) + if(enFlashOpMode == M0P_FLASH->CR_f.OP) { - if(0 == u32TimeOut--) - { - return ErrorTimeout; - } + enResult = Ok; } - //Flash 加锁 - Flash_LockAll(); - - return (enResult); + return enResult; } /** @@ -624,8 +530,10 @@ en_result_t Flash_ChipErase(void) ** ** \retval Null *****************************************************************************/ -void Flash_LockAll(void) -{ +en_result_t Flash_LockAll(void) +{ + en_result_t enResult = Error; + FLASH_BYPASS(); M0P_FLASH->SLOCK0 = FLASH_LOCK_ALL; FLASH_BYPASS(); @@ -635,6 +543,15 @@ void Flash_LockAll(void) FLASH_BYPASS(); M0P_FLASH->SLOCK3 = FLASH_LOCK_ALL; + if( (FLASH_LOCK_ALL == M0P_FLASH->SLOCK0) && + (FLASH_LOCK_ALL == M0P_FLASH->SLOCK1) && + (FLASH_LOCK_ALL == M0P_FLASH->SLOCK2) && + (FLASH_LOCK_ALL == M0P_FLASH->SLOCK3) ) + { + enResult = Ok; + } + + return enResult; } /** @@ -642,11 +559,13 @@ void Flash_LockAll(void) ** \brief FLASH 编程保护解锁 ** ** - ** \retval Null + ** \retval Ok 加锁成功 + ** \retval Error 加锁失败 *****************************************************************************/ -void Flash_UnlockAll(void) +en_result_t Flash_UnlockAll(void) { - + en_result_t enResult = Error; + FLASH_BYPASS(); M0P_FLASH->SLOCK0 = FLASH_UNLOCK_ALL; FLASH_BYPASS(); @@ -655,7 +574,16 @@ void Flash_UnlockAll(void) M0P_FLASH->SLOCK2 = FLASH_UNLOCK_ALL; FLASH_BYPASS(); M0P_FLASH->SLOCK3 = FLASH_UNLOCK_ALL; + + if( (FLASH_UNLOCK_ALL == M0P_FLASH->SLOCK0) && + (FLASH_UNLOCK_ALL == M0P_FLASH->SLOCK1) && + (FLASH_UNLOCK_ALL == M0P_FLASH->SLOCK2) && + (FLASH_UNLOCK_ALL == M0P_FLASH->SLOCK3) ) + { + enResult = Ok; + } + return enResult; } /** @@ -664,16 +592,21 @@ void Flash_UnlockAll(void) ** ** \param [in] enWaitCycle 插入FLASH读等待周期数枚举类型 ** - ** \retval Ok 解锁成功 - ** \retval ErrorInvalidParameter 参数错误 + ** \retval Ok 设置成功 + ** \retval Error 设置失败 *****************************************************************************/ en_result_t Flash_WaitCycle(en_flash_waitcycle_t enWaitCycle) { - en_result_t enResult = Ok; + en_result_t enResult = Error; FLASH_BYPASS(); M0P_FLASH->CR_f.WAIT = enWaitCycle; + if(enWaitCycle == M0P_FLASH->CR_f.WAIT) + { + enResult = Ok; + } + return enResult; } @@ -684,18 +617,26 @@ en_result_t Flash_WaitCycle(en_flash_waitcycle_t enWaitCycle) ** \param [in] enLock @ref en_flash_lock_t ** \param [in] u32LockValue 32bits,对应bit=0:加锁,对应Sector不允许擦写;对应bit=1:解锁。 ** \note 加解锁范围Sector:[enLock*128 + i*4, enLock*128 + i*4+3] - ** (i表示u32LockValue的bit位置,0~31) - ** 例如:enLock = FlashLock1, u32LockValue = 0x00000002, - ** 则加解锁范围为:[Sector128,Sector131] - ** \retval Ok 解锁成功 - ** \retval ErrorInvalidParameter 参数错误 + ** -i: 表示u32LockValue的bit位置,0~31; + ** -enLock: 表示枚举编号(FlashLock[n]:n=0~3),并非枚举值;) + ** 例如:enLock = FlashLock1, u32LockValue = 0x00000005, + ** 则FLASH解锁范围为:[Sector128,Sector131]和[Sector136,Sector139] + ** \retval Ok 解锁成功 + ** \retval Error 解锁失败 *****************************************************************************/ en_result_t Flash_LockSet(en_flash_lock_t enLock, uint32_t u32LockValue) { + en_result_t enResult = Error; + FLASH_BYPASS(); *((&M0P_FLASH->SLOCK0) + enLock) = u32LockValue; - return Ok; + if(u32LockValue == *((&M0P_FLASH->SLOCK0) + enLock)) + { + return enResult = Ok; + } + + return enResult; } //@} // FlashGroup diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_gpio.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_gpio.c index e922051af39a00b04a74ea365030d951c621ce5c..0928174e395de1ee73f9aee44bbc6ad59c41509e 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_gpio.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_gpio.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file Gpio.c - ** - ** GPIO driver API. - ** @link Driver Group Some description @endlink - ** - ** - 2018-04-22 1.0 Lux First version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file gpio.c + * + * @brief Source file for GPIO functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_i2c.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_i2c.c index 41c241ee2d4dcbda8ff124931e3b6f5c1fc92b83..eafb6ff32d374e81e6e0a75cb6274801421f4d5d 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_i2c.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_i2c.c @@ -1,52 +1,20 @@ -/************************************************************************************* -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file I2C.c - ** - ** WDT function driver API. - ** @link SampleGroup Some description @endlink - ** - ** - 2018-03-13 1.0 CJ First version for Device Driver Library of Module. - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file i2c.c + * + * @brief Source file for I2C functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lcd.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lcd.c index 0725437752e26813fb29809310383ad753988e1b..0cfb5246384696080c3b9f71e3f2cc6906c7d6b4 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lcd.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lcd.c @@ -1,51 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file lcd.c - ** - ** lcd driver API. - ** - ** - 2019-04-02 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file lcd.c + * + * @brief Source file for LCD functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpm.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpm.c index fad63101eb9a7ff92af453ef3fd02b6088d2acea..0e3e0882dd1c7b2563cc0b6d4be7bbf34a0814aa 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpm.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpm.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ -/** \file lpm.c - ** - ** Common API of lpm. - ** @link LpmGroup Some description @endlink - ** - ** - 2017-06-06 - ** +/****************************************************************************** + * @file lpm.c + * + * @brief Source file for Low Power Mode functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* @@ -95,7 +63,16 @@ void Lpm_GotoDeepSleep(boolean_t bOnExit) { SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - SCB->SCR |= 1u<SCR |= SCB_SCR_SLEEPONEXIT_Msk; + } + else + { + SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk; + } + __WFI(); } @@ -111,7 +88,15 @@ void Lpm_GotoDeepSleep(boolean_t bOnExit) void Lpm_GotoSleep(boolean_t bOnExit) { SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; - SCB->SCR |= 1u<SCR |= SCB_SCR_SLEEPONEXIT_Msk; + } + else + { + SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk; + } __WFI(); } diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lptim.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lptim.c index 0e56a34b5c2b469d7d42e69a44ab53cf3de366db..6364a1363177986d7339b368136523fa81d1553c 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lptim.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lptim.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file lptim.c - ** - ** lptim driver API. - ** @link pcnt Group Some description @endlink - ** - ** - 2019-04-09 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file lptim.c + * + * @brief Source file for LPTIM functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** @@ -157,11 +125,12 @@ en_result_t Lptim_Init(M0P_LPTIMER_TypeDef* Lptimx, stc_lptim_cfg_t* InitStruct) { break; } - } - if(u16TimeOut == 0) - { - return ErrorTimeout; - } + + if(u16TimeOut == 0) + { + return ErrorTimeout; + } + } Lptimx->ARR_f.ARR = InitStruct->u16Arr; return Ok; } diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpuart.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpuart.c index 5a4a9429d24c7b1aac99fd582a09acd8b3732795..0bcda4fc197bdfc3a0b5d6e2cf36ee41a86d783c 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpuart.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lpuart.c @@ -1,52 +1,20 @@ -/************************************************************************************* -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file lpuart.c - ** - ** LPUART function driver API. - ** @link SampleGroup Some description @endlink - ** - ** - 2017-05-17 1.0 CJ First version for Device Driver Library of Module. - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file lpuart.c + * + * @brief Source file for LPUART functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ @@ -334,6 +302,40 @@ en_result_t LPUart_SendData(M0P_LPUART_TypeDef* LPUARTx, uint8_t u8Data) return Ok; } +/** + ****************************************************************************** + ** \brief LPUART通道发送数据函数,查询方式调用此函数,中断方式发送不适用 + ** + ** \param [in] u8Idx通道号,Data发送数据 + ** + ** \retval @ref en_result_t + + ******************************************************************************/ +en_result_t LPUart_SendDataTimeOut(M0P_LPUART_TypeDef* LPUARTx, uint8_t u8Data, uint32_t u32TimeOut) +{ + uint32_t u32Cnt = 0; + + while(FALSE == LPUart_GetStatus(LPUARTx,LPUartTxe)) + { + if(u32Cnt > u32TimeOut) + { + return ErrorTimeout; + } + u32Cnt++; + } + LPUARTx->SBUF_f.DATA = u8Data; + while(FALSE == LPUart_GetStatus(LPUARTx,LPUartTC)) + { + if(u32Cnt > u32TimeOut) + { + return ErrorTimeout; + } + u32Cnt++; + } + LPUart_ClrStatus(LPUARTx,LPUartTC); + return Ok; +} + /** ****************************************************************************** ** \brief LPUART通道发送数据函数,中断方式调用此函数 diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lvd.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lvd.c index b5068949aadec0bb472905d1238d2caa76aa84e1..c9e7dc276ea2b692b89a7d20038bd49d00d3697a 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lvd.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_lvd.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file lvd.c - ** - ** Low Voltage Detect driver API. - ** @link Lvd Group Some description @endlink - ** - ** - 2017-06-28 Alex First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file lvd.c + * + * @brief Source file for LVD functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** @@ -64,15 +32,6 @@ * Local pre-processor symbols/macros ('#define') ******************************************************************************/ -#define IS_VALID_INPUT(x) ( (x) <= LvdInputPB07 ) - -#define IS_VALID_THRESHOLD(x) ( (x) <= LvdTH3p3V ) - -#define IS_VALID_FILTER(x) ( (x) <= LvdFilter29ms ) - -#define IS_VALID_IRQTYPE(x) ( (x) <= LvdIrqFall ) - - /****************************************************************************** * Global variable definitions (declared in header file with 'extern') * ******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_opa.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_opa.c index 668e4d3e35cd7c95fb0385ea555d3b80bfa48e36..acca702eff9f2f0139b85cc7baf728787f3de8e6 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_opa.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_opa.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file opa.c - ** - ** opa driver API. - ** @link opa Group Some description @endlink - ** - ** - 2019-04-11 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file opa.c + * + * @brief Source file for OPA functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pca.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pca.c index e22d9b07dcc8abffa8c59acc88005f9723c81d29..5496841f64ca945ea35db93c6ba639ecc13efa99 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pca.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pca.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file pca.c - ** - ** pca driver API. - ** @link pcnt Group Some description @endlink - ** - ** - 2019-04-09 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file pca.c + * + * @brief Source file for PCA functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pcnt.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pcnt.c index a00f964523cb366befb1c7610c3d596dd1139a8d..1267bf60335b1fb788deddca17acc82120d9d959 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pcnt.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_pcnt.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file pcnt.c - ** - ** pcnt driver API. - ** @link pcnt Group Some description @endlink - ** - ** - 2019-04-08 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file pcnt.c + * + * @brief Source file for PCNT functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** @@ -118,11 +86,12 @@ en_result_t Pcnt_SetB2T(uint16_t value) { break; } - } - if(u16TimeOut == 0) - { - return ErrorTimeout; - } + + if(u16TimeOut == 0) + { + return ErrorTimeout; + } + } return Ok; } @@ -146,11 +115,12 @@ en_result_t Pcnt_SetB2C(uint16_t value) { break; } - } - if(u16TimeOut == 0) - { - return ErrorTimeout; - } + + if(u16TimeOut == 0) + { + return ErrorTimeout; + } + } return Ok; } @@ -172,11 +142,12 @@ en_result_t Pcnt_SetT2C(void) { break; } - } - if(u16TimeOut == 0) - { - return ErrorTimeout; - } + + if(u16TimeOut == 0) + { + return ErrorTimeout; + } + } return Ok; } @@ -190,7 +161,7 @@ en_result_t Pcnt_SetT2C(void) ******************************************************************************/ void Pcnt_SetBuf(uint16_t value) { - M0P_PCNT->TOP_f.TOP = value; + M0P_PCNT->BUF_f.BUF = value; } /** @@ -207,13 +178,9 @@ void Pcnt_Init(stc_pcnt_initstruct_t* InitStruct) M0P_PCNT->CTRL_f.S0P = InitStruct->Pcnt_S0Sel; M0P_PCNT->CTRL_f.CLKSEL = InitStruct->Pcnt_Clk; M0P_PCNT->CTRL_f.MODE = InitStruct->Pcnt_Mode; - if(InitStruct->Pcnt_Mode == PcntDoubleMode)//如果是双通道正交脉冲计数模式 - { - M0P_PCNT->SR1_f.DIR = InitStruct->Pcnt_Dir; - } - else + if(InitStruct->Pcnt_Mode != PcntDoubleMode)//如果不是双通道正交脉冲计数模式 { - M0P_PCNT->CTRL_f.DIR = InitStruct->Pcnt_Dir; + M0P_PCNT->CTRL_f.DIR = InitStruct->Pcnt_Dir; } M0P_PCNT->FLT_f.EN = InitStruct->Pcnt_FltEn; M0P_PCNT->FLT_f.DEBTOP = InitStruct->Pcnt_DebTop; diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ram.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ram.c index 9d3c45976feac1be009dd3378036bea2ac265bb5..5e062f4525752bc7ab8c7b86d62fcda341f8d166 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ram.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_ram.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file ram.c - ** - ** Common API of ram. - ** @link RamGroup Some description @endlink - ** - ** - 2018-05-08 - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file ram.c + * + * @brief Source file for RAM functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_reset.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_reset.c index 32846b9c3b908173d1c769e3726089b014462017..524df38cc5f9f252a44494176d1c280fb59c5096 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_reset.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_reset.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file reset.c - ** - ** Common API of reset. - ** @link resetGroup Some description @endlink - ** - ** - 2017-05-04 - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file reset.c + * + * @brief Source file for RESET functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_rtc.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_rtc.c index c23f6180a55a805884e7a6ed6d285c9dfc0ad4ae..083459b4f57e2591487992ed0ff9c627484bdc63 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_rtc.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_rtc.c @@ -1,52 +1,20 @@ -/************************************************************************************* -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file rtc.c - ** - ** RTC function driver API. - ** @link SampleGroup Some description @endlink - ** - ** - 2019-04-10 First version - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file rtc.c + * + * @brief Source file for RTC functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ @@ -106,11 +74,14 @@ void Rtc_Cmd(boolean_t NewState) void Rtc_StartWait(void) { M0P_RTC->CR1_f.WAIT = 1; + while (M0P_RTC->CR1_f.WAITF != 1) //等待直到WAITF=1 { ; } + M0P_RTC->CR1_f.WAIT = 0; + while (M0P_RTC->CR1_f.WAITF != 0) //等待直到WAITF=0 { ; @@ -142,7 +113,9 @@ void Rtc_Hz1Cmd(en_rtc_hz1sel_t pricision, boolean_t NewState) en_result_t Rtc_SetCyc(stc_rtc_cyccfg_t* pstCyc) { en_result_t enRet = Error; + M0P_RTC->CR0_f.PRDSEL = pstCyc->rtcPrdsel; + if(pstCyc->rtcPrdsel == RtcPrds) { M0P_RTC->CR0_f.PRDS = pstCyc->rtcPrds; @@ -160,7 +133,9 @@ en_result_t Rtc_SetCyc(stc_rtc_cyccfg_t* pstCyc) { ; } + enRet = Ok; + return enRet; } @@ -255,17 +230,17 @@ boolean_t Rtc_GetPridItStatus(void) ******************************************************************************/ en_result_t Rtc_CompCfg(uint16_t CompVlue, en_rtc_compen_t NewStatus) { - en_result_t enRet = Error; - if(CompVlue<=256) + if(CompVlue > 0x1FF) { - M0P_RTC->COMPEN_f.EN = NewStatus; - M0P_RTC->COMPEN_f.CR = CompVlue; + return ErrorInvalidParameter; } else { - enRet = ErrorInvalidParameter; + M0P_RTC->COMPEN_f.EN = NewStatus; + M0P_RTC->COMPEN_f.CR = CompVlue; } - return enRet; + + return Ok; } /** @@ -287,6 +262,7 @@ en_result_t Check_BCD_Format(uint8_t u8data,uint8_t u8limit_min, uint8_t u8limit { return Error; } + return Ok; } @@ -301,9 +277,10 @@ en_result_t Check_BCD_Format(uint8_t u8data,uint8_t u8limit_min, uint8_t u8limit ******************************************************************************/ uint8_t Rtc_CheckLeapYear(uint8_t u8year) { - uint16_t tmp; - tmp=2000+u8year; - if((((tmp % 4)==0) && ((tmp % 100) !=0))|| ((tmp % 400) ==0)) + uint16_t tmp; + tmp=2000+u8year; + + if((((tmp % 4)==0) && ((tmp % 100) !=0))|| ((tmp % 400) ==0)) { return 1; } @@ -331,6 +308,7 @@ uint8_t Get_Month2_Day( uint8_t u8year) { u8day++; } + return u8day; } @@ -338,51 +316,57 @@ uint8_t Get_Month2_Day( uint8_t u8year) ****************************************************************************** ** \brief RTC获取时间函数 ** - ** \param time: 用于存放读取自时间寄存器的时间数据,格式为BCD码格式 + ** \param pstcTimeDate: 用于存放读取自时间寄存器的时间数据,格式为BCD码格式 ** ** \retval Ok 获取正常 ** \retval ErrorTimeout 时间溢出错误 ******************************************************************************/ -en_result_t Rtc_ReadDateTime(stc_rtc_time_t* time) +en_result_t Rtc_ReadDateTime(stc_rtc_time_t* pstcTimeDate) { uint32_t u32TimeOut; - ASSERT(NULL != pstcTimeDate); - u32TimeOut = 1000; + ASSERT(NULL != pstcTimeDate); + if(1 == M0P_RTC->CR0_f.START) { M0P_RTC->CR1_f.WAIT = 1; - while(u32TimeOut--) + u32TimeOut = 0x1000; + while (FALSE == M0P_RTC->CR1_f.WAITF) { - if(M0P_RTC->CR1_f.WAITF) + if(0 == u32TimeOut--) { - break; + return ErrorTimeout; } - } - if(u32TimeOut==0) - { - return ErrorTimeout; - } + } } - time->u8Second = M0P_RTC->SEC; - time->u8Minute = M0P_RTC->MIN; + + pstcTimeDate->u8Second = M0P_RTC->SEC; + pstcTimeDate->u8Minute = M0P_RTC->MIN; + if(1 == M0P_RTC->CR0_f.AMPM) { - time->u8Hour = M0P_RTC->HOUR; + pstcTimeDate->u8Hour = M0P_RTC->HOUR; } else { - time->u8Hour = M0P_RTC->HOUR&0x1f; + pstcTimeDate->u8Hour = M0P_RTC->HOUR&0x1f; } - time->u8Day = M0P_RTC->DAY; - time->u8DayOfWeek = M0P_RTC->WEEK; - time->u8Month = M0P_RTC->MON; - time->u8Year = M0P_RTC->YEAR; + + pstcTimeDate->u8Day = M0P_RTC->DAY; + pstcTimeDate->u8DayOfWeek = M0P_RTC->WEEK; + pstcTimeDate->u8Month = M0P_RTC->MON; + pstcTimeDate->u8Year = M0P_RTC->YEAR; M0P_RTC->CR1_f.WAIT = 0; if(1 == M0P_RTC->CR0_f.START) { - while(M0P_RTC->CR1_f.WAITF) - {} + u32TimeOut = 0x1000; + while (TRUE == M0P_RTC->CR1_f.WAITF) + { + if(0 == u32TimeOut--) + { + return ErrorTimeout; + } + } } return Ok; @@ -400,23 +384,21 @@ en_result_t Rtc_ReadDateTime(stc_rtc_time_t* time) en_result_t Rtc_SetTime(stc_rtc_time_t* time) { en_result_t enRet = Ok; - uint16_t u16TimeOut; - u16TimeOut = 1000; + uint32_t u32TimeOut; + if(M0P_RTC->CR0_f.START == 1) { M0P_RTC->CR1_f.WAIT = 1; - while(--u16TimeOut) + u32TimeOut = 0x1000; + while (FALSE == M0P_RTC->CR1_f.WAITF) { - if(M0P_RTC->CR1_f.WAITF) + if(0 == u32TimeOut--) { - break; + return ErrorTimeout; } } - if(u16TimeOut==0) - { - return ErrorTimeout; - } } + M0P_RTC->SEC = time->u8Second; M0P_RTC->MIN = time->u8Minute; M0P_RTC->HOUR = time->u8Hour; @@ -428,9 +410,16 @@ en_result_t Rtc_SetTime(stc_rtc_time_t* time) M0P_RTC->CR1_f.WAIT = 0; if(M0P_RTC->CR0_f.START == 1) { - while(M0P_RTC->CR1_f.WAITF) - {} + u32TimeOut = 0x1000; + while (TRUE == M0P_RTC->CR1_f.WAITF) + { + if(0 == u32TimeOut--) + { + return ErrorTimeout; + } + } } + enRet = Ok; return enRet; } @@ -464,16 +453,20 @@ void Rtc_GetAlarmTime(stc_rtc_alarmtime_t* pstcAlarmTime) en_result_t Rtc_SetAlarmTime(stc_rtc_alarmtime_t* pstcAlarmTime) { en_result_t enRet = Ok; -// ASSERT(NULL != pstcAlarmTime); + ASSERT(NULL != pstcAlarmTime); Rtc_AlmEnCmd(FALSE); //闹钟禁止以后再设置闹钟时间 enRet = Check_BCD_Format(pstcAlarmTime->RtcAlarmSec,0x00,0x59); + if(enRet != Ok) + { + return enRet; + } if(M0P_RTC->CR0_f.AMPM == RtcAm) { - enRet = Check_BCD_Format(pstcAlarmTime->RtcAlarmHour,0x00,0x12); + enRet = Check_BCD_Format(pstcAlarmTime->RtcAlarmHour,0x01,0x12); } else { - enRet = Check_BCD_Format(pstcAlarmTime->RtcAlarmHour,0x00,0x24); + enRet = Check_BCD_Format(pstcAlarmTime->RtcAlarmHour,0x00,0x23); } if(enRet != Ok) { @@ -484,11 +477,7 @@ en_result_t Rtc_SetAlarmTime(stc_rtc_alarmtime_t* pstcAlarmTime) { return enRet; } - - if(enRet != Ok) - { - return enRet; - } + M0P_RTC->ALMSEC = pstcAlarmTime->RtcAlarmSec & 0x7f; M0P_RTC->ALMMIN = pstcAlarmTime->RtcAlarmMinute & 0x7f; M0P_RTC->ALMHOUR = pstcAlarmTime->RtcAlarmHour & 0x3f; diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_spi.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_spi.c index b13177a85efefbefb6046d439ee1f029844c6522..67035d5e9176e53096e138f2badea125c955da13 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_spi.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_spi.c @@ -1,54 +1,21 @@ /****************************************************************************** -* Copyright (C) 2016, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with eaenCh copy of this software, whether used in part or whole, -* at all times. -*/ -/*****************************************************************************/ -/** \file spi.c - ** - ** SPI driver API. - ** @link Driver Group Some description @endlink - ** - ** - 2018-05-17 1.0 Devi First version for Device Driver Library of - ** Module. - ** - *****************************************************************************/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file spi.c + * + * @brief Source file for SPI functions + * + * @author MADS Team + * + ******************************************************************************/ /****************************************************************************** * Include files diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_sysctrl.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_sysctrl.c index 1ac727d38cb81d77ffc877fcb2d6a52e9fec64e6..5c5858101439bac5f0fbfcda6c73db912e47380f 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_sysctrl.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_sysctrl.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file sysctrl.c - ** - ** Common API of sysctrl. - ** @link SysctrlGroup Some description @endlink - ** - ** - 2018-04-22 Lux - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file sysctrl.c + * + * @brief Source file for SYSCTRL functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* @@ -159,6 +127,7 @@ en_result_t Sysctrl_ClkSourceEnable(en_sysctrl_clk_source_t enSource, boolean_t { ; } + delay1ms(10); break; case SysctrlClkRCL: diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_timer3.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_timer3.c index 907743ac549cda21f37b360609a05a1be477d7a9..bb427175e2994630655c39c8b05a20bf684c99f4 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_timer3.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_timer3.c @@ -1,44 +1,21 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file timer3.c + * + * @brief Source file for TIMER3 functions + * + * @author MADS Team + * + ******************************************************************************/ /** \file timer3.c ** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trim.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trim.c index e21d0e27db16d27f06ea7f9e094b1ca90bebae85..7dbbc0ae7a47ee4983d1147857b0723e51e6deb4 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trim.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trim.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file trim.c - ** - ** Common API of trim. - ** @link trimGroup Some description @endlink - ** - ** - 2017-05-16 - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file trim.c + * + * @brief Source file for TRIM functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trng.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trng.c index 4ebf27ec20cd4045610989b98c2203fc170cee3e..edb7a63ee73c7cea0035d84bf398c1ef57843705 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trng.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_trng.c @@ -1,52 +1,20 @@ /****************************************************************************** -*Copyright(C)2018, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ - -/** \file rng.c - ** - ** Common API of rng. - ** @link flashGroup Some description @endlink - ** - ** - 2018-05-08 - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file trng.c + * + * @brief Source file for TRNG functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************* diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_uart.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_uart.c index 8a3d43b6b8a5ad3ced57b01240223b28a923809f..88a7ac72f7bf85e1df097d0ef02a2818e2ce1bf9 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_uart.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_uart.c @@ -1,52 +1,20 @@ -/************************************************************************************* -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file uart.c - ** - ** UART function driver API. - ** @link SampleGroup Some description @endlink - ** - ** - 2017-05-17 1.0 CJ First version for Device Driver Library of Module. - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file uart.c + * + * @brief Source file for UART functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ @@ -310,6 +278,41 @@ en_result_t Uart_SendDataPoll(M0P_UART_TypeDef* UARTx, uint8_t u8Data) return Ok; } +/** + ****************************************************************************** + ** \brief UART通道发送数据函数,查询方式调用此函数,中断方式发送不适用 + ** + ** \param [in] UARTx通道号,Data发送数据 + ** + ** \retval @ref en_result_t + ******************************************************************************/ +en_result_t Uart_SendDataPollTimeOut(M0P_UART_TypeDef* UARTx, uint8_t u8Data, uint32_t u32TimeOut) +{ + uint32_t u32Cnt = 0; + + while(FALSE == Uart_GetStatus(UARTx,UartTxe)) + { + if(u32Cnt > u32TimeOut) + { + return ErrorTimeout; + } + u32Cnt++; + } + UARTx->SBUF_f.DATA = u8Data; + + u32Cnt = 0; + while(FALSE == Uart_GetStatus(UARTx,UartTC)) + { + if(u32Cnt > u32TimeOut) + { + return ErrorTimeout; + } + u32Cnt++; + } + Uart_ClrStatus(UARTx,UartTC); + return Ok; +} + /** ****************************************************************************** ** \brief UART通道发送数据函数,中断方式调用此函数 diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_vc.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_vc.c index 46c43e9bf0ea8d4abca13302c285665d73a9bd62..506de852ab113da83006853b120fbb34da3817cd 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_vc.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_vc.c @@ -1,52 +1,20 @@ /****************************************************************************** -* Copyright (C) 2019, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file vc.c - ** - ** voltage comparator driver API. - ** @link VC Group Some description @endlink - ** - ** - 2019-04-10 First Version - ** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file vc.c + * + * @brief Source file for VC functions + * + * @author MADS Team + * ******************************************************************************/ /****************************************************************************** diff --git a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_wdt.c b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_wdt.c index 3c8f8f08dc692cba0393e91f742d6867ad3e228f..c9379b2bfb39d201fbe2a45b906a88bd54dcf216 100644 --- a/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_wdt.c +++ b/bsp/hc32l196/Libraries/HC32L196_StdPeriph_Driver/src/hc32l196_wdt.c @@ -1,52 +1,20 @@ -/************************************************************************************* -* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved. -* -* This software is owned and published by: -* Huada Semiconductor Co.,Ltd ("HDSC"). -* -* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND -* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. -* -* This software contains source code for use with HDSC -* components. This software is licensed by HDSC to be adapted only -* for use in systems utilizing HDSC components. HDSC shall not be -* responsible for misuse or illegal use of this software for devices not -* supported herein. HDSC is providing this software "AS IS" and will -* not be responsible for issues arising from incorrect user implementation -* of the software. -* -* Disclaimer: -* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, -* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), -* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, -* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED -* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED -* WARRANTY OF NONINFRINGEMENT. -* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, -* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT -* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, -* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR -* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, -* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, -* SAVINGS OR PROFITS, -* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR -* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED -* FROM, THE SOFTWARE. -* -* This software may be replicated in part or whole for the licensed use, -* with the restriction that this Disclaimer and Copyright notice must be -* included with each copy of this software, whether used in part or whole, -* at all times. -*/ -/******************************************************************************/ -/** \file wdt.c - ** - ** WDT function driver API. - ** @link WdtGroup Some description @endlink - ** - ** - 2017-05-17 1.0 CJ First version for Device Driver Library of Module. - ** +/****************************************************************************** + * Copyright (C) 2021, Xiaohua Semiconductor Co., Ltd. All rights reserved. + * + * This software component is licensed by XHSC under BSD 3-Clause license + * (the "License"); You may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * opensource.org/licenses/BSD-3-Clause + * + ******************************************************************************/ + +/****************************************************************************** + * @file wdt.c + * + * @brief Source file for WDT functions + * + * @author MADS Team + * ******************************************************************************/ /******************************************************************************/ diff --git a/bsp/hc32l196/Libraries/SConscript b/bsp/hc32l196/Libraries/SConscript index 64ebe4eb657152bccf352a1118687e12d5312994..82da7106b88649f5d3baabd898e919ada3e54084 100644 --- a/bsp/hc32l196/Libraries/SConscript +++ b/bsp/hc32l196/Libraries/SConscript @@ -15,11 +15,45 @@ HC32L196_StdPeriph_Driver/src/hc32l196_ddl.c HC32L196_StdPeriph_Driver/src/hc32l196_gpio.c HC32L196_StdPeriph_Driver/src/hc32l196_sysctrl.c HC32L196_StdPeriph_Driver/src/hc32l196_flash.c +HC32L196_StdPeriph_Driver/src/hc32l196_debug.c +HC32L196_StdPeriph_Driver/src/hc32l196_dmac.c +HC32L196_StdPeriph_Driver/src/hc32l196_ram.c +HC32L196_StdPeriph_Driver/src/hc32l196_reset.c +HC32L196_StdPeriph_Driver/src/hc32l196_trim.c +HC32L196_StdPeriph_Driver/src/hc32l196_crc.c +HC32L196_StdPeriph_Driver/src/hc32l196_trng.c """) if GetDepend(['RT_USING_SERIAL']): src += ['HC32L196_StdPeriph_Driver/src/hc32l196_uart.c'] +if GetDepend(['RT_USING_LPUART']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_lpuart.c'] + +if GetDepend(['RT_USING_I2C']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_i2c.c'] + +if GetDepend(['RT_USING_SPI']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_spi.c'] + +if GetDepend(['RT_USING_ADC']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_bgr.c'] + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_adc.c'] + +if GetDepend(['RT_USING_DAC']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_dac.c'] + +if GetDepend(['RT_USING_RTC']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_rtc.c'] + +if GetDepend(['RT_USING_WDT']): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_wdt.c'] + +if GetDepend(['RT_USING_HWTIMER']) or GetDepend(['RT_USING_PWM'] or GetDepend(['RT_USING_PULSE_ENCODER'])): + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_bt.c'] + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_adt.c'] + src += ['HC32L196_StdPeriph_Driver/src/hc32l196_timer3.c'] + #add for startup script if rtconfig.PLATFORM in ['gcc']: src = src + ['CMSIS/Device/HDSC/HC32L196/Source/GCC/startup_hc32l19x.s'] diff --git a/bsp/hc32l196/README.md b/bsp/hc32l196/README.md index fe5452c93552ac58606927fd9152ef67c186397e..6bdc71898228f597e9cb6e2388dbe11b7caceceb 100644 --- a/bsp/hc32l196/README.md +++ b/bsp/hc32l196/README.md @@ -38,7 +38,10 @@ HC32L196 核心板 **板载资源** 如下: | **片上外设** | **支持情况** | **备注** | | :------------ | :-----------: | :-----------------------------------: | | GPIO | 支持 | PA0, PA1... PF15 ---> PIN: 0, 1...95 | -| UART | 支持 | UART0, UART1 | +| UART | 支持 | UART0/1, 支持轮询、中断、DMA, 64PIN及以上的芯片支持UART2/3 | +| SPI | 支持 | SPI0/1, 支持轮询、DMA | +| I2C | 支持 | I2C0/1, 软硬件I2C可选 | +| DMA | 支持 | UART DMA, SPI DMA | ## 使用说明 @@ -96,6 +99,10 @@ msh > ## 注意事项 +1. 外设端口配置请编辑 board/board_config.h 文件。 + +2. 由于 HC32L96 DMA通道只有2个,驱动支持不同外设DMA通道复用,如可配置SPI0 DMA通道0/1,同时再配置SPI1 DMA通道0/1;UART RX DMA模式为非阻塞式,且在设备open和close期间只能独占DMA通道,其余DMA模式都为阻塞式。 + ## 联系人信息 维护人: diff --git a/bsp/hc32l196/SConstruct b/bsp/hc32l196/SConstruct index c2929ae6af5272895dc77c90a3324d25a2ef61b7..50456e979a16ea7c5448b1183980d71b7059e5c6 100644 --- a/bsp/hc32l196/SConstruct +++ b/bsp/hc32l196/SConstruct @@ -31,8 +31,9 @@ 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') + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') +Export('env') Export('RTT_ROOT') Export('rtconfig') diff --git a/bsp/hc32l196/board/Kconfig b/bsp/hc32l196/board/Kconfig index 02bfa70bef78a7a49708034061623d7f3585f613..65796c70020b779c7b38a8acf23e6e37c41ff264 100644 --- a/bsp/hc32l196/board/Kconfig +++ b/bsp/hc32l196/board/Kconfig @@ -9,6 +9,13 @@ config MCU_HC32L196 menu "Onboard Peripheral Drivers" + config BSP_USING_SPI_FLASH + bool "Enable SPI FLASH" + select BSP_USING_SPI + select RT_USING_SFUD + select RT_SFUD_USING_SFDP + default n + endmenu menu "On-chip Peripheral Drivers" @@ -25,10 +32,131 @@ menu "On-chip Peripheral Drivers" config BSP_USING_UART0 bool "Enable UART0" default y + if BSP_USING_UART0 + config BSP_UART0_TX_USING_DMA + bool "Enable UART0 TX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:为阻塞式DMA发送。 + + config BSP_UART0_RX_USING_DMA + bool "Enable UART0 RX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:开启DMA接收,在端口打开和关闭期间,必须独占DMA通道,非阻塞式。 + endif config BSP_USING_UART1 bool "Enable UART1" default n + if BSP_USING_UART1 + config BSP_UART1_TX_USING_DMA + bool "Enable UART1 TX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:为阻塞式DMA发送。 + + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:开启DMA接收,在端口打开和关闭期间,必须独占DMA通道,非阻塞式。 + endif + + config BSP_USING_UART2 + bool "Enable UART2" + default n + if BSP_USING_UART2 + config BSP_UART2_TX_USING_DMA + bool "Enable UART2 TX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:为阻塞式DMA发送。 + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:开启DMA接收,在端口打开和关闭期间,必须独占DMA通道,非阻塞式。 + endif + + config BSP_USING_UART3 + bool "Enable UART3" + default n + if BSP_USING_UART3 + config BSP_UART3_TX_USING_DMA + bool "Enable UART3 TX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:为阻塞式DMA发送。 + + config BSP_UART3_RX_USING_DMA + bool "Enable UART3 RX DMA" + select RT_SERIAL_USING_DMA + default n + help + 注意:开启DMA接收,在端口打开和关闭期间,必须独占DMA通道,非阻塞式。 + endif + endif + + menuconfig BSP_USING_I2C + bool "Enable I2C BUS" + default n + select RT_USING_I2C + if BSP_USING_I2C + menuconfig BSP_USING_I2C0 + bool "Enable I2C0 BUS" + default n + + menuconfig BSP_USING_I2C1 + bool "Enable I2C1 BUS" + default n + + endif + + menuconfig BSP_USING_SPI + bool "Enable SPI BUS" + default n + select RT_USING_SPI + if BSP_USING_SPI + config BSP_SPI_USING_DMA + bool "Enable SPI DMA mode" + default y + + config BSP_USING_SPI0 + bool "Enable SPI0 BUS" + default n + if BSP_USING_SPI0 + config BSP_SPI0_TX_USING_DMA + bool "Enable SPI0 TX DMA" + default n + + config BSP_SPI0_RX_USING_DMA + bool "Enable SPI0 RX DMA" + select BSP_SPI0_TX_USING_DMA + default n + endif + + config BSP_USING_SPI1 + bool "Enable SPI1 BUS" + default n + if BSP_USING_SPI1 + config BSP_SPI1_TX_USING_DMA + bool "Enable SPI1 TX DMA" + default n + + config BSP_SPI1_RX_USING_DMA + bool "Enable SPI1 RX DMA" + select BSP_SPI1_TX_USING_DMA + default n + endif endif endmenu diff --git a/bsp/hc32l196/board/board.c b/bsp/hc32l196/board/board.c index 3d9309e0afb08a78507cbb23d7ed6c802a69d54f..bbbe6e6954452a852dbeb3d92979e80cef4f161b 100644 --- a/bsp/hc32l196/board/board.c +++ b/bsp/hc32l196/board/board.c @@ -9,8 +9,9 @@ #include #include - -#include "board.h" +#include +#include +#include #include "hc32l196_sysctrl.h" #include "hc32l196_flash.h" @@ -27,21 +28,23 @@ void rt_hw_board_clock_init(void) Sysctrl_SetHCLKDiv(SysctrlHclkDiv1); Sysctrl_SetPCLKDiv(SysctrlPclkDiv1); - /* switch clock to RCL before changing RCH */ - Sysctrl_SetRCLTrim(SysctrlRclFreq32768); - Sysctrl_SetRCLStableTime(SysctrlRclStableCycle64); - Sysctrl_ClkSourceEnable(SysctrlClkRCL, TRUE); - Sysctrl_SysClkSwitch(SysctrlClkRCL); - - /* set RCH to 4MHz */ - Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz); - Sysctrl_ClkSourceEnable(SysctrlClkRCH, TRUE); - + /* 开启GPIO外设时钟 */ + Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); + /* 配置XTL晶振引脚为模拟 */ + Gpio_SetAnalogMode(GpioPortC, GpioPin14); + Gpio_SetAnalogMode(GpioPortC, GpioPin15); + /* 配置XTL晶振 */ + Sysctrl_XTLDriverCfg(SysctrlXtlAmp3, SysctrlXtalDriver3); + Sysctrl_SetXTLStableTime(SysctrlXtlStableCycle16384); + Sysctrl_ClkSourceEnable(SysctrlClkXTL, TRUE); + + /* PLL */ stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; stcPLLCfg.enPllClkSrc = SysctrlPllRch; /* input clock: RCH */ stcPLLCfg.enPllMul = SysctrlPllMul12; /* 4MHz x 12 = 48MHz */ Sysctrl_SetPLLFreq(&stcPLLCfg); + Sysctrl_SetPLLStableTime(SysctrlPllStableCycle8192); /* * When the used clock source HCLK is greater than 24M, diff --git a/bsp/hc32l196/board/board.h b/bsp/hc32l196/board/board.h index b6fef40983c872f1a0ad55d22c4b97d396a32d08..647f02451b4a8a184131c397628f6bc487fffa9b 100644 --- a/bsp/hc32l196/board/board.h +++ b/bsp/hc32l196/board/board.h @@ -11,8 +11,8 @@ #define __BOARD_H__ #include +#include #include "hc32l196_ddl.h" -#include "drv_gpio.h" /* board configuration */ #define SRAM_BASE 0x20000000 @@ -20,7 +20,7 @@ #define SRAM_END (SRAM_BASE + SRAM_SIZE) /* High speed sram. */ -#ifdef __CC_ARM +#if defined(__CC_ARM) || defined (__ARMCC_VERSION) extern int Image$$RW_IRAM1$$ZI$$Limit; #define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) #elif __ICCARM__ diff --git a/bsp/hc32l196/board/board_config.c b/bsp/hc32l196/board/board_config.c index c6c6e17dbf58e3db5bff6dc0f8f40b74d5db5af5..81d368d21adaae1239c26ed0bee3e4c8e6c5a843 100644 --- a/bsp/hc32l196/board/board_config.c +++ b/bsp/hc32l196/board/board_config.c @@ -7,7 +7,7 @@ * 2020-09-01 DongBowen first version */ #include -#include "board_config.h" +#include /** * The below functions will initialize HC32 board. diff --git a/bsp/hc32l196/board/board_config.h b/bsp/hc32l196/board/board_config.h index 075346d718f665f5a937676df757eb2443423c4b..b07f5a5a3106f0e76b738171755c7a84798a21c4 100644 --- a/bsp/hc32l196/board/board_config.h +++ b/bsp/hc32l196/board/board_config.h @@ -11,6 +11,9 @@ #define __BOARD_CONFIG_H__ #include +#include +#include +#include #include "hc32l196_ddl.h" #include "hc32l196_gpio.h" #include "hc32l196_uart.h" @@ -18,23 +21,135 @@ /*********** Port configure *********/ #if defined(BSP_USING_UART0) - #define UART0_RX_PORT GpioPortA - #define UART0_RX_PIN GpioPin10 - #define UART0_RX_AF GpioAf1 - #define UART0_TX_PORT GpioPortA #define UART0_TX_PIN GpioPin9 #define UART0_TX_AF GpioAf1 + #define UART0_RX_PORT GpioPortA + #define UART0_RX_PIN GpioPin10 + #define UART0_RX_AF GpioAf1 + #define UART0_BAUD_RATE 115200 + #ifdef BSP_UART0_RX_USING_DMA + #define UART0_RX_DMA_CHANNEL DmaCh0 + #endif + #ifdef BSP_UART0_TX_USING_DMA + #define UART0_TX_DMA_CHANNEL DmaCh1 + #endif #endif #if defined(BSP_USING_UART1) + #define UART1_TX_PORT GpioPortA + #define UART1_TX_PIN GpioPin2 + #define UART1_TX_AF GpioAf1 #define UART1_RX_PORT GpioPortA #define UART1_RX_PIN GpioPin3 #define UART1_RX_AF GpioAf1 + #define UART1_BAUD_RATE 115200 + #ifdef BSP_UART1_RX_USING_DMA + #define UART1_RX_DMA_CHANNEL DmaCh0 + #endif + #ifdef BSP_UART1_TX_USING_DMA + #define UART1_TX_DMA_CHANNEL DmaCh1 + #endif +#endif - #define UART1_TX_PORT GpioPortA - #define UART1_TX_PIN GpioPin2 - #define UART1_TX_AF GpioAf1 +#if defined(BSP_USING_UART3) + #define UART3_TX_PORT GpioPortC + #define UART3_TX_PIN GpioPin7 + #define UART3_TX_AF GpioAf6 + #define UART3_RX_PORT GpioPortC + #define UART3_RX_PIN GpioPin6 + #define UART3_RX_AF GpioAf6 + #define UART3_BAUD_RATE 9600 + #ifdef BSP_UART3_RX_USING_DMA + #define UART3_RX_DMA_CHANNEL DmaCh0 + #endif + #ifdef BSP_UART3_TX_USING_DMA + #define UART3_TX_DMA_CHANNEL DmaCh1 + #endif +#endif + +#ifdef BSP_USING_SPI0 + #define SPI0_FREQ_MAX 16000000 + #define SPI0_WITH_DC RT_FALSE + #define SPI0_CS_PORT GpioPortA + #define SPI0_CS_PIN GpioPin4 + #define SPI0_CS_AF GpioAf1 + #define SPI0_CLK_PORT GpioPortA + #define SPI0_CLK_PIN GpioPin5 + #define SPI0_CLK_AF GpioAf1 + #define SPI0_MISO_PORT GpioPortA + #define SPI0_MISO_PIN GpioPin6 + #define SPI0_MISO_AF GpioAf1 + #define SPI0_MOSI_PORT GpioPortA + #define SPI0_MOSI_PIN GpioPin7 + #define SPI0_MOSI_AF GpioAf1 + #define SPI0_DC_PORT 0 + #define SPI0_DC_PIN 0 + #define SPI0_DC_AF 0 + #ifdef BSP_SPI0_TX_USING_DMA + #define SPI0_TX_DMA_CHANNEL DmaCh0 + #endif + #ifdef BSP_SPI0_RX_USING_DMA + #define SPI0_RX_DMA_CHANNEL DmaCh1 + #endif +#endif + +#ifdef BSP_USING_SPI1 + #define SPI1_FREQ_MAX 16000000 + #define SPI1_WITH_DC RT_TRUE + #define SPI1_CS_PORT GpioPortB + #define SPI1_CS_PIN GpioPin12 + #define SPI1_CS_AF GpioAf1 + #define SPI1_CLK_PORT GpioPortB + #define SPI1_CLK_PIN GpioPin13 + #define SPI1_CLK_AF GpioAf1 + #define SPI1_MISO_PORT GpioPortB + #define SPI1_MISO_PIN GpioPin14 + #define SPI1_MISO_AF GpioAf0 // 普通GPIO,用于D/C#控制 + #define SPI1_MOSI_PORT GpioPortB + #define SPI1_MOSI_PIN GpioPin15 + #define SPI1_MOSI_AF GpioAf1 + #define SPI1_DC_PORT SPI1_MISO_PORT + #define SPI1_DC_PIN SPI1_MISO_PIN + #define SPI1_DC_AF SPI1_MISO_AF + #ifdef BSP_SPI1_TX_USING_DMA + #define SPI1_TX_DMA_CHANNEL DmaCh0 + #endif + #ifdef BSP_SPI1_RX_USING_DMA + #define SPI1_RX_DMA_CHANNEL DmaCh1 + #endif +#endif + +#ifdef RT_USING_I2C_BITOPS +#ifdef BSP_USING_I2C0 + #define BSP_I2C0_SCL_PIN GET_PIN(B, 6) + #define BSP_I2C0_SDA_PIN GET_PIN(B, 7) +#endif + +#ifdef BSP_USING_I2C1 + #define BSP_I2C1_SCL_PIN GET_PIN(F, 6) + #define BSP_I2C1_SDA_PIN GET_PIN(F, 7) +#endif +#else +#ifdef BSP_USING_I2C0 + #define I2C0_BUS_BAUD 400000 // 400Khz + #define I2C0_SCL_PORT GpioPortB + #define I2C0_SCL_PIN GpioPin6 + #define I2C0_SCL_AF GpioAf1 + #define I2C0_SDA_PORT GpioPortB + #define I2C0_SDA_PIN GpioPin7 + #define I2C0_SDA_AF GpioAf1 +#endif + +#ifdef BSP_USING_I2C1 + #define I2C1_BUS_BAUD 100000 // 100Khz + #define I2C1_SCL_PORT GpioPortF + #define I2C1_SCL_PIN GpioPin6 + #define I2C1_SCL_AF GpioAf1 + #define I2C1_SDA_PORT GpioPortF + #define I2C1_SDA_PIN GpioPin7 + #define I2C1_SDA_AF GpioAf1 +#endif #endif #endif diff --git a/bsp/hc32l196/drivers/SConscript b/bsp/hc32l196/drivers/SConscript index 0258ca131b8bbca7a6e3f908da0f97d020323a14..0c76ab1991d8af5ecfd15defef1d1fce3cf4f495 100644 --- a/bsp/hc32l196/drivers/SConscript +++ b/bsp/hc32l196/drivers/SConscript @@ -13,6 +13,15 @@ if GetDepend(['RT_USING_PIN']): if GetDepend(['RT_USING_SERIAL']): src += ['drv_usart.c'] +if GetDepend(['RT_USING_SPI']): + src += ['drv_spi.c'] + +if GetDepend(['RT_USING_I2C']): + src += ['drv_i2c.c'] + +if GetDepend(['RT_SERIAL_USING_DMA']) or GetDepend(['BSP_SPI_USING_DMA']): + src += ['drv_dma.c'] + CPPPATH = [cwd] group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) diff --git a/bsp/hc32l196/drivers/drv_dma.c b/bsp/hc32l196/drivers/drv_dma.c new file mode 100644 index 0000000000000000000000000000000000000000..ca8f59460e1af18f2e58220b74f592a67a0d964a --- /dev/null +++ b/bsp/hc32l196/drivers/drv_dma.c @@ -0,0 +1,301 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-12-21 Sunwancn the first version + */ + +#include +#include +#include + +#if defined(RT_SERIAL_USING_DMA) || defined(BSP_SPI_USING_DMA) + +static struct rt_event dma_trans_evt = {0}; +static struct dma_lock dma_lock = {0}; + +/************** Bits definition for DMA_CONFAx(x=0~1) register *************/ +#define DMA_TRI_SEL_Pos (22U) /*!< DMAC_CONFAx: TRISEL Position */ +#define DMA_TRI_SEL_Msk (0x7FU << DMA_TRI_SEL_Pos) /*!< DMAC_CONFAx: TRISEL Mask 0x1FC00000 */ +#define DMA_TC_SEL_Pos (0U) /*!< DMAC_CONFAx: TRISEL Position */ +#define DMA_TC_SEL_Msk (0xFFFFU << DMA_TC_SEL_Pos) /*!< DMAC_CONFAx: TRISEL Mask 0x0000FFFF */ + +rt_inline rt_size_t get_dma_transfer_counts(en_dma_channel_t ch) +{ + rt_uint32_t cnts = *(&M0P_DMAC->CONFA0 + ch) & ((rt_uint32_t)DMA_TC_SEL_Msk); + return cnts >> DMA_TC_SEL_Pos; +} + +en_dma_trig_sel_t get_dma_trig(en_dma_channel_t ch) +{ + rt_uint32_t trig = *(&M0P_DMAC->CONFA0 + ch) & ((rt_uint32_t)DMA_TRI_SEL_Msk); + return (en_dma_trig_sel_t)(trig >> DMA_TRI_SEL_Pos); +} + +void change_dma_trig(en_dma_channel_t ch, en_dma_trig_sel_t trig) +{ + /* 首先把TRI_SEL[28:22]位清零,然后再赋值 */ + *(&M0P_DMAC->CONFA0 + ch) &= (~(rt_uint32_t)DMA_TRI_SEL_Msk); + *(&M0P_DMAC->CONFA0 + ch) |= ((rt_uint32_t)trig << DMA_TRI_SEL_Pos); +} + +rt_err_t dma_mutex_take(en_dma_channel_t ch, rt_int32_t time) +{ + if (ch) + return rt_mutex_take(&dma_lock.ch1_lock, time); + return rt_mutex_take(&dma_lock.ch0_lock, time); +} + +rt_err_t dma_mutex_release(en_dma_channel_t ch) +{ + if (ch) + return rt_mutex_release(&dma_lock.ch1_lock); + return rt_mutex_release(&dma_lock.ch0_lock); +} + +void dma_mutex_take_all(rt_int32_t time) +{ + rt_mutex_take(&dma_lock.ch0_lock, time); + rt_mutex_take(&dma_lock.ch1_lock, time); +} + +void dma_mutex_release_all(void) +{ + rt_mutex_release(&dma_lock.ch0_lock); + rt_mutex_release(&dma_lock.ch1_lock); +} + +rt_err_t hc32_wait_dma_event(rt_uint32_t set, rt_int32_t timeout, rt_uint32_t *recved) +{ + return rt_event_recv(&dma_trans_evt, set, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, timeout, recved); +} + +/* DMA初始化,dir=0 接收,dir=1 发送 */ +rt_err_t hc32_dma_init(en_dma_channel_t ch, int dir) +{ + stc_dma_cfg_t stcDmaCfg; + + // 使能 DMA时钟 + Sysctrl_SetPeripheralGate(SysctrlPeripheralDma, TRUE); + + DDL_ZERO_STRUCT(stcDmaCfg); + + stcDmaCfg.enMode = DmaMskBlock; //选择块传输 + stcDmaCfg.u16BlockSize = 1u; //块传输个数 + stcDmaCfg.u16TransferCnt = 1u; //最少须为1 + stcDmaCfg.enTransferWidth = DmaMsk8Bit; //传输数据的宽度 + if (dir == DMA_TX) + { + stcDmaCfg.enSrcAddrMode = DmaMskSrcAddrInc; //源地址自增 + stcDmaCfg.enDstAddrMode = DmaMskDstAddrFix; //目的地址固定 + stcDmaCfg.enDestAddrReloadCtl = DmaMskDstAddrReloadEnable; //使能重新加载传输目的地址 + stcDmaCfg.enSrcAddrReloadCtl = DmaMskSrcAddrReloadEnable; //使能重新加载传输源地址 + } + else + { + stcDmaCfg.enSrcAddrMode = DmaMskSrcAddrFix; //源地址固定 + stcDmaCfg.enDstAddrMode = DmaMskDstAddrInc; //目的地址自增 + stcDmaCfg.enDestAddrReloadCtl = DmaMskDstAddrReloadEnable; //使能重新加载传输目的地址 + stcDmaCfg.enSrcAddrReloadCtl = DmaMskSrcAddrReloadEnable; //使能重新加载传输源地址 + } + stcDmaCfg.enSrcBcTcReloadCtl = DmaMskBcTcReloadEnable; //使能重新加载BC/TC值 + stcDmaCfg.enTransferMode = DmaMskOneTransfer; //dma传输一次,DMAC传输完成时清除CONFA:ENS位 + stcDmaCfg.enPriority = DmaMskPriorityLoop; //DMA各通道优先级采用轮询方式 + + /* Init Dma */ + if (Ok != Dma_InitChannel(ch, &stcDmaCfg)) + { + return -RT_EIO; + } + + return RT_EOK; +} + +static int _dma_init(void) +{ + rt_err_t rst; + rst = rt_mutex_init(&dma_lock.ch0_lock, "dma0_mut", RT_IPC_FLAG_PRIO); + RT_ASSERT(rst == RT_EOK); + rst = rt_mutex_init(&dma_lock.ch1_lock, "dma1_mut", RT_IPC_FLAG_PRIO); + RT_ASSERT(rst == RT_EOK); + rst = rt_event_init(&dma_trans_evt, "dma_evt", RT_IPC_FLAG_PRIO); + RT_ASSERT(rst == RT_EOK); + return 0; +} +INIT_BOARD_EXPORT(_dma_init); + +#ifdef RT_SERIAL_USING_DMA +extern void rt_hw_serial_isr(struct rt_serial_device *serial, int event); +#endif + +// DMA中断 +__USED void Dmac_IRQHandler(void) +{ + en_dma_stat_t dma_ste; + en_dma_trig_sel_t trig; + en_dma_channel_t ch; + en_dma_channel_t chs[] = {DmaCh0, DmaCh1}; + rt_bool_t err, err_all; + + /* enter interrupt */ + rt_interrupt_enter(); + + err_all = RT_FALSE; + for (int i = 0; i < 2; i++) + { + err = RT_FALSE; + ch = chs[i]; + trig = get_dma_trig(ch); + dma_ste = Dma_GetStat(ch); + + if (dma_ste == DmaDefault) + continue; + else if (DmaAddOverflow == dma_ste || DmaAccSCRErr == dma_ste || DmaAccDestErr == dma_ste) + err = RT_TRUE; + + Dma_ClrStat(ch); + + switch(trig) + { +#ifdef BSP_SPI_USING_DMA +#ifdef BSP_SPI0_TX_USING_DMA + case DmaSPI0TXTrig: + if (err) + { + err_all = RT_TRUE; + rt_event_send(&dma_trans_evt, SPI0_TRANS_ERROR); + } + break; +#endif +#ifdef BSP_SPI0_RX_USING_DMA + case DmaSPI0RXTrig: + if (DmaTransferComplete == dma_ste) + { + rt_event_send(&dma_trans_evt, SPI0_TRANS_COMPLETE); + } + else if (err) + { + err_all = RT_TRUE; + rt_event_send(&dma_trans_evt, SPI0_TRANS_ERROR); + } + break; +#endif +#ifdef BSP_SPI1_TX_USING_DMA + case DmaSPI1TXTrig: + if (err) + { + err_all = RT_TRUE; + rt_event_send(&dma_trans_evt, SPI1_TRANS_ERROR); + } + break; +#endif +#ifdef BSP_SPI1_RX_USING_DMA + case DmaSPI1RXTrig: + if (DmaTransferComplete == dma_ste) + { + rt_event_send(&dma_trans_evt, SPI1_TRANS_COMPLETE); + } + else if (err) + { + err_all = RT_TRUE; + rt_event_send(&dma_trans_evt, SPI1_TRANS_ERROR); + } + break; +#endif +#endif /* BSP_SPI_USING_DMA */ + +#ifdef RT_SERIAL_USING_DMA +#ifdef BSP_UART0_RX_USING_DMA + case DmaUart0RxTrig: + if (DmaTransferComplete == dma_ste) + rt_hw_serial_isr(get_serial_from_index(UART0_INDEX), \ + RT_SERIAL_EVENT_RX_DMADONE | (get_dma_transfer_counts(ch) << 8)); + else if (err) + rt_hw_serial_isr(get_serial_from_index(UART0_INDEX), RT_SERIAL_EVENT_RX_DMADONE); + break; +#endif +#ifdef BSP_UART0_TX_USING_DMA + case DmaUart0TxTrig: + if (DmaTransferComplete == dma_ste) + rt_event_send(&dma_trans_evt, UART0_TX_TRANS_COMPLETE); + else if (err) + rt_event_send(&dma_trans_evt, UART0_TX_TRANS_ERROR); + break; +#endif +#ifdef BSP_UART1_RX_USING_DMA + case DmaUart1RxTrig: + if (DmaTransferComplete == dma_ste) + rt_hw_serial_isr(get_serial_from_index(UART1_INDEX), \ + RT_SERIAL_EVENT_RX_DMADONE | (get_dma_transfer_counts(ch) << 8)); + else if (err) + rt_hw_serial_isr(get_serial_from_index(UART1_INDEX), RT_SERIAL_EVENT_RX_DMADONE); + break; +#endif +#ifdef BSP_UART1_TX_USING_DMA + case DmaUart1TxTrig: + if (DmaTransferComplete == dma_ste) + rt_event_send(&dma_trans_evt, UART1_TX_TRANS_COMPLETE); + else if (err) + rt_event_send(&dma_trans_evt, UART1_TX_TRANS_ERROR); + break; +#endif +#ifdef BSP_UART2_RX_USING_DMA + case DmaUart2RxTrig: + if (DmaTransferComplete == dma_ste) + rt_hw_serial_isr(get_serial_from_index(UART2_INDEX), \ + RT_SERIAL_EVENT_RX_DMADONE | (get_dma_transfer_counts(ch) << 8)); + else if (err) + rt_hw_serial_isr(get_serial_from_index(UART2_INDEX), RT_SERIAL_EVENT_RX_DMADONE); + break; +#endif +#ifdef BSP_UART2_TX_USING_DMA + case DmaUart2TxTrig: + if (DmaTransferComplete == dma_ste) + rt_event_send(&dma_trans_evt, UART2_TX_TRANS_COMPLETE); + else if (err) + rt_event_send(&dma_trans_evt, UART2_TX_TRANS_ERROR); + break; +#endif +#ifdef BSP_UART3_RX_USING_DMA + case DmaUart3RxTrig: + if (DmaTransferComplete == dma_ste) + rt_hw_serial_isr(get_serial_from_index(UART3_INDEX), \ + RT_SERIAL_EVENT_RX_DMADONE | (get_dma_transfer_counts(ch) << 8)); + else if (err) + rt_hw_serial_isr(get_serial_from_index(UART3_INDEX), RT_SERIAL_EVENT_RX_DMADONE); + break; +#endif +#ifdef BSP_UART3_TX_USING_DMA + case DmaUart3TxTrig: + if (DmaTransferComplete == dma_ste) + rt_event_send(&dma_trans_evt, UART3_TX_TRANS_COMPLETE); + else if (err) + rt_event_send(&dma_trans_evt, UART3_TX_TRANS_ERROR); + break; +#endif +#endif /* RT_SERIAL_USING_DMA */ + + default: + break; + } + + if (err_all) + { + // SPI DMA + Dma_Disable(); + break; + } + else if (err) + { + Dma_DisableChannel(ch); + } + } + + /* leave interrupt */ + rt_interrupt_leave(); +} + +#endif diff --git a/bsp/hc32l196/drivers/drv_dma.h b/bsp/hc32l196/drivers/drv_dma.h new file mode 100644 index 0000000000000000000000000000000000000000..7bc13093af089350ec83c6b48c8f0eb96afd8501 --- /dev/null +++ b/bsp/hc32l196/drivers/drv_dma.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2025, Huada Semiconductor Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-10-30 CDT first version + * 2025-12-21 Sunwancn Support SPI and UART + */ + +#ifndef __DRV_DMA_H__ +#define __DRV_DMA_H__ + +/******************************************************************************* + * Include files + ******************************************************************************/ +#include +#include "hc32l196_ddl.h" +#include "hc32l196_dmac.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define SPI0_TRANS_COMPLETE 0x0001 +#define SPI0_TRANS_ERROR 0x0002 +#define SPI1_TRANS_COMPLETE 0x0004 +#define SPI1_TRANS_ERROR 0x0008 +/* 4个UART从 0x0100 定义到 0x8000 */ +#define UART_TX_TRANS_COMPLETE 0x0100 +#define UART_TX_TRANS_ERROR 0x0200 +#define UART0_TX_TRANS_COMPLETE UART_TX_TRANS_COMPLETE +#define UART0_TX_TRANS_ERROR UART_TX_TRANS_ERROR +#define UART1_TX_TRANS_COMPLETE 0x0400 +#define UART1_TX_TRANS_ERROR 0x0800 +#define UART2_TX_TRANS_COMPLETE 0x1000 +#define UART2_TX_TRANS_ERROR 0x2000 +#define UART3_TX_TRANS_COMPLETE 0x4000 +#define UART3_TX_TRANS_ERROR 0x8000 + +#define DMA_RX 0 +#define DMA_TX 1 + +struct dma_config { + en_dma_channel_t channel; + en_dma_trig_sel_t trigger_src; +}; + +struct dma_lock { + struct rt_mutex ch0_lock; + struct rt_mutex ch1_lock; +}; + +en_dma_trig_sel_t get_dma_trig(en_dma_channel_t ch); +void change_dma_trig(en_dma_channel_t ch, en_dma_trig_sel_t trig); +rt_err_t hc32_dma_init(en_dma_channel_t ch, int dir); +rt_err_t dma_mutex_take(en_dma_channel_t ch, rt_int32_t time); +rt_err_t dma_mutex_release(en_dma_channel_t ch); +void dma_mutex_take_all(rt_int32_t time); +void dma_mutex_release_all(void); +rt_err_t hc32_wait_dma_event(rt_uint32_t set, rt_int32_t timeout, rt_uint32_t *recved); + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_DMA_H__ */ + diff --git a/bsp/hc32l196/drivers/drv_gpio.c b/bsp/hc32l196/drivers/drv_gpio.c index ab007a5868e288993eecd6e765a5963fd580d5b4..8a945b884101353679c32269ccf710ad945d3f28 100644 --- a/bsp/hc32l196/drivers/drv_gpio.c +++ b/bsp/hc32l196/drivers/drv_gpio.c @@ -16,6 +16,10 @@ #ifdef RT_USING_PIN #ifdef BSP_USING_GPIO +#if !defined(RT_VERSION_CHECK) || (RT_VER_NUM < 0x50000) +typedef int rt_ssize_t; +#endif + #define __GPIO_PORT(pin) (((pin) & 0xf0) * 4) #define __GPIO_PORT_L(pin) (__GPIO_PORT(pin)) #define __GPIO_PORT_H(pin) ((__GPIO_PORT(pin) & 0xff) + 0x1000) @@ -309,42 +313,42 @@ static void pin_isr(en_gpio_port_t gpio_port) } } -void PortA_IRQHandler(void) +__USED void PortA_IRQHandler(void) { rt_interrupt_enter(); pin_isr(GpioPortA); rt_interrupt_leave(); } -void PortB_IRQHandler(void) +__USED void PortB_IRQHandler(void) { rt_interrupt_enter(); pin_isr(GpioPortB); rt_interrupt_leave(); } -void PortC_IRQHandler(void) +__USED void PortC_IRQHandler(void) { rt_interrupt_enter(); pin_isr(GpioPortC); rt_interrupt_leave(); } -void PortD_IRQHandler(void) +__USED void PortD_IRQHandler(void) { rt_interrupt_enter(); pin_isr(GpioPortD); rt_interrupt_leave(); } -void PortE_IRQHandler(void) +__USED void PortE_IRQHandler(void) { rt_interrupt_enter(); pin_isr(GpioPortE); rt_interrupt_leave(); } -void PortF_IRQHandler(void) +__USED void PortF_IRQHandler(void) { rt_interrupt_enter(); pin_isr(GpioPortF); diff --git a/bsp/hc32l196/drivers/drv_i2c.c b/bsp/hc32l196/drivers/drv_i2c.c new file mode 100644 index 0000000000000000000000000000000000000000..e8fd7c632db40cf1edd1feb5a15f31f64c686280 --- /dev/null +++ b/bsp/hc32l196/drivers/drv_i2c.c @@ -0,0 +1,598 @@ +/* + * Copyright (C) 2020, Huada Semiconductor Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-10-30 CDT first version + * 2021-01-18 CDT modify i2c gpio init + */ + +/******************************************************************************* + * Include files + ******************************************************************************/ +#include +#include "hc32l196_gpio.h" + +#if defined RT_USING_I2C + +#define DBG_TAG "drv_i2c" +#define DBG_LVL DBG_INFO +#include + +#if !defined(BSP_USING_I2C0) && !defined(BSP_USING_I2C1) +#error "Please define at least one BSP_USING_I2Cx" +#endif + +/******************************************************************************* + * Local type definitions ('typedef') + ******************************************************************************/ +#if !defined(RT_VERSION_CHECK) || (RT_VER_NUM < 0x50000) +typedef rt_size_t rt_ssize_t; +#endif + +/******************************************************************************* + * Local pre-processor symbols/macros ('#define') + ******************************************************************************/ + +/******************************************************************************* + * Global variable definitions (declared in header file with 'extern') + ******************************************************************************/ + +/******************************************************************************* + * Local function prototypes ('static') + ******************************************************************************/ + +/******************************************************************************* + * Local variable definitions ('static') + ******************************************************************************/ + +#ifdef RT_USING_I2C_BITOPS + +static const struct hc32_soft_i2c_config soft_i2c_config[] = +{ +#ifdef BSP_USING_I2C0 + I2C0_BUS_CONFIG, +#endif +#ifdef BSP_USING_I2C1 + I2C1_BUS_CONFIG, +#endif +}; + +static struct hc32_i2c i2c_array[sizeof(soft_i2c_config) / sizeof(soft_i2c_config[0])]; + +/** + * This function initializes the i2c pin. + * + * @param hc32 i2c dirver class. + */ +static void hc32_i2c_gpio_init(struct hc32_i2c *i2c) +{ + struct hc32_soft_i2c_config* cfg = (struct hc32_soft_i2c_config*)i2c->ops.data; + + rt_pin_mode(cfg->scl, PIN_MODE_OUTPUT_OD); + rt_pin_mode(cfg->sda, PIN_MODE_OUTPUT_OD); + + rt_pin_write(cfg->scl, PIN_HIGH); + rt_pin_write(cfg->sda, PIN_HIGH); +} + +/** + * This function sets the sda pin. + * + * @param hc32 config class. + * @param The sda pin state. + */ +static void hc32_set_sda(void *data, rt_int32_t state) +{ + struct hc32_soft_i2c_config* cfg = (struct hc32_soft_i2c_config*)data; + if (state) + { + rt_pin_write(cfg->sda, PIN_HIGH); + } + else + { + rt_pin_write(cfg->sda, PIN_LOW); + } +} + +/** + * This function sets the scl pin. + * + * @param hc32 config class. + * @param The scl pin state. + */ +static void hc32_set_scl(void *data, rt_int32_t state) +{ + struct hc32_soft_i2c_config* cfg = (struct hc32_soft_i2c_config*)data; + if (state) + { + rt_pin_write(cfg->scl, PIN_HIGH); + } + else + { + rt_pin_write(cfg->scl, PIN_LOW); + } +} + +/** + * This function gets the sda pin state. + * + * @param The sda pin state. + */ +static rt_int32_t hc32_get_sda(void *data) +{ + struct hc32_soft_i2c_config* cfg = (struct hc32_soft_i2c_config*)data; + return rt_pin_read(cfg->sda); +} + +/** + * This function gets the scl pin state. + * + * @param The scl pin state. + */ +static rt_int32_t hc32_get_scl(void *data) +{ + struct hc32_soft_i2c_config* cfg = (struct hc32_soft_i2c_config*)data; + return rt_pin_read(cfg->scl); +} + +static void hc32_udelay(rt_uint32_t us) +{ + rt_hw_us_delay(us); +} + +static const struct rt_i2c_bit_ops hc32_bit_ops_default = +{ + .data = RT_NULL, + .set_sda = hc32_set_sda, + .set_scl = hc32_set_scl, + .get_sda = hc32_get_sda, + .get_scl = hc32_get_scl, + .udelay = hc32_udelay, + .delay_us = 1, + .timeout = 100 +}; + +/** + * if i2c is locked, this function will unlock it + * + * @param hc32 config class + * + * @return RT_EOK indicates successful unlock. + */ +static rt_err_t hc32_i2c_bus_reset(const struct hc32_soft_i2c_config *cfg) +{ + rt_int32_t i = 0; + + if (PIN_LOW == rt_pin_read(cfg->sda)) + { + while (i++ < 9) + { + rt_pin_write(cfg->scl, PIN_HIGH); + hc32_udelay(100); + rt_pin_write(cfg->scl, PIN_LOW); + hc32_udelay(100); + } + } + if (PIN_LOW == rt_pin_read(cfg->sda)) + { + return -RT_ERROR; + } + + return RT_EOK; +} + +/* I2C initialization function */ +int rt_hw_i2c_init(void) +{ + rt_size_t obj_num = sizeof(i2c_array) / sizeof(struct hc32_i2c); + rt_err_t result; + + for (int i = 0; i < obj_num; i++) + { + i2c_array[i].ops = hc32_bit_ops_default; + i2c_array[i].ops.data = (void*)&soft_i2c_config[i]; + i2c_array[i].i2c2_bus.priv = &i2c_array[i].ops; + hc32_i2c_gpio_init(&i2c_array[i]); + result = rt_i2c_bit_add_bus(&i2c_array[i].i2c2_bus, soft_i2c_config[i].bus_name); + RT_ASSERT(result == RT_EOK); + hc32_i2c_bus_reset(&soft_i2c_config[i]); + + LOG_D("software simulation %s init done, pin scl: %d, pin sda %d", + soft_i2c_config[i].bus_name, + soft_i2c_config[i].scl, + soft_i2c_config[i].sda); + } + + return RT_EOK; +} +INIT_BOARD_EXPORT(rt_hw_i2c_init); + +#else + +#ifdef BSP_USING_I2C0 +static struct rt_completion i2c0_trans_completion = {0}; +#endif +#ifdef BSP_USING_I2C1 +static struct rt_completion i2c1_trans_completion = {0}; +#endif + +static const struct hc32_i2c_config i2c_config[] = +{ +#ifdef BSP_USING_I2C0 + I2C0_BUS_CONFIG, +#endif +#ifdef BSP_USING_I2C1 + I2C1_BUS_CONFIG, +#endif +}; + +static struct hc32_i2c i2c_array[ARRAY_SZ(i2c_config)]; + +/******************************************************************************* + * Function implementation - global ('extern') and local ('static') + ******************************************************************************/ + +static uint32_t get_i2c_index(M0P_I2C_TypeDef* i2c) +{ + for (rt_uint8_t i = 0U; i < sizeof(i2c_array) / sizeof(struct hc32_i2c); i++) + { + if (i2c == i2c_array[i].config->i2c) + { + return i; + } + } + RT_ASSERT(0); + return 0; +} + +/** + * This function initializes the i2c gpio pin. + * + * @param Hc32 i2c driver class. + */ +static void hc32_i2c_gpio_init(struct hc32_i2c *i2c) +{ + RT_ASSERT(i2c->config != RT_NULL); + + stc_gpio_cfg_t stcGpioCfg; + + struct hc32_i2c_config* cfg = i2c->config; + + /* I2C gpio init */ + DDL_ZERO_STRUCT(stcGpioCfg); + Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); + + stcGpioCfg.enDrv = GpioDrvH; + stcGpioCfg.enDir = GpioDirOut; ///< 端口方向配置->输出 + stcGpioCfg.enOD = GpioOdEnable; ///< 开漏输出 + stcGpioCfg.enPu = GpioPuEnable; ///< 端口上拉配置->使能 + stcGpioCfg.enPd = GpioPdDisable; ///< 端口下拉配置->禁止 + stcGpioCfg.bOutputVal = TRUE; + + Gpio_Init(cfg->scl_port, cfg->scl_pin, &stcGpioCfg); ///< 端口初始化 + Gpio_Init(cfg->sda_port, cfg->sda_pin, &stcGpioCfg); + + Gpio_SetIO(cfg->scl_port, cfg->scl_pin); + Gpio_SetIO(cfg->sda_port, cfg->sda_pin); +} + +static void hc32_i2c_gpio_af_init(struct hc32_i2c *i2c) +{ + RT_ASSERT(i2c->config != RT_NULL); + + struct hc32_i2c_config* cfg = i2c->config; + + Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); + + Gpio_SetAfMode(cfg->scl_port, cfg->scl_pin, cfg->scl_af); + Gpio_SetAfMode(cfg->sda_port, cfg->sda_pin, cfg->sda_af); +} + +static void hc32_i2c_config_init(struct hc32_i2c *i2c) +{ + RT_ASSERT(i2c->config != RT_NULL); + + struct hc32_i2c_config* cfg = i2c->config; + stc_i2c_cfg_t stcI2cCfg; + + DDL_ZERO_STRUCT(stcI2cCfg); + Sysctrl_SetPeripheralGate(cfg->i2c_periph, TRUE); + + stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq(); ///< 获取PCLK时钟 + stcI2cCfg.u32Baud = cfg->bus_baud; ///< 波特率 + stcI2cCfg.enMode = I2cMasterMode; ///< 主机模式 + stcI2cCfg.bGc = FALSE; ///< 广播地址应答使能关闭 + I2C_Init(cfg->i2c, &stcI2cCfg); ///< 模块初始化 +} + +static void hc32_i2c_bus_reset(struct hc32_i2c *i2c) +{ + rt_uint32_t i = 0; + + RT_ASSERT(i2c->config != RT_NULL); + + struct hc32_i2c_config* cfg = i2c->config; + + hc32_i2c_config_init(i2c); + + hc32_i2c_gpio_init(i2c); + rt_hw_us_delay(10); + + if (!Gpio_GetInputIO(cfg->scl_port, cfg->scl_pin)) + { + goto err; + } + + if (!Gpio_GetInputIO(cfg->sda_port, cfg->sda_pin)) + { + while (i++ < 10) + { + Gpio_ClrIO(cfg->scl_port, cfg->scl_pin); + rt_hw_us_delay(10); + Gpio_SetIO(cfg->scl_port, cfg->scl_pin); + rt_hw_us_delay(10); + } + if(!Gpio_GetInputIO(cfg->sda_port, cfg->sda_pin)) + { + goto err; + } + } + + hc32_i2c_gpio_af_init(i2c); + + I2C_ClearIrq(cfg->i2c); + EnableNvic((cfg->i2c == M0P_I2C0) ? I2C0_IRQn : I2C1_IRQn, IrqLevel3, TRUE); + return; + +err: + LOG_E("I2C bus %s reset failed.", cfg->name); +} + +static rt_ssize_t hc32_i2c_xfer(struct rt_i2c_bus_device *device, struct rt_i2c_msg *msgs, rt_uint32_t num) +{ + rt_uint32_t retries; + rt_uint32_t msg_num; + struct rt_i2c_msg *msg; + + RT_ASSERT(device != RT_NULL); + RT_ASSERT(msgs != RT_NULL); + + struct hc32_i2c *hc_i2c = rt_container_of(device, struct hc32_i2c, i2c_bus); + struct hc32_i2c_config *cfg = hc_i2c->config; + struct hc32_i2c_trans_params *params = &hc_i2c->trans_params; + + RT_ASSERT(cfg != RT_NULL); + RT_ASSERT(params != RT_NULL); + + retries = (device->retries == 0) ? 3 : device->retries; + + while (retries--) + { + msg_num = num; + msg = msgs; + while (msg_num--) + { + params->addr = msg->addr; + params->data = msg->buf; + params->flags = msg->flags; + params->leng = msg->len; + params->idx = 0; + + I2C_SetFunc(cfg->i2c, I2cModule_En); + rt_hw_us_delay(1); + + if (!(msg->flags & RT_I2C_NO_START)) + { + I2C_SetFunc(cfg->i2c, I2cStart_En); + } + else if (!(msg->flags & RT_I2C_RD)) + { + I2C_WriteByte(cfg->i2c, params->data[params->idx++]); + } + +#if defined(BSP_USING_I2C0) && defined(BSP_USING_I2C1) + if (RT_EOK + == rt_completion_wait((cfg->i2c == M0P_I2C0) ? &i2c0_trans_completion : &i2c1_trans_completion, + device->timeout)) +#elif defined(BSP_USING_I2C0) + if (RT_EOK == rt_completion_wait(&i2c0_trans_completion, device->timeout)) +#elif defined(BSP_USING_I2C1) + if (RT_EOK == rt_completion_wait(&i2c1_trans_completion, device->timeout)) +#endif + { + if (params->result != RT_EOK) + { + break; + } + } + + rt_hw_us_delay(5); + msg += 1; + } + + if (params->result == RT_EOK) + { + break; + } + + rt_thread_delay(100); + if (params->result == -RT_EIO || retries == 1) + { + // 总线出错或重试次数还有一次,尝试复位来解锁I2C总线 + hc32_i2c_bus_reset(hc_i2c); + } + } + + return (params->result == RT_EOK) ? num : params->result; +} + +static struct rt_i2c_bus_device_ops hc32_i2c_ops = +{ + .master_xfer = hc32_i2c_xfer, +}; + +/* I2C initialization function */ +int hc32_hw_i2c_init(void) +{ + struct hc32_i2c *hc32_i2c; + rt_err_t result; + +#ifdef BSP_USING_I2C0 + rt_completion_init(&i2c0_trans_completion); +#endif + +#ifdef BSP_USING_I2C1 + rt_completion_init(&i2c1_trans_completion); +#endif + + for (int i = 0; i < ARRAY_SZ(i2c_array); i++) + { + hc32_i2c = &i2c_array[i]; + hc32_i2c->config = (struct hc32_i2c_config *)&i2c_config[i]; + hc32_i2c->i2c_bus.ops = &hc32_i2c_ops; + + result = rt_i2c_bus_device_register(&hc32_i2c->i2c_bus, i2c_config[i].name); + RT_ASSERT(result == RT_EOK); + + hc32_i2c_config_init(hc32_i2c); + hc32_i2c_gpio_init(hc32_i2c); + hc32_i2c_gpio_af_init(hc32_i2c); + + I2C_ClearIrq(hc32_i2c->config->i2c); + EnableNvic((hc32_i2c->config->i2c == M0P_I2C0) ? I2C0_IRQn : I2C1_IRQn, IrqLevel3, TRUE); + + LOG_I("I2C bus %s initialize success.", i2c_config[i].name); + } + + return RT_EOK; +} +INIT_BOARD_EXPORT(hc32_hw_i2c_init); + +static void i2c_irq_handler(M0P_I2C_TypeDef* i2cx) +{ + rt_bool_t complete = RT_FALSE; + rt_uint8_t state = I2C_GetState(i2cx); + struct hc32_i2c_trans_params *params = &(i2c_array[get_i2c_index(i2cx)].trans_params); + params->result = RT_EOK; + + switch(state) + { + case 0x08: //已发送起始条件 + case 0x10: //已发送重复起始条件 + I2C_ClearFunc(i2cx, I2cStop_En); + I2C_ClearFunc(i2cx, I2cStart_En); + I2C_WriteByte(i2cx, (params->addr << 1) | (params->flags & 0x01)); //从设备地址发送 + break; + case 0x18: //已发送SLA+W,并接收到ACK + I2C_ClearFunc(i2cx, I2cStop_En); + I2C_ClearFunc(i2cx, I2cStart_En); + I2C_WriteByte(i2cx, params->data[params->idx++]); + break; + case 0x28: //上一次发送数据后接收到ACK + if (params->idx < params->leng) + { + I2C_WriteByte(i2cx, params->data[params->idx++]); + } + else + { + complete = RT_TRUE; + } + break; + case 0x40: //已发送SLA+R,并接收到ACK + I2C_ClearFunc(i2cx, I2cStop_En); + I2C_ClearFunc(i2cx, I2cStart_En); + if(params->leng > 1) + { + I2C_SetFunc(i2cx, I2cAck_En); + } + break; + case 0x50: //已接收数据字节,并已返回ACK信号 + I2C_ClearFunc(i2cx, I2cStop_En); + I2C_ClearFunc(i2cx, I2cStart_En); + params->data[params->idx++] = I2C_ReadByte(i2cx); + if(params->idx == params->leng - 1) + { + I2C_ClearFunc(i2cx, I2cAck_En); //读数据时,倒数第二个字节ACK关闭 + } + break; + case 0x58: //已接收到最后一个数据,NACK已返回 + params->data[params->idx++] = I2C_ReadByte(i2cx); + complete = RT_TRUE; + break; + case 0x20: //上一次发送SLA+W后,收到NACK + case 0x30: //已发送I2Cx_DATA中的数据,收到NACK + case 0x38: //上一次在SLA+读或写时丢失仲裁 + case 0x48: //发送SLA+R后,收到一个NACK + params->result = -RT_ERROR; + break; + case 0x00: //总线错误,需复位模块 + params->result = -RT_EIO; + break; + default: + break; + } + + if (params->result != RT_EOK //出错 + || complete //数据传输完成 + || ((params->flags & RT_I2C_RD) && (params->idx == params->leng)) //读取到最后一个数据 + || (params->idx > params->leng)) //写入超范围 + { + if (complete && (params->flags & RT_I2C_NO_STOP)) + { + // 不产生STOP信号而暂停I2C的SCL脉冲,只能变通失能模块 + I2C_ClearFunc(i2cx, I2cModule_En); + } + else + { + I2C_SetFunc(i2cx, I2cStop_En); + } +#if defined(BSP_USING_I2C0) && defined(BSP_USING_I2C1) + rt_completion_done((i2cx == M0P_I2C0) ? &i2c0_trans_completion : &i2c1_trans_completion); +#elif defined(BSP_USING_I2C0) + rt_completion_done(&i2c0_trans_completion); +#elif defined(BSP_USING_I2C1) + rt_completion_done(&i2c1_trans_completion); +#endif + } +} + +#ifdef BSP_USING_I2C0 +__USED void I2c0_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + i2c_irq_handler(M0P_I2C0); + + /* leave interrupt */ + rt_interrupt_leave(); + + I2C_ClearIrq(M0P_I2C0); +} +#endif + +#ifdef BSP_USING_I2C1 +__USED void I2c1_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + i2c_irq_handler(M0P_I2C1); + + /* leave interrupt */ + rt_interrupt_leave(); + + I2C_ClearIrq(M0P_I2C1); +} +#endif + +#endif + +#endif /* RT_USING_I2C */ + +/******************************************************************************* + * EOF (not truncated) + ******************************************************************************/ diff --git a/bsp/hc32l196/drivers/drv_i2c.h b/bsp/hc32l196/drivers/drv_i2c.h new file mode 100644 index 0000000000000000000000000000000000000000..4a535c9afa40c2a83d8449c809d05f759ffc02f9 --- /dev/null +++ b/bsp/hc32l196/drivers/drv_i2c.h @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2020, Huada Semiconductor Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-10-30 CDT first version + */ + + +#ifndef __DRV_I2C_H__ +#define __DRV_I2C_H__ + +/******************************************************************************* + * Include files + ******************************************************************************/ +#include +#include +#include +#include "hc32l196_ddl.h" +#include "hc32l196_i2c.h" + +/* C binding of definitions if building with C++ compiler */ +#ifdef __cplusplus +extern "C" +{ +#endif + +/******************************************************************************* + * Global type definitions ('typedef') + ******************************************************************************/ +#ifdef RT_USING_I2C_BITOPS + +/* hc32 config class */ +struct hc32_soft_i2c_config +{ + rt_uint8_t scl; + rt_uint8_t sda; + const char *bus_name; +}; +/* hc32 i2c dirver class */ +struct hc32_i2c +{ + struct rt_i2c_bit_ops ops; + struct rt_i2c_bus_device i2c2_bus; +}; + +#ifdef BSP_USING_I2C0 +#define I2C0_BUS_CONFIG \ + { \ + .scl = BSP_I2C0_SCL_PIN, \ + .sda = BSP_I2C0_SDA_PIN, \ + .bus_name = "i2c0", \ + } +#endif + +#ifdef BSP_USING_I2C1 +#define I2C1_BUS_CONFIG \ + { \ + .scl = BSP_I2C1_SCL_PIN, \ + .sda = BSP_I2C1_SDA_PIN, \ + .bus_name = "i2c1", \ + } +#endif + +int rt_hw_i2c_init(void); + +#else + +struct hc32_i2c_config +{ + const char *name; + M0P_I2C_TypeDef *i2c; + en_sysctrl_peripheral_gate_t i2c_periph; + rt_uint32_t bus_baud; + + en_gpio_port_t scl_port; + en_gpio_pin_t scl_pin; + en_gpio_af_t scl_af; + + en_gpio_port_t sda_port; + en_gpio_pin_t sda_pin; + en_gpio_af_t sda_af; +}; + +struct hc32_i2c_trans_params +{ + volatile uint8_t *data; + volatile uint16_t leng; + volatile uint16_t flags; + volatile uint32_t idx; + volatile rt_err_t result; + volatile uint8_t addr; +}; + +#ifdef BSP_USING_I2C0 +#define I2C0_BUS_CONFIG \ + { \ + .name = "i2c0", \ + .i2c = M0P_I2C0, \ + .i2c_periph = SysctrlPeripheralI2c0, \ + .bus_baud = I2C0_BUS_BAUD, \ + .scl_port = I2C0_SCL_PORT, \ + .scl_pin = I2C0_SCL_PIN, \ + .scl_af = I2C0_SCL_AF, \ + .sda_port = I2C0_SDA_PORT, \ + .sda_pin = I2C0_SDA_PIN, \ + .sda_af = I2C0_SDA_AF, \ + } +#endif + +#ifdef BSP_USING_I2C1 +#define I2C1_BUS_CONFIG \ + { \ + .name = "i2c1", \ + .i2c = M0P_I2C1, \ + .i2c_periph = SysctrlPeripheralI2c1, \ + .bus_baud = I2C1_BUS_BAUD, \ + .scl_port = I2C1_SCL_PORT, \ + .scl_pin = I2C1_SCL_PIN, \ + .scl_af = I2C1_SCL_AF, \ + .sda_port = I2C1_SDA_PORT, \ + .sda_pin = I2C1_SDA_PIN, \ + .sda_af = I2C1_SDA_AF, \ + } +#endif + +struct hc32_i2c +{ + struct hc32_i2c_trans_params trans_params; + struct rt_i2c_bus_device i2c_bus; + struct hc32_i2c_config *config; +}; + +int hc32_hw_i2c_init(void); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_I2C_H__ */ + +/******************************************************************************* + * EOF (not truncated) + ******************************************************************************/ diff --git a/bsp/hc32l196/drivers/drv_spi.c b/bsp/hc32l196/drivers/drv_spi.c new file mode 100644 index 0000000000000000000000000000000000000000..498711cd54338c195dd0babaaa2055034e012493 --- /dev/null +++ b/bsp/hc32l196/drivers/drv_spi.c @@ -0,0 +1,582 @@ +/* + * Copyright (C) 2025, Huada Semiconductor Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-10-30 CDT first version + * 2025-08-12 Sunwancn Support HC32L196 + */ + + +/******************************************************************************* + * Include files + ******************************************************************************/ +#include +#include +#include + +#if defined(RT_USING_SPI) && defined(RT_USING_PIN) +#include + +#define DBG_TAG "drv_spi" +#define DBG_LVL DBG_INFO +#include + +#if !defined(BSP_USING_SPI0) && !defined(BSP_USING_SPI1) +#error "Please define at least one SPIx" +#endif + +/******************************************************************************* + * Local type definitions ('typedef') + ******************************************************************************/ +#if !defined(RT_VERSION_CHECK) || (RT_VER_NUM < 0x50000) +typedef rt_size_t rt_ssize_t; +#endif + +/******************************************************************************* + * Local pre-processor symbols/macros ('#define') + ******************************************************************************/ +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define __MS_TO_TICK(_ms) MAX((rt_uint32_t)(_ms) * RT_TICK_PER_SECOND / 1000U, 1U) +/* 为提高效率,传输大于规定的字节数才使用DMA */ +#define USE_DMA_MORE_THEN_LENGTH 64 + +/******************************************************************************* + * Global variable definitions (declared in header file with 'extern') + ******************************************************************************/ + +/******************************************************************************* + * Local function prototypes ('static') + ******************************************************************************/ + +/******************************************************************************* + * Local variable definitions ('static') + ******************************************************************************/ + +static struct hw_spi_config spi_config[] = +{ +#ifdef BSP_USING_SPI0 + SPI0_BUS_CONFIG, +#endif + +#ifdef BSP_USING_SPI1 + SPI1_BUS_CONFIG, +#endif +}; + +static struct hc32_spi_bus spi_bus_array[ARRAY_SZ(spi_config)] = {0}; + +/******************************************************************************* + * Function implementation - global ('extern') and local ('static') + ******************************************************************************/ + +#ifdef BSP_SPI_USING_DMA +/** + * @brief This function gets dma witch spi used information include unit, + * channel, interrupt etc. + * @param None + * @retval None + */ +static void spi_get_dma_info(void) +{ +#ifdef BSP_SPI0_RX_USING_DMA + static struct dma_config spi0_dma_rx = SPI0_RX_DMA_CONFIG; + spi_config[SPI0_INDEX].dma_rx = &spi0_dma_rx; +#endif +#ifdef BSP_SPI0_TX_USING_DMA + static struct dma_config spi0_dma_tx = SPI0_TX_DMA_CONFIG; + spi_config[SPI0_INDEX].dma_tx = &spi0_dma_tx; +#endif + +#ifdef BSP_SPI1_RX_USING_DMA + static struct dma_config spi1_dma_rx = SPI1_RX_DMA_CONFIG; + spi_config[SPI1_INDEX].dma_rx = &spi1_dma_rx; +#endif +#ifdef BSP_SPI1_TX_USING_DMA + static struct dma_config spi1_dma_tx = SPI1_TX_DMA_CONFIG; + spi_config[SPI1_INDEX].dma_tx = &spi1_dma_tx; +#endif +} + +/* DMA configuration */ +static rt_err_t hc32_spi_dma_cfg(struct hw_spi_config *hw_cfg) +{ + struct dma_config *dma_cfg; + + /* 配置 DMA RX */ + dma_cfg = hw_cfg->dma_rx; + hc32_dma_init(dma_cfg->channel, 0); + Spi_FuncEnable(hw_cfg->spi, SpiMskDmaRxEn); + Dma_EnableChannelIrq(dma_cfg->channel); //传输成功完成时产生中断 + Dma_EnableChannelErrIrq(dma_cfg->channel); //传输错误时产生中断 + + /* 配置 DMA TX */ + dma_cfg = hw_cfg->dma_tx; + hc32_dma_init(dma_cfg->channel, 1); + Spi_FuncEnable(hw_cfg->spi, SpiMskDmaTxEn); + Dma_EnableChannelErrIrq(dma_cfg->channel); //传输错误时产生中断 + + EnableNvic(DMAC_IRQn, IrqLevel2, TRUE); //NVIC对应DMAC中断位使能 + + return RT_EOK; +} +#endif + +static rt_err_t hc32_spi_configure(struct rt_spi_device *device, + struct rt_spi_configuration *spi_cfg) +{ + RT_ASSERT(device != RT_NULL); + RT_ASSERT(spi_cfg != RT_NULL); + + struct hc32_spi_bus *hc_spi_bus = rt_container_of(device->bus, struct hc32_spi_bus, spi_bus); + + RT_ASSERT(hc_spi_bus != RT_NULL); + RT_ASSERT(hc_spi_bus->hw_spi_cfg != RT_NULL); + + hc_spi_bus->spi_cfg = spi_cfg; + + stc_gpio_cfg_t stcGpioCfg; + stc_spi_cfg_t stcSpiInit; + rt_uint32_t stcPlkFreq; + + struct hw_spi_config *hw_cfg = hc_spi_bus->hw_spi_cfg; + struct rt_spi_configuration *bus_cfg = hc_spi_bus->spi_cfg; + + RT_ASSERT(bus_cfg->mode & (RT_SPI_SLAVE | RT_SPI_MSB)); // 必须 MASTER && MSB + RT_ASSERT(bus_cfg->data_width == 8); // 必须8位数据宽度 + + /* Spi port init */ + DDL_ZERO_STRUCT(stcGpioCfg); + Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); + + stcGpioCfg.enDrv = GpioDrvH; + stcGpioCfg.enDir = GpioDirIn; + + Gpio_Init(hw_cfg->miso_port, hw_cfg->miso_pin, &stcGpioCfg); + Gpio_SetAfMode(hw_cfg->miso_port, hw_cfg->miso_pin, hw_cfg->miso_af); // 配置SPI_MISO + + stcGpioCfg.enDir = GpioDirOut; + Gpio_Init(hw_cfg->clk_port, hw_cfg->clk_pin, &stcGpioCfg); + Gpio_SetAfMode(hw_cfg->clk_port, hw_cfg->clk_pin, hw_cfg->clk_af); // 配置SPI_SCK + + Gpio_Init(hw_cfg->mosi_port, hw_cfg->mosi_pin, &stcGpioCfg); + Gpio_SetAfMode(hw_cfg->mosi_port, hw_cfg->mosi_pin, hw_cfg->mosi_af); // 配置SPI_MOSI + + stcGpioCfg.enPu = GpioPuEnable; + Gpio_Init(hw_cfg->cs_port, hw_cfg->cs_pin, &stcGpioCfg); + Gpio_SetAfMode(hw_cfg->cs_port, hw_cfg->cs_pin, hw_cfg->cs_af); // 配置SPI_CS + + /* Enable spi clock gate */ + Sysctrl_SetPeripheralGate(hw_cfg->spi_periph, TRUE); + + /* 复位模块 */ + Reset_RstPeripheral0(hw_cfg->spi_reset_mask); + + DDL_ZERO_STRUCT(stcSpiInit); + /* Slave or master mode */ + stcSpiInit.enSpiMode = SpiMskMaster; + /* Spi CPHA */ + stcSpiInit.enCPHA = (bus_cfg->mode & RT_SPI_CPHA) ? SpiMskCphasecond : SpiMskCphafirst; + /* Spi CPOL */ + stcSpiInit.enCPOL = (bus_cfg->mode & RT_SPI_CPOL) ? SpiMskcpolhigh : SpiMskcpollow; + + /* Get APB clock */ + stcPlkFreq = Sysctrl_GetPClkFreq(); + if (bus_cfg->max_hz > 16 * 1000 * 1000) + { + bus_cfg->max_hz = 16 * 1000 * 1000; // HC32L196主机模式最高SPI速率为16Mbps + } + /* SPI 时钟分频配置 */ + if (bus_cfg->max_hz >= stcPlkFreq / 2u) + { + stcSpiInit.enPclkDiv = SpiClkMskDiv2; + } + else if (bus_cfg->max_hz >= stcPlkFreq / 4u) + { + stcSpiInit.enPclkDiv = SpiClkMskDiv4; + } + else if (bus_cfg->max_hz >= stcPlkFreq / 8u) + { + stcSpiInit.enPclkDiv = SpiClkMskDiv8; + } + else if (bus_cfg->max_hz >= stcPlkFreq / 16u) + { + stcSpiInit.enPclkDiv = SpiClkMskDiv16; + } + else if (bus_cfg->max_hz >= stcPlkFreq / 32u) + { + stcSpiInit.enPclkDiv = SpiClkMskDiv32; + } + else if (bus_cfg->max_hz >= stcPlkFreq / 64u) + { + stcSpiInit.enPclkDiv = SpiClkMskDiv64; + } + else + { + stcSpiInit.enPclkDiv = SpiClkMskDiv128; + } + Spi_Init(hw_cfg->spi, &stcSpiInit); + +#ifdef BSP_SPI_USING_DMA + if (hw_cfg->spi == M0P_SPI0) + { +#if defined(BSP_SPI0_TX_USING_DMA) && defined(BSP_SPI0_RX_USING_DMA) + device->parent.flag |= (RT_DEVICE_FLAG_DMA_RX | RT_DEVICE_FLAG_DMA_TX); + hc32_spi_dma_cfg(hw_cfg); +#endif + } + else if (hw_cfg->spi == M0P_SPI1) + { +#if defined(BSP_SPI1_TX_USING_DMA) && defined(BSP_SPI1_RX_USING_DMA) + device->parent.flag |= (RT_DEVICE_FLAG_DMA_RX | RT_DEVICE_FLAG_DMA_TX); + hc32_spi_dma_cfg(hw_cfg); +#endif + } +#endif + + LOG_I("%s initialize success.", hw_cfg->name); + + return RT_EOK; +} + +#ifdef BSP_SPI_USING_DMA +static rt_err_t hc32_spi_dma_trans(struct hw_spi_config *hw_cfg, const rt_uint8_t *tx_buf, void *rx_buf, rt_uint16_t length) +{ + RT_ASSERT(hw_cfg != RT_NULL); + RT_ASSERT(tx_buf != RT_NULL || rx_buf != RT_NULL); + RT_ASSERT(length > 0); + + static rt_uint8_t dummy = 0; + + struct dma_config *dma_rx = hw_cfg->dma_rx; + struct dma_config *dma_tx = hw_cfg->dma_tx; + + RT_ASSERT(dma_rx != NULL); + RT_ASSERT(dma_tx != NULL); + + en_dma_channel_t rxch = dma_rx->channel; + en_dma_channel_t txch = dma_tx->channel; + + if (get_dma_trig(rxch) != dma_rx->trigger_src) + { + // 修改DMA触发源 + change_dma_trig(rxch, dma_rx->trigger_src); + // 修改DMA源地址 + Dma_SetSourceAddress(rxch, (rt_uint32_t)&(hw_cfg->spi->DATA)); + } + if (get_dma_trig(txch) != dma_tx->trigger_src) + { + // 修改DMA触发源 + change_dma_trig(txch, dma_tx->trigger_src); + // 修改DMA目的地址 + Dma_SetDestinationAddress(txch, (rt_uint32_t)&(hw_cfg->spi->DATA)); + } + + if (RT_NULL == tx_buf) + { + //发送源地址固定为 dummy + *(&M0P_DMAC->CONFB0 + txch) |= (rt_uint32_t)DmaMskSrcAddrFix; + Dma_SetSourceAddress(txch, (rt_uint32_t)&dummy); + //接收目的地址恢复自增 + *(&M0P_DMAC->CONFB0 + rxch) &= ~(rt_uint32_t)DmaMskDstAddrFix; + Dma_SetDestinationAddress(rxch, (rt_uint32_t)rx_buf); + } + else if (RT_NULL == rx_buf) + { + //发送源地址恢复自增 + *(&M0P_DMAC->CONFB0 + txch) &= ~(rt_uint32_t)DmaMskSrcAddrFix; + Dma_SetSourceAddress(txch, (rt_uint32_t)tx_buf); + //接收目的地址固定为 dummy + *(&M0P_DMAC->CONFB0 + rxch) |= (rt_uint32_t)DmaMskDstAddrFix; + Dma_SetDestinationAddress(rxch, (rt_uint32_t)&dummy); + } + else + { + //发送源地址恢复自增 + *(&M0P_DMAC->CONFB0 + txch) &= ~(rt_uint32_t)DmaMskSrcAddrFix; + Dma_SetSourceAddress(txch, (rt_uint32_t)tx_buf); + //接收目的地址恢复自增 + *(&M0P_DMAC->CONFB0 + rxch) &= ~(rt_uint32_t)DmaMskDstAddrFix; + Dma_SetDestinationAddress(rxch, (rt_uint32_t)rx_buf); + } + + Dma_SetTransferCnt(rxch, length); + Dma_SetTransferCnt(txch, length); + + //使能DMA通道 + Dma_EnableChannel(rxch); + Dma_EnableChannel(txch); + + //使能DMA + Dma_Enable(); + + return RT_EOK; +} +#endif + +static rt_err_t hc32_spi_send_buf(M0P_SPI_TypeDef *spix, rt_uint8_t *tx_buf, rt_uint16_t length) +{ + volatile rt_uint8_t dummy; + rt_uint16_t idx; + + for(idx = 0; idx < length; idx++) + { + while(RT_FALSE == spix->STAT_f.TXE) {} + spix->DATA = tx_buf[idx]; + } + + while(RT_FALSE == spix->STAT_f.TXE) {} + while(RT_FALSE == spix->STAT_f.RXNE) {} + dummy = spix->DATA; + (void)dummy; + + while(TRUE == spix->STAT_f.BUSY) {} + + return RT_EOK; +} + +static rt_err_t hc32_spi_transmit_receive(M0P_SPI_TypeDef* spix, const rt_uint8_t *tx_buf, rt_uint8_t *rx_buf, rt_uint16_t length) +{ + rt_uint16_t idx; + + for(idx = 0; idx < length; idx++) + { + while(RT_FALSE == spix->STAT_f.TXE) {} + spix->DATA = tx_buf[idx]; + while(RT_FALSE == spix->STAT_f.RXNE) {} + rx_buf[idx] = spix->DATA; + } + + while(RT_TRUE == spix->STAT_f.BUSY) {} + + return RT_EOK; +} + +static rt_ssize_t hc32_spi_xfer(struct rt_spi_device *device, struct rt_spi_message *message) +{ + rt_bool_t use_dma; + rt_err_t state = RT_EOK; + rt_size_t message_length, already_send_length; + rt_uint16_t send_length; + rt_uint8_t *recv_buf; + rt_uint8_t *send_buf; + + RT_ASSERT(device != RT_NULL); + RT_ASSERT(device->bus != RT_NULL); + RT_ASSERT(message != RT_NULL); + + struct rt_device *dev = (struct rt_device *)device; + struct hc32_spi_bus *hc_spi_bus = rt_container_of(device->bus, struct hc32_spi_bus, spi_bus); + struct hw_spi_config *hw_cfg = hc_spi_bus->hw_spi_cfg; + RT_ASSERT(hw_cfg != RT_NULL); + + if (message->cs_take) + { + if (hw_cfg->cs_af == GpioAf0) + { + Gpio_ClrIO(hw_cfg->cs_port, hw_cfg->cs_pin); + } + Spi_SetCS(hw_cfg->spi, RT_FALSE); + } + + message_length = message->length; + recv_buf = message->recv_buf; + send_buf = (rt_uint8_t *)message->send_buf; + + while (message_length && (state == RT_EOK)) + { + RT_ASSERT(recv_buf != RT_NULL || send_buf != RT_NULL); + + if (message_length > 65535) + { + send_length = 65535; + message_length = message_length - 65535; + } + else + { + send_length = message_length; + message_length = 0; + } + + /* calculate the start address */ + already_send_length = message->length - send_length - message_length; + send_buf = (rt_uint8_t *)message->send_buf + already_send_length; + if (recv_buf) + { + recv_buf = (rt_uint8_t *)message->recv_buf + already_send_length; + } + +#ifdef BSP_SPI_USING_DMA + if (send_length > USE_DMA_MORE_THEN_LENGTH + && (dev->flag & RT_DEVICE_FLAG_DMA_TX) + && (dev->flag & RT_DEVICE_FLAG_DMA_RX)) + { + use_dma = RT_TRUE; + dma_mutex_take_all(500); + } + else +#endif + { + use_dma = RT_FALSE; + } + + if(message->send_buf && message->recv_buf) + { +#ifdef BSP_SPI_USING_DMA + if (use_dma) + { + state = hc32_spi_dma_trans(hw_cfg, send_buf, recv_buf, send_length); + } + else +#endif + { + /* 保险起见,先清空接收寄存器 */ + *recv_buf = hw_cfg->spi->DATA; + state = hc32_spi_transmit_receive(hw_cfg->spi, send_buf, recv_buf, send_length); + } + } + else if(message->send_buf) + { +#ifdef BSP_SPI_USING_DMA + if (use_dma) + { + state = hc32_spi_dma_trans(hw_cfg, send_buf, RT_NULL, send_length); + } + else +#endif + { + state = hc32_spi_send_buf(hw_cfg->spi, send_buf, send_length); + } + } + else + { +#ifdef BSP_SPI_USING_DMA + if (use_dma) + { + state = hc32_spi_dma_trans(hw_cfg, RT_NULL, recv_buf, send_length); + } + else +#endif + { + /* 保险起见,先清空接收寄存器 */ + *recv_buf = hw_cfg->spi->DATA; + state = Spi_ReceiveBuf(hw_cfg->spi, recv_buf, send_length); + } + } + +#ifdef BSP_SPI_USING_DMA + if (use_dma) + { + rt_uint32_t e; + /* wait spi transfer complete or error */ + if (hw_cfg->spi == M0P_SPI0) + { + state = hc32_wait_dma_event(SPI0_TRANS_COMPLETE | SPI0_TRANS_ERROR, __MS_TO_TICK(1000), &e); + if (e & SPI0_TRANS_ERROR) state = -RT_ERROR; + } + else if (hw_cfg->spi == M0P_SPI1) + { + state = hc32_wait_dma_event(SPI1_TRANS_COMPLETE | SPI1_TRANS_ERROR, __MS_TO_TICK(1000), &e); + if (e & SPI1_TRANS_ERROR) state = -RT_ERROR; + } + + dma_mutex_release_all(); + } +#endif + if(state != RT_EOK) + { + message->length = 0; + } + } + + if (message->cs_release) + { + Spi_SetCS(hw_cfg->spi, RT_TRUE); + if (hw_cfg->cs_af == GpioAf0) + { + Gpio_SetIO(hw_cfg->cs_port, hw_cfg->cs_pin); + } + } + + return message->length; +} + +static struct rt_spi_ops hc32_spi_ops = +{ + .configure = hc32_spi_configure, + .xfer = hc32_spi_xfer, +}; + +static int rt_hw_spi_bus_init(void) +{ + rt_err_t result; + + for (int i = 0; i < ARRAY_SZ(spi_config); i++) + { + spi_bus_array[i].hw_spi_cfg = &spi_config[i]; + result = rt_spi_bus_register(&spi_bus_array[i].spi_bus, spi_config[i].name, &hc32_spi_ops); + if (result == RT_EOK) + { + LOG_I("SPI bus %s initialize success.", spi_config[i].name); + } + else + { + LOG_E("SPI bus %s initialize failed!", spi_config[i].name); + } + } + + return result; +} + +/** + * Attach the spi device to SPI bus, this function must be used after initialization. + */ +rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin) +{ + RT_ASSERT(bus_name != RT_NULL); + RT_ASSERT(device_name != RT_NULL); + + rt_err_t result; + struct rt_spi_device *spi_device; + + /* attach the device to spi bus*/ + spi_device = (struct rt_spi_device *)rt_malloc(sizeof(struct rt_spi_device)); + RT_ASSERT(spi_device != RT_NULL); + +#if defined(RT_VERSION_CHECK) && (RT_VER_NUM >= 0x50000) + result = rt_spi_bus_attach_device_cspin(spi_device, device_name, bus_name, cs_pin, RT_NULL); +#else + result = rt_spi_bus_attach_device(spi_device, device_name, bus_name, (void *)cs_pin); +#endif + + return result; +} + +void hc32_spi_deinit(struct hc32_spi_bus *hc_spi_bus) +{ + RT_ASSERT(hc_spi_bus != RT_NULL); + RT_ASSERT(hc_spi_bus->hw_spi_cfg != RT_NULL); + + struct hw_spi_config *hw_cfg = hc_spi_bus->hw_spi_cfg; + M0P_SPI_TypeDef *spi = hw_cfg->spi; + RT_ASSERT(spi != RT_NULL); + + spi->SSN = RT_TRUE; + spi->CR_f.SPEN = RT_FALSE; + spi->STAT = 0x00; + + Sysctrl_SetPeripheralGate(hw_cfg->spi_periph, RT_FALSE); +} + +int hc32_hw_spi_init(void) +{ +#ifdef BSP_SPI_USING_DMA + spi_get_dma_info(); +#endif + return rt_hw_spi_bus_init(); +} +INIT_BOARD_EXPORT(hc32_hw_spi_init); + +#endif /* BSP_USING_SPI */ diff --git a/bsp/hc32l196/drivers/drv_spi.h b/bsp/hc32l196/drivers/drv_spi.h new file mode 100644 index 0000000000000000000000000000000000000000..446b07cb15b01417db341a2711c4bd39cf0d8372 --- /dev/null +++ b/bsp/hc32l196/drivers/drv_spi.h @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2025, Huada Semiconductor Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-10-30 CDT first version + * 2025-08-12 Sunwancn Support HC32L196 + */ + + +#ifndef __DRV_SPI_H__ +#define __DRV_SPI_H__ + +/******************************************************************************* + * Include files + ******************************************************************************/ +#include +#include +#include +#include +#include "hc32l196_reset.h" +#include "hc32l196_spi.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* HC32 SPI config class */ +struct hw_spi_config +{ + const char *name; + M0P_SPI_TypeDef *spi; + en_sysctrl_peripheral_gate_t spi_periph; + en_reset_peripheral0_t spi_reset_mask; +#ifdef BSP_SPI_USING_DMA + struct dma_config *dma_rx; + struct dma_config *dma_tx; +#endif + + en_gpio_port_t clk_port; + en_gpio_pin_t clk_pin; + en_gpio_af_t clk_af; + + en_gpio_port_t mosi_port; + en_gpio_pin_t mosi_pin; + en_gpio_af_t mosi_af; + + en_gpio_port_t miso_port; + en_gpio_pin_t miso_pin; + en_gpio_af_t miso_af; + + en_gpio_port_t cs_port; + en_gpio_pin_t cs_pin; + en_gpio_af_t cs_af; +}; + +struct hc32_spi_bus +{ + struct rt_spi_bus spi_bus; + struct hw_spi_config *hw_spi_cfg; + struct rt_spi_configuration *spi_cfg; +}; + +enum +{ +#ifdef BSP_USING_SPI0 + SPI0_INDEX, +#endif +#ifdef BSP_USING_SPI1 + SPI1_INDEX, +#endif + SPI_INDEX_MAX, +}; + +#ifdef BSP_USING_SPI0 +#define SPI0_BUS_NAME "spi0" +#define SPI0_BUS_MUTEX_NAME "spi0_mut" +#endif +#ifdef BSP_USING_SPI1 +#define SPI1_BUS_NAME "spi1" +#define SPI1_BUS_MUTEX_NAME "spi1_mut" +#endif + +#ifdef BSP_USING_SPI0 +#ifndef SPI0_BUS_CONFIG +#define SPI0_BUS_CONFIG \ + { \ + .name = SPI0_BUS_NAME, \ + .spi = M0P_SPI0, \ + .spi_periph = SysctrlPeripheralSpi0, \ + .spi_reset_mask = ResetMskSpi0, \ + .clk_port = SPI0_CLK_PORT, \ + .clk_pin = SPI0_CLK_PIN, \ + .clk_af = SPI0_CLK_AF, \ + .mosi_port = SPI0_MOSI_PORT, \ + .mosi_pin = SPI0_MOSI_PIN, \ + .mosi_af = SPI0_MOSI_AF, \ + .miso_port = SPI0_MISO_PORT, \ + .miso_pin = SPI0_MISO_PIN, \ + .miso_af = SPI0_MISO_AF, \ + .cs_port = SPI0_CS_PORT, \ + .cs_pin = SPI0_CS_PIN, \ + .cs_af = SPI0_CS_AF, \ + } +#endif /* SPI0_BUS_CONFIG */ + +#ifdef BSP_SPI0_TX_USING_DMA +#ifndef SPI0_TX_DMA_CONFIG +#define SPI0_TX_DMA_CONFIG \ + { \ + .channel = SPI0_TX_DMA_CHANNEL, \ + .trigger_src = DmaSPI0TXTrig, \ + } +#endif /* SPI0_TX_DMA_CONFIG */ +#endif /* BSP_SPI0_TX_USING_DMA */ + +#ifdef BSP_SPI0_RX_USING_DMA +#ifndef SPI0_RX_DMA_CONFIG +#define SPI0_RX_DMA_CONFIG \ + { \ + .channel = SPI0_RX_DMA_CHANNEL, \ + .trigger_src = DmaSPI0RXTrig, \ + } +#endif /* SPI0_RX_DMA_CONFIG */ +#endif /* BSP_SPI0_RX_USING_DMA */ +#endif /* BSP_USING_SPI0 */ + +#ifdef BSP_USING_SPI1 +#ifndef SPI1_BUS_CONFIG +#define SPI1_BUS_CONFIG \ + { \ + .name = SPI1_BUS_NAME, \ + .spi = M0P_SPI1, \ + .spi_periph = SysctrlPeripheralSpi1, \ + .spi_reset_mask = ResetMskSpi1, \ + .clk_port = SPI1_CLK_PORT, \ + .clk_pin = SPI1_CLK_PIN, \ + .clk_af = SPI1_CLK_AF, \ + .mosi_port = SPI1_MOSI_PORT, \ + .mosi_pin = SPI1_MOSI_PIN, \ + .mosi_af = SPI1_MOSI_AF, \ + .miso_port = SPI1_MISO_PORT, \ + .miso_pin = SPI1_MISO_PIN, \ + .miso_af = SPI1_MISO_AF, \ + .cs_port = SPI1_CS_PORT, \ + .cs_pin = SPI1_CS_PIN, \ + .cs_af = SPI1_CS_AF, \ + } +#endif /* SPI1_BUS_CONFIG */ + +#ifdef BSP_SPI1_TX_USING_DMA +#ifndef SPI1_TX_DMA_CONFIG +#define SPI1_TX_DMA_CONFIG \ + { \ + .channel = SPI1_TX_DMA_CHANNEL, \ + .trigger_src = DmaSPI1TXTrig, \ + } +#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 \ + { \ + .channel = SPI1_RX_DMA_CHANNEL, \ + .trigger_src = DmaSPI1RXTrig, \ + } +#endif /* SPI1_RX_DMA_CONFIG */ +#endif /* BSP_SPI1_RX_USING_DMA */ +#endif /* BSP_USING_SPI1 */ + +rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin); +void hc32_spi_deinit(struct hc32_spi_bus *hc_spi_bus); + + +#ifdef __cplusplus +} +#endif + +#endif /* __DRV_SPI_H__ */ + diff --git a/bsp/hc32l196/drivers/drv_usart.c b/bsp/hc32l196/drivers/drv_usart.c index cef082c91e9a54e3cd7cfb23b3bb6ba6e6c91c39..6553dbdddde21a9c4cd9a76729ea6b586163e16a 100644 --- a/bsp/hc32l196/drivers/drv_usart.c +++ b/bsp/hc32l196/drivers/drv_usart.c @@ -5,12 +5,11 @@ * Change Logs: * Date Author Notes * 2021-9-1 DongBowen first version + * 2025-12-21 Sunwancn Support DMA */ +#include #include "drv_usart.h" -#include -#include -#include "board.h" #ifdef RT_USING_SERIAL #ifdef BSP_USING_UART @@ -21,49 +20,89 @@ /* this driver can be disabled at menuconfig -> RT-Thread Components -> Device Drivers */ #endif -enum +static struct hw_uart_cfg uart_cfg[] = { #ifdef BSP_USING_UART0 - UART0_INDEX, + UART0_CFG, #endif #ifdef BSP_USING_UART1 - UART1_INDEX, + UART1_CFG, #endif #ifdef BSP_USING_UART2 - UART2_INDEX, + UART2_CFG, #endif #ifdef BSP_USING_UART3 - UART3_INDEX, + UART3_CFG, #endif }; -static struct hc_uart_cfg uart_cfg[] = +struct hc_uart uart_array[ARRAY_SZ(uart_cfg)] = {0}; + +#ifdef RT_SERIAL_USING_DMA + +static rt_err_t _uart_dma_config(struct rt_serial_device *serial, int dir); + +/** + * @brief This function gets dma witch uart used information include unit, + * channel, interrupt etc. + * @param None + * @retval None + */ +static void _uart_get_dma_info(void) { -#ifdef BSP_USING_UART0 - UART0_CFG, +#ifdef BSP_UART0_RX_USING_DMA + static struct hc32_dma_init uart0_dma_rx = UART0_RX_DMA_CONFIG; + uart_cfg[UART0_INDEX].dma_rx = &uart0_dma_rx; #endif -#ifdef BSP_USING_UART1 - UART1_CFG, +#ifdef BSP_UART0_TX_USING_DMA + static struct hc32_dma_init uart0_dma_tx = UART0_TX_DMA_CONFIG; + uart_cfg[UART0_INDEX].dma_tx = &uart0_dma_tx; #endif -#ifdef BSP_USING_UART2 - UART2_CFG, + +#ifdef BSP_UART1_RX_USING_DMA + static struct hc32_dma_init uart1_dma_rx = UART1_RX_DMA_CONFIG; + uart_cfg[UART1_INDEX].dma_rx = &uart1_dma_rx; #endif -#ifdef BSP_USING_UART3 - UART3_CFG, +#ifdef BSP_UART1_TX_USING_DMA + static struct hc32_dma_init uart1_dma_tx = UART1_TX_DMA_CONFIG; + uart_cfg[UART1_INDEX].dma_tx = &uart1_dma_tx; +#endif + +#ifdef BSP_UART2_RX_USING_DMA + static struct hc32_dma_init uart2_dma_rx = UART2_RX_DMA_CONFIG; + uart_cfg[UART2_INDEX].dma_rx = &uart2_dma_rx; +#endif +#ifdef BSP_UART2_TX_USING_DMA + static struct hc32_dma_init uart2_dma_tx = UART2_TX_DMA_CONFIG; + uart_cfg[UART2_INDEX].dma_tx = &uart2_dma_tx; #endif -}; -static struct hc_uart uart_drv[sizeof(uart_cfg) / sizeof(uart_cfg[0])] = {0}; +#ifdef BSP_UART3_RX_USING_DMA + static struct dma_config uart3_dma_rx = UART3_RX_DMA_CONFIG; + uart_cfg[UART3_INDEX].dma_rx = &uart3_dma_rx; +#endif +#ifdef BSP_UART3_TX_USING_DMA + static struct dma_config uart3_dma_tx = UART3_TX_DMA_CONFIG; + uart_cfg[UART3_INDEX].dma_tx = &uart3_dma_tx; +#endif +} +#endif + +struct rt_serial_device *get_serial_from_index(int idx) +{ + return &uart_array[idx].serial_device; +} static rt_err_t _uart_init(struct rt_serial_device *serial_device, struct serial_configure *configure) { stc_gpio_cfg_t stcGpioCfg; stc_uart_cfg_t stcCfg; - struct hc_uart_cfg *cfg; RT_ASSERT(serial_device != RT_NULL); RT_ASSERT(configure != RT_NULL); - cfg = serial_device->parent.user_data; + + struct hw_uart_cfg *cfg = serial_device->parent.user_data; + RT_ASSERT(cfg != RT_NULL); /* configure rx and tx gpio */ rt_memset(&stcGpioCfg, 0, sizeof(stcGpioCfg)); @@ -80,23 +119,12 @@ static rt_err_t _uart_init(struct rt_serial_device *serial_device, struct serial Sysctrl_SetPeripheralGate(cfg->uart_periph, TRUE); - stcCfg.stcBaud.u32Baud = configure->baud_rate; + stcCfg.stcBaud.u32Baud = cfg->baud_rate; //configure->baud_rate; stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div; stcCfg.stcBaud.u32Pclk = Sysctrl_GetPClkFreq(); - switch (configure->data_bits) - { - case DATA_BITS_8: - break; - default: - break; - } - switch (configure->stop_bits) { - case STOP_BITS_1: - stcCfg.enStopBit = UartMsk1bit; - break; case STOP_BITS_2: stcCfg.enStopBit = UartMsk2bit; break; @@ -107,10 +135,6 @@ static rt_err_t _uart_init(struct rt_serial_device *serial_device, struct serial switch (configure->parity) { - case PARITY_NONE: - stcCfg.enMmdorCk = UartMskDataOrAddr; - stcCfg.enRunMode = UartMskMode1; - break; case PARITY_ODD: stcCfg.enMmdorCk = UartMskOdd; stcCfg.enRunMode = UartMskMode3; @@ -136,40 +160,123 @@ static rt_err_t _uart_init(struct rt_serial_device *serial_device, struct serial static rt_err_t _uart_control(struct rt_serial_device *serial_device, int cmd, void *arg) { - struct hc_uart_cfg *cfg; + struct hw_uart_cfg *cfg; + rt_uint16_t flag = (rt_uint32_t)arg; RT_ASSERT(serial_device != RT_NULL); + struct rt_device *dev = (struct rt_device *)&serial_device->parent; cfg = serial_device->parent.user_data; switch (cmd) { case RT_DEVICE_CTRL_CLR_INT: - /* disable rx irq */ - Uart_DisableIrq(cfg->uart, UartRxIrq); - EnableNvic(cfg->irqn, IrqLevel3, FALSE); + if (flag & RT_DEVICE_FLAG_INT_RX) + { + /* disable rx irq */ + Uart_DisableIrq(cfg->uart, UartRxIrq); + if (!(dev->open_flag & RT_DEVICE_FLAG_INT_TX)) + EnableNvic(cfg->irqn, IrqLevel3, FALSE); + } + else if (flag & RT_DEVICE_FLAG_INT_TX) + { + /* disable tx irq */ + Uart_DisableIrq(cfg->uart, UartTxIrq); + Uart_DisableIrq(cfg->uart, UartTxEIrq); + if (!(dev->open_flag & RT_DEVICE_FLAG_INT_RX)) + EnableNvic(cfg->irqn, IrqLevel3, FALSE); + } +#ifdef RT_SERIAL_USING_DMA + else if (flag & RT_DEVICE_FLAG_DMA_RX) + { + RT_ASSERT(cfg->dma_rx != RT_NULL); + /* release the dma mutex */ + dma_mutex_release(cfg->dma_rx->channel); + /* disable rx dma */ + Uart_DisableFunc(cfg->uart, UartDmaRxFunc); + } + else if (flag & RT_DEVICE_FLAG_DMA_TX) + { + /* disable tx dma */ + Uart_DisableFunc(cfg->uart, UartDmaTxFunc); + } +#endif break; + case RT_DEVICE_CTRL_SET_INT: - /* enable rx irq */ - Uart_EnableIrq(cfg->uart, UartRxIrq); + if (flag & RT_DEVICE_FLAG_INT_RX) + { + /* enable rx irq */ + Uart_EnableIrq(cfg->uart, UartRxIrq); + } + else if (flag & RT_DEVICE_FLAG_INT_TX) + { + /* enable tx irq */ + Uart_EnableIrq(cfg->uart, UartTxEIrq); + } EnableNvic(cfg->irqn, IrqLevel3, TRUE); break; + +#ifdef RT_SERIAL_USING_DMA + case RT_DEVICE_CTRL_CONFIG: + if (flag & RT_DEVICE_FLAG_DMA_RX) + { + RT_ASSERT(cfg->dma_rx != RT_NULL); + /* disable rx irq */ + Uart_DisableIrq(cfg->uart, UartRxIrq); + /* take the dma mutex */ + dma_mutex_take(cfg->dma_rx->channel, RT_WAITING_FOREVER); + /* configure rx dma */ + _uart_dma_config(serial_device, RT_SERIAL_DMA_RX); + } + else if (flag & RT_DEVICE_FLAG_DMA_TX) + { + /* disable tx irq */ + Uart_DisableIrq(cfg->uart, UartTxIrq); + Uart_DisableIrq(cfg->uart, UartTxEIrq); + /* configure tx dma */ + _uart_dma_config(serial_device, RT_SERIAL_DMA_TX); + } + break; +#endif } return RT_EOK; } static int _uart_putc(struct rt_serial_device *serial_device, char c) { - struct hc_uart_cfg *cfg; + rt_base_t level; + struct hw_uart_cfg *cfg; + struct rt_serial_tx_fifo *tx; RT_ASSERT(serial_device != RT_NULL); + cfg = serial_device->parent.user_data; - Uart_SendDataPoll(cfg->uart, (uint8_t)c); + if (((struct rt_device *)serial_device)->open_flag & RT_DEVICE_FLAG_INT_TX) + { + tx = (struct rt_serial_tx_fifo*) serial_device->serial_tx; + + RT_ASSERT(tx != RT_NULL); + + level = rt_hw_interrupt_disable(); + + Uart_EnableIrq(cfg->uart, UartTxEIrq); + Uart_ClrStatus(cfg->uart, UartTxe); + Uart_SendDataIt(cfg->uart, (uint8_t)c); + + rt_hw_interrupt_enable(level); + + rt_completion_wait(&(tx->completion), 100); + } + else + { + Uart_SendDataPoll(cfg->uart, (uint8_t)c); + } return 1; } static int _uart_getc(struct rt_serial_device *serial_device) { int ch; - struct hc_uart_cfg *cfg; + struct hw_uart_cfg *cfg; RT_ASSERT(serial_device != RT_NULL); cfg = serial_device->parent.user_data; @@ -177,20 +284,251 @@ static int _uart_getc(struct rt_serial_device *serial_device) if (Uart_GetStatus(cfg->uart, UartRC)) { - Uart_ClrStatus(cfg->uart, UartRC); ch = Uart_ReceiveData(cfg->uart); + Uart_ClrStatus(cfg->uart, UartRC); } return ch; } +#ifdef RT_SERIAL_USING_DMA +static rt_ssize_t _uart_dma_trans(struct rt_serial_device *serial_device, rt_uint8_t *buf, rt_size_t size, int dir) +{ + RT_ASSERT(serial_device != RT_NULL); + RT_ASSERT(buf != RT_NULL); + RT_ASSERT(size > 0); + RT_ASSERT(dir == RT_SERIAL_DMA_RX || dir == RT_SERIAL_DMA_TX); + + en_dma_channel_t ch; + + struct hw_uart_cfg *hw_cfg = serial_device->parent.user_data; + RT_ASSERT(hw_cfg != RT_NULL); + struct dma_config *dma_tx = hw_cfg->dma_tx; + struct dma_config *dma_rx = hw_cfg->dma_rx; + + if (dir == RT_SERIAL_DMA_TX) + { + RT_ASSERT(dma_tx != RT_NULL); + ch = dma_tx->channel; + + if (get_dma_trig(ch) != dma_tx->trigger_src) + { + // 修改DMA触发源 + change_dma_trig(ch, dma_tx->trigger_src); + // 修改DMA目的地址 + Dma_SetDestinationAddress(ch, (rt_uint32_t)&(hw_cfg->uart->SBUF)); + } + + // 发送源地址自增 + *(&M0P_DMAC->CONFB0 + ch) &= ~(rt_uint32_t)DmaMskSrcAddrFix; + Dma_SetSourceAddress(ch, (rt_uint32_t)buf); + } + else + { + RT_ASSERT(dma_rx != RT_NULL); + ch = dma_rx->channel; + + if (get_dma_trig(ch) != dma_rx->trigger_src) + { + // 修改DMA触发源 + change_dma_trig(ch, dma_rx->trigger_src); + // 修改DMA源地址 + Dma_SetSourceAddress(ch, (rt_uint32_t)&(hw_cfg->uart->SBUF)); + } + + // 发送目的地址自增 + *(&M0P_DMAC->CONFB0 + ch) &= ~(rt_uint32_t)DmaMskDstAddrFix; + Dma_SetDestinationAddress(ch, (rt_uint32_t)buf); + } + + Dma_SetTransferCnt(ch, size); + + // 使能DMA通道 + Dma_EnableChannel(ch); + // 使能DMA + Dma_Enable(); + + return size; +} + +/* DMA configuration */ +static rt_err_t _uart_dma_config(struct rt_serial_device *serial, int dir) +{ + RT_ASSERT(serial != RT_NULL); + + struct dma_config *dma_cfg; + struct rt_device *dev = (struct rt_device *)&serial->parent; + RT_ASSERT(dev != RT_NULL); + struct hw_uart_cfg *hw_uart_cfg = dev->user_data; + RT_ASSERT(hw_uart_cfg != RT_NULL); + + M0P_UART_TypeDef *uart = hw_uart_cfg->uart; + + if (dir == RT_SERIAL_DMA_TX) + { + /* 配置 DMA TX */ + dma_cfg = hw_uart_cfg->dma_tx; + RT_ASSERT(dma_cfg != RT_NULL); + hc32_dma_init(dma_cfg->channel, DMA_TX); + Uart_EnableFunc(uart, UartDmaTxFunc); + Dma_EnableChannelIrq(dma_cfg->channel); //传输成功完成时产生中断 + Dma_EnableChannelErrIrq(dma_cfg->channel); //传输错误时产生中断 + EnableNvic(DMAC_IRQn, IrqLevel2, TRUE); //NVIC对应DMAC中断位使能 + } + else if (dir == RT_SERIAL_DMA_RX) + { + /* 配置 DMA RX */ + dma_cfg = hw_uart_cfg->dma_rx; + RT_ASSERT(dma_cfg != RT_NULL); + hc32_dma_init(dma_cfg->channel, DMA_RX); + Uart_EnableFunc(uart, UartDmaRxFunc); + Dma_EnableChannelIrq(dma_cfg->channel); //传输成功完成时产生中断 + Dma_EnableChannelErrIrq(dma_cfg->channel); //传输错误时产生中断 + EnableNvic(DMAC_IRQn, IrqLevel2, TRUE); //NVIC对应DMAC中断位使能 + } + + return RT_EOK; +} + +static rt_err_t _uart_open(struct rt_device *dev, rt_uint16_t oflag) +{ + RT_ASSERT(dev != RT_NULL); + + struct rt_serial_device *serial = (struct rt_serial_device *)dev; + struct hw_uart_cfg *hw_cfg = rt_container_of(serial, struct hc_uart, serial_device)->hw_cfg; + + if (oflag & RT_DEVICE_FLAG_DMA_RX) + { + /* hc32l19x系列,没有DMA传输计数器,在传输完成前,没办法取得已接收字节数,故不使用环形接收缓冲区 */ + serial->config.bufsz = 0; + + /* configure low level device */ + _uart_control(serial, RT_DEVICE_CTRL_CONFIG, (void *) RT_DEVICE_FLAG_DMA_RX); + } + + if ((oflag & RT_DEVICE_FLAG_DMA_TX) && serial->serial_tx == RT_NULL) + { + if (!(dev->flag & RT_DEVICE_FLAG_DMA_TX)) + return -RT_EIO; + + /* 使用阻塞发送,略过原open函数的数据队列初始化 */ + serial->serial_tx = (void *) RT_TRUE; + + /* configure low level device */ + _uart_control(serial, RT_DEVICE_CTRL_CONFIG, (void *) RT_DEVICE_FLAG_DMA_TX); + } + + hw_cfg->origin_open(dev, oflag); + + return RT_EOK; +} + +static rt_err_t _uart_close(struct rt_device *dev) +{ + RT_ASSERT(dev != RT_NULL); + + struct rt_serial_device *serial = (struct rt_serial_device *)dev; + struct hw_uart_cfg *hw_cfg = rt_container_of(serial, struct hc_uart, serial_device)->hw_cfg; + + if (dev->open_flag & RT_DEVICE_FLAG_DMA_TX) + { + _uart_control(serial, RT_DEVICE_CTRL_CLR_INT, (void *) RT_DEVICE_FLAG_DMA_TX); + + dev->open_flag &= ~RT_DEVICE_FLAG_DMA_TX; + serial->serial_tx = RT_NULL; + } + else + { + hw_cfg->origin_close(dev); + } + + return RT_EOK; +} + +static rt_ssize_t _uart_write(struct rt_device *dev, rt_off_t pos, const void *buffer, rt_size_t size) +{ + rt_size_t leng = 0; + RT_ASSERT(dev != RT_NULL); + + struct rt_serial_device *serial = (struct rt_serial_device *)dev; + struct hw_uart_cfg *hw_cfg = rt_container_of(serial, struct hc_uart, serial_device)->hw_cfg; + + if (dev->open_flag & RT_DEVICE_FLAG_DMA_TX) + { + RT_ASSERT(hw_cfg->dma_tx != RT_NULL); + + rt_err_t state; + rt_uint32_t e; + rt_uint32_t evt_cplt, evt_err; + en_dma_channel_t ch = hw_cfg->dma_tx->channel; + + switch ((rt_uint32_t) hw_cfg->uart) + { +#ifdef BSP_USING_UART0 + case (rt_uint32_t) M0P_UART0: + evt_cplt = UART0_TX_TRANS_COMPLETE; + evt_err = UART0_TX_TRANS_ERROR; + break; +#endif +#ifdef BSP_USING_UART1 + case (rt_uint32_t) M0P_UART1: + evt_cplt = UART1_TX_TRANS_COMPLETE; + evt_err = UART1_TX_TRANS_ERROR; + break; +#endif +#ifdef BSP_USING_UART2 + case (rt_uint32_t)M0P_UART2: + evt_cplt = UART2_TX_TRANS_COMPLETE; + evt_err = UART2_TX_TRANS_ERROR; + break; +#endif +#ifdef BSP_USING_UART3 + case (rt_uint32_t) M0P_UART3: + evt_cplt = UART3_TX_TRANS_COMPLETE; + evt_err = UART3_TX_TRANS_ERROR; + break; +#endif + default: + break; + } + + dma_mutex_take(ch, RT_WAITING_FOREVER); + + leng = _uart_dma_trans(serial, (rt_uint8_t *)buffer, size, RT_SERIAL_DMA_TX); + + state = hc32_wait_dma_event(evt_cplt | evt_err, 1000, &e); + + dma_mutex_release(ch); + + if ((e & evt_err) || state != RT_EOK) + leng = 0; + + /* invoke callback */ + if (serial->parent.tx_complete != RT_NULL) + { + serial->parent.tx_complete(&serial->parent, (void*)buffer); + } + } + else if (hw_cfg->origin_write) + { + leng = hw_cfg->origin_write(dev, pos, buffer, size); + } + + return leng; +} +#endif /* RT_SERIAL_USING_DMA */ + static const struct rt_uart_ops _uart_ops = { .configure = _uart_init, .control = _uart_control, .putc = _uart_putc, .getc = _uart_getc, +#ifdef RT_SERIAL_USING_DMA + .dma_transmit = _uart_dma_trans +#else .dma_transmit = RT_NULL +#endif }; /** @@ -200,11 +538,12 @@ static const struct rt_uart_ops _uart_ops = */ static void rt_hw_uart_isr(struct rt_serial_device *serial_device) { - struct hc_uart_cfg *cfg; + struct hw_uart_cfg *cfg; uint32_t status; RT_ASSERT(serial_device != RT_NULL); - cfg = serial_device->parent.user_data; + struct rt_device *dev = (struct rt_device *)serial_device; + cfg = dev->user_data; status = cfg->uart->ISR; /* UART in mode Receiver -------------------------------------------------*/ @@ -212,23 +551,35 @@ static void rt_hw_uart_isr(struct rt_serial_device *serial_device) { Uart_ClrStatus(cfg->uart, UartFE); } + if (status & (1 << UartPE)) { Uart_ClrStatus(cfg->uart, UartPE); } + if (status & (1 << UartRC)) { rt_hw_serial_isr(serial_device, RT_SERIAL_EVENT_RX_IND); } + + /* UART in mode Sender -------------------------------------------------*/ + if (dev->open_flag & RT_DEVICE_FLAG_INT_TX) + { + if (status & (1 << UartTxe)) + { + Uart_DisableIrq(cfg->uart, UartTxEIrq); + rt_hw_serial_isr(serial_device, RT_SERIAL_EVENT_TX_DONE); + } + } } #if defined(BSP_USING_UART0) -void Uart0_IRQHandler(void) +__USED void Uart0_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_uart_isr(&(uart_drv[UART0_INDEX].serial_device)); + rt_hw_uart_isr(&(uart_array[UART0_INDEX].serial_device)); /* leave interrupt */ rt_interrupt_leave(); @@ -236,12 +587,12 @@ void Uart0_IRQHandler(void) #endif /* BSP_USING_UART0 */ #if defined(BSP_USING_UART1) -void Uart1_IRQHandler(void) +__USED void Uart1_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_uart_isr(&(uart_drv[UART1_INDEX].serial_device)); + rt_hw_uart_isr(&(uart_array[UART1_INDEX].serial_device)); /* leave interrupt */ rt_interrupt_leave(); @@ -249,12 +600,12 @@ void Uart1_IRQHandler(void) #endif /* BSP_USING_UART1 */ #if defined(BSP_USING_UART2) -void Uart2_IRQHandler(void) +__USED void Uart2_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_uart_isr(&(uart_drv[UART2_INDEX].serial_device)); + rt_hw_uart_isr(&(uart_array[UART2_INDEX].serial_device)); /* leave interrupt */ rt_interrupt_leave(); @@ -262,12 +613,12 @@ void Uart2_IRQHandler(void) #endif /* BSP_USING_UART2 */ #if defined(BSP_USING_UART3) -void Uart3_IRQHandler(void) +__USED void Uart3_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_uart_isr(&(uart_drv[UART3_INDEX].serial_device)); + rt_hw_uart_isr(&(uart_array[UART3_INDEX].serial_device)); /* leave interrupt */ rt_interrupt_leave(); @@ -276,22 +627,108 @@ void Uart3_IRQHandler(void) int rt_hw_uart_init(void) { + struct rt_device *dev; + struct hw_uart_cfg *hw_cfg; struct serial_configure cfg = RT_SERIAL_CONFIG_DEFAULT; - int i = 0; - rt_err_t result = RT_EOK; + rt_uint16_t flag = 0; + rt_err_t result; + +#ifdef RT_SERIAL_USING_DMA + _uart_get_dma_info(); +#endif - for (i = 0; i < sizeof(uart_cfg) / sizeof(uart_cfg[0]); i++) + for (int i = 0; i < ARRAY_SZ(uart_cfg); i++) { - uart_drv[i].cfg = &uart_cfg[i]; - uart_drv[i].serial_device.ops = &_uart_ops; - uart_drv[i].serial_device.config = cfg; + uart_array[i].hw_cfg = &uart_cfg[i]; + uart_array[i].serial_device.ops = &_uart_ops; + uart_array[i].serial_device.config = cfg; + + switch ((rt_uint32_t)uart_cfg[i].uart) + { +#ifdef BSP_USING_UART0 + case (rt_uint32_t)M0P_UART0: +#ifdef BSP_UART0_RX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_RX; +#else + flag |= RT_DEVICE_FLAG_INT_RX; +#endif +#ifdef BSP_UART0_TX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_TX; +#else + flag |= RT_DEVICE_FLAG_INT_TX; +#endif + break; +#endif +#ifdef BSP_USING_UART1 + case (rt_uint32_t)M0P_UART1: +#ifdef BSP_UART1_RX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_RX; +#else + flag |= RT_DEVICE_FLAG_INT_RX; +#endif +#ifdef BSP_UART1_TX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_TX; +#else + flag |= RT_DEVICE_FLAG_INT_TX; +#endif + break; +#endif +#ifdef BSP_USING_UART2 + case (rt_uint32_t)M0P_UART2: +#ifdef BSP_UART2_RX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_RX; +#else + flag |= RT_DEVICE_FLAG_INT_RX; +#endif +#ifdef BSP_UART2_TX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_TX; +#else + flag |= RT_DEVICE_FLAG_INT_TX; +#endif + break; +#endif +#ifdef BSP_USING_UART3 + case (rt_uint32_t)M0P_UART3: +#ifdef BSP_UART3_RX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_RX; +#else + flag |= RT_DEVICE_FLAG_INT_RX; +#endif +#ifdef BSP_UART3_TX_USING_DMA + flag |= RT_DEVICE_FLAG_DMA_TX; +#else + flag |= RT_DEVICE_FLAG_INT_TX; +#endif + break; +#endif + default: + break; + } + /* register UART device */ - result = rt_hw_serial_register(&uart_drv[i].serial_device, uart_drv[i].cfg->name, - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart_drv[i].cfg); + result = rt_hw_serial_register(&uart_array[i].serial_device, uart_array[i].hw_cfg->name, + RT_DEVICE_FLAG_RDWR | flag, uart_array[i].hw_cfg); RT_ASSERT(result == RT_EOK); + +#ifdef RT_SERIAL_USING_DMA + /* 替换 open/close/write,write新函数添加DMA总线互锁 */ + hw_cfg = uart_array[i].hw_cfg; + dev = (struct rt_device *)&uart_array[i].serial_device; + + hw_cfg->origin_open = dev->open; + dev->open = _uart_open; + hw_cfg->origin_close = dev->close; + dev->close = _uart_close; + + if (flag & RT_DEVICE_FLAG_DMA_TX) + { + hw_cfg->origin_write = dev->write; + dev->write = _uart_write; + } +#endif } - return result; + return 0; } INIT_BOARD_EXPORT(rt_hw_uart_init); diff --git a/bsp/hc32l196/drivers/drv_usart.h b/bsp/hc32l196/drivers/drv_usart.h index 490ae14389dde1236c68513e1a4024ad558a07a8..8a1d45566ecc6f3a9e3963dbc260f8217fb84979 100644 --- a/bsp/hc32l196/drivers/drv_usart.h +++ b/bsp/hc32l196/drivers/drv_usart.h @@ -5,23 +5,38 @@ * Change Logs: * Date Author Notes * 2021-9-1 DongBowen first version + * 2025-12-21 Sunwancn Support DMA */ #ifndef __DRV_USART_H__ #define __DRV_USART_H__ #include -#include "rtdevice.h" +#include +#include +#include +#include "hc32l196_reset.h" +#include "hc32l196_uart.h" -#include "board_config.h" +#if !defined(RT_VERSION_CHECK) || (RT_VER_NUM < 0x50000) +typedef rt_size_t rt_ssize_t; +#endif -/* hc config class */ -struct hc_uart_cfg +/* hc32 uart config class */ +struct hw_uart_cfg { const char *name; M0P_UART_TypeDef *uart; en_sysctrl_peripheral_gate_t uart_periph; IRQn_Type irqn; +#ifdef RT_SERIAL_USING_DMA + struct dma_config *dma_rx; + struct dma_config *dma_tx; + rt_err_t (*origin_open) (struct rt_device *dev, rt_uint16_t oflag); + rt_err_t (*origin_close) (struct rt_device *dev); + rt_ssize_t (*origin_write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size); +#endif + rt_uint32_t baud_rate; en_gpio_port_t rx_port; en_gpio_pin_t rx_pin; @@ -32,13 +47,29 @@ struct hc_uart_cfg en_gpio_af_t tx_af; }; -/* hc uart dirver class */ +/* hc uart driver class */ struct hc_uart { - struct hc_uart_cfg *cfg; + struct hw_uart_cfg *hw_cfg; struct rt_serial_device serial_device; }; +enum +{ +#ifdef BSP_USING_UART0 + UART0_INDEX, +#endif +#ifdef BSP_USING_UART1 + UART1_INDEX, +#endif +#ifdef BSP_USING_UART2 + UART2_INDEX, +#endif +#ifdef BSP_USING_UART3 + UART3_INDEX, +#endif +}; + #ifdef BSP_USING_UART0 #ifndef UART0_CFG #define UART0_CFG \ @@ -47,6 +78,7 @@ struct hc_uart .uart = M0P_UART0, \ .uart_periph = SysctrlPeripheralUart0, \ .irqn = UART0_2_IRQn, \ + .baud_rate = UART0_BAUD_RATE, \ .rx_port = UART0_RX_PORT, \ .rx_pin = UART0_RX_PIN, \ .rx_af = UART0_RX_AF, \ @@ -55,6 +87,26 @@ struct hc_uart .tx_af = UART0_TX_AF, \ } #endif /* UART0_CFG */ + +#ifdef BSP_UART0_RX_USING_DMA +#ifndef UART0_RX_DMA_CONFIG +#define UART0_RX_DMA_CONFIG \ + { \ + .channel = UART0_RX_DMA_CHANNEL, \ + .trigger_src = DmaUart0RxTrig, \ + } +#endif /* UART0_RX_DMA_CONFIG */ +#endif /* BSP_UART0_RX_USING_DMA */ + +#ifdef BSP_UART0_TX_USING_DMA +#ifndef UART0_TX_DMA_CONFIG +#define UART0_TX_DMA_CONFIG \ + { \ + .channel = UART0_TX_DMA_CHANNEL, \ + .trigger_src = DmaUart0TxTrig, \ + } +#endif /* UART0_TX_DMA_CONFIG */ +#endif /* BSP_UART0_TX_USING_DMA */ #endif /* BSP_USING_UART0 */ #ifdef BSP_USING_UART1 @@ -65,6 +117,7 @@ struct hc_uart .uart = M0P_UART1, \ .uart_periph = SysctrlPeripheralUart1, \ .irqn = UART1_3_IRQn, \ + .baud_rate = UART1_BAUD_RATE, \ .rx_port = UART1_RX_PORT, \ .rx_pin = UART1_RX_PIN, \ .rx_af = UART1_RX_AF, \ @@ -73,8 +126,107 @@ struct hc_uart .tx_af = UART1_TX_AF, \ } #endif /* UART1_CFG */ + +#ifdef BSP_UART1_RX_USING_DMA +#ifndef UART1_RX_DMA_CONFIG +#define UART1_RX_DMA_CONFIG \ + { \ + .channel = UART1_RX_DMA_CHANNEL, \ + .trigger_src = DmaUart1RxTrig, \ + } +#endif /* UART1_RX_DMA_CONFIG */ +#endif /* BSP_UART1_RX_USING_DMA */ + +#ifdef BSP_UART1_TX_USING_DMA +#ifndef UART1_TX_DMA_CONFIG +#define UART1_TX_DMA_CONFIG \ + { \ + .channel = UART1_TX_DMA_CHANNEL, \ + .trigger_src = DmaUart1TxTrig, \ + } +#endif /* UART1_TX_DMA_CONFIG */ +#endif /* BSP_UART1_TX_USING_DMA */ #endif /* BSP_USING_UART1 */ +#ifdef BSP_USING_UART2 +#ifndef UART2_CFG +#define UART2_CFG \ + { \ + .name = "uart2", \ + .uart = M0P_UART2, \ + .uart_periph = SysctrlPeripheralUart2, \ + .irqn = UART0_2_IRQn, \ + .baud_rate = UART2_BAUD_RATE, \ + .rx_port = UART2_RX_PORT, \ + .rx_pin = UART2_RX_PIN, \ + .rx_af = UART2_RX_AF, \ + .tx_port = UART2_TX_PORT, \ + .tx_pin = UART2_TX_PIN, \ + .tx_af = UART2_TX_AF, \ + } +#endif /* UART2_CFG */ + +#ifdef BSP_UART2_RX_USING_DMA +#ifndef UART2_RX_DMA_CONFIG +#define UART2_RX_DMA_CONFIG \ + { \ + .channel = UART2_RX_DMA_CHANNEL, \ + .trigger_src = DmaUart2RxTrig, \ + } +#endif /* UART2_RX_DMA_CONFIG */ +#endif /* BSP_UART2_RX_USING_DMA */ + +#ifdef BSP_UART2_TX_USING_DMA +#ifndef UART2_TX_DMA_CONFIG +#define UART2_TX_DMA_CONFIG \ + { \ + .channel = UART2_TX_DMA_CHANNEL, \ + .trigger_src = DmaUart2TxTrig, \ + } +#endif /* UART2_TX_DMA_CONFIG */ +#endif /* BSP_UART2_TX_USING_DMA */ +#endif /* BSP_USING_UART2 */ + +#ifdef BSP_USING_UART3 +#ifndef UART3_CFG +#define UART3_CFG \ + { \ + .name = "uart3", \ + .uart = M0P_UART3, \ + .uart_periph = SysctrlPeripheralUart3, \ + .irqn = UART1_3_IRQn, \ + .baud_rate = UART3_BAUD_RATE, \ + .rx_port = UART3_RX_PORT, \ + .rx_pin = UART3_RX_PIN, \ + .rx_af = UART3_RX_AF, \ + .tx_port = UART3_TX_PORT, \ + .tx_pin = UART3_TX_PIN, \ + .tx_af = UART3_TX_AF, \ + } +#endif /* UART3_CFG */ + +#ifdef BSP_UART3_RX_USING_DMA +#ifndef UART3_RX_DMA_CONFIG +#define UART3_RX_DMA_CONFIG \ + { \ + .channel = UART3_RX_DMA_CHANNEL, \ + .trigger_src = DmaUart3RxTrig, \ + } +#endif /* UART3_RX_DMA_CONFIG */ +#endif /* BSP_UART3_RX_USING_DMA */ + +#ifdef BSP_UART3_TX_USING_DMA +#ifndef UART3_TX_DMA_CONFIG +#define UART3_TX_DMA_CONFIG \ + { \ + .channel = UART3_TX_DMA_CHANNEL, \ + .trigger_src = DmaUart3TxTrig, \ + } +#endif /* UART3_TX_DMA_CONFIG */ +#endif /* BSP_UART3_TX_USING_DMA */ +#endif /* BSP_USING_UART3 */ + int rt_hw_uart_init(void); +struct rt_serial_device *get_serial_from_index(int idx); #endif /* __DRV_USART_H__ */ diff --git a/bsp/hc32l196/project.uvoptx b/bsp/hc32l196/project.uvoptx index 0ee00e8aa335d2e29ef3bb7284f30164cff5111c..20840c629801efab4a6d91b4a41f43a54e032815 100644 --- a/bsp/hc32l196/project.uvoptx +++ b/bsp/hc32l196/project.uvoptx @@ -26,7 +26,7 @@ 0x4 ARM-ADS - 12000000 + 48000000 1 1 @@ -100,6 +100,9 @@ 1 0 0 + 1 + 0 + 0 6 @@ -158,11 +161,19 @@ 0 - - - 0 + 0 + 0 + + + + + + + + 1 + 0 0 2 1000000 diff --git a/bsp/hc32l196/project.uvprojx b/bsp/hc32l196/project.uvprojx index dc48414c25f9494980834ec8d43a49f095e7c08a..d3dcb6251233695d206e54bc700ff3e3c5c4ec08 100644 --- a/bsp/hc32l196/project.uvprojx +++ b/bsp/hc32l196/project.uvprojx @@ -8,11 +8,12 @@ 0x4 ARM-ADS 5060020::V5.06 (build 20)::ARMCC + 1 HC32L196JCTA HDSC - HDSC.HC32L19X.1.0.0 + HDSC.HC32L19X.1.0.1 https://raw.githubusercontent.com/hdscmcu/pack/master/ IROM(0x00000000,0x40000) IRAM(0x20000000,0x8000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE @@ -180,6 +181,7 @@ 0 0 0 + 0 0 0 8 @@ -307,7 +309,7 @@ 1 - 1 + 2 0 0 1 @@ -316,20 +318,24 @@ 0 0 0 - 2 + 3 0 0 1 + 0 0 - 0 - 0 + 3 + 3 0 0 + 0 + 0 + 0 - __RTTHREAD__, RT_USING_LIBC, RT_USING_ARMLIBC, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND + RT_USING_LIBC, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__, __STDC_LIMIT_MACROS, RT_USING_ARMLIBC - Libraries\HC32L196_StdPeriph_Driver\inc;Libraries\CMSIS\Include;..\..\components\libc\posix\io\poll;applications;..\..\components\libc\posix\io\eventfd;..\..\libcpu\arm\common;..\..\components\drivers\smp_call;..\..\components\drivers\include;Libraries\CMSIS\Device\HDSC\HC32L196\Include;..\..\components\drivers\include;..\..\components\libc\compilers\common\extension;..\..\components\libc\compilers\common\extension\fcntl\octal;.;..\..\components\drivers\include;..\..\components\libc\posix\ipc;..\..\include;..\..\components\libc\posix\io\epoll;..\..\components\drivers\phy;..\..\components\finsh;..\..\components\libc\compilers\common\include;..\..\libcpu\arm\cortex-m0;..\..\components\drivers\include;..\..\components\drivers\include;board;drivers + ..\..\components\drivers\include;.;drivers;..\..\components\libc\posix\ipc;board;..\..\components\libc\compilers\common\extension;..\..\components\libc\posix\io\poll;..\..\components\libc\posix\io\epoll;..\..\libcpu\arm\common;..\..\components\drivers\include;..\..\components\libc\posix\io\eventfd;Libraries\CMSIS\Include;..\..\components\drivers\smp_call;..\..\components\drivers\include;..\..\components\drivers\include;..\..\components\drivers\phy;applications;..\..\libcpu\arm\cortex-m0;..\..\components\libc\compilers\common\include;Libraries\HC32L196_StdPeriph_Driver\inc;..\..\components\drivers\include;..\..\components\libc\compilers\common\extension\fcntl\octal;Libraries\CMSIS\Device\HDSC\HC32L196\Include;..\..\include;..\..\components\net\utest;..\..\components\finsh;..\..\components\drivers\include @@ -342,6 +348,7 @@ 0 0 0 + 0 @@ -362,7 +369,7 @@ .\board\linker_scripts\link.sct - + --keep=*Handler @@ -380,61 +387,33 @@ - Compiler + CPU - 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 + div0.c 1 - ..\..\components\libc\compilers\common\cstring.c + ..\..\libcpu\arm\common\div0.c - ctime.c + showmem.c 1 - ..\..\components\libc\compilers\common\ctime.c + ..\..\libcpu\arm\common\showmem.c - cunistd.c - 1 - ..\..\components\libc\compilers\common\cunistd.c + context_rvds.S + 2 + ..\..\libcpu\arm\cortex-m0\context_rvds.S - cwchar.c + cpuport.c 1 - ..\..\components\libc\compilers\common\cwchar.c + ..\..\libcpu\arm\cortex-m0\cpuport.c @@ -685,6 +664,13 @@ board\board_config.c + + + drv_dma.c + 1 + drivers\drv_dma.c + + drv_gpio.c @@ -704,16 +690,16 @@ Finsh - msh_parse.c + shell.c 1 - ..\..\components\finsh\msh_parse.c + ..\..\components\finsh\shell.c - shell.c + msh.c 1 - ..\..\components\finsh\shell.c + ..\..\components\finsh\msh.c @@ -725,14 +711,35 @@ - msh.c + msh_parse.c 1 - ..\..\components\finsh\msh.c + ..\..\components\finsh\msh_parse.c HC32_StdPeriph + + + hc32l196_sysctrl.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_sysctrl.c + + + + + hc32l196_gpio.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_gpio.c + + + + + hc32l196_dmac.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_dmac.c + + hc32l196_flash.c @@ -740,6 +747,20 @@ Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_flash.c + + + hc32l196_uart.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_uart.c + + + + + hc32l196_ram.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_ram.c + + interrupts_hc32l19x.c @@ -747,6 +768,20 @@ Libraries\CMSIS\Device\HDSC\HC32L196\Source\interrupts_hc32l19x.c + + + hc32l196_crc.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_crc.c + + + + + hc32l196_trng.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_trng.c + + system_hc32l19x.c @@ -763,30 +798,30 @@ - startup_hc32l19x.s - 2 - Libraries\CMSIS\Device\HDSC\HC32L196\Source\ARM\startup_hc32l19x.s + hc32l196_trim.c + 1 + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_trim.c - hc32l196_gpio.c + hc32l196_debug.c 1 - Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_gpio.c + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_debug.c - hc32l196_sysctrl.c + hc32l196_reset.c 1 - Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_sysctrl.c + Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_reset.c - hc32l196_uart.c - 1 - Libraries\HC32L196_StdPeriph_Driver\src\hc32l196_uart.c + startup_hc32l19x.s + 2 + Libraries\CMSIS\Device\HDSC\HC32L196\Source\ARM\startup_hc32l19x.s @@ -1079,75 +1114,105 @@ - klibc + Libc - kstdio.c + syscall_mem.c 1 - ..\..\src\klibc\kstdio.c + ..\..\components\libc\compilers\armlibc\syscall_mem.c - rt_vsnprintf_tiny.c + syscalls.c 1 - ..\..\src\klibc\rt_vsnprintf_tiny.c + ..\..\components\libc\compilers\armlibc\syscalls.c - kerrno.c + cctype.c 1 - ..\..\src\klibc\kerrno.c + ..\..\components\libc\compilers\common\cctype.c - rt_vsscanf.c + cstdlib.c 1 - ..\..\src\klibc\rt_vsscanf.c + ..\..\components\libc\compilers\common\cstdlib.c - kstring.c + cstring.c 1 - ..\..\src\klibc\kstring.c + ..\..\components\libc\compilers\common\cstring.c - - - libcpu - div0.c + ctime.c 1 - ..\..\libcpu\arm\common\div0.c + ..\..\components\libc\compilers\common\ctime.c - showmem.c + cunistd.c 1 - ..\..\libcpu\arm\common\showmem.c + ..\..\components\libc\compilers\common\cunistd.c - context_rvds.S - 2 - ..\..\libcpu\arm\cortex-m0\context_rvds.S + cwchar.c + 1 + ..\..\components\libc\compilers\common\cwchar.c - cpuport.c + kerrno.c 1 - ..\..\libcpu\arm\cortex-m0\cpuport.c + ..\..\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 + + + + + diff --git a/bsp/hc32l196/rtconfig.h b/bsp/hc32l196/rtconfig.h index a4c96d677e7439f1ead04d39bcca2ca60bb16bc6..d5ef75c477b138e2bf64d0e2f328c32e15da5c60 100644 --- a/bsp/hc32l196/rtconfig.h +++ b/bsp/hc32l196/rtconfig.h @@ -105,7 +105,7 @@ #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart0" -#define RT_VER_NUM 0x50201 +#define RT_VER_NUM 0x50300 #define RT_BACKTRACE_LEVEL_MAX_NR 32 /* end of RT-Thread Kernel */ #define ARCH_ARM @@ -291,30 +291,6 @@ /* 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 */ /* end of HAL & SDK Drivers */ /* sensors drivers */ @@ -401,12 +377,13 @@ /* Onboard Peripheral Drivers */ +/* end of Onboard Peripheral Drivers */ + /* On-chip Peripheral Drivers */ #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART0 -#define BSP_USING_UART1 /* end of On-chip Peripheral Drivers */ /* Board extended module Drivers */ diff --git a/bsp/hc32l196/rtconfig.py b/bsp/hc32l196/rtconfig.py index a63cea240e596f598fa57521f60bb2f7d15f9f9b..c20fda62b079ed7b7d678935e400dd7b72eae085 100644 --- a/bsp/hc32l196/rtconfig.py +++ b/bsp/hc32l196/rtconfig.py @@ -19,7 +19,8 @@ if CROSS_TOOL == 'gcc': PLATFORM = 'gcc' EXEC_PATH = r'C:\Users\XXYYZZ' elif CROSS_TOOL == 'keil': - PLATFORM = 'armcc' + #PLATFORM = 'armcc' + PLATFORM = 'armclang' EXEC_PATH = r'C:/Keil_v5' elif CROSS_TOOL == 'iar': PLATFORM = 'iccarm' @@ -30,6 +31,8 @@ if os.getenv('RTT_EXEC_PATH'): BUILD = 'debug' +print('PLATFORM =', PLATFORM) + if PLATFORM == 'gcc': # toolchains PREFIX = 'arm-none-eabi-' @@ -57,8 +60,8 @@ if PLATFORM == 'gcc': else: CFLAGS += ' -O2' - CXXFLAGS = CFLAGS - + CXXFLAGS = CFLAGS + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' elif PLATFORM == 'armcc': @@ -88,7 +91,41 @@ elif PLATFORM == 'armcc': else: CFLAGS += ' -O2' - CXXFLAGS = CFLAGS + CXXFLAGS = CFLAGS + + 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-M0 ' + CFLAGS = ' --target=arm-arm-none-eabi --mcpu=cortex-m0plus ' + CFLAGS += ' -mcpu=cortex-m0plus ' + CFLAGS += ' -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=c99' POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' @@ -137,7 +174,14 @@ elif PLATFORM == 'iccarm': 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 + cwd_path = os.getcwd() + 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/hc32l196/template.uvoptx b/bsp/hc32l196/template.uvoptx index 0ee00e8aa335d2e29ef3bb7284f30164cff5111c..20840c629801efab4a6d91b4a41f43a54e032815 100644 --- a/bsp/hc32l196/template.uvoptx +++ b/bsp/hc32l196/template.uvoptx @@ -26,7 +26,7 @@ 0x4 ARM-ADS - 12000000 + 48000000 1 1 @@ -100,6 +100,9 @@ 1 0 0 + 1 + 0 + 0 6 @@ -158,11 +161,19 @@ 0 - - - 0 + 0 + 0 + + + + + + + + 1 + 0 0 2 1000000 diff --git a/bsp/hc32l196/template.uvprojx b/bsp/hc32l196/template.uvprojx index df16394f2493d1ef2b9b354b21ce507bfd439932..f9586afa966e1e6308a2acd2561217b84769f98d 100644 --- a/bsp/hc32l196/template.uvprojx +++ b/bsp/hc32l196/template.uvprojx @@ -11,11 +11,12 @@ 0x4 ARM-ADS 5060020::V5.06 (build 20)::ARMCC + 1 HC32L196JCTA HDSC - HDSC.HC32L19X.1.0.0 + HDSC.HC32L19X.1.0.1 https://raw.githubusercontent.com/hdscmcu/pack/master/ IROM(0x00000000,0x40000) IRAM(0x20000000,0x8000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ELITTLE @@ -183,6 +184,7 @@ 0 0 0 + 0 0 0 8 @@ -310,7 +312,7 @@ 1 - 1 + 2 0 0 1 @@ -319,15 +321,19 @@ 0 0 0 - 2 + 3 0 0 1 + 0 0 - 0 - 0 + 3 + 3 0 0 + 0 + 0 + 0 @@ -345,6 +351,7 @@ 0 0 0 + 0 @@ -374,4 +381,10 @@ + + + + + +