312 lines
11 KiB
C
312 lines
11 KiB
C
|
|
/******************************************************************************
|
|||
|
|
* 版权所有:苏州领慧立芯科技有限公司
|
|||
|
|
* Copyright (c) 2020-2025 Suzhou Legendsemi Technology Co., Ltd.
|
|||
|
|
******************************************************************************
|
|||
|
|
* All rights reserved. Distributed under MIT license.
|
|||
|
|
* The file is encoded in UTF-8 without signature.
|
|||
|
|
* @file lh32m0g3x_lhl_config.h
|
|||
|
|
* @version 2025-09-01
|
|||
|
|
******************************************************************************/
|
|||
|
|
|
|||
|
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
|||
|
|
#ifndef __LH32M0G3x_LHL_CONFIG_H
|
|||
|
|
#define __LH32M0G3x_LHL_CONFIG_H
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
extern "C" {
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
/* Includes ------------------------------------------------------------------*/
|
|||
|
|
#include <stdint.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <stdbool.h>
|
|||
|
|
#include <stdlib.h>
|
|||
|
|
#include <string.h>
|
|||
|
|
#include "lh32m0xx_lhl.h"
|
|||
|
|
#include "lh32m0g3x.h"
|
|||
|
|
|
|||
|
|
/* LHL Definition ------------------------------------------------------------*/
|
|||
|
|
#ifndef HSI_VALUE
|
|||
|
|
#define HSI_VALUE ((uint32_t)32000000) /* HSI */
|
|||
|
|
#endif
|
|||
|
|
#ifndef LSI_VALUE
|
|||
|
|
#define LSI_VALUE ((uint32_t)32000) /* LSI */
|
|||
|
|
#endif
|
|||
|
|
#ifndef LSE_VALUE
|
|||
|
|
#define LSE_VALUE ((uint32_t)32768) /* LSE */
|
|||
|
|
#endif
|
|||
|
|
#ifndef HSE_VALUE
|
|||
|
|
#define HSE_VALUE ((uint32_t)8000000) /* !!! HSE !!!需据设计更改外部时钟频率Hz */
|
|||
|
|
#endif
|
|||
|
|
#ifndef SYS_VALUE
|
|||
|
|
#define SYS_VALUE ((HSI_VALUE/2)/4) /* 上电启动时默认的SYSCLK时钟频率Hz */
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#define __NOTHING __ASM volatile("")
|
|||
|
|
|
|||
|
|
typedef enum {RESET = 0u, SET = 1u} FlagStatus, ITStatus;
|
|||
|
|
|
|||
|
|
typedef enum {DISABLE = 0u, ENABLE = 1u} FunctionalState;
|
|||
|
|
|
|||
|
|
typedef enum {ERROR = 0u, SUCCESS = 1u} ErrorStatus;
|
|||
|
|
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
LHL_OK = 0u, /* 设置成功 */
|
|||
|
|
LHL_ERROR, /* 内部超时、错误标志或错误参数等导致设置失败 */
|
|||
|
|
LHL_BUSY, /* 总线、寄存器标志、状态位等忙碌 */
|
|||
|
|
LHL_TIMEOUT, /* 通信、操作或者总线等超时 */
|
|||
|
|
} LHL_StatusTypeDef;
|
|||
|
|
|
|||
|
|
#define LHL_MAX_TIMEOUT 0xFFFFFFFFu
|
|||
|
|
#define LHL_LNG_TIMEOUT 0xFFFFFFu
|
|||
|
|
#define LHL_NRM_TIMEOUT 0xFFFFu
|
|||
|
|
#define LHL_MIN_TIMEOUT 0xFFu
|
|||
|
|
#define LHL_NOT_TIMEOUT 0x01u
|
|||
|
|
|
|||
|
|
#ifndef __UNUSED
|
|||
|
|
#define __UNUSED(X) (void)X /* To avoid gcc/g++ warnings */
|
|||
|
|
#endif /* UNUSED */
|
|||
|
|
|
|||
|
|
/* Bitmap操作宏 */
|
|||
|
|
#define BITMAP_SET(bits, pos) ((bits)[(pos) / 32] |= (1U << ((pos) % 32)))
|
|||
|
|
#define BITMAP_CLEAR(bits, pos) ((bits)[(pos) / 32] &= ~(1U << ((pos) % 32)))
|
|||
|
|
#define BITMAP_GET(bits, pos) (((bits)[(pos) / 32] >> ((pos) % 32)) & 1U)
|
|||
|
|
|
|||
|
|
|
|||
|
|
/* 环形缓冲区,支持最多256个数据 */
|
|||
|
|
typedef struct {
|
|||
|
|
uint8_t *data; // 缓冲区指针
|
|||
|
|
uint8_t size; // 缓冲区大小 (0-255)
|
|||
|
|
__RW uint8_t head; // 写入位置 (0-255)
|
|||
|
|
__RW uint8_t tail; // 读取位置 (0-255)
|
|||
|
|
__RW uint8_t count; // 已保存的数据数量
|
|||
|
|
} RingBufferTypeDef;
|
|||
|
|
|
|||
|
|
void LHL_RB_Init(RingBufferTypeDef *rb, uint8_t *buffer, uint8_t size);
|
|||
|
|
bool LHL_RB_Put(RingBufferTypeDef *rb, uint8_t byte);
|
|||
|
|
bool LHL_RB_Get(RingBufferTypeDef *rb, uint8_t *byte);
|
|||
|
|
bool LHL_RB_IsEmpty(RingBufferTypeDef *rb);
|
|||
|
|
bool LHL_RB_IsFull(RingBufferTypeDef *rb);
|
|||
|
|
uint8_t LHL_RB_GetCount(RingBufferTypeDef *rb);
|
|||
|
|
|
|||
|
|
/******************************************************************************
|
|||
|
|
*
|
|||
|
|
* @brief 编译器检测和配置 *
|
|||
|
|
*
|
|||
|
|
*****************************************************************************/
|
|||
|
|
#if defined(__ARMCC_VERSION)
|
|||
|
|
// ARM Compiler
|
|||
|
|
#if (__ARMCC_VERSION >= 6200000)//6190000 by xb 手动清除该警告
|
|||
|
|
// ARM Compiler 6.x
|
|||
|
|
#pragma GCC diagnostic ignored "-Wunsafe-buffer-usage"
|
|||
|
|
#else
|
|||
|
|
// ARM Compiler 5.x
|
|||
|
|
#endif
|
|||
|
|
#if (__ARMCC_VERSION >= 6010050)
|
|||
|
|
#define __LHL_DSB __DSB()
|
|||
|
|
#define __LHL_ISB __ISB()
|
|||
|
|
#else
|
|||
|
|
// AC5 - 宏需要额外分号
|
|||
|
|
#define __LHL_DSB __DSB();
|
|||
|
|
#define __LHL_ISB __ISB();
|
|||
|
|
#endif
|
|||
|
|
#elif defined(__GNUC__)
|
|||
|
|
// GNU Compiler
|
|||
|
|
#define __LHL_DSB __DSB()
|
|||
|
|
#define __LHL_ISB __ISB()
|
|||
|
|
#elif defined(__ICCARM__)
|
|||
|
|
// IAR Compiler
|
|||
|
|
#define __LHL_DSB __DSB()
|
|||
|
|
#define __LHL_ISB __ISB()
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#define __ALIGN(n) __attribute__((aligned(n)))
|
|||
|
|
|
|||
|
|
/******************************************************************************
|
|||
|
|
*
|
|||
|
|
* @brief Configuration of the Cortex-M0+ Processor and Core Peripherals *
|
|||
|
|
*
|
|||
|
|
*****************************************************************************/
|
|||
|
|
#define __CM0PLUS_REV 0 /*!< Core Revision r0p0 */
|
|||
|
|
#define __MPU_PRESENT 0 /*!< NO MPU */
|
|||
|
|
#define __VTOR_PRESENT 1 /*!< Vector Table Register supported */
|
|||
|
|
#define __NVIC_PRIO_BITS 2 /*!< LH32M0xx uses 2 Bits for the Priority Levels */
|
|||
|
|
#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */
|
|||
|
|
|
|||
|
|
#define LHL_MAX_DELAY (0xFFFFFFFFu)
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief Configuration of the System Tick Frequency and Priority
|
|||
|
|
*/
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
LHL_TICK_FREQ_10HZ = 100u,
|
|||
|
|
LHL_TICK_FREQ_100HZ = 10u,
|
|||
|
|
LHL_TICK_FREQ_1KHZ = 1u,
|
|||
|
|
LHL_TICK_FREQ_DEFAULT = LHL_TICK_FREQ_1KHZ /* 默认Systick时基1mS,可根据系统需要更改 */
|
|||
|
|
} LHL_TickFreqTypeDef;
|
|||
|
|
|
|||
|
|
typedef enum
|
|||
|
|
{
|
|||
|
|
LHL_TICK_PRIO_HIGHEST = 3u,
|
|||
|
|
LHL_TICK_PRIO_HIGH = 2u,
|
|||
|
|
LHL_TICK_PRIO_LOW = 1u,
|
|||
|
|
LHL_TICK_PRIO_LOWEST = 0u, /* Systick中断优先级设定 */
|
|||
|
|
} LHL_TickPrioTypeDef;
|
|||
|
|
|
|||
|
|
extern __RW uint32_t uTick;
|
|||
|
|
extern LHL_TickPrioTypeDef uTickPrio;
|
|||
|
|
extern LHL_TickFreqTypeDef uTickFreq;
|
|||
|
|
|
|||
|
|
void LHL_IncTick(void);
|
|||
|
|
uint32_t LHL_GetTick(void);
|
|||
|
|
uint32_t LHL_GetTickPrio(void);
|
|||
|
|
LHL_StatusTypeDef LHL_SetTickFreq(LHL_TickFreqTypeDef Freq);
|
|||
|
|
LHL_TickFreqTypeDef LHL_GetTickFreq(void);
|
|||
|
|
void LHL_SuspendTick(void);
|
|||
|
|
void LHL_ResumeTick(void);
|
|||
|
|
LHL_StatusTypeDef LHL_SysTick_Init(LHL_TickPrioTypeDef TickPriority);
|
|||
|
|
void LHL_SetTickReload(uint32_t systemclock);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief Interrupt Number Definition for NVIC
|
|||
|
|
*/
|
|||
|
|
typedef enum IRQn
|
|||
|
|
{
|
|||
|
|
/************ Cortex Core Processor Exceptions Number ********************/
|
|||
|
|
NonMaskableInt_IRQn = -14,
|
|||
|
|
HardFault_IRQn = -13,
|
|||
|
|
SVCall_IRQn = -5,
|
|||
|
|
PendSV_IRQn = -2,
|
|||
|
|
SysTick_IRQn = -1,
|
|||
|
|
/******* Device specific Interrupt Numbers ********************************/
|
|||
|
|
PVD_IRQn = 1,
|
|||
|
|
ADC_ERR_IRQn = 2,
|
|||
|
|
RTC_IRQn = 3,
|
|||
|
|
CROSSLINK_IRQn = 4,
|
|||
|
|
RCC_IRQn = 5,
|
|||
|
|
EXTI0_1_IRQn = 6,
|
|||
|
|
EXTI2_3_IRQn = 7,
|
|||
|
|
EXTI4_7_IRQn = 8,
|
|||
|
|
DMA1_CH0_IRQn = 9,
|
|||
|
|
DMA1_CH1_IRQn = 10,
|
|||
|
|
DMA1_CH2_CH3_IRQn = 11,
|
|||
|
|
SPI0_IRQn = 12,
|
|||
|
|
UART0_IRQn = 13,
|
|||
|
|
RTCAlarm_IRQn = 14,
|
|||
|
|
FLASH_IRQn = 15,
|
|||
|
|
MIO_IRQn = 16,
|
|||
|
|
SPI1_IRQn = 17,
|
|||
|
|
ADC0_IRQn = 18,
|
|||
|
|
ADC1_IRQn = 19,
|
|||
|
|
TIM5_IRQn = 20,
|
|||
|
|
UART1_IRQn = 21,
|
|||
|
|
TIM6_IRQn = 22,
|
|||
|
|
EXTI10_11_IRQn = 24,
|
|||
|
|
EXTI12_13_IRQn = 25,
|
|||
|
|
LPTIM2_IRQn = 26,
|
|||
|
|
TIM1_IRQn = 27,
|
|||
|
|
TIM2_IRQn = 28,
|
|||
|
|
LPTIM1_IRQn = 29,
|
|||
|
|
MACL_IRQn = 30,
|
|||
|
|
I2C1_EV_IRQn = 31,
|
|||
|
|
} IRQn_Type;
|
|||
|
|
|
|||
|
|
void NMI_Handler(void) __attribute__((noreturn));
|
|||
|
|
void HardFault_Handler(void) __attribute__((noreturn));
|
|||
|
|
void SVC_Handler(void);
|
|||
|
|
void PendSV_Handler(void);
|
|||
|
|
void SysTick_Handler(void);
|
|||
|
|
|
|||
|
|
void PVD_IRQHandler(void);
|
|||
|
|
void ADC_ERR_IRQHandler(void);
|
|||
|
|
void RTC_IRQHandler(void);
|
|||
|
|
void CROSSLINK_IRQHandler(void);
|
|||
|
|
void RCC_IRQHandler(void);
|
|||
|
|
void EXTI0_1_IRQHandler(void);
|
|||
|
|
void EXTI2_3_IRQHandler(void);
|
|||
|
|
void EXTI4_7_IRQHandler(void);
|
|||
|
|
void DMA1_CH0_IRQHandler(void);
|
|||
|
|
void DMA1_CH1_IRQHandler(void);
|
|||
|
|
void DMA1_CH2_3_IRQHandler(void);
|
|||
|
|
void SPI0_IRQHandler(void);
|
|||
|
|
void UART0_IRQHandler(void);
|
|||
|
|
void RTCAlarm_IRQHandler(void);
|
|||
|
|
void QSPI_IRQHandlern(void);
|
|||
|
|
void MIO_IRQHandler(void);
|
|||
|
|
void SPI1_IRQHandler(void);
|
|||
|
|
void ADC0_IRQHandler(void);
|
|||
|
|
void ADC1_IRQHandler(void);
|
|||
|
|
void TIM5_IRQHandler(void);
|
|||
|
|
void UART1_IRQHandler(void);
|
|||
|
|
void TIM6_IRQHandler(void);
|
|||
|
|
void EEPROM_IRQHandler(void);
|
|||
|
|
void EXTI10_11_IRQHandler(void);
|
|||
|
|
void EXTI12_13_IRQHandler(void);
|
|||
|
|
void LPTIM2_IRQHandler(void);
|
|||
|
|
void TIM1_IRQHandler(void);
|
|||
|
|
void TIM2_IRQHandler(void);
|
|||
|
|
void LPTIM1_IRQHandler(void);
|
|||
|
|
void MACL_IRQHandler(void);
|
|||
|
|
void I2C1_EV_IRQHandler(void);
|
|||
|
|
|
|||
|
|
#include <core_cm0plus.h> /* Cortex-M0+ processor and core peripherals */
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief System clock and timing and core contrl funcitons
|
|||
|
|
*/
|
|||
|
|
extern __RW uint32_t SystemCoreClock; /*!< System Clock (MCU Core) Frequency*/
|
|||
|
|
extern __RW uint8_t CoreClockShift;
|
|||
|
|
|
|||
|
|
extern void SystemInit(void);
|
|||
|
|
extern void SystemCoreClockUpdate(void);
|
|||
|
|
|
|||
|
|
void LHL_Delay(uint32_t mS);
|
|||
|
|
void LHL_Delay_uS(uint32_t uS);
|
|||
|
|
|
|||
|
|
/* Exported variables --------------------------------------------------------*/
|
|||
|
|
|
|||
|
|
/* Exported functions in lhl.c -----------------------------------------------*/
|
|||
|
|
uint8_t LHL_Get_PinPosition(uint16_t GPIO_Pin);
|
|||
|
|
uint8_t LHL_Get_ClockShift(uint32_t default_clock, uint32_t core_clock);
|
|||
|
|
|
|||
|
|
/* Periphral includes --------------------------------------------------------*/
|
|||
|
|
#ifdef USE_LHL_DRIVERS
|
|||
|
|
#include "sdk_mio_common.h"
|
|||
|
|
#include "lh32m0g3x_gpio.h"
|
|||
|
|
#include "lh32m0g3x_rcc.h"
|
|||
|
|
#include "lh32m0g3x_iwdg.h"
|
|||
|
|
#include "lh32m0g3x_uart.h"
|
|||
|
|
#include "lh32m0g3x_rtc.h"
|
|||
|
|
#include "lh32m0g3x_lptim.h"
|
|||
|
|
#include "lh32m0g3x_spi.h"
|
|||
|
|
#include "lh32m0g3x_mcal.h"
|
|||
|
|
#include "lh32m0g3x_exti.h"
|
|||
|
|
#include "lh32m0g3x_power.h"
|
|||
|
|
#include "lh32m0g3x_timer.h"
|
|||
|
|
#include "lh32m0g3x_i2c.h"
|
|||
|
|
#include "lh32m0g3x_dma.h"
|
|||
|
|
#include "lh32m0g3x_dmamux.h"
|
|||
|
|
#include "lh32m0g3x_dac.h"
|
|||
|
|
#include "lh32m0g3x_adc.h"
|
|||
|
|
#include "lh32m0g3x_flash.h"
|
|||
|
|
#include "lh32m0g3x_btim.h"
|
|||
|
|
#include "lh32m0g3x_eeprom.h"
|
|||
|
|
#include "lh32m0g3x_xlink.h"
|
|||
|
|
#include "lh32m0g3x_crc.h"
|
|||
|
|
#include "lh32m0g3x_mio.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef USE_LHL_OWI
|
|||
|
|
#include "lh32m0g3x_owi.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifdef __cplusplus
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
/*********************************End of File**********************************/
|