自己定义的底层寄存器地址
/*************************************************************************************************************
* 文件名 :hc32f46x_map.h
* 功能 :HC32F46X寄存器映射
* 作者 :cp1300@139.com
* 创建时间 :2021-06-10
* 最后修改时间:2021-06-10
* 详细:
*************************************************************************************************************/
#ifndef _HC32F46X_MAP_
#define _HC32F46X_MAP_
#include "typedef.h"
#include "hc32f46x.h"
//GPIO========================================================================================================
#define GPIO_BASE (0x40053800UL) //寄存器基址
#define GPIOA_BASE (GPIO_BASE + 0x0000)
#define GPIOB_BASE (GPIO_BASE + 0x0010)
#define GPIOC_BASE (GPIO_BASE + 0x0020)
#define GPIOD_BASE (GPIO_BASE + 0x0030)
#define GPIOE_BASE (GPIO_BASE + 0x0040)
#define GPIOH_BASE (GPIO_BASE + 0x0050)
//特殊寄存器
#define GPIO_SPCR *((vu16*)(GPIO_BASE+0x3F4))
//公共控制寄存器
#define GPIO_CCR *((vu16*)(GPIO_BASE+0x3F8))
//输入控制寄存器
#define GPIO_INAER *((vu16*)(GPIO_BASE+0x3FA))
//写保护
#define GPIO_WPR *((vu16*)(GPIO_BASE+0x3FC))
//通用控制寄存器
#define GPIO_CR_PA(n) *((vu16*)(GPIO_BASE+0x400+0x40*0+0x4*(n)))
#define GPIO_CR_PB(n) *((vu16*)(GPIO_BASE+0x400+0x40*1+0x4*(n)))
#define GPIO_CR_PC(n) *((vu16*)(GPIO_BASE+0x400+0x40*2+0x4*(n)))
#define GPIO_CR_PD(n) *((vu16*)(GPIO_BASE+0x400+0x40*3+0x4*(n)))
#define GPIO_CR_PE(n) *((vu16*)(GPIO_BASE+0x400+0x40*4+0x4*(n)))
#define GPIO_CR_PH(n) *((vu16*)(GPIO_BASE+0x400+0x40*5+0x4*(n)))
#define GPIO_CR_Px(group, n) *((vu16*)(GPIO_BASE+0x400+0x40*(group)+0x4*(n)))
//功能选择寄存器
#define GPIO_FSR_PA(n) *((vu16*)(GPIO_BASE+0x402+0x40*0+0x4*(n)))
#define GPIO_FSR_PB(n) *((vu16*)(GPIO_BASE+0x402+0x40*1+0x4*(n)))
#define GPIO_FSR_PC(n) *((vu16*)(GPIO_BASE+0x402+0x40*2+0x4*(n)))
#define GPIO_FSR_PD(n) *((vu16*)(GPIO_BASE+0x402+0x40*3+0x4*(n)))
#define GPIO_FSR_PE(n) *((vu16*)(GPIO_BASE+0x402+0x40*4+0x4*(n)))
#define GPIO_FSR_PH(n) *((vu16*)(GPIO_BASE+0x402+0x40*5+0x4*(n)))
#define GPIO_FSR_Px(group, n) *((vu16*)(GPIO_BASE+0x402+0x40*(group)+0x4*(n)))
//IO基本功能
typedef struct
{
vu16 IDR; //数据输入
u16 Reserved1;
vu16 ODR; //数据输出
vu16 OER; //输出使能
vu16 OSR; //输出置位,写1有效
vu16 ORR; //输出复位,写1有效
vu16 OTR; //输出翻转,写1有效
}GPIO_TypeDef;
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE)
#define SYS_GPIO_CONFIG_Unlock() {GPIO_WPR = 0xA501;} //IO配置解锁
#define SYS_GPIO_CONFIG_Lock() {GPIO_WPR = 0xA500;} //IO配置上锁
//FCM========================================================================================================
#define FCM_BASE (0x40048400UL) //寄存器基址
typedef struct
{
vu32 LVR; //FCM下限比较值寄存器
vu32 UVR; //FCM上限比较值寄存器
vu32 CNTR; //FCM计数器值寄存器
vu32 STR; //FCM开始停止寄存器
vu32 MCCR; //FCM测量对象控制寄存器
vu32 RCCR; //FCM测量基准控制寄存器
vu32 RIER; //FCM中断复位控制寄存器
vu32 SR; //FCM标志寄存器
vu32 CLR; //FCM标志位清除寄存器
}FCM_TypeDef;
#define FCM ((FCM_TypeDef *) FCM_BASE)
//CMU时钟控制器========================================================================================================
#define CMU_BASE (0x40054000UL) //寄存器基址
#define CMU_XTALCFGR *((vu8*)(CMU_BASE+0x410)) //CMU_XTAL配置寄存器
#define CMU_XTALSTBCR *((vu8*)(CMU_BASE+0x0A2)) //CMU_XTAL安定配置寄存器
#define CMU_XTALCR *((vu8*)(CMU_BASE+0x032)) //CMU_XTAL控制寄存器
#define CMU_XTALSTDCR *((vu8*)(CMU_BASE+0x040)) //CMU_XTAL振荡故障控制寄存器
#define CMU_XTALSTDSR *((vu8*)(CMU_BASE+0x041)) //CMU_XTAL振荡故障状态寄存器
#define CMU_HRCTRM *((vu8*)(CMU_BASE+0x062)) //CMU_HRC校准寄存器
#define CMU_HRCCR *((vu8*)(CMU_BASE+0x036)) //CMU_HRC控制寄存器
#define CMU_MRCTRM *((vu8*)(CMU_BASE+0x061)) //CMU_MRC校准寄存器
#define CMU_MRCCR *((vu8*)(CMU_BASE+0x038)) //CMU_MRC控制寄存器
#define CMU_PLLCFGR *((vu32*)(CMU_BASE+0x100)) //CMU_MPLL配置寄存器
#define CMU_PLLCR *((vu8*)(CMU_BASE+0x02A)) //CMU_MPLL控制寄存器
#define CMU_UPLLCFGR *((vu32*)(CMU_BASE+0x104)) //CMU_UPLL配置寄存器
#define CMU_UPLLCR *((vu8*)(CMU_BASE+0x02E)) //CMU_UPLL控制寄存器
#define CMU_OSCSTBSR *((vu8*)(CMU_BASE+0x03C)) //CMU_时钟源安定状态寄存器
#define CMU_CKSWR *((vu8*)(CMU_BASE+0x026)) //CMU_系统时钟源切换寄存器
#define CMU_SCFGR *((vu32*)(CMU_BASE+0x020)) //CMU_时钟分频配置寄存器
#define CMU_UFSCKCFGR *((vu8*)(CMU_BASE+0x024)) //CMU_USBFS时钟配置寄存器
#define CMU_PERICKSEL *((vu16*)(CMU_BASE+0x010)) //CMU_AD/TRNG时钟配置寄存器
#define CMU_TPIUCKCFGR *((vu8*)(CMU_BASE+0x03F)) //CMU_调试时钟配置寄存器
#define CMU_MCO1CFGR *((vu8*)(CMU_BASE+0x03D)) //CMU_MCO1时钟输出配置寄存器
#define CMU_MCO2CFGR *((vu8*)(CMU_BASE+0x03E)) //CMU_MCO2时钟输出配置寄存器
#define CMU_XTAL32CR *((vu8*)(CMU_BASE+0x420)) //CMU_XTAL32控制寄存器
#define CMU_XTALC32CFGR *((vu8*)(CMU_BASE+0x421)) //CMU_XTAL32配置寄存器
#define CMU_XTAL32NFR *((vu8*)(CMU_BASE+0x425)) //CMU_XTAL32滤波寄存器
#define CMU_LRCCR *((vu8*)(CMU_BASE+0x427)) //CMU_LRC控制寄存器
#define CMU_LRCTRM *((vu8*)(CMU_BASE+0x429)) //CMU_LRC校准寄存器
//PWC电源控制========================================================================================================
#define PWR_BASE1 (0x40054400UL) //寄存器基址
#define PWR_PWRC0 *((vu8*)(PWR_BASE1+0x00)) //电源模式控制寄存器 0
#define PWR_PWRC1 *((vu8*)(PWR_BASE1+0x01)) //电源模式控制寄存器 1
#define PWR_PWRC2 *((vu8*)(PWR_BASE1+0x02)) //电源模式控制寄存器 2
#define PWR_PWRC3 *((vu8*)(PWR_BASE1+0x03)) //电源模式控制寄存器 3
#define PWR_PDWKE0 *((vu8*)(PWR_BASE1+0x04)) //掉电唤醒使能寄存器 0
#define PWR_PDWKE1 *((vu8*)(PWR_BASE1+0x05)) //掉电唤醒使能寄存器 1
#define PWR_PDWKE2 *((vu8*)(PWR_BASE1+0x06)) //掉电唤醒使能寄存器 2
#define PWR_PDWKES *((vu8*)(PWR_BASE1+0x07)) //掉电唤醒事件边沿选择寄存器
#define PWR_PDWKF0 *((vu8*)(PWR_BASE1+0x08)) //掉电唤醒标志寄存器 0
#define PWR_PDWKF1 *((vu8*)(PWR_BASE1+0x09)) //掉电唤醒标志寄存器 1
#define PWR_PWCMR *((vu8*)(PWR_BASE1+0x0A)) //电源监测寄存器
#define PWR_MDSWCR *((vu8*)(PWR_BASE1+0x0F)) //模式切换控制寄存器
#define PWR_PVDCR0 *((vu8*)(PWR_BASE1+0x12)) //PVD控制寄存器 0
#define PWR_PVDCR1 *((vu8*)(PWR_BASE1+0x13)) //PVD控制寄存器 0
#define PWR_PVDFCR *((vu8*)(PWR_BASE1+0x14)) //PVD滤波控制寄存器
#define PWR_PVDLCR *((vu8*)(PWR_BASE1+0x15)) //PVD电平控制寄存器
#define PWR_XTAL32CS *((vu8*)(PWR_BASE1+0x2B)) //XTAL32电流 控制寄存器
#define PWR_BASE2 (0x40054000UL) //寄存器基址
#define PWR_STPMCR *((vu16*)(PWR_BASE2+0x0C)) //STOP模式唤醒控制寄存器
#define PWR_RAMPC0 *((vu32*)(PWR_BASE2+0x14)) //RAM功耗控制寄存器 0
#define PWR_RAMOPM *((vu16*)(PWR_BASE2+0x18)) //RAM运行条件寄存器
#define PWR_PVDICR *((vu8*)(PWR_BASE2+0xE0)) //PVD中断控制寄存器
#define PWR_PVDDSR *((vu8*)(PWR_BASE2+0xE1)) //PVD检测状态寄存器
#define PWR_FPRC *((vu16*)(PWR_BASE2+0x3FE)) //功能保护控制寄存器
#define PWR_BASE3 (0x4004C400UL) //寄存器基址
#define PWR_WKTCR *((vu16*)(PWR_BASE3+0x00)) //唤醒计时 器控制寄存器
#define PWR_BASE4 (0x40048000UL) //寄存器基址
#define PWR_FCG0 *((vu32*)(PWR_BASE4+0x00)) //功能时钟控制 0
#define PWR_FCG1 *((vu32*)(PWR_BASE4+0x04)) //功能时钟控制 1
#define PWR_FCG2 *((vu32*)(PWR_BASE4+0x08)) //功能时钟控制 2
#define PWR_FCG3 *((vu32*)(PWR_BASE4+0x0C)) //功能时钟控制 3
#define PWR_FCG0PC *((vu32*)(PWR_BASE4+0x10)) //PWR_FCG0保护控制
//时钟控制寄存器写保护位定义
//#define PWR_FPRCB3_PVD (1<<3) //PVD相关功能配置解锁
//#define PWR_FPRCB1_PWR (1<<1) //电源相关功能配置解锁
//#define PWR_FPRCB0_CLOCK (1<<0) //时钟相关功能配置解锁
//#define SYS_PWR_CONFIG_Unlock() {PWR_FCG0PC = 0xA5A50001;} //PWR寄存器配置解锁
//#define SYS_PWR_CONFIG_Lock() {PWR_FCG0PC = 0xA5A50000;} //PWR寄存器配置上锁
/*
FPRCB0控制:
CMU_XTALCFGR,CMU_XTALSTBCR,CMU_XTALCR,CMU_XTALSTDCR, CMU_XTALSTDSR,CMU_HRCTRM,CMU_HRCCR,CMU_MRCTRM, CMU_MRCCR,CMU_PLLCFGR,CMU_PLLCR,
CMU_UPLLCFGR, CMU_UPLLCR,CMU_OSCSTBSR,CMU_CKSWR,CMU_SCFGR, CMU_UFSCKCFGR, CMU_TPIUCKCFGR,CMU_MCO1CFGR,CMU_MCO2CFGR, CMU_XTAL32CR,
CMU_XTALC32CFGR,CMU_XTAL32NFR, CMU_LRCCR,CMU_LRCTRM PWR_XTAL32CS
FPRCB1控制:
PWR_PWRC0 PWR_PWRC1 PWR_PWRC2 PWR_PWRC3 PWR_PDWKE0 PWR_PDWKE1 PWR_PDWKE2 PWR_PDWKES PWR_PDWKF0 PWR_PDWKF1
PWR_PWCMR CMU_PERICKSEL, CMU_I2SCKSEL,PWR_MDSWCR PWR_STPMCR PWR_RAMPC0 PWR_RAMOPM RMU_RSTF0
FPRCB3控制:
PWR_PVDCR0 PWR_PVDCR1 PWR_PVDFCR PWR_PVDLCR PWR_PVDICR PWR_PVDDSR
*/
//时钟与电源寄存器解锁
//#define CMU_REG_UNLOCK(x) {PWR_FPRC = 0xA500|((x)&0xFF);}
//时钟与电源寄存器上锁
//#define CMU_REG_LOCK(x) (PWR_FPRC = 0xA500|(PWR_FPRC & (~(x))))
|