164 lines
3.2 KiB
C
164 lines
3.2 KiB
C
|
/**
|
||
|
*********************************************************************************
|
||
|
*
|
||
|
* @file utils.h
|
||
|
* @brief This file contains the Utilities functions/types for the driver.
|
||
|
*
|
||
|
* @version V1.0
|
||
|
* @date 07 Nov 2017
|
||
|
* @author AE Team
|
||
|
* @note
|
||
|
*
|
||
|
* Copyright (C) Shanghai Eastsoft Microelectronics Co. Ltd. All rights reserved.
|
||
|
*
|
||
|
*********************************************************************************
|
||
|
*/
|
||
|
|
||
|
#ifndef __UTILS_H__
|
||
|
#define __UTILS_H__
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include <stdlib.h>
|
||
|
#include "ald_conf.h"
|
||
|
#include "type.h"
|
||
|
#include "es32f065x.h"
|
||
|
|
||
|
|
||
|
/** @addtogroup ES32FXXX_ALD
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup UTILS
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @defgroup ALD_Public_Types Public Types
|
||
|
* @{
|
||
|
*/
|
||
|
/**
|
||
|
* @brief SysTick interval
|
||
|
*/
|
||
|
extern uint32_t __systick_interval;
|
||
|
|
||
|
/**
|
||
|
* @brief ALD Status structures definition
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
OK = 0x0,
|
||
|
ERROR = 0x1,
|
||
|
BUSY = 0x2,
|
||
|
TIMEOUT = 0x3
|
||
|
} ald_status_t;
|
||
|
|
||
|
/**
|
||
|
* @brief SysTick interval definition
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
SYSTICK_INTERVAL_1MS = 1000, /**< Interval is 1ms */
|
||
|
SYSTICK_INTERVAL_10MS = 100, /**< Interval is 10ms */
|
||
|
SYSTICK_INTERVAL_100MS = 10, /**< Interval is 100ms */
|
||
|
SYSTICK_INTERVAL_1000MS = 1, /**< Interval is 1s */
|
||
|
} systick_interval_t;
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup ALD_Public_Macros Public Macros
|
||
|
* @{
|
||
|
*/
|
||
|
#define ALD_MAX_DELAY 0xFFFFFFFF
|
||
|
|
||
|
#define IS_BIT_SET(reg, bit) (((reg) & (bit)) != RESET)
|
||
|
#define IS_BIT_CLR(reg, bit) (((reg) & (bit)) == RESET)
|
||
|
#define RESET_HANDLE_STATE(x) ((x)->state = 0)
|
||
|
#define __LOCK(x) \
|
||
|
do { \
|
||
|
if ((x)->lock == LOCK) { \
|
||
|
return BUSY; \
|
||
|
} \
|
||
|
else { \
|
||
|
(x)->lock = LOCK; \
|
||
|
} \
|
||
|
} while (0)
|
||
|
|
||
|
#define __UNLOCK(x) \
|
||
|
do { \
|
||
|
(x)->lock = UNLOCK; \
|
||
|
} while (0)
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup ALD_Private_Macros Private Macros
|
||
|
* @{
|
||
|
*/
|
||
|
#define IS_PRIO(x) ((x) < 4)
|
||
|
#define IS_SYSTICK_INTERVAL(x) (((x) == SYSTICK_INTERVAL_1MS) || \
|
||
|
((x) == SYSTICK_INTERVAL_10MS) || \
|
||
|
((x) == SYSTICK_INTERVAL_100MS) || \
|
||
|
((x) == SYSTICK_INTERVAL_1000MS))
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup ALD_Public_Functions
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup ALD_Public_Functions_Group1
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/* Initialization functions */
|
||
|
void mcu_ald_init(void);
|
||
|
void __init_tick(uint32_t prio);
|
||
|
void systick_interval_select(systick_interval_t value);
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @addtogroup ALD_Public_Functions_Group2
|
||
|
* @{
|
||
|
*/
|
||
|
/* Peripheral Control functions */
|
||
|
void __inc_tick(void);
|
||
|
void __delay_ms(__IO uint32_t delay);
|
||
|
uint32_t __get_tick(void);
|
||
|
void __suspend_tick(void);
|
||
|
void __resume_tick(void);
|
||
|
void systick_irq_cbk(void);
|
||
|
uint32_t get_ald_version(void);
|
||
|
ald_status_t __wait_flag(uint32_t *reg, uint32_t bit, flag_status_t status, uint32_t timeout);
|
||
|
void mcu_irq_config(IRQn_Type irq, uint8_t prio, type_func_t status);
|
||
|
uint32_t mcu_get_tick(void);
|
||
|
uint32_t mcu_get_cpu_id(void);
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __UTILS_H__ */
|