|
/*--------------------------------------------------------------------------
文 件 名 : LPC11xxcfg.h
创 建 人 : Cortex菜鸟HotPower@163.com
创 建 日 期 : 2010.7.8 18:18
最近修改日期 : 2010.9.6 18:58
创 建 地 点 : 西安大雁塔村队部
版 本 号 : V1.08 (红杏版)
修 改 原 因 : 控制所以位域到位控制, 随着CortexM0将实战于菜农的产品中,将逐步完善。
说 明 : LPC11xx.h虽比LPC23xx.h有很大进步,但也只是菜农5年前的红杏级别。
为与流行趋势接轨,故暂先增强之,最终菜农将弃之。
备 注 : 本头文件风格归属于菜农的《红杏出墙》系列,堪称“红杏级别”
将本文件拷贝到安装目录下的\Keil\ARM\INC\NXP\LPC11xx内。
-------------------------------------------------------------------------------*/
#include <LPC11xx.h> //LPC11xxcfg.h暂且继承LPC11xx.h的一切定义
#ifndef __LPC11xxcfg_H__
#define __LPC11xxcfg_H__
#ifdef __cplusplus
extern "C" {
#endif
#if defined (__CC_ARM)
#pragma anon_unions
#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
{
IER_RBR = (LPC_REG)0,//使能RDA中断
IER_THRE = (LPC_REG)1,//使能THRE中断
IER_RLS = (LPC_REG)2,//使能RX线状态中断
IER_RESERVED0 = (LPC_REG)3,
IER_ABEO = (LPC_REG)8,//使能自动波特率结束中断
IER_ABTO = (LPC_REG)9//使能自动波特率超时中断
}UARTIER_enum;
typedef volatile struct
{
LPC_REG RBR: 1;//使能RDA中断
LPC_REG THRE: 1;//使能THRE中断
LPC_REG RLS: 1;//使能RX线状态中断
LPC_REG RESERVED0: 5;
LPC_REG ABEO: 1;//使能自动波特率结束中断
LPC_REG ABTO: 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
{
IIR_IntStatus = (LPC_REG)0,//中断状态
IIR_IntID = (LPC_REG)1,//中断ID
IIR_Reserved0 = (LPC_REG)4,
IIR_FIFOEnable = (LPC_REG)6,//使能自动波特率结束中断
IIR_ABEOInt = (LPC_REG)8,//使能自动波特率结束中断
IIR_ABTOInt = (LPC_REG)9//使能自动波特率超时中断
}UARTIIR_enum;
typedef enum
{
IIR_PEND = (LPC_REG)1,
IIR_RLS = (LPC_REG)3,
IIR_RDA = (LPC_REG)2,
IIR_CTI = (LPC_REG)6,
IIR_THRE = (LPC_REG)1
}UARTIIR_IntID_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
{
FCR_FIFOEnable = (LPC_REG)0,
FCR_RXFIFOReset = (LPC_REG)1,
FCR_TXFIFOReset = (LPC_REG)2,
FCR_RESERVED0 = (LPC_REG)3,
FCR_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
{
LCR_WordLengthSelect = (LPC_REG)0,//x位字符长度 0-5位 1-6位 2-7位 3-8位
LCR_StopBitSelect = (LPC_REG)2,//x个停止位 0-1个 1-2个
LCR_ParityEnable = (LPC_REG)3,//校验位使能
LCR_ParitySelect = (LPC_REG)4,//校验位选择
LCR_BreakControl = (LPC_REG)6,//间隔传输
LCR_DLAB = (LPC_REG)7//除数锁存器访问使能
}UARTLCR_enum;
typedef volatile struct
{
LPC_REG WordLengthSelect: 2;//0~1 x位字符长度 0-5位 1-6位 2-7位 3-8位
LPC_REG StopBitSelect: 1;//2~2 x个停止位 0-1个 1-2个
LPC_REG ParityEnable: 1;//3~3 校验位使能
LPC_REG ParitySelect: 2;//4~5校验位选择
LPC_REG BreakControl: 1;//6~6 间隔传输
LPC_REG DLAB: 1;//7~7 除数锁存器访问使能
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
{
LSR_RDR = (LPC_REG)0,//待读数据
LSR_OE = (LPC_REG)1,//溢出错误
LSR_PE = (LPC_REG)2,//校验位错误
LSR_FE = (LPC_REG)3,//帧错
LSR_BI = (LPC_REG)4,//间隔中断
LSR_THRE = (LPC_REG)5,
LSR_TEMT = (LPC_REG)6,
LSR_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小数分频器
//============================================
/*---------------------------------------
I2C运行状态代码定义
----------------------------------------*/
typedef enum
{
I2C_START = 0x08, //已发送起始条件
I2C_REP_START = 0x10, //已发送重复起始条件
/* Master Transmitter */ //主发送器模式
I2C_MT_SLA_ACK = 0x18, //已发送SLA+W,且已接收ACK
I2C_MT_SLA_NACK = 0x20, //已发送SLA+W,且未接收ACK
I2C_MT_DATA_ACK = 0x28, //已发送I2DAT 中的数据字节,且已接收ACK
I2C_MT_DATA_NACK = 0x30, //已发送I2DAT 中的数据字节,且未接收ACK
I2C_MT_ARB_LOST = 0x38,
/* Master Receiver */ //主接收器模式
I2C_MR_ARB_LOST = 0x38,
I2C_MR_SLA_ACK = 0x40, //已发送SLA+R,且已接收ACK
I2C_MR_SLA_NACK = 0x48, //已发送SLA+R,且未接收ACK
I2C_MR_DATA_ACK = 0x50,
I2C_MR_DATA_NACK = 0x58,
/* Slave Transmitter */
I2C_ST_SLA_ACK = 0xA8,
I2C_ST_ARB_LOST_SLA_ACK = 0xB0,
I2C_ST_DATA_ACK = 0xB8,
I2C_ST_DATA_NACK = 0xC0,
I2C_ST_LAST_DATA = 0xC8,
/* Slave Receiver */
I2C_SR_SLA_ACK = 0x60,
I2C_SR_ARB_LOST_SLA_ACK = 0x68,
I2C_SR_GCALL_ACK = 0x70,
I2C_SR_ARB_LOST_GCALL_ACK = 0x78,
I2C_SR_DATA_ACK = 0x80,
I2C_SR_DATA_NACK = 0x88,
I2C_SR_GCALL_DATA_ACK = 0x90,
I2C_SR_GCALL_DATA_NACK = 0x98,
I2C_SR_STOP = 0xA0,
/* Misc */
I2C_NO_INFO = 0xF8,
I2C_BUS_ERROR = 0x00,
I2C_BUS_OK = 0xFF
}I2CSTAT_enum;
typedef enum
{
AA = (LPC_REG)2,//应答标志。
SI = (LPC_REG)3,//I2C中断标志。
STO = (LPC_REG)4,//停止标志。
STA = (LPC_REG)5,//起始标志。
I2EN = (LPC_REG)6//I2C接口使能。
}I2CCONSETCLR_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_CONSETCLR_BITs;//I2C控制置位清零寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_CONSETCLR_BITs Bits;
}LPC_CONSETCLR_REG_BITs;//I2C控制置位清零寄存器
//============================================
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_CONSETCLR_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_CONSETCLR_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;//数据缓冲寄存器
union {
__IO LPC_REG_BITs MASK[4];//从地址屏蔽寄存器0~3
struct {
__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 I2C0 (*LPC_BASE_I2C)//定位全局结构变量I2C0
//============================================
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)//定位全局结构变量U0
//=================================================//
typedef enum
{
SYSTick_ENABLE = (LPC_REG)0,//系统节拍计数器使能。
SYSTick_TICKINT = (LPC_REG)1,//系统节拍中断使能
SYSTick_COUNTFLAG = (LPC_REG)16,//系统节拍计数器标志
SYSTick_RELOAD = (LPC_REG)0,//该值在系统节拍计数器倒计数到0时装入该计数器
SYSTick_CURRENT = (LPC_REG)0,//读该寄存器会返回系统节拍计数器的当前值
SYSTick_TENMS = (LPC_REG)0,
SYSTick_SKEW = (LPC_REG)30,
SYSTick_NOREF = (LPC_REG)31
}SYSTick_enum;
typedef volatile struct
{
LPC_REG ENABLE: 1;//系统节拍计数器使能
LPC_REG TICKINT: 1;//系统节拍中断使能
LPC_REG RESERVED0: 14;
LPC_REG COUNTFLAG: 1;//系统节拍计数器标志
LPC_REG RESERVED1: 15;
}LPC_STCTRL_BITs;//系统定时器控制和状态寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STCTRL_BITs Bits;
}LPC_STCTRL_REG_BITs;//系统定时器控制和状态寄存器
//=========================================
typedef volatile struct
{
LPC_REG RELOAD: 24;//该值在系统节拍计数器倒计数到0时装入该计数器
LPC_REG RESERVED0: 8;
}LPC_STRELOAD_BITs;//系统定时器控制和状态寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STRELOAD_BITs Bits;
}LPC_STRELOAD_REG_BITs;//系统定时器控制和状态寄存器
//=========================================
typedef volatile struct
{
LPC_REG CURRENT: 24;//读该寄存器会返回系统节拍计数器的当前值
LPC_REG RESERVED0: 8;
}LPC_STCURR_BITs;//系统定时器当前值寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STCURR_BITs Bits;
}LPC_STCURR_REG_BITs;//系统定时器当前值寄存器
//=========================================
typedef volatile struct
{
LPC_REG TENMS: 24;
LPC_REG RESERVED0: 6;
LPC_REG SKEW: 1;
LPC_REG NOREF: 1;
}LPC_STCALIB_BITs;//系统定时器校准值寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STCALIB_BITs Bits;
}LPC_STCALIB_REG_BITs;//系统定时器校准值寄存器
typedef struct _LPCS_SYSTick {//系统节拍定时器
__IO LPC_STCTRL_REG_BITs STCTRL;//系统定时器控制和状态寄存器
__IO LPC_STRELOAD_REG_BITs STRELOAD;//系统定时器重载值寄存器
__IO LPC_STCURR_REG_BITs STCURR;//系统定时器当前值寄存器
__IO LPC_STCALIB_REG_BITs STCALIB;//系统定时器校准值寄存器
}LPCS_SYSTick, *LPCPS_SYSTick;
#define LPC_BASE_SYSTick ((LPCPS_SYSTick) 0xE000E010)//定义硬件结构指针(硬件地址)
#define SYSTick (*LPC_BASE_SYSTick)//定位全局结构变量SYSTick
//=================================================//
typedef struct _LPCS_TIMER {//定时器
__IO LPC_REG IR;//中断寄存器
__IO LPC_REG TCR;//定时器控制寄存器
__IO LPC_REG TC;//定时器计数器
__IO LPC_REG PR;//预分频寄存器
__IO LPC_REG PC;//预分频计数器
__IO LPC_REG MCR;//匹配控制寄存器
union {
__IO LPC_REG MR[4];//匹配寄存器0~3
struct {
__IO LPC_REG MR0;//匹配寄存器0
__IO LPC_REG MR1;//匹配寄存器1
__IO LPC_REG MR2;//匹配寄存器2
__IO LPC_REG MR3;//匹配寄存器3
};
};
__IO LPC_REG CCR;//捕获控制寄存器
union {
__IO LPC_REG CR[4];//捕获寄存器0~3
struct {
__IO LPC_REG CR0;//捕获寄存器0
__IO LPC_REG CR1;//捕获寄存器1
__IO LPC_REG CR2;//捕获寄存器2
__IO LPC_REG CR3;//捕获寄存器3
};
};
__IO LPC_REG EMR;//外部匹配寄存器
__IO LPC_REG Reserved[12]; //保留12个空位
__IO LPC_REG CTCR;//计数控制寄存器
__IO LPC_REG PWMC;//PWM控制寄存器
}LPCS_TIMER, *LPCPS_TIMER;
#define LPC_BASE_TMR16B0 ((LPCPS_TIMER) LPC_CT16B0_BASE)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TMR16B1 ((LPCPS_TIMER) LPC_CT16B1_BASE)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TMR32B0 ((LPCPS_TIMER) LPC_CT32B0_BASE)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TMR32B1 ((LPCPS_TIMER) LPC_CT32B1_BASE)//定义硬件结构指针(硬件地址)
#define T0 (*LPC_BASE_TMR16B0)//定位全局结构变量T0
#define T1 (*LPC_BASE_TMR16B1)//定位全局结构变量T1
#define T2 (*LPC_BASE_TMR32B0)//定位全局结构变量T2
#define T3 (*LPC_BASE_TMR32B1)//定位全局结构变量T3
#define LPC_BASE_TIMERx(x) ((LPCPS_TIMER)(LPC_CT16B0_BASE + (x * (LPC_CT16B1_BASE - LPC_CT16B0_BASE))))//定义硬件结构指针(硬件地址)
#define Tx(x) (*(LPC_BASE_TIMERx(x)))//定位全局结构变量Tx
//===============================================//
typedef enum
{
IOCON_FUNC = (LPC_REG)0,
IOCON_DSRLOC = (LPC_REG)0,
IOCON_DCDLOC = (LPC_REG)0,
IOCON_RILOC = (LPC_REG)0,
IOCON_MODE = (LPC_REG)3,
IOCON_HYS = (LPC_REG)5,
IOCON_ADMODE = (LPC_REG)7,
IOCON_I2CMODE = (LPC_REG)8,
IOCON_PIO = (LPC_REG)0,
IOCON_PIO2_6 = (LPC_REG)0,
IOCON_PIO2_0 = (LPC_REG)0,
IOCON_PIO2_0_DTR = (LPC_REG)1,
IOCON_PIO2_0_SSEL1 = (LPC_REG)2,
// IOCON_DTR = (LPC_REG)1,
IOCON_SSEL1 = (LPC_REG)2,
IOCON_PIO0_0_RESET = (LPC_REG)0,//外部复位输入引脚
IOCON_RESET = (LPC_REG)0,
IOCON_PIO0_0 = (LPC_REG)1,
IOCON_PIO0_1 = (LPC_REG)0,
IOCON_PIO0_1_CLKOUT = (LPC_REG)1,
IOCON_PIO0_1_CT32B0_MAT2 = (LPC_REG)2,
IOCON_CLKOUT = (LPC_REG)1,
IOCON_CT32B0_MAT2 = (LPC_REG)2,
IOCON_PIO1_8 = (LPC_REG)0,
IOCON_PIO1_8_CT16B1_CAP0 = (LPC_REG)1,
IOCON_CT16B1_CAP0 = (LPC_REG)1,
IOCON_PIO0_2 = (LPC_REG)0,
IOCON_PIO0_2_SSEL0 = (LPC_REG)1,
IOCON_PIO0_2_CT16B0_CAP0 = (LPC_REG)2,
IOCON_SSEL0 = (LPC_REG)1,
IOCON_CT16B0_CAP0 = (LPC_REG)2,
IOCON_PIO2_7 = (LPC_REG)0,
IOCON_PIO2_8 = (LPC_REG)0,
IOCON_PIO2_1 = (LPC_REG)0,
IOCON_PIO2_1_DSR = (LPC_REG)1,
IOCON_PIO2_1_SCK1 = (LPC_REG)2,
// IOCON_DSR = (LPC_REG)1,
IOCON_SCK1 = (LPC_REG)2,
IOCON_PIO0_3 = (LPC_REG)0,
IOCON_PIO0_4 = (LPC_REG)0,
IOCON_PIO0_4_SCL = (LPC_REG)1,
IOCON_I2C_SCL = (LPC_REG)1,
IOCON_SCL = (LPC_REG)1,
IOCON_PIO0_4_I2CMODE = (LPC_REG)0,//标准模式/快速模式I2C
IOCON_PIO0_4_PIOMODE = (LPC_REG)1,//PIO0_4
IOCON_PIO0_4_PLUSI2CMODE = (LPC_REG)2,//快速模式plus I2C
IOCON_PIO0_4_I2CMODE_STD = (LPC_REG)0,//标准模式/快速模式I2C
IOCON_PIO0_4_I2CMODE_PIO = (LPC_REG)1,//PIO0_4
IOCON_PIO0_4_I2CMODE_PLUS = (LPC_REG)2,//快速模式plus I2C
IOCON_PIO0_5 = (LPC_REG)0,
IOCON_PIO0_5_SDA = (LPC_REG)1,
IOCON_I2C_SDA = (LPC_REG)1,
IOCON_SDA = (LPC_REG)1,
IOCON_PIO0_5_I2CMODE = (LPC_REG)0,//标准模式/快速模式I2C
IOCON_PIO0_5_PIOMODE = (LPC_REG)1,//PIO0_5
IOCON_PIO0_5_PLUSI2CMODE = (LPC_REG)2,//快速模式plus I2C
IOCON_PIO0_5_I2CMODE_STD = (LPC_REG)0,//标准模式/快速模式I2C
IOCON_PIO0_5_I2CMODE_PIO = (LPC_REG)1,//PIO0_4
IOCON_PIO0_5_I2CMODE_PLUS = (LPC_REG)2,//快速模式plus I2C
IOCON_SCL_I2CMODE = (LPC_REG)0,//标准模式/快速模式I2C
IOCON_SDA_I2CMODE = (LPC_REG)0,//标准模式/快速模式I2C
IOCON_SCL_PIOMODE = (LPC_REG)1,//PIO0_4
IOCON_SDA_PIOMODE = (LPC_REG)1,//PIO0_5
IOCON_PIO1_9 = (LPC_REG)0,
IOCON_PIO1_9_CT16B1_MAT0 = (LPC_REG)1,
IOCON_CT16B1_MAT0 = (LPC_REG)1,
IOCON_PIO3_4 = (LPC_REG)0,
IOCON_PIO2_4 = (LPC_REG)0,
IOCON_PIO2_5 = (LPC_REG)0,
IOCON_PIO3_5 = (LPC_REG)0,
IOCON_PIO0_6 = (LPC_REG)0,
IOCON_PIO0_6_SCK0 = (LPC_REG)2,
IOCON_SCK0 = (LPC_REG)2,
IOCON_PIO0_7 = (LPC_REG)0,//支持20mA的高驱动电流
IOCON_PIO0_7_CTS = (LPC_REG)1,
IOCON_CTS = (LPC_REG)1,
IOCON_PIO2_9 = (LPC_REG)0,
IOCON_PIO2_10 = (LPC_REG)0,
IOCON_PIO2_2 = (LPC_REG)0,
IOCON_PIO2_2_DCD = (LPC_REG)1,
IOCON_PIO2_2_MISO1 = (LPC_REG)2,
// IOCON_DCD = (LPC_REG)1,
IOCON_MISO1 = (LPC_REG)2,
IOCON_PIO0_8 = (LPC_REG)0,
IOCON_PIO0_8_MISO0 = (LPC_REG)1,
IOCON_PIO0_8_CT16B0_MAT0 = (LPC_REG)2,
IOCON_MISO0 = (LPC_REG)1,
IOCON_CT16B0_MAT0 = (LPC_REG)2,
IOCON_PIO0_9 = (LPC_REG)0,
IOCON_PIO0_9_MOSI0 = (LPC_REG)1,
IOCON_PIO0_9_CT16B0_MAT1 = (LPC_REG)2,
IOCON_MOSI0 = (LPC_REG)1,
IOCON_CT16B0_MAT1 = (LPC_REG)2,
IOCON_JTAG_TCK_PIO0_10_SWCLK = (LPC_REG)0,
IOCON_JTAG_TCK_PIO0_10 = (LPC_REG)1,
IOCON_JTAG_TCK_PIO0_10_SCK0 = (LPC_REG)2,
IOCON_JTAG_TCK_PIO0_10_CT16B0_MAT2 = (LPC_REG)3,
IOCON_JTAG_TCK_SWCLK = (LPC_REG)0,
IOCON_JTAG_TCK = (LPC_REG)1,
IOCON_JTAG_TCK_SCK0 = (LPC_REG)2,
IOCON_JTAG_TCK_CT16B0_MAT2 = (LPC_REG)3,
IOCON_PIO0_10_SWCLK = (LPC_REG)0,
IOCON_PIO0_10 = (LPC_REG)1,
IOCON_PIO0_10_SCK0 = (LPC_REG)2,
IOCON_PIO0_10_CT16B0_MAT2 = (LPC_REG)3,
IOCON_SWCLK = (LPC_REG)0,
IOCON_CT16B0_MAT2 = (LPC_REG)3,
IOCON_PIO1_10 = (LPC_REG)0,
IOCON_PIO1_10_AD6 = (LPC_REG)1,
IOCON_PIO1_10_CT16B1_MAT1 = (LPC_REG)2,
IOCON_AD6 = (LPC_REG)1,
IOCON_CT16B1_MAT1 = (LPC_REG)2,
IOCON_PIO2_11 = (LPC_REG)0,
IOCON_PIO2_11_SCK0 = (LPC_REG)1,
IOCON_JTAG_TDI_PIO0_11_TDI = (LPC_REG)0,
IOCON_JTAG_TDI_PIO0_11 = (LPC_REG)1,
IOCON_JTAG_TDI_PIO0_11_AD0 = (LPC_REG)2,
IOCON_JTAG_TDI_PIO0_11_CT32B0_MAT3 = (LPC_REG)3,
IOCON_JTAG_TDI_TDI = (LPC_REG)0,
IOCON_JTAG_TDI = (LPC_REG)1,
IOCON_JTAG_TDI_AD0 = (LPC_REG)2,
IOCON_JTAG_TDI_CT32B0_MAT3 = (LPC_REG)3,
IOCON_PIO0_11_TDI = (LPC_REG)0,
IOCON_PIO0_11 = (LPC_REG)1,
IOCON_PIO0_11_AD0 = (LPC_REG)2,
IOCON_PIO0_11_CT32B0_MAT3 = (LPC_REG)3,
IOCON_TDI = (LPC_REG)0,
IOCON_AD0 = (LPC_REG)2,
IOCON_CT32B0_MAT3 = (LPC_REG)3,
IOCON_JTAG_TMS_PIO1_0_TMS = (LPC_REG)0,
IOCON_JTAG_TMS_PIO1_0 = (LPC_REG)1,
IOCON_JTAG_TMS_PIO1_0_AD1 = (LPC_REG)2,
IOCON_JTAG_TMS_PIO1_0_CT32B1_CAP0 = (LPC_REG)3,
IOCON_JTAG_TMS_TMS = (LPC_REG)0,
IOCON_JTAG_TMS = (LPC_REG)1,
IOCON_JTAG_TMS_AD1 = (LPC_REG)2,
IOCON_JTAG_TMS_CT32B1_CAP0 = (LPC_REG)3,
IOCON_PIO1_0_TMS = (LPC_REG)0,
IOCON_PIO1_0 = (LPC_REG)1,
IOCON_PIO1_0_AD1 = (LPC_REG)2,
IOCON_PIO1_0_CT32B0_MAT3 = (LPC_REG)3,
IOCON_TMS = (LPC_REG)0,
IOCON_AD1 = (LPC_REG)2,
IOCON_CT32B1_CAP0 = (LPC_REG)3,
IOCON_JTAG_TDO_PIO1_1_TDO = (LPC_REG)0,
IOCON_JTAG_TDO_PIO1_1 = (LPC_REG)1,
IOCON_JTAG_TDO_PIO1_1_AD2 = (LPC_REG)2,
IOCON_JTAG_TDO_PIO1_1_CT32B1_MAT0 = (LPC_REG)3,
IOCON_JTAG_TDO_TDO = (LPC_REG)0,
IOCON_JTAG_TDO = (LPC_REG)1,
IOCON_JTAG_TDO_AD2 = (LPC_REG)2,
IOCON_JTAG_TDO_CT32B1_MAT0 = (LPC_REG)3,
IOCON_PIO1_1_TDO = (LPC_REG)0,
IOCON_PIO1_1 = (LPC_REG)1,
IOCON_PIO1_1_AD2 = (LPC_REG)2,
IOCON_PIO1_1_CT32B1_MAT0 = (LPC_REG)3,
IOCON_TDO = (LPC_REG)0,
IOCON_AD2 = (LPC_REG)2,
IOCON_CT32B1_MAT0 = (LPC_REG)3,
IOCON_JTAG_nTRST_PIO1_2_TRST = (LPC_REG)0,//JTAG接口测试复位引脚
IOCON_JTAG_nTRST_PIO1_2 = (LPC_REG)1,
IOCON_JTAG_nTRST_PIO1_2_AD3 = (LPC_REG)2,
IOCON_JTAG_nTRST_PIO1_2_CT32B1_MAT1 = (LPC_REG)3,
IOCON_JTAG_nTRST_TRST = (LPC_REG)0,
IOCON_JTAG_nTRST = (LPC_REG)1,
IOCON_JTAG_nTRST_AD3 = (LPC_REG)2,
IOCON_JTAG_nTRST_CT32B1_MAT1 = (LPC_REG)3,
IOCON_PIO1_2_TRST = (LPC_REG)0,
IOCON_PIO1_2 = (LPC_REG)1,
IOCON_PIO1_2_AD3 = (LPC_REG)2,
IOCON_PIO1_2_CT32B1_MAT1 = (LPC_REG)3,
IOCON_TRST = (LPC_REG)0,
IOCON_AD3 = (LPC_REG)2,
IOCON_CT32B1_MAT1 = (LPC_REG)3,
IOCON_PIO3_0 = (LPC_REG)0,
IOCON_PIO3_0_DTR = (LPC_REG)1,
IOCON_DTR = (LPC_REG)1,
IOCON_PIO3_1 = (LPC_REG)0,
IOCON_PIO3_1_DSR = (LPC_REG)1,
IOCON_DSR = (LPC_REG)1,
IOCON_PIO2_3 = (LPC_REG)0,
IOCON_PIO2_3_MOSI1 = (LPC_REG)0,
IOCON_PIO2_3_RI = (LPC_REG)1,
IOCON_MOSI1 = (LPC_REG)0,
// IOCON_RI = (LPC_REG)1,
IOCON_SWDIO_PIO1_3_SWDIO = (LPC_REG)0,
IOCON_SWDIO_PIO1_3 = (LPC_REG)1,
IOCON_SWDIO_PIO1_3_AD4 = (LPC_REG)2,
IOCON_SWDIO_PIO1_3_CT32B1_MAT2 = (LPC_REG)3,
IOCON_PIO1_3_SWDIO = (LPC_REG)0,
IOCON_PIO1_3 = (LPC_REG)1,
IOCON_PIO1_3_AD4 = (LPC_REG)2,
IOCON_PIO1_3_CT32B1_MAT2 = (LPC_REG)3,
IOCON_SWDIO = (LPC_REG)0,
IOCON_AD4 = (LPC_REG)2,
IOCON_CT32B1_MAT2 = (LPC_REG)3,
IOCON_PIO1_4 = (LPC_REG)0,
IOCON_PIO1_4_AD5 = (LPC_REG)1,
IOCON_PIO1_4_CT32B1_MAT3 = (LPC_REG)2,
IOCON_PIO1_4_WAKEUP = (LPC_REG)3,//深度掉电模式唤醒引脚
IOCON_AD5 = (LPC_REG)1,
IOCON_CT32B1_MAT3 = (LPC_REG)2,
IOCON_PIO1_11 = (LPC_REG)0,
IOCON_PIO1_11_AD7 = (LPC_REG)1,
IOCON_AD7 = (LPC_REG)1,
IOCON_PIO3_2 = (LPC_REG)0,
IOCON_PIO3_2_DCD = (LPC_REG)1,
IOCON_DCD = (LPC_REG)1,
IOCON_PIO1_5 = (LPC_REG)0,
IOCON_PIO1_5_RTS = (LPC_REG)1,
IOCON_PIO1_5_CT32B0_CAP0 = (LPC_REG)2,
IOCON_RTS = (LPC_REG)1,
IOCON_CT32B0_CAP0 = (LPC_REG)2,
IOCON_PIO1_6 = (LPC_REG)0,
IOCON_PIO1_6_RXD = (LPC_REG)1,
IOCON_PIO1_6_CT32B0_MAT0 = (LPC_REG)2,
IOCON_RXD = (LPC_REG)1,
IOCON_CT32B0_MAT0 = (LPC_REG)2,
IOCON_PIO1_7 = (LPC_REG)0,
IOCON_PIO1_7_TXD = (LPC_REG)1,
IOCON_PIO1_7_CT32B0_MAT1 = (LPC_REG)2,
IOCON_TXD = (LPC_REG)1,
IOCON_CT32B0_MAT1 = (LPC_REG)2,
IOCON_PIO3_3 = (LPC_REG)0,
IOCON_PIO3_3_RI = (LPC_REG)1,
IOCON_RI = (LPC_REG)1,
}IOCON_FUNC_enum;
typedef enum
{
IOCON_INACTIVE = 0,//高阻
IOCON_PULLDOWN = 1,//内部下拉
IOCON_PULLUP = 2,//内部上拉
IOCON_REPEATER = 3,//中继模式
IOCON_HYSDISABLE = 0,//滞后禁能
IOCON_HYSENABLE = 1,//滞后使能
}IOCON_MODE_enum;
typedef volatile struct
{
LPC_REG FUNC: 3;//0~2选择管脚功能PIOn_m 0-选择PIOn_m X-保留
LPC_REG MODE: 2;//3~4选择功能模式 0-无 1-下拉电阻 2-上拉电阻 3-中继模式
LPC_REG HYS: 1;//5~5滞后作用 0-禁能 1-使能
LPC_REG RESERVED1:1;//6~6
LPC_REG ADMODE: 1;//7~7 ADC PIO1_10,PIO0_11,PIO1_0
LPC_REG I2CMODE: 2;//8~9 I2C
LPC_REG RESERVED2:14;//10~31
}LPC_PIOnms;
//============================================
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PIOnms Bits;
}LPC_REG_PIOnms;
//============================================
typedef volatile struct
{
LPC_REG FUNC: 2;
LPC_REG RESERVED:30;
}LPC_SCK_LOCs;
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SCK_LOCs Bits;
}LPC_REG_SCK_LOCs;
//============================================
typedef volatile struct
{
LPC_REG DSRLOC: 2;
LPC_REG RESERVED:30;
}LPC_DSR_LOCs;
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SCK_LOCs Bits;
}LPC_REG_DSR_LOCs;
//============================================
typedef volatile struct
{
LPC_REG DCDLOC: 2;
LPC_REG RESERVED:30;
}LPC_DCD_LOCs;
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_DCD_LOCs Bits;
}LPC_REG_DCD_LOCs;
//============================================
typedef volatile struct
{
LPC_REG RILOC: 2;
LPC_REG RESERVED:30;
}LPC_RI_LOCs;
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SCK_LOCs Bits;
}LPC_REG_RI_LOCs;
//=============================================
typedef struct _LPCS_IOCON {//IO配置寄存器
__IO LPC_REG_PIOnms PIO2_6;
LPC_REG RESERVED0[1];
__IO LPC_REG_PIOnms PIO2_0;
__IO LPC_REG_PIOnms RESET_PIO0_0;
__IO LPC_REG_PIOnms PIO0_1;
__IO LPC_REG_PIOnms PIO1_8;
LPC_REG RESERVED1[1];
__IO LPC_REG_PIOnms PIO0_2;
__IO LPC_REG_PIOnms PIO2_7;
__IO LPC_REG_PIOnms PIO2_8;
__IO LPC_REG_PIOnms PIO2_1;
__IO LPC_REG_PIOnms PIO0_3;
__IO LPC_REG_PIOnms PIO0_4;
__IO LPC_REG_PIOnms PIO0_5;
__IO LPC_REG_PIOnms PIO1_9;
__IO LPC_REG_PIOnms PIO3_4;
__IO LPC_REG_PIOnms PIO2_4;
__IO LPC_REG_PIOnms PIO2_5;
__IO LPC_REG_PIOnms PIO3_5;
__IO LPC_REG_PIOnms PIO0_6;
__IO LPC_REG_PIOnms PIO0_7;
__IO LPC_REG_PIOnms PIO2_9;
__IO LPC_REG_PIOnms PIO2_10;
__IO LPC_REG_PIOnms PIO2_2;
__IO LPC_REG_PIOnms PIO0_8;
__IO LPC_REG_PIOnms PIO0_9;
union {
__IO LPC_REG_PIOnms JTAG_TCK_PIO0_10;
__IO LPC_REG_PIOnms JTAG_TCK;
__IO LPC_REG_PIOnms PIO0_10;
};
__IO LPC_REG_PIOnms PIO1_10;
__IO LPC_REG_PIOnms PIO2_11;
union {
__IO LPC_REG_PIOnms JTAG_TDI_PIO0_11;
__IO LPC_REG_PIOnms JTAG_TDI;
__IO LPC_REG_PIOnms PIO0_11;
};
union {
__IO LPC_REG_PIOnms JTAG_TMS_PIO1_0;
__IO LPC_REG_PIOnms JTAG_TMS;
__IO LPC_REG_PIOnms PIO1_0;
};
union {
__IO LPC_REG_PIOnms JTAG_TDO_PIO1_1;
__IO LPC_REG_PIOnms JTAG_TDO;
__IO LPC_REG_PIOnms PIO1_1;
};
union {
__IO LPC_REG_PIOnms JTAG_nTRST_PIO1_2;
__IO LPC_REG_PIOnms JTAG_nTRST;
__IO LPC_REG_PIOnms PIO1_2;
};
__IO LPC_REG_PIOnms PIO3_0;
__IO LPC_REG_PIOnms PIO3_1;
__IO LPC_REG_PIOnms PIO2_3;
union {
__IO LPC_REG_PIOnms ARM_SWDIO_PIO1_3;
__IO LPC_REG_PIOnms ARM_SWDIO;
__IO LPC_REG_PIOnms PIO1_3;
};
__IO LPC_REG_PIOnms PIO1_4;
__IO LPC_REG_PIOnms PIO1_11;
__IO LPC_REG_PIOnms PIO3_2;
__IO LPC_REG_PIOnms PIO1_5;
union {
__IO LPC_REG_PIOnms PIO1_6;
__IO LPC_REG_PIOnms RXD;
};
union {
__IO LPC_REG_PIOnms PIO1_7;
__IO LPC_REG_PIOnms TXD;
};
__IO LPC_REG_PIOnms PIO3_3;
__IO LPC_REG_SCK_LOCs SCK_LOC;
__IO LPC_REG_DSR_LOCs DSR_LOC;
__IO LPC_REG_DCD_LOCs DCD_LOC;
__IO LPC_REG_RI_LOCs RI_LOC;
}LPCS_IOCON, *LPCPS_IOCON;
#define LPC_BASE_IOCON ((LPCPS_IOCON) LPC_IOCON_BASE)//定义硬件结构指针(硬件地址)
#define IOCON (*LPC_BASE_IOCON)//定位全局结构变量IOCON
//============================================
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_PINs IS;//端口n的中断触发寄存器(R/W)
__IO LPC_REG_PINs IBE;//端口n的中断边沿寄存器(R/W)
__IO LPC_REG_PINs IEV;//端口n的中断事件寄存器(R/W)
__IO LPC_REG_PINs IE;//端口n的中断屏蔽寄存器(R/W)
__IO LPC_REG_PINs RIS;//端口n的原始中断状态寄存器(R/W)
__IO LPC_REG_PINs MIS;//端口n的屏蔽中断状态寄存器(R/W)
__IO LPC_REG_PINs IC;//端口n的中断清除寄存器(R/W)
LPC_REG RESERVED2[8184];//保留
}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)//定义硬件结构指针(硬件地址)
//结构访问P1.DIR.Bits.Pin2 = 1;
#define P0 (*LPC_BASE_GPIO0)//定位全局结构变量P0
#define P1 (*LPC_BASE_GPIO1)//定位全局结构变量P1
#define P2 (*LPC_BASE_GPIO2)//定位全局结构变量P2
#define P3 (*LPC_BASE_GPIO3)//定位全局结构变量P3
//宏定义模拟数组访问Px(x).DIR.Bits.Pin2 = 1;
#define LPC_BASE_GPIOx(x) ((LPCPS_GPIO)(LPC_GPIO0_BASE + (x * (LPC_GPIO1_BASE - LPC_GPIO0_BASE))))//定义硬件结构指针(硬件地址)
#define Px(x) (*(LPC_BASE_GPIOx(x)))//定位全局结构变量Px
//============================================
typedef struct _LPCS_PIO {//通用I/O口
union {
__IO LPCS_GPIO PORT[4];//真正的数组访问PIO.PORT[x].DIR.Bits.Pin2 = 1;
struct {//直接访问PIO.PORT2.DIR.Bits.Pin2 = 1;
__IO LPCS_GPIO PORT0;
__IO LPCS_GPIO PORT1;
__IO LPCS_GPIO PORT2;
__IO LPCS_GPIO PORT3;
};
};
}LPCS_PIO, *LPCPS_PIO;
#define LPC_BASE_PIO ((LPCPS_PIO) LPC_GPIO0_BASE)//定义硬件结构指针(硬件地址)
#define PIO (*LPC_BASE_PIO)//定位全局结构变量PIO
//============================================
typedef volatile struct
{
LPC_REG WAKEUP0_IRQn: 1;//0
LPC_REG WAKEUP1_IRQn: 1;//1
LPC_REG WAKEUP2_IRQn: 1;//2
LPC_REG WAKEUP3_IRQn: 1;//3
LPC_REG WAKEUP4_IRQn: 1;//4
LPC_REG WAKEUP5_IRQn: 1;//5
LPC_REG WAKEUP6_IRQn: 1;//6
LPC_REG WAKEUP7_IRQn: 1;//7
LPC_REG WAKEUP8_IRQn: 1;//8
LPC_REG WAKEUP9_IRQn: 1;//9
LPC_REG WAKEUP10_IRQn: 1;//10
LPC_REG WAKEUP11_IRQn: 1;//11
LPC_REG WAKEUP12_IRQn: 1;//12
LPC_REG RESERVED0: 1;//(13)
LPC_REG SSP1_IRQn: 1;//14
LPC_REG I2C_IRQn: 1;//15
LPC_REG TIMER_16_0_IRQn: 1;//16
LPC_REG TIMER_16_1_IRQn: 1;//17
LPC_REG TIMER_32_0_IRQn: 1;//18
LPC_REG TIMER_32_1_IRQn: 1;//19
LPC_REG SSP0_IRQn: 1;//20
LPC_REG UART_IRQn: 1;//21
LPC_REG RESERVED1: 2;//(22,23)
LPC_REG ADC_IRQn: 1;//24
LPC_REG WDT_IRQn: 1;//25
LPC_REG BOD_IRQn: 1;//26
LPC_REG RESERVED2: 1;//(27)
LPC_REG EINT3_IRQn: 1;//28
LPC_REG EINT2_IRQn: 1;//29
LPC_REG EINT1_IRQn: 1;//30
LPC_REG EINT0_IRQn: 1;//31
}LPC_NVIC_BITs;
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_NVIC_BITs Bits;
}LPC_NVIC_REG_BITs;
typedef struct _LPCS_NVIC {
__IO LPC_NVIC_REG_BITs ISER;
LPC_REG RESERVED0[31];
__IO LPC_NVIC_REG_BITs ICER;
LPC_REG RSERVED1[31];
__IO LPC_NVIC_REG_BITs ISPR;
LPC_REG RESERVED2[31];
__IO LPC_NVIC_REG_BITs ICPR;
LPC_REG RESERVED3[31];
LPC_REG RESERVED4[64];
union {
__IO LPC_REG_BITs IPR[8];//0xE000E400~0xE000E41C
struct {//优先级
__IO LPC_REG_BITs IPR0;//0~3 0xE000E400
__IO LPC_REG_BITs IPR1;//4~7
__IO LPC_REG_BITs IPR2;//8~11
__IO LPC_REG_BITs IPR3;//12~15
__IO LPC_REG_BITs IPR4;//16~19
__IO LPC_REG_BITs IPR5;//20~23
__IO LPC_REG_BITs IPR6;//24~27
__IO LPC_REG_BITs IPR7;//28~31 EINT3_IRQn~EINT0_IRQn 0xE000E41C
};
};
}LPCS_NVIC, *LPCPS_NVIC;
#define LPC_BASE_NVIC ((LPCPS_NVIC) 0xE000E100)//定义硬件结构指针(硬件地址)
#define nVIC (*LPC_BASE_NVIC)//定位全局结构变量nVIC
#define setNVIC_Priority(vic, bit) nVIC.IPR[(vic) >> 2].Regs |= (bit << 6) << (((vic) & 3) << 3)
//============================================
typedef enum
{
SYSCON_BootLoader = 0,//
SYSCON_RAM = 1,//
SYSCON_FLASH = 2,//2~3
}IOCON_SYSCON_enum;
//============================================
typedef volatile struct
{
LPC_REG MAP: 2;
LPC_REG RESERVED: 30;
}LPC_SYSMEMREMAP_BITs;//I2C控制置位寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSMEMREMAP_BITs Bits;
}LPC_SYSMEMREMAP_REG_BITs;//I2C控制置位寄存器
typedef volatile struct
{
LPC_REG SSP0_RST_N: 1;
LPC_REG I2C0_RST_N: 1;
LPC_REG SSP1_RST_N: 1;
LPC_REG RESERVED: 29;
}LPC_PRESETCTRL_BITs;//外设复位控制
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PRESETCTRL_BITs Bits;
}LPC_PRESETCTRL_REG_BITs;//外设复位控制
typedef volatile struct
{
LPC_REG MSEL: 5;//反馈分频器值
LPC_REG PSEL: 2;//后置分频器速率P
LPC_REG DIRECT: 1;//直接CCO 时钟输出控制
LPC_REG BYPASS: 1;//输入时钟旁路控制
LPC_REG RESERVED: 23;
}LPC_SYSPLLCTRL_BITs;//系统PLL控制
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSPLLCTRL_BITs Bits;
}LPC_SYSPLLCTRL_REG_BITs;//系统PLL控制
typedef volatile struct
{
LPC_REG LOCK: 1; //PLL 锁定状态
LPC_REG RESERVED: 31;
}LPC_SYSPLLSTAT_BITs;//系统PLL状态
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSPLLSTAT_BITs Bits;
}LPC_SYSPLLSTAT_REG_BITs;//系统PLL状态
typedef volatile struct
{
LPC_REG BYPASS: 1; //旁路系统振荡器
LPC_REG FREQRANGE: 1; //低功耗振荡器的频率范围
LPC_REG RESERVED: 30;
}LPC_SYSOSCCTRL_BITs;//系统振荡器控制检测器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSOSCCTRL_BITs Bits;
}LPC_SYSOSCCTRL_REG_BITs;//系统振荡器控制检测器
typedef volatile struct
{
LPC_REG DIVSEL: 5; //选择将Fclkana 分频成wdt_osc_clk 的分频器
LPC_REG FREQSEL: 4; //选择看门狗振荡器模拟输出频率
LPC_REG RESERVED: 23;
}LPC_WDTOSCCTRL_BITs;//看门狗振荡器控制
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_WDTOSCCTRL_BITs Bits;
}LPC_WDTOSCCTRL_REG_BITs;//看门狗振荡器控制
typedef volatile struct
{
LPC_REG TRIM: 8; //调整值
LPC_REG RESERVED: 24;
}LPC_IRCCTRL_BITs;//内部共振晶体控制
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_IRCCTRL_BITs Bits;
}LPC_IRCCTRL_REG_BITs;//内部共振晶体控制
typedef volatile struct
{
LPC_REG POR: 1; //POR 复位状态
LPC_REG EXTRST: 1; //外部管脚复位状态
LPC_REG WDT: 1; //看门狗复位状态
LPC_REG BOD: 1; //掉电检测复位状态
LPC_REG SYSRST: 1; //系统复位状态
LPC_REG RESERVED: 27;
}LPC_SYSRESSTAT_BITs;//系统复位状态
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSRESSTAT_BITs Bits;
}LPC_SYSRESSTAT_REG_BITs;//系统复位状态
typedef volatile struct
{
LPC_REG SYSCLK: 1;
LPC_REG ROMCLK: 1;//使能ROM的时钟
LPC_REG RAMCLK: 1;//使能RAM的时钟
LPC_REG FLASH1CLK: 1;//使能Flash1的时钟
LPC_REG FLASH2CLK: 1;//使能Flash2的时钟
LPC_REG I2CCLK: 1;//使能I2C的时钟
LPC_REG GPIOCLK: 1;//使能GPIO的时钟
LPC_REG CT16B0CLK: 1;//使能16位计数器/定时器0的时钟
LPC_REG CT16B1CLK: 1;//使能16位计数器/定时器1的时钟
LPC_REG CT32B0CLK: 1;//使能32位计数器/定时器0的时钟
LPC_REG CT32B1CLK: 1;//使能32位计数器/定时器1的时钟
LPC_REG SSP0CLK: 1;//使能SSP0的时钟
LPC_REG UARTCLK: 1;//使能UART的时钟
LPC_REG ADCCLK: 1;//使能ADC 的时钟
LPC_REG RESERVED0: 1;
LPC_REG WDTCLK: 1;//使能WDT的时钟
LPC_REG IOCONCLK: 1;//使能IO 配置块的时钟
LPC_REG RESERVED1: 1;
LPC_REG SSP1CLK: 1;//使能SSP1的时钟
LPC_REG RESERVED2: 13;
}LPC_SYSAHBCLKCTRL_BITs;//系统AHB时钟控制
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSAHBCLKCTRL_BITs Bits;
}LPC_SYSAHBCLKCTRL_REG_BITs;//系统AHB时钟控制
//======================================================
typedef volatile struct
{
LPC_REG SEL: 2; //WDT时钟源
LPC_REG RESERVED: 30;
}LPC_SYSCONCLKSEL_BITs;//WDT时钟源选择寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSCONCLKSEL_BITs Bits;
}LPC_SYSCONCLKSEL_REG_BITs;//WDT时钟源选择寄存器
typedef volatile struct
{
LPC_REG ENA: 1; //使能WDT 时钟源更新
LPC_REG RESERVED: 31;
}LPC_SYSCONCLKUEN_BITs;//WDT时钟源更新使能
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSCONCLKUEN_BITs Bits;
}LPC_SYSCONCLKUEN_REG_BITs;//xxx时钟源更新使能
typedef volatile struct
{
LPC_REG DIV: 8; //xxx时钟分频器值
LPC_REG RESERVED: 24;
}LPC_SYSCONCLKDIV_BITs;//xxx时钟分频寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSCONCLKDIV_BITs Bits;
}LPC_SYSCONCLKDIV_REG_BITs;//xxx时钟分频寄存器
//=============================================================
typedef volatile struct
{
LPC_REG CAPPIO0_0: 1;//原始复位状态输入PIO0_0
LPC_REG CAPPIO0_1: 1;//原始复位状态输入PIO0_1
LPC_REG CAPPIO0_2: 1;//原始复位状态输入PIO0_2
LPC_REG CAPPIO0_3: 1;//原始复位状态输入PIO0_3
LPC_REG CAPPIO0_4: 1;//原始复位状态输入PIO0_4
LPC_REG CAPPIO0_5: 1;//原始复位状态输入PIO0_5
LPC_REG CAPPIO0_6: 1;//原始复位状态输入PIO0_6
LPC_REG CAPPIO0_7: 1;//原始复位状态输入PIO0_7
LPC_REG CAPPIO0_8: 1;//原始复位状态输入PIO0_8
LPC_REG CAPPIO0_9: 1;//原始复位状态输入PIO0_9
LPC_REG CAPPIO0_10: 1;//原始复位状态输入PIO0_10
LPC_REG CAPPIO0_11: 1;//原始复位状态输入PIO0_11
LPC_REG CAPPIO1_0: 1;//原始复位状态输入PIO1_0
LPC_REG CAPPIO1_1: 1;//原始复位状态输入PIO1_1
LPC_REG CAPPIO1_2: 1;//原始复位状态输入PIO1_2
LPC_REG CAPPIO1_3: 1;//原始复位状态输入PIO1_3
LPC_REG CAPPIO1_4: 1;//原始复位状态输入PIO1_4
LPC_REG CAPPIO1_5: 1;//原始复位状态输入PIO1_5
LPC_REG CAPPIO1_6: 1;//原始复位状态输入PIO1_6
LPC_REG CAPPIO1_7: 1;//原始复位状态输入PIO1_7
LPC_REG CAPPIO1_8: 1;//原始复位状态输入PIO1_8
LPC_REG CAPPIO1_9: 1;//原始复位状态输入PIO1_9
LPC_REG CAPPIO1_10: 1;//原始复位状态输入PIO1_10
LPC_REG CAPPIO1_11: 1;//原始复位状态输入PIO1_11
LPC_REG CAPPIO2_0: 1;//原始复位状态输入PIO2_0
LPC_REG CAPPIO2_1: 1;//原始复位状态输入PIO2_1
LPC_REG CAPPIO2_2: 1;//原始复位状态输入PIO2_2
LPC_REG CAPPIO2_3: 1;//原始复位状态输入PIO2_3
LPC_REG CAPPIO2_4: 1;//原始复位状态输入PIO2_4
LPC_REG CAPPIO2_5: 1;//原始复位状态输入PIO2_5
LPC_REG CAPPIO2_6: 1;//原始复位状态输入PIO2_6
LPC_REG CAPPIO2_7: 1;//原始复位状态输入PIO2_7
}LPC_PIOPORCAP0_BITs;//POR捕获PIO状态寄存器0
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PIOPORCAP0_BITs Bits;
}LPC_PIOPORCAP0_REG_BITs;//POR捕获PIO状态寄存器0
typedef volatile struct
{
LPC_REG CAPPIO2_8: 1;//原始复位状态输入PIO2_8
LPC_REG CAPPIO2_9: 1;//原始复位状态输入PIO2_9
LPC_REG CAPPIO2_10: 1;//原始复位状态输入PIO2_10
LPC_REG CAPPIO2_11: 1;//原始复位状态输入PIO2_11
LPC_REG CAPPIO3_0: 1;//原始复位状态输入PIO3_0
LPC_REG CAPPIO3_1: 1;//原始复位状态输入PIO3_1
LPC_REG CAPPIO3_2: 1;//原始复位状态输入PIO3_2
LPC_REG CAPPIO3_3: 1;//原始复位状态输入PIO3_3
LPC_REG CAPPIO3_4: 1;//原始复位状态输入PIO3_4
LPC_REG CAPPIO3_5: 1;//原始复位状态输入PIO3_5
LPC_REG RESERVED: 22;
}LPC_PIOPORCAP1_BITs;//POR捕获PIO状态寄存器1
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PIOPORCAP1_BITs Bits;
}LPC_PIOPORCAP1_REG_BITs;//POR捕获PIO状态寄存器0
typedef volatile struct
{
LPC_REG BODRSTLEV: 2; //BOD复位电平
LPC_REG BODINTVAL: 2; //BOD中断电平
LPC_REG BODRSTENA: 1; //BOD复位使能
LPC_REG RESERVED: 27;
}LPC_BODCTRL_BITs;//BOD控制寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_BODCTRL_BITs Bits;
}LPC_BODCTRL_REG_BITs;//BOD控制寄存器
typedef volatile struct
{
LPC_REG CAL: 26; //系统节拍校准值
LPC_REG RESERVED: 6;
}LPC_SYSTCKCAL_BITs;//系统节拍定时器校准寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_SYSTCKCAL_BITs Bits;
}LPC_SYSTCKCAL_REG_BITs;//系统节拍定时器校准寄存器
//=====================================================================
typedef volatile struct
{
LPC_REG APRPIO0_0: 1; //起始逻辑输入PIO0_0边沿选择
LPC_REG APRPIO0_1: 1; //起始逻辑输入PIO0_1边沿选择
LPC_REG APRPIO0_2: 1; //起始逻辑输入PIO0_2边沿选择
LPC_REG APRPIO0_3: 1; //起始逻辑输入PIO0_3边沿选择
LPC_REG APRPIO0_4: 1; //起始逻辑输入PIO0_4边沿选择
LPC_REG APRPIO0_5: 1; //起始逻辑输入PIO0_5边沿选择
LPC_REG APRPIO0_6: 1; //起始逻辑输入PIO0_6边沿选择
LPC_REG APRPIO0_7: 1; //起始逻辑输入PIO0_7边沿选择
LPC_REG APRPIO0_8: 1; //起始逻辑输入PIO0_8边沿选择
LPC_REG APRPIO0_9: 1; //起始逻辑输入PIO0_9边沿选择
LPC_REG APRPIO0_10: 1; //起始逻辑输入PIO0_10边沿选择
LPC_REG APRPIO0_11: 1; //起始逻辑输入PIO0_11边沿选择
LPC_REG APRPIO1_0: 1; //起始逻辑输入PIO1_0边沿选择
LPC_REG RESERVED: 19;
}LPC_STARTAPRP0_BITs;//逻辑边沿寄存器0
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STARTAPRP0_BITs Bits;
}LPC_STARTAPRP0_REG_BITs;//逻辑边沿寄存器0
//================================================================
typedef volatile struct
{
LPC_REG ERPIO0_0: 1; //起始逻辑输入PIO0_0起始信号
LPC_REG ERPIO0_1: 1; //起始逻辑输入PIO0_1起始信号
LPC_REG ERPIO0_2: 1; //起始逻辑输入PIO0_2起始信号
LPC_REG ERPIO0_3: 1; //起始逻辑输入PIO0_3起始信号
LPC_REG ERPIO0_4: 1; //起始逻辑输入PIO0_4起始信号
LPC_REG ERPIO0_5: 1; //起始逻辑输入PIO0_5起始信号
LPC_REG ERPIO0_6: 1; //起始逻辑输入PIO0_6起始信号
LPC_REG ERPIO0_7: 1; //起始逻辑输入PIO0_7起始信号
LPC_REG ERPIO0_8: 1; //起始逻辑输入PIO0_8起始信号
LPC_REG ERPIO0_9: 1; //起始逻辑输入PIO0_9起始信号
LPC_REG ERPIO0_10: 1; //起始逻辑输入PIO0_10起始信号
LPC_REG ERPIO0_11: 1; //起始逻辑输入PIO0_11起始信号
LPC_REG ERPIO1_0: 1; //起始逻辑输入PIO1_0起始信号
LPC_REG RESERVED: 19;
}LPC_STARTERP0_BITs;//起始逻辑复位寄存器0
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STARTERP0_BITs Bits;
}LPC_STARTERP0_REG_BITs;//起始逻辑复位寄存器0
//================================================================
typedef volatile struct
{
LPC_REG RSRPIO0_0: 1; //起始逻辑输入PIO0_0起始信号复位
LPC_REG RSRPIO0_1: 1; //起始逻辑输入PIO0_1起始信号复位
LPC_REG RSRPIO0_2: 1; //起始逻辑输入PIO0_2起始信号复位
LPC_REG RSRPIO0_3: 1; //起始逻辑输入PIO0_3起始信号复位
LPC_REG RSRPIO0_4: 1; //起始逻辑输入PIO0_4起始信号复位
LPC_REG RSRPIO0_5: 1; //起始逻辑输入PIO0_5起始信号复位
LPC_REG RSRPIO0_6: 1; //起始逻辑输入PIO0_6起始信号复位
LPC_REG RSRPIO0_7: 1; //起始逻辑输入PIO0_7起始信号复位
LPC_REG RSRPIO0_8: 1; //起始逻辑输入PIO0_8起始信号复位
LPC_REG RSRPIO0_9: 1; //起始逻辑输入PIO0_9起始信号复位
LPC_REG RSRPIO0_10: 1; //起始逻辑输入PIO0_10起始信号复位
LPC_REG RSRPIO0_11: 1; //起始逻辑输入PIO0_11起始信号复位
LPC_REG RSRPIO1_0: 1; //起始逻辑输入PIO1_0起始信号复位
LPC_REG RESERVED: 19;
}LPC_STARTRSRP0CLR_BITs;//起始逻辑复位寄存器0
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STARTRSRP0CLR_BITs Bits;
}LPC_STARTRSRP0CLR_REG_BITs;//起始逻辑复位寄存器0
//================================================================
typedef volatile struct
{
LPC_REG SRPIO0_0: 1; //起始逻辑输入PIO0_0起始信号状态
LPC_REG SRPIO0_1: 1; //起始逻辑输入PIO0_1起始信号状态
LPC_REG SRPIO0_2: 1; //起始逻辑输入PIO0_2起始信号状态
LPC_REG SRPIO0_3: 1; //起始逻辑输入PIO0_3起始信号状态
LPC_REG SRPIO0_4: 1; //起始逻辑输入PIO0_4起始信号状态
LPC_REG SRPIO0_5: 1; //起始逻辑输入PIO0_5起始信号状态
LPC_REG SRPIO0_6: 1; //起始逻辑输入PIO0_6起始信号状态
LPC_REG SRPIO0_7: 1; //起始逻辑输入PIO0_7起始信号状态
LPC_REG SRPIO0_8: 1; //起始逻辑输入PIO0_8起始信号状态
LPC_REG SRPIO0_9: 1; //起始逻辑输入PIO0_9起始信号状态
LPC_REG SRPIO0_10: 1; //起始逻辑输入PIO0_10起始信号状态
LPC_REG SRPIO0_11: 1; //起始逻辑输入PIO0_11起始信号状态
LPC_REG SRPIO1_0: 1; //起始逻辑输入PIO1_0起始信号状态
LPC_REG RESERVED: 19;
}LPC_STARTSRP0_BITs;//起始逻辑状态寄存器0
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_STARTSRP0_BITs Bits;
}LPC_STARTSRP0_REG_BITs;//起始逻辑状态寄存器0
//================================================================
typedef volatile struct
{
LPC_REG IRCOUT_PD: 1; //深度睡眠模式下的IRC 振荡器输出掉电控制
LPC_REG IRC_PD: 1; //深度睡眠模式下的IRC 振荡器掉电控制
LPC_REG FLASH_PD: 1; //深度睡眠模式下的Flash 掉电控制
LPC_REG BOD_PD: 1; //深度睡眠模式下的BOD 掉电控制
LPC_REG ADC_PD: 1; //深度睡眠模式下的ADC 掉电控制
LPC_REG SYSOSC_PD: 1; //深度睡眠模式下的系统振荡器掉电控制
LPC_REG WDT_PD: 1; //深度睡眠模式下的WDT 掉电控制
LPC_REG SYSPLL_PD: 1; //深度睡眠模式下的系统PLL 掉电控制
LPC_REG RESERVED0: 1;
LPC_REG SLEEP0: 1;//在深度睡眠模式下该位必须为1
LPC_REG RESERVED1: 1;
LPC_REG SLEEP1: 1;//在深度睡眠模式下该位必须为1
LPC_REG RESERVED2: 20;
}LPC_PDSLEEPCFG_BITs;//深度睡眠模式配置寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PDSLEEPCFG_BITs Bits;
}LPC_PDSLEEPCFG_REG_BITs;//深度睡眠模式配置寄存器
typedef struct _LPCS_SYSCON {
__IO LPC_SYSMEMREMAP_REG_BITs SYSMEMREMAP;//系统存储器重映射
__IO LPC_PRESETCTRL_REG_BITs PRESETCTRL;//外设复位控制
__IO LPC_SYSPLLCTRL_REG_BITs SYSPLLCTRL;//系统PLL控制
__IO LPC_SYSPLLSTAT_REG_BITs SYSPLLSTAT;//系统PLL状态
LPC_REG RESERVED0[4];
__IO LPC_SYSOSCCTRL_REG_BITs SYSOSCCTRL;//系统振荡器控制检测器
__IO LPC_WDTOSCCTRL_REG_BITs WDTOSCCTRL;//看门狗振荡器控制
__IO LPC_IRCCTRL_REG_BITs IRCCTRL;//内部共振晶体控制
LPC_REG RESERVED1[1];
__IO LPC_SYSRESSTAT_REG_BITs SYSRESSTAT;//系统复位状态
LPC_REG RESERVED2[3];
__IO LPC_SYSCONCLKSEL_REG_BITs SYSPLLCLKSEL;//系统PLL时钟源选择
__IO LPC_SYSCONCLKUEN_REG_BITs SYSPLLCLKUEN;//系统PLL 时钟源更新使能
LPC_REG RESERVED3[10];
__IO LPC_SYSCONCLKSEL_REG_BITs MAINCLKSEL;//主时钟源选择
__IO LPC_SYSCONCLKUEN_REG_BITs MAINCLKUEN;//主时钟源更新使能
__IO LPC_SYSCONCLKDIV_REG_BITs SYSAHBCLKDIV;//系统AHB 时钟分频
LPC_REG RESERVED4[1];
__IO LPC_SYSAHBCLKCTRL_REG_BITs SYSAHBCLKCTRL;//系统AHB时钟控制
LPC_REG RESERVED5[4];
__IO LPC_SYSCONCLKDIV_REG_BITs SSP0CLKDIV;//SSP0 时钟分频寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs UARTCLKDIV;//UART时钟分频寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs SSP1CLKDIV;//SSP1 时钟分频寄存器
LPC_REG RESERVED6[4];
__IO LPC_SYSCONCLKDIV_REG_BITs SYSTICKCLKDIV;//SYSTICK时钟分频寄存器
LPC_REG RESERVED7[7];
__IO LPC_SYSCONCLKSEL_REG_BITs WDTCLKSEL;//WDT时钟源选择寄存器
__IO LPC_SYSCONCLKUEN_REG_BITs WDTCLKUEN;//WDT时钟源更新使能寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs WDTCLKDIV;//WDT时钟分频寄存器
LPC_REG RESERVED8[1];
__IO LPC_SYSCONCLKSEL_REG_BITs CLKOUTCLKSEL;//CLKOUT时钟源选择寄存器
__IO LPC_SYSCONCLKUEN_REG_BITs CLKOUTUEN;//CLKOUT时钟源更新使能寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs CLKOUTDIV;//CLKOUT时钟分频寄存器
LPC_REG RESERVED9[5];
__IO LPC_PIOPORCAP0_REG_BITs PIOPORCAP0;//POR捕获PIO状态寄存器0
__IO LPC_PIOPORCAP1_REG_BITs PIOPORCAP1;//POR捕获PIO状态寄存器1
LPC_REG RESERVED10[18];
__IO LPC_BODCTRL_REG_BITs BODCTRL;//BOD控制寄存器
LPC_REG RESERVED11[1];
__IO LPC_SYSTCKCAL_REG_BITs SYSTCKCAL;//系统节拍定时器校准寄存器
LPC_REG RESERVED12[41];
__IO LPC_STARTAPRP0_REG_BITs STARTAPRP0;//起始逻辑边沿控制寄存器0
__IO LPC_STARTERP0_REG_BITs STARTERP0;//起始逻辑复位寄存器0
__IO LPC_STARTRSRP0CLR_REG_BITs STARTRSRP0CLR;//始逻辑复位寄存器0
__IO LPC_STARTSRP0_REG_BITs STARTSRP0;//起始逻辑状态寄存器0
LPC_REG RESERVED14[8];
__IO LPC_PDSLEEPCFG_REG_BITs PDSLEEPCFG;//深度睡眠模式配置寄存器
__IO LPC_PDSLEEPCFG_REG_BITs PDAWAKECFG;//唤醒配置寄存器
__IO LPC_PDSLEEPCFG_REG_BITs PDRUNCFG;//掉电配置寄存器
LPC_REG RESERVED15[110];
__I LPC_REG_BITs DEVICE_ID;//器件ID寄存器
}LPCS_SYSCON, *LPCPS_SYSCON;
#define LPC_BASE_SYSCON ((LPCPS_SYSCON) LPC_SYSCON_BASE)//定义硬件结构指针(硬件地址)
#define SYSCON (*LPC_BASE_SYSCON)//定位全局结构变量SYSCON
//================================================================
typedef volatile struct
{
LPC_REG RESERVED0: 1;
LPC_REG DPDEN: 1; //深度掉电模式的使能位
LPC_REG RESERVED1: 9;
LPC_REG DPDFLAG: 1;//深度掉电标记
LPC_REG RESERVED2: 20;
}LPC_PCON_BITs;//电源控制寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_PCON_BITs Bits;
}LPC_PCON_REG_BITs;//电源控制寄存器
//============================================
typedef struct _LPCS_PMU {
__IO LPC_PCON_REG_BITs PCON;//电源控制寄存器
union {
__IO LPC_REG_BITs GPREG[5];//通用寄存器0~4
struct {
__IO LPC_REG_BITs GPREG0;//通用寄存器0
__IO LPC_REG_BITs GPREG1;//通用寄存器1
__IO LPC_REG_BITs GPREG2;//通用寄存器2
__IO LPC_REG_BITs GPREG3;//通用寄存器3
__IO LPC_REG_BITs GPREG4;//通用寄存器4
};
};
}LPCS_PMU, *LPCPS_PMU;
#define LPC_BASE_PMU ((LPCPS_PMU) LPC_PMU_BASE)//定义硬件结构指针(硬件地址)
#define PMU (*LPC_BASE_PMU)//定位全局结构变量PMU 电源管理单元
//================================================================
typedef volatile struct
{
LPC_REG WDEN: 1;//WDEN看门狗使能位(只能置位)。为1时,看门狗运行
LPC_REG WDRESET: 1; //WDRESET看门狗复位使能位(只能置位)。为1时,看门狗超时会引起芯片复位
LPC_REG WDTOF: 1;//WDTOF看门狗超时标志。只在看门狗定时器超时时置位,由软件清零
LPC_REG WDINT: 1;//WDINT看门狗中断标志(只读,不能被软件清零)
LPC_REG RESERVED: 28;
}LPC_WDMOD_BITs;//看门狗模式寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_WDMOD_BITs Bits;
}LPC_WDMOD_REG_BITs;//看门狗模式寄存器
//============================================
typedef struct _LPCS_WDT {
__IO LPC_WDMOD_REG_BITs MOD;//看门狗模式寄存器
__IO LPC_REG_BITs TC;//看门狗定时器常数寄存器
__O LPC_REG_BITs FEED;//看门狗喂狗序列寄存器
__I LPC_REG_BITs TV;//看门狗定时器值寄存器
}LPCS_WDT, *LPCPS_WDT;
#define LPC_BASE_WDT ((LPCPS_WDT) LPC_WDT_BASE)//定义硬件结构指针(硬件地址)
#define WDT (*LPC_BASE_WDT)//定位全局结构变量PMU 电源管理单元
//================================================================
typedef volatile struct
{
LPC_REG SEL: 8;//从AD7:0中选择采样和转换的输入脚
LPC_REG CLKDIV: 8; //将APB时钟(PCLK)进行(CLKDIV值+1)分频得到转换时钟
LPC_REG BURST: 1;//0-软件控制模式 1-硬件扫描模式
LPC_REG CLKS: 3;//转换结果的有效位数
LPC_REG RESERVED0: 4;
LPC_REG START: 3;//启动位
LPC_REG EDGE: 1;//启动转换
LPC_REG RESERVED1: 4;
}LPC_ADCCR_BITs;//A/D控制寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_ADCCR_BITs Bits;
}LPC_ADCCR_REG_BITs;//A/D控制寄存器
//================================================================
typedef volatile struct
{
LPC_REG RESERVED0: 6;
LPC_REG RESULT: 10;//ADC转换结果
LPC_REG RESERVED1: 8;
LPC_REG CHN: 3;//转换通道
LPC_REG RESERVED2: 3;
LPC_REG OVERRUN: 1;
LPC_REG DONE: 1;//A/D转换结束时该位置1,该位在读取该寄存器和写ADCR时清零。
//如果在转换过程中写ADCR,则该位置位并启动新的转换
}LPC_ADCGDR_BITs;//A/D全局数据寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_ADCGDR_BITs Bits;
}LPC_ADCGDR_REG_BITs;//A/D全局数据寄存器
//================================================================
typedef volatile struct
{
LPC_REG DONE0: 1;
LPC_REG DONE1: 1;
LPC_REG DONE2: 1;
LPC_REG DONE3: 1;
LPC_REG DONE4: 1;
LPC_REG DONE5: 1;
LPC_REG DONE6: 1;
LPC_REG DONE7: 1;
LPC_REG OVERRUN0: 1;
LPC_REG OVERRUN1: 1;
LPC_REG OVERRUN2: 1;
LPC_REG OVERRUN3: 1;
LPC_REG OVERRUN4: 1;
LPC_REG OVERRUN5: 1;
LPC_REG OVERRUN6: 1;
LPC_REG OVERRUN7: 1;
LPC_REG ADINT: 1;
LPC_REG RESERVED: 7;
}LPC_ADCSTAT_BITs;//A/D状态寄存器
typedef volatile struct
{
LPC_REG DONEx: 8;
LPC_REG OVERRUNx: 8;
LPC_REG ADINT: 1;
LPC_REG RESERVED: 7;
}LPC_ADCSTAT_BITx;//A/D状态寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_ADCSTAT_BITs Bits;
__IO LPC_ADCSTAT_BITx Bitx;
}LPC_ADCSTAT_REG_BITs;//A/D状态寄存器
//================================================================
typedef volatile struct
{
LPC_REG ADINTEN0: 1;
LPC_REG ADINTEN1: 1;
LPC_REG ADINTEN2: 1;
LPC_REG ADINTEN3: 1;
LPC_REG ADINTEN4: 1;
LPC_REG ADINTEN5: 1;
LPC_REG ADINTEN6: 1;
LPC_REG ADINTEN7: 1;
LPC_REG ADINTEN: 1;
LPC_REG RESERVED: 23;
}LPC_ADCINTEN_BITs;//A/D中断使能寄存器
typedef volatile struct
{
LPC_REG ADINTENx: 8;
LPC_REG ADINTEN: 1;
LPC_REG RESERVED: 23;
}LPC_ADCINTEN_BITx;//A/D中断使能寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_ADCINTEN_BITs Bits;
__IO LPC_ADCINTEN_BITx Bitx;
}LPC_ADCINTEN_REG_BITs;//A/D中断使能寄存器
//================================================================
typedef enum
{
ADCDR_RESULT = 6,
ADCDR_OVERRUN = 30,
ADCDR_DONE = 31
}ADCDR_enum;
typedef volatile struct
{
LPC_REG RESERVED0: 6;
LPC_REG RESULT: 10;//ADC转换结果
LPC_REG RESERVED1: 8;
LPC_REG RESERVED2: 3;
LPC_REG RESERVED3: 3;
LPC_REG OVERRUN: 1;
LPC_REG DONE: 1;//A/D转换结束时该位置1,该位在读取该寄存器和写ADCR时清零。
//如果在转换过程中写ADCR,则该位置位并启动新的转换
}LPC_ADCDR_BITs;//A/D通道0~7数据寄存器
typedef volatile union
{
__IO LPC_REG Regs;
__IO LPC_ADCGDR_BITs Bits;
}LPC_ADCDR_REG_BITs;//A/D通道0~7数据寄存器
//============================================
typedef volatile struct _LPCS_ADC {
__IO LPC_ADCCR_REG_BITs CR;//A/D控制寄存器
__IO LPC_ADCGDR_REG_BITs GDR;//A/D全局数据寄存器
LPC_REG RESERVED0;
__IO LPC_ADCINTEN_REG_BITs INTEN;//A/D中断使能寄存器
union {
__IO LPC_ADCDR_REG_BITs DR[8];//A/D通道0~7数据寄存器
struct {
__IO LPC_ADCDR_REG_BITs DR0;//A/D通道0数据寄存器
__IO LPC_ADCDR_REG_BITs DR1;//A/D通道1数据寄存器
__IO LPC_ADCDR_REG_BITs DR2;//A/D通道2数据寄存器
__IO LPC_ADCDR_REG_BITs DR3;//A/D通道3数据寄存器
__IO LPC_ADCDR_REG_BITs DR4;//A/D通道4数据寄存器
__IO LPC_ADCDR_REG_BITs DR5;//A/D通道5数据寄存器
__IO LPC_ADCDR_REG_BITs DR6;//A/D通道6数据寄存器
__IO LPC_ADCDR_REG_BITs DR7;//A/D通道7数据寄存器
};
};
__I LPC_ADCSTAT_REG_BITs STAT;//A/D状态寄存器
}LPCS_ADC, *LPCPS_ADC;
#define LPC_BASE_ADC ((LPCPS_ADC) LPC_ADC_BASE)//定义硬件结构指针(硬件地址)
#define ADC (*LPC_BASE_ADC)//定位全局结构变量PMU
#ifdef __cplusplus
}
#endif
#endif /* __LPC11xxcfg_H__ */ |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|