arduino_midi_player/Midi/music-box-nv32-master/nv32lib/drivers/PMC/pmc.h
2025-03-24 14:30:56 +08:00

299 lines
8.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
*
* @brief PMC 驱动头文件.
*
******************************************************************************/
#ifndef PMC_H_
#define PMC_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "common.h"
/******************************************************************************
* PCM系统MCU工作模式模式定义
*
*******************************************************************************/
#define PmcModeRun 0 /*!< 运行模式 */
#define PmcModeWait 1 /*!< 等到模式 */
#define PmcModeStop4 2 /*!< 停止模式4 */
#define PmcModeStop3 3 /*!< 停止模式3 */
/******************************************************************************
* PMC 低压检测和低压报警电压定义
*
*******************************************************************************/
#define PmcLVDTrip_Low 0 /*!< LVD 低电平调变点 */
#define PmcLVDTrip_High 1 /*!< LVD 高电平调变点 */
#define PmcLVWTrip_Low 0 /*!< LVW 低电平跳变点 */
#define PmcLVWTrip_Mid1 1 /*!< LVW 中间电平1跳变点 */
#define PmcLVWTrip_Mid2 2 /*!< LVW 中间电平2跳变点*/
#define PmcLVWTrip_High 3 /*!< LVW 高电平跳变点*/
/******************************************************************************
* PMC 控制结构体
*******************************************************************************/
/*!
* @brief PMC控制结构体类型
*
*/
typedef union
{
uint8_t byte; /*!< 联合体的类型-字节*/
struct
{
uint8_t bBandgapEn :1; /*!< 使能带隙缓冲区 */
uint8_t bBandgapDrv :1; /*!< 选择带隙驱动*/
uint8_t bLvdEn :1; /*!< 使能低压检测*/
uint8_t bLvdStopEn :1; /*!< 低压检测在停止模式下使能*/
uint8_t bLvdRstEn :1; /*!< 使能低压检测复位 */
uint8_t bLvwIrqEn :1; /*!< 使能低压报警中断 */
uint8_t bLvwAck :1; /*!< 低压报警应答 */
uint8_t bLvwFlag :1; /*!< 低压报警标志 */
}bits; /*!< 联合体类型-位 */
}PMC_Ctrl1Type, *PMC_Ctrl1Ptr; /*!< PMC 控制寄存器1结构体 */
/******************************************************************************
* PMC 控制-- 低压选择.
*******************************************************************************/
/*!
* @brief PMC 控制-- 电压类型选择.
*
*/
typedef union
{
uint8_t byte; /*!< 联合体类型-字节 */
struct
{
uint8_t :4; /*!< none */
uint8_t bLVWV :2; /*!< 低压报警电压选择 */
uint8_t bLVDV :1; /*!< 低压复位电压选择 */
uint8_t :1; /*!< none */
}bits; /*!< 结构体类型——位 */
}PMC_Ctrl2Type, *PMC_Ctrl2Ptr; /*!< PMC 控制寄存器2结构体*/
/******************************************************************************
* PMC 配置结构体
*******************************************************************************/
typedef struct
{
PMC_Ctrl1Type sCtrlstatus; /*!< PMC 控制和状态 */
PMC_Ctrl2Type sDetectVoltSelect; /*!< 低压报警电压和低压复位电压选择*/
}PMC_ConfigType, *PMC_ConfigPtr; /*!< PMC 配置结构体 */
/*****************************************************************************//*!
*
* @brief 在停止模式下使能低压检测.
*
* @param[in] pPMC 指向PMC模块
*
* @return none.
*
* @see PMC_DisableLVDInStopMode.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVDInStopMode(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVDSE_MASK;
}
/*****************************************************************************//*!
*
* @brief 在停止模式下禁用低压检测
*
* @param[in] pPMC 指向PMC模块
*
* @return none.
*
* @see PMC_EnableLVDInStopMode.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVDInStopMode(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVDSE_MASK;
}
/*****************************************************************************//*!
*
* @brief 使能低压检测复位 注: 复位后该字段仅可写一次
*
* @param[in] pPMC 指向PMC模块.
*
* @return none.
*
* @see PMC_DisableLVDRst.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVDRst(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVDRE_MASK;
}
/*****************************************************************************//*!
*
* @brief 禁用低压检测复位 注: 复位后该字段仅可写一次
*
* @param[in] pPMC 指向PMC模块
*
* @return none.
*
* @see PMC_EnableLVDRst.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVDRst(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVDRE_MASK;
}
/*****************************************************************************//*!
*
* @brief 使能低压检测, 注: 复位后该字段仅可写一次
*
* @param[in] pPMC 指向PMC模块
*
* @return none.
*
* @see PMC_DisableLVD.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVD(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVDE_MASK;
}
/*****************************************************************************//*!
*
* @brief 禁用低压检测, 注: 复位后该字段仅可写一次
*
* @param[in] pPMC 指向PMC模块
*
* @return none.
*
* @see PMC_EnableLVD.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVD(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVDE_MASK;
}
/*****************************************************************************//*!
*
* @brief 设置低压检测跳变点,
*
* @param[in] pPMC 指向PMC模块
* @param[in] Trippoint 电压检测跳变点选择1-高电平跳变 0-低电平跳变
*
* @return none.
*
* @see PMC_SetLVWTripVolt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_SetLVDTripVolt(PMC_Type *pPMC, uint8_t Trippoint)
{
if(Trippoint)
pPMC->SPMSC2 |= PMC_SPMSC2_LVDV_MASK;
else
pPMC->SPMSC2 &= ~PMC_SPMSC2_LVDV_MASK;
}
/*****************************************************************************//*!
*
* @brief 选择电压报警跳变点电压
*
* @param[in] pPMC 指向PMC模块
* @param[in] Trippoint 低压报警跳变点电压 0 低电平跳变 1 中间电平1跳变
* 2 中间电平2跳变 3 高电平跳变
*
* @return none.
*
* @see PMC_SetLVDTripVolt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_SetLVWTripVolt(PMC_Type *pPMC, uint8_t Trippoint)
{
pPMC->SPMSC2 &= ~PMC_SPMSC2_LVWV_MASK;
pPMC->SPMSC2 |= PMC_SPMSC2_LVWV(Trippoint);
}
/*****************************************************************************//*!
*
* @brief 使能低压报警中断
*
* @param[in] pPMC 指向PMC模块
*
* @return none.
*
* @see PMC_DisableLVWInterrupt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_EnableLVWInterrupt(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVWIE_MASK;
}
/*****************************************************************************//*!
*
* @brief 禁用低压报警中断
*
* @param[in] pPMC 指向PMC模块.
*
* @return none.
*
*
* @see PMC_EnableLVWInterrupt.
*
*****************************************************************************/
__STATIC_INLINE void PMC_DisableLVWInterrupt(PMC_Type *pPMC)
{
pPMC->SPMSC1 &= ~PMC_SPMSC1_LVWIE_MASK;
}
/*****************************************************************************//*!
*
* @brief 读取低压报警标志位.
*
* @param[in] pPMC 指向PMC模块.
*
* @return 低压报警标志位值
*
* @see PMC_ClrLVWFlag.
*
*****************************************************************************/
__STATIC_INLINE uint8_t PMC_GetLVWFlag(PMC_Type *pPMC)
{
return (pPMC->SPMSC1 & PMC_SPMSC1_LVWF_MASK);
}
/*****************************************************************************//*!
*
* @brief 清除低压报警标志位
*
* @param[in] pPMC 指向PMC模块.
*
* @return none.
*
* @see PMC_GetLVWFlag.
*
*****************************************************************************/
__STATIC_INLINE void PMC_ClrLVWFlag(PMC_Type *pPMC)
{
pPMC->SPMSC1 |= PMC_SPMSC1_LVWACK_MASK;
}
/**************************************************************************/
void PMC_Init(PMC_Type *pPMC, PMC_ConfigType *pPMC_Config);
void PMC_DeInit(PMC_Type *pPMC);
void PMC_SetMode(PMC_Type *pPMC,uint8_t u8PmcMode);
#ifdef __cplusplus
}
#endif
#endif