本帖最后由 hotpower 于 2010-10-22 23:48 编辑
/*--------------------------------------------------------------------------
文 件 名 : NUC1xxcfg.h
创 建 人 : Cortex-M0菜鸟HotPower@163.com
创 建 日 期 : 2010.10.18 18:18
最近修改日期 : 2010.10.22 23:38
创 建 地 点 : 西安大雁塔村队部
版 本 号 : V1.03 (红杏版)
修 改 原 因 :
说 明 :
备 注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
将本文件拷贝到...\NUC1xxBSP\CMSIS\CM0内。
-------------------------------------------------------------------------------*/
#ifndef __NUC1xxcfg_H__
#define __NUC1xxcfg_H__
#ifdef __cplusplus
extern "C" {
#endif
#if defined (__CC_ARM)
#pragma anon_unions
#endif
typedef volatile unsigned int NU_REG;// Hardware register definition
#define __noinit__ __attribute__((zero_init))//变量不初始化为0
typedef enum
{
__0 = (NU_REG)0,
__1 = (NU_REG)1,
__2 = (NU_REG)2,
__3 = (NU_REG)3,
__4 = (NU_REG)4,
__5 = (NU_REG)5,
__6 = (NU_REG)6,
__7 = (NU_REG)7,
__8 = (NU_REG)8,
__9 = (NU_REG)9,
__10 = (NU_REG)10,
__11 = (NU_REG)11,
__12 = (NU_REG)12,
__13 = (NU_REG)13,
__14 = (NU_REG)14,
__15 = (NU_REG)15,
__16 = (NU_REG)16,
__17 = (NU_REG)17,
__18 = (NU_REG)18,
__19 = (NU_REG)19,
__20 = (NU_REG)20,
__21 = (NU_REG)21,
__22 = (NU_REG)22,
__23 = (NU_REG)23,
__24 = (NU_REG)24,
__25 = (NU_REG)25,
__26 = (NU_REG)26,
__27 = (NU_REG)27,
__28 = (NU_REG)28,
__29 = (NU_REG)29,
__30 = (NU_REG)30,
__31 = (NU_REG)31
}Number_enum;
typedef volatile struct
{
NU_REG Bit0: 1;
NU_REG Bit1: 1;
NU_REG Bit2: 1;
NU_REG Bit3: 1;
NU_REG Bit4: 1;
NU_REG Bit5: 1;
NU_REG Bit6: 1;
NU_REG Bit7: 1;
NU_REG Bit8: 1;
NU_REG Bit9: 1;
NU_REG Bit10: 1;
NU_REG Bit11: 1;
NU_REG Bit12: 1;
NU_REG Bit13: 1;
NU_REG Bit14: 1;
NU_REG Bit15: 1;
NU_REG Bit16: 1;
NU_REG Bit17: 1;
NU_REG Bit18: 1;
NU_REG Bit19: 1;
NU_REG Bit20: 1;
NU_REG Bit21: 1;
NU_REG Bit22: 1;
NU_REG Bit23: 1;
NU_REG Bit24: 1;
NU_REG Bit25: 1;
NU_REG Bit26: 1;
NU_REG Bit27: 1;
NU_REG Bit28: 1;
NU_REG Bit29: 1;
NU_REG Bit30: 1;
NU_REG Bit31: 1;
}NU_BITs;
//===============================================//
typedef volatile struct
{
NU_REG Pin0: 1;
NU_REG Pin1: 1;
NU_REG Pin2: 1;
NU_REG Pin3: 1;
NU_REG Pin4: 1;
NU_REG Pin5: 1;
NU_REG Pin6: 1;
NU_REG Pin7: 1;
NU_REG Pin8: 1;
NU_REG Pin9: 1;
NU_REG Pin10: 1;
NU_REG Pin11: 1;
NU_REG Pin12: 1;
NU_REG Pin13: 1;
NU_REG Pin14: 1;
NU_REG Pin15: 1;
NU_REG Pin16: 1;
NU_REG Pin17: 1;
NU_REG Pin18: 1;
NU_REG Pin19: 1;
NU_REG Pin20: 1;
NU_REG Pin21: 1;
NU_REG Pin22: 1;
NU_REG Pin23: 1;
NU_REG Pin24: 1;
NU_REG Pin25: 1;
NU_REG Pin26: 1;
NU_REG Pin27: 1;
NU_REG Pin28: 1;
NU_REG Pin29: 1;
NU_REG Pin30: 1;
NU_REG Pin31: 1;
}NU_PINs;
//============================================
typedef volatile union
{
__IO NU_REG Regs;
__IO NU_BITs Bits;
}NU_REG_BITs;
typedef volatile union
{
__IO NU_REG Regs;
__IO NU_PINs Bits;
}NU_REG_PINs;
typedef struct
{
__IO NU_REG RESERVED:16;
__IO NU_REG OFFD0:1;
__IO NU_REG OFFD1:1;
__IO NU_REG OFFD2:1;
__IO NU_REG OFFD3:1;
__IO NU_REG OFFD4:1;
__IO NU_REG OFFD5:1;
__IO NU_REG OFFD6:1;
__IO NU_REG OFFD7:1;
__IO NU_REG OFFD8:1;
__IO NU_REG OFFD9:1;
__IO NU_REG OFFD10:1;
__IO NU_REG OFFD11:1;
__IO NU_REG OFFD12:1;
__IO NU_REG OFFD13:1;
__IO NU_REG OFFD14:1;
__IO NU_REG OFFD15:1;
} NU_GPIO_OFFD;
typedef volatile union
{
NU_REG Regs;
GPIO_PMD_T Bits;
}NU_GPIO_PMD_T;
typedef volatile union
{
NU_REG Regs;
NU_GPIO_OFFD Bits;
}NU_GPIO_OFFD_T;
//----------------------------------------------------//
//改造GPIO为结构(不占用空间)
typedef struct
{
NU_GPIO_PMD_T PMD;//模式控制(0输入1输出2开漏3准双向)
NU_GPIO_OFFD_T OFFD;//数字使能(高16位)
NU_REG_PINs DOUT;//数据输出值(低16位)
NU_REG_PINs DMASK;//数据输出写屏蔽
NU_REG_PINs PIN;//管脚数值(低16位)
NU_REG_PINs DBEN;//防反弹使能
NU_REG_PINs IMD;//中断模式控制(0边沿触发中断1电平触发中断)
NU_REG_BITs IEN;//中断使能(高16位上升沿或高电平,低16位下降沿或低电平)
NU_REG_PINs ISRC;//中断源标志
NU_REG RESERVED[7];//保留,为了构造GPIO结构数组
} NU_GPIO_T;
typedef struct {
union {
__IO NU_GPIO_T Px[5];//GPIOs.Px[0].DOUT.Regs |= 1;GPIOs.Px[0].DOUT.Bits.Pin0 = 1;
struct {
__IO NU_GPIO_T PA;//GPIOs.PA.DOUT.Regs |=1;GPIOs.PA.DOUT.Bits.Pin0=1;
__IO NU_GPIO_T PB;//GPIOs.PB.DOUT.Regs |=2;GPIOs.PB.DOUT.Bits.Pin1=1;
__IO NU_GPIO_T PC;//GPIOs.PC.DOUT.Regs |=4;GPIOs.PC.DOUT.Bits.Pin2=1;
__IO NU_GPIO_T PD;//GPIOs.PD.DOUT.Regs |=8;GPIOs.PD.DOUT.Bits.Pin3=1;
__IO NU_GPIO_T PE;//GPIOs.PE.DOUT.Regs |=16;GPIOs.PE.DOUT.Bits.Pin4=1;
};
};
}NUS_GPIO, *NUPS_GPIO;
#define NU_BASE_GPIO ((NUPS_GPIO) GPIOA_BASE)//定义硬件结构指针(硬件地址)
#define GPIOs (*NU_BASE_GPIO)//定位全局结构变量GPIOs
//----------------------------------------------------//
#define GPIOAs (*((NU_GPIO_T *) GPIOA_BASE))//定位全局结构变量GPIOAs
#define GPIOBs (*((NU_GPIO_T *) GPIOB_BASE))//定位全局结构变量GPIOBs
#define GPIOCs (*((NU_GPIO_T *) GPIOC_BASE))//定位全局结构变量GPIOCs
#define GPIODs (*((NU_GPIO_T *) GPIOD_BASE))//定位全局结构变量GPIODs
#define GPIOEs (*((NU_GPIO_T *) GPIOE_BASE))//定位全局结构变量GPIOEs
//----------------------------------------------------//
#define GPIOx(x) ((NU_GPIO_T *) (GPIOA_BASE + x * 0x0040))
#define Px(x) ((NU_GPIO_T *) (GPIOA_BASE + x * 0x0040))
#define SPIx(x) ((SPI_T *) (SPI0_BASE + (x & 1) * 0x4000) + ((x >> 1) * 0x100000))
#define TIMERx(x) ((TIMER_T *)(TIMER0_BASE + (x & 1) * 0x0020) + ((x >> 1) * 0x100000))
#define I2Cx(x) ((I2C_T *) (I2C0_BASE + x * 0x100000))
#define PWMx(x) ((PWM_T *) (PWMA_BASE + x * 0x100000))
#define PDMAx(x) ((PDMA_T *) (PDMA0_BASE + x * 0x0100))
#define UARTx(x) ((UART_T *) (UART0_BASE + (x & 1) * 0x100000) + ((x >> 1) * 0x104000))
#define Ux(x) ((UART_T *) (UART0_BASE + (x & 1) * 0x100000) + ((x >> 1) * 0x104000))
#ifdef __cplusplus
}
#endif
#endif /* __NUC1xxcfg_H__ */
|