本帖最后由 hotpower 于 2010-7-31 01:21 编辑
/*--------------------------------------------------------------------------
文 件 名 : LPC11xxcfg.h
创 建 人 : Cortex菜鸟HotPower@163.com
创 建 日 期 : 2010.7.8 18:18
最近修改日期 : 2010.7.31 23:33
创 建 地 点 : 西安大雁塔村队部
版 本 号 : V1.02 (菜鸟版)
修 改 原 因 : 控制所有位域到位控制, 随着CortexM0将实战于菜农的产品中,将逐步完善。
说 明 : LPC11xx.h虽比LPC23xx.h有很大进步,但也只是菜农5年前的红杏级别。
为与流行趋势接轨,故暂先增强之,最终菜农将弃之。
备 注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
-------------------------------------------------------------------------------*/
#include <LPC11xx.h> //LPC11xxcfg.h暂且继承LPC11xx.h的一切定义
#ifndef __LPC11xxcfg_H__
#define __LPC11xxcfg_H__
#ifdef __cplusplus
extern "C" {
#endif
typedef volatile uint32_t LPC_REG;// Hardware register definition
#define __noinit__ __attribute__((zero_init))//变量不初始化为0
typedef enum
{
__0 = (LPC_REG)0,
__1 = (LPC_REG)1,
__2 = (LPC_REG)2,
__3 = (LPC_REG)3,
__4 = (LPC_REG)4,
__5 = (LPC_REG)5,
__6 = (LPC_REG)6,
__7 = (LPC_REG)7,
__8 = (LPC_REG)8,
__9 = (LPC_REG)9,
__10 = (LPC_REG)10,
__11 = (LPC_REG)11,
__12 = (LPC_REG)12,
__13 = (LPC_REG)13,
__14 = (LPC_REG)14,
__15 = (LPC_REG)15,
__16 = (LPC_REG)16,
__17 = (LPC_REG)17,
__18 = (LPC_REG)18,
__19 = (LPC_REG)19,
__20 = (LPC_REG)20,
__21 = (LPC_REG)21,
__22 = (LPC_REG)22,
__23 = (LPC_REG)23,
__24 = (LPC_REG)24,
__25 = (LPC_REG)25,
__26 = (LPC_REG)26,
__27 = (LPC_REG)27,
__28 = (LPC_REG)28,
__29 = (LPC_REG)29,
__30 = (LPC_REG)30,
__31 = (LPC_REG)31
}Number_enum;
typedef volatile struct
{
LPC_REG Bit0: 1;
LPC_REG Bit1: 1;
LPC_REG Bit2: 1;
LPC_REG Bit3: 1;
LPC_REG Bit4: 1;
LPC_REG Bit5: 1;
LPC_REG Bit6: 1;
LPC_REG Bit7: 1;
LPC_REG Bit8: 1;
LPC_REG Bit9: 1;
LPC_REG Bit10: 1;
LPC_REG Bit11: 1;
LPC_REG Bit12: 1;
LPC_REG Bit13: 1;
LPC_REG Bit14: 1;
LPC_REG Bit15: 1;
LPC_REG Bit16: 1;
LPC_REG Bit17: 1;
LPC_REG Bit18: 1;
LPC_REG Bit19: 1;
LPC_REG Bit20: 1;
LPC_REG Bit21: 1;
LPC_REG Bit22: 1;
LPC_REG Bit23: 1;
LPC_REG Bit24: 1;
LPC_REG Bit25: 1;
LPC_REG Bit26: 1;
LPC_REG Bit27: 1;
LPC_REG Bit28: 1;
LPC_REG Bit29: 1;
LPC_REG Bit30: 1;
LPC_REG Bit31: 1;
}LPC_BITs;
//===============================================//
typedef volatile struct
{
LPC_REG Pin0: 1;
LPC_REG Pin1: 1;
LPC_REG Pin2: 1;
LPC_REG Pin3: 1;
LPC_REG Pin4: 1;
LPC_REG Pin5: 1;
LPC_REG Pin6: 1;
LPC_REG Pin7: 1;
LPC_REG Pin8: 1;
LPC_REG Pin9: 1;
LPC_REG Pin10: 1;
LPC_REG Pin11: 1;
LPC_REG Pin12: 1;
LPC_REG Pin13: 1;
LPC_REG Pin14: 1;
LPC_REG Pin15: 1;
LPC_REG Pin16: 1;
LPC_REG Pin17: 1;
LPC_REG Pin18: 1;
LPC_REG Pin19: 1;
LPC_REG Pin20: 1;
LPC_REG Pin21: 1;
LPC_REG Pin22: 1;
LPC_REG Pin23: 1;
LPC_REG Pin24: 1;
LPC_REG Pin25: 1;
LPC_REG Pin26: 1;
LPC_REG Pin27: 1;
LPC_REG Pin28: 1;
LPC_REG Pin29: 1;
LPC_REG Pin30: 1;
LPC_REG Pin31: 1;
}LPC_PINs;
//============================================
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_BITs Bits;
}LPC_REG_BITs;
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PINs Bits;
}LPC_REG_PINs;
//============================================
typedef enum
{
UARTIER_RBRE = (LPC_REG)0,//使能RDA中断
UARTIER_THRE = (LPC_REG)1,//使能THRE中断
UARTIER_RXE = (LPC_REG)2,//使能RX线状态中断
UARTIER_RESERVED0 = (LPC_REG)3,
UARTIER_ABEOE = (LPC_REG)8,//使能自动波特率结束中断
UARTIER_ABTOE = (LPC_REG)9//使能自动波特率超时中断
}UARTIER_enum;
typedef volatile struct
{
LPC_REG RBRE: 1;//使能RDA中断
LPC_REG THRE: 1;//使能THRE中断
LPC_REG RXE: 1;//使能RX线状态中断
LPC_REG RESERVED0: 5;
LPC_REG ABEOE: 1;//使能自动波特率结束中断
LPC_REG ABTOE: 1;//使能自动波特率超时中断
LPC_REG RESERVED1: 22;
}LPC_IER_BITs;//UART中断使能
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_IER_BITs Bits;
}LPC_IER_REG_BITs;//UART中断使能
//============================================
typedef enum
{
UARTIIR_IntStatus = (LPC_REG)0,//中断状态
UARTIIR_IntID = (LPC_REG)1,//中断ID
UARTIIR_Reserved0 = (LPC_REG)4,
UARTIIR_FIFOEnable = (LPC_REG)6,//使能自动波特率结束中断
UARTIIR_ABEOInt = (LPC_REG)8,//使能自动波特率结束中断
UARTIIR_ABTOInt = (LPC_REG)9//使能自动波特率超时中断
}UARTIIR_enum;
typedef volatile struct
{
LPC_REG IntStatus: 1;//中断状态
LPC_REG IntID: 3;//中断ID
LPC_REG Reserved0: 2;
LPC_REG FIFOEnable: 2;//使能自动波特率结束中断
LPC_REG ABEOInt: 1;//使能自动波特率结束中断
LPC_REG ABTOInt: 1;//使能自动波特率超时中断
LPC_REG Reserved1: 22;
}LPC_IIR_BITs;//UART中断ID
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_IIR_BITs Bits;
}LPC_IIR_REG_BITs;//UART中断ID
//============================================
typedef enum
{
UARTFCR_FIFOEnable = (LPC_REG)0,
UARTFCR_RXFIFOReset = (LPC_REG)1,
UARTFCR_TXFIFOReset = (LPC_REG)2,
UARTFCR_RESERVED0 = (LPC_REG)3,
UARTFCR_RXTriggerLevel = (LPC_REG)6
}UARTFCR_enum;
typedef volatile struct
{
LPC_REG FIFOEnable: 1;
LPC_REG RXFIFOReset: 1;
LPC_REG TXFIFOReset: 1;
LPC_REG RESERVED0: 3;
LPC_REG RXTriggerLevel: 2;
LPC_REG RESERVED1: 24;
}LPC_FCR_BITs;//UARTFIFO控制
typedef volatile union
{
__O LPC_REG Regs;
__O LPC_FCR_BITs Bits;
}LPC_FCR_REG_BITs;//UARTFIFO控制
//============================================
typedef enum
{
UARTLCR_WordLengthSelect = (LPC_REG)0,//x位字符长度 0-5位 1-6位 2-7位 3-8位
UARTLCR_StopBitSelect = (LPC_REG)2,//x个停止位 0-1个 1-2个
UARTLCR_ParityEnable = (LPC_REG)3,//校验位使能
UARTLCR_ParitySelect = (LPC_REG)4,//校验位选择
UARTLCR_BreakControl = (LPC_REG)6,//间隔传输
UARTLCR_DLAB = (LPC_REG)7//除数锁存器访问使能
}UARTLCR_enum;
typedef volatile struct
{
LPC_REG WordLengthSelect: 2;//x位字符长度 0-5位 1-6位 2-7位 3-8位
LPC_REG StopBitSelect: 1;//x个停止位 0-1个 1-2个
LPC_REG ParityEnable: 1;//校验位使能
LPC_REG ParitySelect: 2;//校验位选择
LPC_REG BreakControl: 1;//间隔传输
LPC_REG DLAB: 1;//除数锁存器访问使能
LPC_REG Reserved: 24;
}LPC_LCR_BITs;//UART线控制
typedef volatile union
{
__O LPC_REG Regs;
__O LPC_LCR_BITs Bits;
}LPC_LCR_REG_BITs;//UART线控制
//============================================
typedef enum
{
UARTLSR_RDR = (LPC_REG)0,//待读数据
UARTLSR_OE = (LPC_REG)1,//溢出错误
UARTLSR_PE = (LPC_REG)2,//校验位错误
UARTLSR_FE = (LPC_REG)3,//帧错
UARTLSR_BI = (LPC_REG)4,//间隔中断
UARTLSR_THRE = (LPC_REG)5,
UARTLSR_TEMT = (LPC_REG)6,
UARTLSR_RXFE = (LPC_REG)7
}UARTLSR_enum;
typedef volatile struct
{
LPC_REG RDR: 1;//待读数据
LPC_REG OE: 1;//溢出错误
LPC_REG PE: 1;//校验位错误
LPC_REG FE: 1;//帧错
LPC_REG BI: 1;//间隔中断
LPC_REG THRE: 1;
LPC_REG TEMT: 1;
LPC_REG RXFE: 1;
LPC_REG RESERVED: 24;
}LPC_LSR_BITs;//UART线状态
typedef volatile union
{
__O LPC_REG Regs;
__O LPC_LSR_BITs Bits;
}LPC_LSR_REG_BITs;//UART线状态
//============================================
typedef enum
{
UARTFDR_DIVADDVAL = (LPC_REG)0,
UARTFDR_MULVAL = (LPC_REG)4
}UARTFDR_enum;
typedef volatile struct
{
LPC_REG DIVADDVAL: 4;//产生波特率的预分频除数值
LPC_REG MULVAL: 4;//波特率预分频乘数值
LPC_REG RESERVED: 24;
}LPC_FDR_BITs;//UART小数分频器
typedef volatile union
{
__O LPC_REG Regs;
__O LPC_FDR_BITs Bits;
}LPC_FDR_REG_BITs;//UART小数分频器
//============================================
typedef enum
{
I2CCONSET_AA = (LPC_REG)2,//应答标志。
I2CCONSET_SI = (LPC_REG)3,//I2C中断标志。
I2CCONSET_STO = (LPC_REG)4,//停止标志。
I2CCONSET_STA = (LPC_REG)5,//起始标志。
I2CCONSET_I2EN = (LPC_REG)6//I2C接口使能。
}I2CCONSET_enum;
typedef volatile struct
{
LPC_REG RESERVED0: 2;
LPC_REG AA: 1;//声明应答标志
LPC_REG SI: 1;//中断标志
LPC_REG STO: 1;//停止标志
LPC_REG STA: 1;//起始标志
LPC_REG I2EN: 1;//接口使能
LPC_REG RESERVED1: 25;
}LPC_CONSET_BITs;//I2C控制置位寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_CONSET_BITs Bits;
}LPC_CONSET_REG_BITs;//I2C控制置位寄存器
//============================================
typedef enum
{
I2CSTAT_Status = (LPC_REG)3//实际状态信息。
}I2CSTAT_enum;
typedef volatile struct
{
LPC_REG RESERVED0: 3;
LPC_REG Status: 5;//实际状态信息
LPC_REG RESERVED1: 24;
}LPC_STAT_BITs;//I2C控制置位寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STAT_BITs Bits;
}LPC_STAT_REG_BITs;//I2C控制置位寄存器
//============================================
typedef struct _LPCS_I2C {
__IO LPC_CONSET_REG_BITs CONSET;//I2C控制置位寄存器
__I LPC_STAT_REG_BITs STAT;//I2C状态寄存器
__IO LPC_REG_BITs DAT;//I2C数据寄存器
__IO LPC_REG_BITs ADR0;//I2C从地址寄存器0
__IO LPC_REG_BITs SCLH;//SCH占空比寄存器高半字
__IO LPC_REG_BITs SCLL;//SCL占空比寄存器低半字
__O LPC_REG_BITs CONCLR;//I2C控制清零寄存器
__IO LPC_REG_BITs MMCTRL;//监控模式控制寄存器
__IO LPC_REG_BITs ADR1;//I2C从地址寄存器1
__IO LPC_REG_BITs ADR2;//I2C从地址寄存器2
__IO LPC_REG_BITs ADR3;//I2C从地址寄存器3
__I LPC_REG_BITs DATA_BUFFER;//数据缓冲寄存器
__IO LPC_REG_BITs MASK0;//从地址屏蔽寄存器0
__IO LPC_REG_BITs MASK1;//从地址屏蔽寄存器1
__IO LPC_REG_BITs MASK2;//从地址屏蔽寄存器2
__IO LPC_REG_BITs MASK3;//从地址屏蔽寄存器3
}LPCS_I2C, *LPCPS_I2C;//
#define LPC_BASE_I2C ((LPCPS_I2C) LPC_I2C_BASE)//定义硬件结构指针(硬件地址)
#define I2C (*LPC_I2C_BASE)//定位全局结构变量P0
//============================================
typedef struct _LPCS_UART {
union {//地址冲突处理
__I LPC_REG_BITs RBR;//接收缓冲
__O LPC_REG_BITs THR;//发送保持
__IO LPC_REG_BITs DLL;//除数锁存低位
};
union {//地址冲突处理
__IO LPC_IER_REG_BITs IER;//中断使能
__IO LPC_REG_BITs DLM;//除数锁存高位
};
union {//地址冲突处理
__I LPC_IIR_REG_BITs IIR;//中断ID
__O LPC_REG_BITs FCR;//FIFO控制
};
__IO LPC_LCR_REG_BITs LCR;//线控制
__IO LPC_REG_BITs MCR;//Modem控制
__I LPC_LSR_REG_BITs LSR;//线状态
__I LPC_REG_BITs MSR;//Modem状态
__IO LPC_REG_BITs SCR;//高速缓存
__IO LPC_REG_BITs ACR;//自动波特率控制
LPC_REG RESERVED0; //0x4000 8024 保留1个空位
__IO LPC_FDR_REG_BITs FDR;//小数分频器
LPC_REG RESERVED1; //0x4000 802C保留1个空位
__IO LPC_REG_BITs TER;//发送使能
LPC_REG RESERVED2[6];//0x4000 8034保留6个空位
__IO LPC_REG_BITs RS485CTRL;//RS-485/EIA-485控制
__IO LPC_REG_BITs ADRMATCH;//RS-485/EIA-485地址匹配
__IO LPC_REG_BITs RS485DLY;//RS-485/EIA-485方向控制延迟
__IO LPC_REG_BITs FIFOLVL;//FIFO水平寄存器
}LPCS_UART, *LPCPS_UART;
#define LPC_BASE_UART0 ((LPCPS_UART) LPC_UART_BASE)//定义硬件结构指针(硬件地址)
#define U0 (*LPC_BASE_UART0)//定位全局结构变量P0
//============================================
typedef struct _LPCS_GPIO {//通用I/O口
LPC_REG RESERVED0[4095];//保留
__IO LPC_REG_PINs DATA;//端口n数据寄存器,其中PIOn_0到PIOn_11引脚可用(R/W)
LPC_REG RESERVED1[4096];//保留
__IO LPC_REG_PINs DIR;//端口n的数据方向寄存器(R/W)
__IO LPC_REG_BITs IS;//端口n的中断触发寄存器(R/W)
__IO LPC_REG_BITs IBE;//端口n的中断边沿寄存器(R/W)
__IO LPC_REG_BITs IEV;//端口n的中断事件寄存器(R/W)
__IO LPC_REG_BITs IE;//端口n的中断屏蔽寄存器(R/W)
__IO LPC_REG_BITs RIS;//端口n的原始中断状态寄存器(R/W)
__IO LPC_REG_BITs MIS;//端口n的屏蔽中断状态寄存器(R/W)
__IO LPC_REG_BITs IC;//端口n的中断清除寄存器(R/W)
}LPCS_GPIO, *LPCPS_GPIO;
#define LPC_BASE_GPIO0 ((LPCPS_GPIO) LPC_GPIO0_BASE)//定义硬件结构指针(硬件地址)
#define LPC_BASE_GPIO1 ((LPCPS_GPIO) LPC_GPIO1_BASE)//定义硬件结构指针(硬件地址)
#define LPC_BASE_GPIO2 ((LPCPS_GPIO) LPC_GPIO2_BASE)//定义硬件结构指针(硬件地址)
#define LPC_BASE_GPIO3 ((LPCPS_GPIO) LPC_GPIO3_BASE)//定义硬件结构指针(硬件地址)
#define P0 (*LPC_BASE_GPIO0)//定位全局结构变量P0
#define P1 (*LPC_BASE_GPIO1)//定位全局结构变量P1
#define P2 (*LPC_BASE_GPIO2)//定位全局结构变量P2
#define P3 (*LPC_BASE_GPIO3)//定位全局结构变量P3
#define LPC_BASE_GPIOx(x) ((LPCPS_GPIO)(LPC_GPIO0_BASE + (x * 0x10000)))//定义硬件结构指针(硬件地址)
#define Px(x) (*(LPC_BASE_GPIOx(x)))//定位全局结构变量Px
//============================================
#ifdef __cplusplus
}
#endif
#endif /* __LPC11xxcfg_H__ */ |
|