From cc432b761c884a0bd8e9d83db0a4e26109fc08b1 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 08 十一月 2024 15:35:38 +0800 Subject: [PATCH] 安邦手环GPS删除部分无用数据和修改4G波特率9600出厂测试固件 --- keil/include/drivers/mk_dma.h | 265 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 265 insertions(+), 0 deletions(-) diff --git a/keil/include/drivers/mk_dma.h b/keil/include/drivers/mk_dma.h new file mode 100644 index 0000000..7133924 --- /dev/null +++ b/keil/include/drivers/mk_dma.h @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and + * its subsidiaries and affiliates (collectly called MKSEMI). + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into an MKSEMI + * integrated circuit in a product or a software update for such product, + * must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of MKSEMI nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * MKSEMI integrated circuit. + * + * 5. Any software provided in binary form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MK_DMA_H_ +#define MK_DMA_H_ +#include "mk_common.h" + +/** + * @addtogroup MK8000_DMA + * @{ + */ + +#define DMA_INT_TYPE_ABORT 1 /*!< DMA abort status */ +#define DMA_INT_TYPE_ERROR 2 /*!< DMA error status */ +#define DMA_INT_TYPE_DONE 3 /*!< DMA done status */ +#define DMA_INT_TYPE_FORCE_ABORT 4 /*!< DMA force abort status */ + +/** + * @brief DMA device IDs enumeration + */ +enum DMA_DEV_T +{ + DMA_ID0 = 0, + DMA_MAX_NUM +}; + +/** + * @brief DMA Channels definition. + * @note Avoid multiple peripherals DMA requests mapped on the same channel of DMA. + */ +enum DMA_CH_T +{ + DMA_CH0 = 0, /*!< SPI0-RX DMA requests mapped on DMA channel 0 */ + DMA_CH1, /*!< ADC or SPI0-TX DMA requests mapped on DMA channel 1 */ + DMA_CH2, /*!< AES-IN/FLASH-WRITE/SPI1-RX DMA requests mapped on DMA channel 2 */ + DMA_CH3, /*!< AES-OUT/FLASH-READ/SPI1-TX DMA requests mapped on DMA channel 3 */ + DMA_CH4, /*!< UART0-RX DMA requests mapped on DMA channel 4 */ + DMA_CH5, /*!< UART0-TX DMA requests mapped on DMA channel 5 */ + DMA_CH6, /*!< UART1-TX DMA requests mapped on DMA channel 6 */ + DMA_CH7, /*!< UART1-TX DMA requests mapped on DMA channel 7 */ + DMA_CH_NUM, +}; + +/** + * @brief DMA FIFO threshold value. + * @note DMA FIFO space >= DMA_FF_TH, DMA will start to transfer data from source to FIFO. + * The number of valid data in DMA FIFO >= DMA_FF_TH, the DMA will start to pop out data from FIFO to the destination. + */ +enum DMA_FIFO_TH_T +{ + DMA_FIFO_TH_1 = 0, /*!< FIFO threshold value is 1 */ + DMA_FIFO_TH_2, /*!< FIFO threshold value is 2 */ + DMA_FIFO_TH_4, /*!< FIFO threshold value is 4 */ + DMA_FIFO_TH_8, /*!< FIFO threshold value is 8 */ + DMA_FIFO_TH_16, /*!< FIFO threshold value is 16 */ +}; + +/** + * @brief DMA burst size definition. + * @note Burst size are set according to the size of the peripheral buffer being accessed. + */ +enum DMA_SRC_BURST_SIZE_T +{ + DMA_SRC_BURST_SIZE_1 = 0, + DMA_SRC_BURST_SIZE_4, + DMA_SRC_BURST_SIZE_8, + DMA_SRC_BURST_SIZE_16, + DMA_SRC_BURST_SIZE_32, + DMA_SRC_BURST_SIZE_64, + DMA_SRC_BURST_SIZE_128, + DMA_SRC_BURST_SIZE_256, +}; + +/** + * @brief DMA memory/peripheral data width. + * + */ +enum DMA_WIDTH_T +{ + DMA_WIDTH_1B = 0, /*!< Data aligned by byte */ + DMA_WIDTH_2B, /*!< Data aligned by halfword */ + DMA_WIDTH_4B /*!< Data aligned by word */ +}; + +/** + * @brief DMA SRC/DEST address control mode. + */ +enum DMA_ADDR_CTRL_T +{ + DMA_ADDR_INC = 0, /*!< ADDR increment mode */ + DMA_ADDR_DEC, /*!< ADDR decrement mode */ + DMA_ADDR_FIXED, /*!< ADDR fixed mode */ +}; + +/** + * @brief DMA source request definition. + */ +enum DMA_REQ_SEL_T +{ + DMA_REQ_MEM = 0x00, + DMA_REQ_SPI0_RX = 0x10, + DMA_REQ_SPI0_TX = 0x11, + DMA_REQ_SPI1_RX = 0x12, + DMA_REQ_SPI1_TX = 0x13, + DMA_REQ_FLASH = 0x14, + DMA_REQ_AES_RX = 0x15, + DMA_REQ_AES_TX = 0x16, + DMA_REQ_UART0_RX = 0x17, + DMA_REQ_UART0_TX = 0x18, + DMA_REQ_UART1_RX = 0x19, + DMA_REQ_UART1_TX = 0x1A, + DMA_REQ_ADC = 0x1B, +}; + +/** + * @brief DMA channel configure Structure + */ +struct DMA_CH_CFG_T +{ + enum DMA_FIFO_TH_T fifo_th; /*!< Specifies the FIFO threshold level. + This parameter can be a value of @ref DMA_FIFO_TH_T */ + + enum DMA_SRC_BURST_SIZE_T src_burst_size; /*!< Specifies the Burst transfer configuration. + This parameter can be a value of @ref DMA_SRC_BURST_SIZE_T */ + enum DMA_WIDTH_T src_width; /*!< Specifies the source data width. + This parameter can be a value of @ref DMA_WIDTH_T */ + enum DMA_WIDTH_T dst_width; /*!< Specifies the destination data width. + This parameter can be a value of @ref DMA_WIDTH_T */ + enum DMA_ADDR_CTRL_T src_addr_ctrl; /*!< Specifies the source address control mode. + This parameter can be a value of @ref DMA_ADDR_CTRL_T */ + enum DMA_ADDR_CTRL_T dst_addr_ctrl; /*!< Specifies the destination address control mode. + This parameter can be a value of @ref DMA_ADDR_CTRL_T */ + enum DMA_REQ_SEL_T src_req_sel; /*!< Specifies the source request dev + This parameter can be a value of @ref DMA_REQ_SEL_T */ + enum DMA_REQ_SEL_T dst_req_sel; /*!< Specifies the destination request dev + This parameter can be a value of @ref DMA_REQ_SEL_T*/ +}; + +struct DMA_HANDLE_T +{ + DMA_TypeDef *const base; /*!< DMA registers base address */ + const IRQn_Type irq; /*!< DMA interrupt number */ + drv_callback_t callback[DMA_CH_NUM]; /*!< Callback function provided by the user */ + drv_callback_t abort_callback[DMA_CH_NUM]; /*!< DMA abort callback function provided by the user */ +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Function for initializing the DMA. + * + * @param[in] ch Enables the specified DMA channel + * @param[in] config Pointer to a DMA_CH_CFG_T structure that contains the configuration information for DMA. + * @return + * @arg DEV_ERROR error id + * @arg DEV_OK Operation is successful + */ +int dma_open(enum DMA_CH_T ch, struct DMA_CH_CFG_T *config); + +/** + * @brief Function for uninitializing the DMA. + * + * @param[in] ch Disables the specified DMA channel + * @return + * @arg DEV_ERROR error id + * @arg DEV_OK Operation is successful + */ +int dma_close(enum DMA_CH_T ch); + +/** + * @brief Starts the DMA transfer. + * + * @param[in] ch Specifies the DMA channel + * @param[in] src_addr The source memory Buffer address + * @param[out] dst_addr The destination memory Buffer address + * @param[in] size The length of data to be transferred from source to destination + * @param[in] callback Callback function provided by the user. + * @return + * @arg DEV_ERROR error id + * @arg DEV_BUSY DMA process is ongoing + * @arg DEV_OK Operation is successful + */ +int dma_transfer(enum DMA_CH_T ch, void *src_addr, void *dst_addr, uint32_t size, drv_callback_t callback); + +/** + * @brief Stop the DMA transfer. + * + * @param[in] ch Specifies the DMA channel + * @param[in] callback Callback function provided by the user. + * @note If the dma channel is idle, this abort operation is a no-op and the callback function will not be called. + * @return + * @arg DEV_ERROR error id + * @arg DEV_OK Operation is successful + */ +int dma_abort(enum DMA_CH_T ch, drv_callback_t callback); + +/** + * @brief Force stop DMA transfer. + * + * @param[in] ch Specifies the DMA channel + * @param[in] callback Callback function provided by the user. + * @note This function will force clear any pending DMA interrupt requests. + */ +void dma_force_abort(enum DMA_CH_T ch, drv_callback_t callback); + +/** + * @brief Function for Interrupt handler for DMA. + */ +void DMA_IRQHandler(void); +/** + * @brief Function for return cndtr for DMA of uart1 rx. + */ +uint32_t get_uart1_dma_cndtr(void); +/** + * @brief Function for return cndtr for DMA of uart0 rx. + */ +uint32_t get_uart0_dma_cndtr(void); +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +#endif /* MK_DMA_H_ */ -- Gitblit v1.9.3