From fa9d906f1d4e149564986491da2c17816272b6cb Mon Sep 17 00:00:00 2001 From: "yuhuan.du" Date: Mon, 29 May 2023 20:46:43 +0800 Subject: [PATCH] [Add] add x2660 halley board configuration for Alios --- cpu/soc-x2600/include/x2600.h | 3 + .../include/x2600_hal_ost_core.h | 24 ++- .../include/x2600_hal_ost_global.h | 24 ++- drivers/drivers-x2600/include/x2600_ll_gpio.h | 47 ++++- .../drivers-x2600/include/x2600_ll_ost_core.h | 82 +++++--- .../include/x2600_ll_ost_global.h | 97 +++++---- drivers/drivers-x2600/src/x2600_hal.c | 194 ++++++++++++++++++ drivers/drivers-x2600/src/x2600_ll_ost_core.c | 90 +++++--- .../drivers-x2600/src/x2600_ll_ost_global.c | 90 +++++--- 9 files changed, 513 insertions(+), 138 deletions(-) create mode 100755 drivers/drivers-x2600/src/x2600_hal.c diff --git a/cpu/soc-x2600/include/x2600.h b/cpu/soc-x2600/include/x2600.h index 98519d32..a878ec46 100755 --- a/cpu/soc-x2600/include/x2600.h +++ b/cpu/soc-x2600/include/x2600.h @@ -148,8 +148,11 @@ extern "C" { #define CORE_OST1_Instance ((OST_CORE_TypeDef *) (CORE_OST1_BASE | 0xa0000000)) #define GLOBAL_OST_Instance ((OST_GLOBAL_TypeDef *) (GLOBAL_OST_BASE | 0xa0000000)) #define DMA_Instance ((PDMA_TypeDef *) (DMA_BASE | 0xa0000000)) +#define MCU_DMA_Instance ((PDMA_TypeDef *) (MCU_DMA_BASE | 0xa0000000)) #define RISC_CCU_Instance ((RISCV_CCU_TypeDef *) (RISC_CCU_BASE | 0xa0000000)) #define SADC_Instance ((SADC_TypeDef *) (SADC_BASE | 0xa0000000)) +#define TCU0_Instance ((TCU_TypeDef *) (TCU0_BASE | 0xa0000000)) +#define TCU1_Instance ((TCU_TypeDef *) (TCU1_BASE | 0xa0000000)) #define SFC_Instance ((SFC_TypeDef *) (SFC_BASE | 0xa0000000)) #define SSI0_Instance ((SSI_TypeDef *) (SSI0_BASE | 0xa0000000)) #define SSI1_Instance ((SSI_TypeDef *) (SSI1_BASE | 0xa0000000)) diff --git a/drivers/drivers-x2600/include/x2600_hal_ost_core.h b/drivers/drivers-x2600/include/x2600_hal_ost_core.h index 0f636c0a..25ca59f9 100755 --- a/drivers/drivers-x2600/include/x2600_hal_ost_core.h +++ b/drivers/drivers-x2600/include/x2600_hal_ost_core.h @@ -30,16 +30,30 @@ */ /* 1. 头文件 (Includes)----------------------------------------------- */ -//删除此行,添加内容 -//删除此行,添加内容 +#include "x2600_hal_def.h" /* 2. 导出的类型 (Exported Types)--------------------------------------- */ /** * @defgroup OST_CORE_exported_types OST_CORE 导出的类型 (Exported Types) * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +/** + * @brief OST Configuration Structure + */ +typedef struct { + //TODO: ADD here + //TODO: ADD here +} OST_CORE_InitTypeDef; + +/** + * @brief OST Handle Structure. + */ +typedef struct __OST_CORE_HandleTypeDef { + OST_CORE_TypeDef *Instance; /*!< OST register base address*/ + OST_CORE_InitTypeDef Init; /*!< parameters.*/ + //TODO: ADD more here or remove!! + //TODO: ADD more here or remove!! +} OST_CORE_HandleTypeDef; /** * @} diff --git a/drivers/drivers-x2600/include/x2600_hal_ost_global.h b/drivers/drivers-x2600/include/x2600_hal_ost_global.h index 5455f421..6952dc0c 100755 --- a/drivers/drivers-x2600/include/x2600_hal_ost_global.h +++ b/drivers/drivers-x2600/include/x2600_hal_ost_global.h @@ -30,16 +30,30 @@ */ /* 1. 头文件 (Includes)----------------------------------------------- */ -//删除此行,添加内容 -//删除此行,添加内容 +#include "x2600_hal_def.h" /* 2. 导出的类型 (Exported Types)--------------------------------------- */ /** * @defgroup OST_GLOBAL_exported_types OST_GLOBAL 导出的类型 (Exported Types) * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +/** + * @brief OST Configuration Structure + */ +typedef struct { + //TODO: ADD here + //TODO: ADD here +} OST_GLOBAL_InitTypeDef; + +/** + * @brief OST Handle Structure. + */ +typedef struct __OST_GLOBAL_HandleTypeDef { + OST_GLOBAL_TypeDef *Instance; /*!< OST register base address*/ + OST_GLOBAL_InitTypeDef Init; /*!< parameters.*/ + //TODO: ADD more here or remove!! + //TODO: ADD more here or remove!! +} OST_GLOBAL_HandleTypeDef; /** * @} diff --git a/drivers/drivers-x2600/include/x2600_ll_gpio.h b/drivers/drivers-x2600/include/x2600_ll_gpio.h index 93359348..ed2a11ac 100755 --- a/drivers/drivers-x2600/include/x2600_ll_gpio.h +++ b/drivers/drivers-x2600/include/x2600_ll_gpio.h @@ -89,6 +89,13 @@ enum gpio_port { #define GPIO_IRQ_PD(n) (3 * 32 + (n) + IRQ_GPIO_START) #define GPIO_IRQ_PE(n) (4 * 32 + (n) + IRQ_GPIO_START) +#ifdef CORE_RISCV +#define RISCV_ON 1 +#else +#define RISCV_ON 0 +#endif + + /** * @brief 设置GPIO管脚中断触发类型 * @param GPIOx 指向GPIO_TypeDef结构的GPIOx指针 @@ -104,11 +111,12 @@ static inline void LL_GPIO_setIrqMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_ uint32_t PAT1 = !!(Mode & (1 << 1)); uint32_t PAT0 = !!(Mode & (1 << 0)); - /* No Shadows registers for EDG, set registers directly */ +#ifdef CORE_RISCV + if (EDG == 1) { - WRITE_REG(GPIOx->PxEDGS, 1 << Pin); + WRITE_REG(GPIOx->PxEDGSS1, 1 << Pin); } else { - WRITE_REG(GPIOx->PxEDGC, 1 << Pin); + WRITE_REG(GPIOx->PxEDGCS1, 1 << Pin); } if (INT == 1) { @@ -133,6 +141,39 @@ static inline void LL_GPIO_setIrqMode(GPIO_TypeDef *GPIOx, uint32_t Pin, uint32_ WRITE_REG(GPIOx->PxMSKSS1, 1 << Pin); WRITE_REG(GPIOx->PxGLD1, 1); + +#else + + if (EDG == 1) { + WRITE_REG(GPIOx->PxEDGSS0, 1 << Pin); + } else { + WRITE_REG(GPIOx->PxEDGCS0, 1 << Pin); + } + + if (INT == 1) { + WRITE_REG(GPIOx->PxINTSS0, 1 << Pin); + } else { + WRITE_REG(GPIOx->PxINTCS0, 1 << Pin); + } + + if (PAT1 == 1) { + WRITE_REG(GPIOx->PxPAT1SS0, 1 << Pin); + } else { + WRITE_REG(GPIOx->PxPAT1CS0, 1 << Pin); + } + + if (PAT0 == 1) { + WRITE_REG(GPIOx->PxPAT0SS0, 1 << Pin); + } else { + WRITE_REG(GPIOx->PxPAT0CS0, 1 << Pin); + } + + // 默认一开始屏蔽中断 + WRITE_REG(GPIOx->PxMSKSS0, 1 << Pin); + + WRITE_REG(GPIOx->PxGLD0, 1); + +#endif } /** diff --git a/drivers/drivers-x2600/include/x2600_ll_ost_core.h b/drivers/drivers-x2600/include/x2600_ll_ost_core.h index daba76c8..2810fed0 100755 --- a/drivers/drivers-x2600/include/x2600_ll_ost_core.h +++ b/drivers/drivers-x2600/include/x2600_ll_ost_core.h @@ -30,16 +30,17 @@ */ /* 1. 头文件 (Includes)----------------------------------------------- */ -//删除此行,添加内容 -//删除此行,添加内容 +#include /* 2. 导出的类型 (Exported Types)--------------------------------------- */ /** * @defgroup OST_CORE_exported_types OST_CORE 导出的类型 (Exported Types) * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +typedef struct { + //TODO: ADD here + unsigned int ticks_per_second; +} LL_OST_CORE_InitTypeDef; /** * @} @@ -49,21 +50,24 @@ * @defgroup OST_CORE_exported_constants OST_CORE 导出的常量 Exported Constants * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +#define CLKSOURCE_DIV (4) +#define CLKEVENT_DIV (4) + +#define USEC_IN_1SEC 1000000 +#define MSEC_IN_1SEC 1000 /** * @} - */ + */ /* 4. 导出宏定义 Exported Macros --------------------------------------- */ /** * @defgroup OST_CORE_exported_macros OST_CORE 导出宏 Exported Macros * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +#define CYCLES_PER_US (SYSCLK_EXTAL / USEC_IN_1SEC / CLKSOURCE_DIV) +#define CYCLES_PER_MS (SYSCLK_EXTAL / MSEC_IN_1SEC / CLKSOURCE_DIV) /** * @} @@ -74,92 +78,108 @@ * @{ */ -// 删除此行, 添加内容 -// 删除此行, 添加内容 +void LL_OST_CORE_StructInit(LL_OST_CORE_InitTypeDef *SYS_OST_InitStruct); +ErrorStatus LL_OST_CORE_Init(OST_CORE_TypeDef *SYS_OST, LL_OST_CORE_InitTypeDef *SYS_OST_InitStruct); /** * @} - */ + */ /* 6. 导出变量申明 (Exported Variables) --------------------------------- */ /** * @defgroup OST_CORE_exported_var OST_CORE 导出变量申明 (Exported Variables) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 7. 私有类型定义 (Private Types) -------------------------------------- */ /** * @defgroup OST_CORE_private_types OST_CORE 私有类型定义 (Private Types) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 8. 私有常量定义Private Constants ------------------------------------- */ /** * @defgroup OST_CORE_private_constants OST_CORE 私有常量定义Private Constants * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 9. 私有宏定义 (Private Macros) -------------------------------------- */ /** * @defgroup OST_CORE_private_macros OST_CORE 私有宏定义 (Private Macros) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 10. 私有函数申明 (Private Funcs) ------------------------------------- */ /** * @defgroup OST_CORE_private_funcs OST_CORE 私有函数申明 (Private Funcs) * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 +static inline void LL_OST_CORE_Enable(OST_CORE_TypeDef *SYS_OST) +{ + WRITE_REG(SYS_OST->OSTER, OSTER_OSTEN); +} + +static inline void LL_OST_CORE_Disable(OST_CORE_TypeDef *SYS_OST) +{ + WRITE_REG(SYS_OST->OSTCR, OSTCR_OSTCLR); +} + +static inline uint32_t LL_OST_CORE_ReadCycle(OST_CORE_TypeDef *SYS_OST) +{ + return READ_REG(SYS_OST->OSTCNT); +} + +static inline void LL_OST_CORE_Clear_TFR_FFLAG(OST_CORE_TypeDef *SYS_OST) +{ + CLEAR_BIT(SYS_OST->OSTFR, OSTMR_FMASK); +} /** * @} - */ + */ /* 11. 私有变量申明 Private Variables ----------------------------------- */ /** * @defgroup OST_CORE_private_var OST_CORE 私有变量申明 (Private Variables) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /** * @} - */ + */ /** * @} - */ + */ #ifdef __cplusplus } #endif diff --git a/drivers/drivers-x2600/include/x2600_ll_ost_global.h b/drivers/drivers-x2600/include/x2600_ll_ost_global.h index b2817d32..597aa024 100755 --- a/drivers/drivers-x2600/include/x2600_ll_ost_global.h +++ b/drivers/drivers-x2600/include/x2600_ll_ost_global.h @@ -11,7 +11,7 @@ * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ - + #ifndef __X2600_LL_OST_GLOBAL_H__ #define __X2600_LL_OST_GLOBAL_H__ @@ -28,138 +28,163 @@ * @addtogroup g_X2600_OST_GLOBAL_LL_Driver OST_GLOBAL LL 驱动 * @{ */ - + /* 1. 头文件 (Includes)----------------------------------------------- */ -//删除此行,添加内容 -//删除此行,添加内容 +#include /* 2. 导出的类型 (Exported Types)--------------------------------------- */ /** * @defgroup OST_GLOBAL_exported_types OST_GLOBAL 导出的类型 (Exported Types) * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +typedef struct { + //TODO: ADD here + unsigned int ticks_per_second; +} LL_OST_GLOBAL_InitTypeDef; /** * @} - */ + */ /* 3. 导出常量定义 Exported Constants ----------------------------------- */ /** * @defgroup OST_GLOBAL_exported_constants OST_GLOBAL 导出的常量 Exported Constants * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +#define CLKSOURCE_DIV (4) +#define CLKEVENT_DIV (4) + +#define USEC_IN_1SEC 1000000 +#define MSEC_IN_1SEC 1000 /** * @} - */ + */ /* 4. 导出宏定义 Exported Macros --------------------------------------- */ /** * @defgroup OST_GLOBAL_exported_macros OST_GLOBAL 导出宏 Exported Macros * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +#define CYCLES_PER_US (SYSCLK_EXTAL / USEC_IN_1SEC / CLKSOURCE_DIV) +#define CYCLES_PER_MS (SYSCLK_EXTAL / MSEC_IN_1SEC / CLKSOURCE_DIV) /** * @} - */ + */ /* 5. 导出函数申明 Exported Funcs --------------------------------------- */ /** * @defgroup OST_GLOBAL_exported_funcs OST_GLOBAL 导出函数申明 Exported Funcs * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +void LL_OST_GLOBAL_StructInit(LL_OST_GLOBAL_InitTypeDef *SYS_OST_InitStruct); +ErrorStatus LL_OST_GLOBAL_Init(OST_GLOBAL_TypeDef *SYS_OST, LL_OST_GLOBAL_InitTypeDef *SYS_OST_InitStruct); /** * @} - */ + */ /* 6. 导出变量申明 (Exported Variables) --------------------------------- */ /** * @defgroup OST_GLOBAL_exported_var OST_GLOBAL 导出变量申明 (Exported Variables) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 7. 私有类型定义 (Private Types) -------------------------------------- */ /** * @defgroup OST_GLOBAL_private_types OST_GLOBAL 私有类型定义 (Private Types) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 8. 私有常量定义Private Constants ------------------------------------- */ /** * @defgroup OST_GLOBAL_private_constants OST_GLOBAL 私有常量定义Private Constants * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 9. 私有宏定义 (Private Macros) -------------------------------------- */ /** * @defgroup OST_GLOBAL_private_macros OST_GLOBAL 私有宏定义 (Private Macros) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 10. 私有函数申明 (Private Funcs) ------------------------------------- */ /** * @defgroup OST_GLOBAL_private_funcs OST_GLOBAL 私有函数申明 (Private Funcs) * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 +static inline void LL_OST_GLOBAL_Enable(OST_GLOBAL_TypeDef *SYS_OST) +{ + WRITE_REG(SYS_OST->OSTER, OSTER_OSTEN); +} + +static inline void LL_OST_GLOBAL_Disable(OST_GLOBAL_TypeDef *SYS_OST) +{ + WRITE_REG(SYS_OST->OSTCR, OSTCR_OSTCLR); +} + +static inline uint64_t LL_OST_GLOBAL_ReadCycle(OST_GLOBAL_TypeDef *SYS_OST) +{ + uint32_t low = READ_REG(SYS_OST->OSTCNTL); + uint32_t high = READ_REG(SYS_OST->OSTCNTH); + + return ((uint64_t)high << 32) | low; +} + +static inline void LL_OST_GLOBAL_Clear_TFR_FFLAG(OST_GLOBAL_TypeDef *SYS_OST) +{ +#if 0 + CLEAR_BIT(SYS_OST->OSTFR, OST1MR_FMASK); +#endif +} /** * @} - */ + */ /* 11. 私有变量申明 Private Variables ----------------------------------- */ /** * @defgroup OST_GLOBAL_private_var OST_GLOBAL 私有变量申明 (Private Variables) * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /** * @} - */ + */ /** * @} - */ + */ #ifdef __cplusplus } #endif diff --git a/drivers/drivers-x2600/src/x2600_hal.c b/drivers/drivers-x2600/src/x2600_hal.c new file mode 100755 index 00000000..07dab2c4 --- /dev/null +++ b/drivers/drivers-x2600/src/x2600_hal.c @@ -0,0 +1,194 @@ +/** + * @file x2600_hal.c + * @author MPU系统软件部团队 + * @brief Hal 库文件公共函数定义. + * + * @copyright 版权所有 (北京君正集成电路股份有限公司) {2022} + * @copyright Copyright© 2022 Ingenic Semiconductor Co.,Ltd + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + @verbatim + ============================================================================== + ##### 使用说明 ##### + ============================================================================== + [!!!!删除此内容,添加针对模块的使用方法说明,例如: 配置,启动/停止,状态,重点提醒等等.!!!!] + @endverbatim + */ + +/* 1.头文件 (Includes)------------------------------------------------ */ +#include +#include +#include +#include +/** @addtogroup g_X2600_HAL_Driver + * @{ + */ + +/* 2.私有常量定义Private Constants -------------------------------------- */ +/** + * @addtogroup HAL_private_constants + * @{ + */ + +// 删除此行, 添加内容 +// 删除此行, 添加内容 + +/** + * @} + */ +/* 3. 私有类型定义 (Private Types) -------------------------------------- */ +/** + * @addtogroup HAL_private_types + * @{ + */ + +// 删除此行, 添加内容 +// 删除此行, 添加内容 + +/** + * @} + */ +/* 4. 私有宏定义 (Private Macros) -------------------------------------- */ +/** + * @addtogroup HAL_private_macros + * @{ + */ + +// 删除此行, 添加内容 +// 删除此行, 添加内容 + +/** + * @} + */ +/* 5. 私有变量申明 Private Variables ------------------------------------ */ +/** + * @addtogroup HAL_private_var + * @{ + */ + +// 删除此行, 添加内容 +// 删除此行, 添加内容 + +/** + * @} + */ +/* 6. 私有函数申明 (Private Funcs) -------------------------------------- */ +/** + * @addtogroup HAL_private_funcs + * @{ + */ + +// 删除此行, 添加内容 +// 删除此行, 添加内容 + +/** + * @} + */ +/* 7. 私有函数实现 (Private Funcs) -------------------------------------- */ +/** + * @defgroup HAL_private_funcs_impl HAL 私有函数实现 + * @{ + */ + +// 删除此行, 添加内容 +// 删除此行, 添加内容 + +/** + * @} + */ +/* 8. 导出函数实现------------------------------------------------------- */ +/** + * @defgroup HAL_exported_funcs_impl HAL 导出函数实现 + * @{ + */ + +HAL_StatusTypeDef HAL_Init(void) +{ + return HAL_OK; +} + +HAL_StatusTypeDef HAL_DeInit(void) +{ + + return HAL_OK; +} + +HAL_StatusTypeDef HAL_InitTick(void) +{ + LL_OST_GLOBAL_InitTypeDef SYS_OST_InitStruct; + + LL_OST_GLOBAL_StructInit(&SYS_OST_InitStruct); + LL_OST_GLOBAL_Init(GLOBAL_OST_Instance, &SYS_OST_InitStruct); + return HAL_OK; +} + +/** + * @brief HAL_GetTick_Raw, 获取硬件的Tick(Cycle)数, + * + * @return uint64_t + */ +uint64_t HAL_GetTick_Raw(void) +{ + return LL_OST_GLOBAL_ReadCycle(GLOBAL_OST_Instance); +} + +void HAL_uDelay(uint32_t uDelay) +{ + uint64_t end = HAL_GetTick_Raw() + uDelay * CYCLES_PER_US; + + while (HAL_GetTick_Raw() < end); +} + +void HAL_Delay(uint32_t mDelay) +{ + while (mDelay--) { + HAL_uDelay(1000); + } +} + +/** + * @brief 与HAL_GetTick 功能相同,获取系统的Tick数,以ms为单位,兼容代码 + * + * @return uint64_t + */ +uint64_t HAL_GetTick_Ms(void) +{ + uint64_t cycles = LL_OST_GLOBAL_ReadCycle(GLOBAL_OST_Instance); + + do_div(cycles, CYCLES_PER_MS); + + return cycles; +} + +/** + * @brief HAL_GetTick, 获取系统的Tick 数,默认每个TICK 为 1 ms, 兼容代码 + * + * @return uint64_t + */ +uint64_t HAL_GetTick(void) +{ + return HAL_GetTick_Ms(); +} + + +/** + * @brief HAL_GetTick, 获取系统的Tick 数,每个Tick 为1ms/1us时间 + * + * @return uint64_t + */ +uint64_t HAL_GetTick_Us(void) +{ + uint64_t cycles = LL_OST_Global_ReadCycle(GLOBAL_OST_Instance); + + do_div(cycles, CYCLES_PER_US); + + return cycles; +} + + +/** + * @} + */ diff --git a/drivers/drivers-x2600/src/x2600_ll_ost_core.c b/drivers/drivers-x2600/src/x2600_ll_ost_core.c index f6d28eb8..534ed8c9 100755 --- a/drivers/drivers-x2600/src/x2600_ll_ost_core.c +++ b/drivers/drivers-x2600/src/x2600_ll_ost_core.c @@ -17,98 +17,130 @@ [!!!!删除此内容,添加针对模块的使用方法说明,例如: 配置,启动/停止,状态,重点提醒等等.!!!!] @endverbatim */ - -/* 1.头文件 (Includes)------------------------------------------------ */ +/* 1.头文件 (Includes)------------------------------------------------ */ +#include "x2600_hal.h" /** @addtogroup g_X2600_OST_CORE_LL_Driver * @{ */ - + /* 2.私有常量定义Private Constants -------------------------------------- */ /** - * @addtogroup OST_CORE_private_constants + * @addtogroup OST_CORE_private_constants * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 3. 私有类型定义 (Private Types) -------------------------------------- */ /** - * @addtogroup OST_CORE_private_types + * @addtogroup OST_CORE_private_types * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 4. 私有宏定义 (Private Macros) -------------------------------------- */ /** - * @addtogroup OST_CORE_private_macros + * @addtogroup OST_CORE_private_macros * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +#define PRESCALE_DIV(x) ({int n = 0; int d = (x); while(d) { d >>= 2; n++; }; (n-1);}) /** * @} - */ + */ /* 5. 私有变量申明 Private Variables ------------------------------------ */ /** - * @addtogroup OST_CORE_private_var + * @addtogroup OST_CORE_private_var * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 6. 私有函数申明 (Private Funcs) -------------------------------------- */ /** - * @addtogroup OST_CORE_private_funcs + * @addtogroup OST_CORE_private_funcs * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 7. 私有函数实现 (Private Funcs) -------------------------------------- */ /** * @defgroup OST_CORE_private_funcs_impl OST_CORE 私有函数实现 * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +static void LL_OST_CORE_SourceInit(OST_CORE_TypeDef *SYS_OST) +{ +#if 0 + MODIFY_REG(SYS_OST->OSTCCR, OSTCCR_PRESCALE_Msk, PRESCALE_DIV(CLKSOURCE_DIV) << OSTCCR_PRESCALE_Pos); + + WRITE_REG(SYS_OST->OSTCR, OSTCR_OSTCLR); +#endif +} + +static void LL_OST_CORE_EventInit(OST_CORE_TypeDef *SYS_OST, int ticks_per_second) +{ + unsigned int ticks_us = 1000000 / ticks_per_second; + unsigned int count = ticks_us * CYCLES_PER_US; + + MODIFY_REG(SYS_OST->OSTCCR, OSTCCR_PRESCALE_Msk, PRESCALE_DIV(CLKSOURCE_DIV) << OSTCCR_PRESCALE_Pos); + + WRITE_REG(SYS_OST->OSTDFR, count); + + WRITE_REG(SYS_OST->OSTCR, OSTCR_OSTCLR); + + CLEAR_BIT(SYS_OST->OSTMR, OSTMR_FMASK_0); +} /** * @} - */ + */ /* 8. 导出函数实现------------------------------------------------------- */ /** * @defgroup OST_CORE_exported_funcs_impl OST_CORE 导出函数实现 * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +void LL_OST_CORE_StructInit(LL_OST_CORE_InitTypeDef *SYS_OST_InitStruct) +{ + SYS_OST_InitStruct->ticks_per_second = 100; //默认100Hz +} + +ErrorStatus LL_OST_CORE_Init(OST_CORE_TypeDef *SYS_OST, LL_OST_CORE_InitTypeDef *SYS_OST_InitStruct) +{ + + LL_OST_CORE_SourceInit(SYS_OST); + + LL_OST_CORE_EventInit(SYS_OST, SYS_OST_InitStruct->ticks_per_second); + + LL_OST_CORE_Enable(SYS_OST); + return SUCCESS; +} /** * @} - */ + */ /** * @} - */ + */ diff --git a/drivers/drivers-x2600/src/x2600_ll_ost_global.c b/drivers/drivers-x2600/src/x2600_ll_ost_global.c index 7e90c332..c50131da 100755 --- a/drivers/drivers-x2600/src/x2600_ll_ost_global.c +++ b/drivers/drivers-x2600/src/x2600_ll_ost_global.c @@ -17,98 +17,130 @@ [!!!!删除此内容,添加针对模块的使用方法说明,例如: 配置,启动/停止,状态,重点提醒等等.!!!!] @endverbatim */ - -/* 1.头文件 (Includes)------------------------------------------------ */ +/* 1.头文件 (Includes)------------------------------------------------ */ +#include "x2600_hal.h" /** @addtogroup g_X2600_OST_GLOBAL_LL_Driver * @{ */ - + /* 2.私有常量定义Private Constants -------------------------------------- */ /** - * @addtogroup OST_GLOBAL_private_constants + * @addtogroup OST_GLOBAL_private_constants * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 3. 私有类型定义 (Private Types) -------------------------------------- */ /** - * @addtogroup OST_GLOBAL_private_types + * @addtogroup OST_GLOBAL_private_types * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 4. 私有宏定义 (Private Macros) -------------------------------------- */ /** - * @addtogroup OST_GLOBAL_private_macros + * @addtogroup OST_GLOBAL_private_macros * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +#define PRESCALE_DIV(x) ({int n = 0; int d = (x); while(d) { d >>= 2; n++; }; (n-1);}) /** * @} - */ + */ /* 5. 私有变量申明 Private Variables ------------------------------------ */ /** - * @addtogroup OST_GLOBAL_private_var + * @addtogroup OST_GLOBAL_private_var * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 6. 私有函数申明 (Private Funcs) -------------------------------------- */ /** - * @addtogroup OST_GLOBAL_private_funcs + * @addtogroup OST_GLOBAL_private_funcs * @{ */ - + // 删除此行, 添加内容 // 删除此行, 添加内容 /** * @} - */ + */ /* 7. 私有函数实现 (Private Funcs) -------------------------------------- */ /** * @defgroup OST_GLOBAL_private_funcs_impl OST_GLOBAL 私有函数实现 * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +static void LL_OST_GLOBAL_SourceInit(OST_GLOBAL_TypeDef *SYS_OST) +{ + MODIFY_REG(SYS_OST->OSTCCR, OSTCCR_PRESCALE_0, PRESCALE_DIV(CLKSOURCE_DIV) << OSTCCR_PRESCALE_Pos); + + WRITE_REG(SYS_OST->OSTCR, OSTCR_OSTCLR); +} + +static void LL_OST_GLOBAL_EventInit(OST_GLOBAL_TypeDef *SYS_OST, int ticks_per_second) +{ +#if 0 + unsigned int ticks_us = 1000000 / ticks_per_second; + unsigned int count = ticks_us * CYCLES_PER_US; + + MODIFY_REG(SYS_OST->OSTCCR, OSTCCR_PRESCALE1_Msk, PRESCALE_DIV(CLKSOURCE_DIV) << OSTCCR_PRESCALE1_Pos); + + WRITE_REG(SYS_OST->OST1DFR, count); + + WRITE_REG(SYS_OST->OSTCR, OSTCR_OST1CLR); + + CLEAR_BIT(SYS_OST->OSTMR, OST1MR_FMASK_0); +#endif +} /** * @} - */ + */ /* 8. 导出函数实现------------------------------------------------------- */ /** * @defgroup OST_GLOBAL_exported_funcs_impl OST_GLOBAL 导出函数实现 * @{ */ - -// 删除此行, 添加内容 -// 删除此行, 添加内容 + +void LL_OST_GLOBAL_StructInit(LL_OST_GLOBAL_InitTypeDef *SYS_OST_InitStruct) +{ + SYS_OST_InitStruct->ticks_per_second = 100; //默认100Hz +} + +ErrorStatus LL_OST_GLOBAL_Init(OST_GLOBAL_TypeDef *SYS_OST, LL_OST_GLOBAL_InitTypeDef *SYS_OST_InitStruct) +{ + + LL_OST_GLOBAL_SourceInit(SYS_OST); + + LL_OST_GLOBAL_EventInit(SYS_OST, SYS_OST_InitStruct->ticks_per_second); + + LL_OST_GLOBAL_Enable(SYS_OST); + return SUCCESS; +} /** * @} - */ + */ /** * @} - */ + */ -- Gitee