hotpower 发表于 2010-12-5 02:33:34

菜农LPC11xx学习笔记1

/*--------------------------------------------------------------------------
文   件   名 :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_REGRegs;
__IO LPC_BITs Bits;
}LPC_REG_BITs;

typedef volatile union
{
__IO LPC_REGRegs;
__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_REGRegs;
__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_REGRegs;
__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_REGRegs;
__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_REGRegs;
__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_REGRegs;
__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控制置位寄存器
__ILPC_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占空比寄存器低半字
__OLPC_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
__ILPC_REG_BITs DATA_BUFFER;//数据缓冲寄存器
union {
          __IO LPC_REG_BITs MASK;//从地址屏蔽寄存器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;//接收缓冲
    __OLPC_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控制
__ILPC_LSR_REG_BITs LSR;//线状态
__ILPC_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;//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;//匹配寄存器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;//捕获寄存器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个空位
__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_REGRegs;
__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_REGRegs;
__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_REGRegs;
__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_REGRegs;
__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_REGRegs;
__IO LPC_SCK_LOCs Bits;
}LPC_REG_RI_LOCs;
//=============================================
typedef struct _LPCS_IOCON {//IO配置寄存器
__IO LPC_REG_PIOnms PIO2_6;
       LPC_REG RESERVED0;
__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;
__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;//保留
__IO LPC_REG_PINs DATA;//端口n数据寄存器,其中PIOn_0到PIOn_11引脚可用(R/W)
       LPC_REG RESERVED1;//保留
__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;//保留
}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;//真正的数组访问PIO.PORT.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;
__IO LPC_NVIC_REG_BITs ICER;
       LPC_REG RSERVED1;
__IO LPC_NVIC_REG_BITs ISPR;
       LPC_REG RESERVED2;
__IO LPC_NVIC_REG_BITs ICPR;
       LPC_REG RESERVED3;
       LPC_REG RESERVED4;
union {
    __IO LPC_REG_BITs IPR;//0xE000E400~0xE000E41C
        struct {//优先级
            __IO LPC_REG_BITs IPR0;//0~30xE000E400
            __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_IRQn0xE000E41C
        };
};
}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;

__IO LPC_SYSOSCCTRL_REG_BITs SYSOSCCTRL;//系统振荡器控制检测器
__IO LPC_WDTOSCCTRL_REG_BITs WDTOSCCTRL;//看门狗振荡器控制
__IO LPC_IRCCTRL_REG_BITs IRCCTRL;//内部共振晶体控制
       LPC_REG RESERVED1;
__IO LPC_SYSRESSTAT_REG_BITs SYSRESSTAT;//系统复位状态
       LPC_REG RESERVED2;
__IO LPC_SYSCONCLKSEL_REG_BITs SYSPLLCLKSEL;//系统PLL时钟源选择
__IO LPC_SYSCONCLKUEN_REG_BITs SYSPLLCLKUEN;//系统PLL 时钟源更新使能
       LPC_REG RESERVED3;

__IO LPC_SYSCONCLKSEL_REG_BITs MAINCLKSEL;//主时钟源选择
__IO LPC_SYSCONCLKUEN_REG_BITs MAINCLKUEN;//主时钟源更新使能
__IO LPC_SYSCONCLKDIV_REG_BITs SYSAHBCLKDIV;//系统AHB 时钟分频
       LPC_REG RESERVED4;

__IO LPC_SYSAHBCLKCTRL_REG_BITs SYSAHBCLKCTRL;//系统AHB时钟控制
       LPC_REG RESERVED5;
__IO LPC_SYSCONCLKDIV_REG_BITs SSP0CLKDIV;//SSP0 时钟分频寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs UARTCLKDIV;//UART时钟分频寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs SSP1CLKDIV;//SSP1 时钟分频寄存器
       LPC_REG RESERVED6;

__IO LPC_SYSCONCLKDIV_REG_BITs SYSTICKCLKDIV;//SYSTICK时钟分频寄存器
       LPC_REG RESERVED7;

__IO LPC_SYSCONCLKSEL_REG_BITs WDTCLKSEL;//WDT时钟源选择寄存器
__IO LPC_SYSCONCLKUEN_REG_BITs WDTCLKUEN;//WDT时钟源更新使能寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs WDTCLKDIV;//WDT时钟分频寄存器
       LPC_REG RESERVED8;            
__IO LPC_SYSCONCLKSEL_REG_BITs CLKOUTCLKSEL;//CLKOUT时钟源选择寄存器
__IO LPC_SYSCONCLKUEN_REG_BITs CLKOUTUEN;//CLKOUT时钟源更新使能寄存器
__IO LPC_SYSCONCLKDIV_REG_BITs CLKOUTDIV;//CLKOUT时钟分频寄存器
       LPC_REG RESERVED9;

__IO LPC_PIOPORCAP0_REG_BITs PIOPORCAP0;//POR捕获PIO状态寄存器0
__IO LPC_PIOPORCAP1_REG_BITs PIOPORCAP1;//POR捕获PIO状态寄存器1
       LPC_REG RESERVED10;

__IO LPC_BODCTRL_REG_BITs BODCTRL;//BOD控制寄存器
       LPC_REG RESERVED11;
__IO LPC_SYSTCKCAL_REG_BITs SYSTCKCAL;//系统节拍定时器校准寄存器
       LPC_REG RESERVED12;         

__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;

__IO LPC_PDSLEEPCFG_REG_BITs PDSLEEPCFG;//深度睡眠模式配置寄存器
__IO LPC_PDSLEEPCFG_REG_BITs PDAWAKECFG;//唤醒配置寄存器
__IO LPC_PDSLEEPCFG_REG_BITs PDRUNCFG;//掉电配置寄存器
       LPC_REG RESERVED15;
__ILPC_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;//通用寄存器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;//看门狗定时器常数寄存器
__OLPC_REG_BITs FEED;//看门狗喂狗序列寄存器
__ILPC_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;//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数据寄存器
        };
};
__ILPC_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__ */

hotpower 发表于 2010-12-5 02:35:05

应用:main.cpp
#include "main.h"
volatile unsigned int SystemRamTest = 0x55aa55aa;//RAM不初始化

/*-------------------------------------------
注意:
1.全局类对象实例的构造函数运行级别高于main()
2.类的构造函数的运行次序与申请次序一样
--------------------------------------------*/
SystemObj System;//自动调用构造函数
SysTickObj SystemTick;//自动调用构造函数
TimerObjTimer;//自动调用构造函数
UartObj   Uart;//自动调用构造函数
I2cObj   I2c;//自动调用构造函数
WdtObj Wdt;//自动调用构造函数
TargetObj Target;//自动调用构造函数
/*-------------------------------------------
main()将在以上构造函数后才能运行
--------------------------------------------*/
int main()
{
unsigned char ch;
unsigned char Data;
int k;
/*
LPC_REG xxx;
ADC.DR.Bits.RESULT = 0x3ff;
ADC.DR.Regs = (0x3ff << ADCDR_RESULT);
ADC.DR1.Bits.RESULT = 0x3ff;
ADC.DR1.Regs = (0x3ff << ADCDR_RESULT);
ADC.DR2.Bits.RESULT = 0x3ff;
ADC.DR3.Regs = (0x3ff << ADCDR_RESULT);
ADC.DR2.Bits.RESULT = 0x3ff;
ADC.DR3.Regs = (0x3ff << ADCDR_RESULT);

ADC.INTEN.Bits.ADINTEN0 = 1;
ADC.INTEN.Bits.ADINTEN1 = 1;
ADC.INTEN.Bits.ADINTEN2 = 1;
ADC.INTEN.Bits.ADINTEN3 = 1;
ADC.INTEN.Bits.ADINTEN4 = 1;
ADC.INTEN.Bits.ADINTEN5 = 1;
ADC.INTEN.Bits.ADINTEN6 = 1;
ADC.INTEN.Bits.ADINTEN7 = 1;
xxx = ADC.INTEN.Regs;
ADC.INTEN.Bits.ADINTEN =0;
xxx = ADC.INTEN.Regs;
                __NOP();       
                __NOP();       
                __NOP();       

ADC.INTEN.Bitx.ADINTENx = 0;
xxx = ADC.INTEN.Regs;
ADC.INTEN.Bits.ADINTEN =1;
xxx = ADC.INTEN.Regs;
*/
        __enable_irq();

/*
//位域写法
        IOCON.TXD.Bits.FUNC = IOCON_TXD;
        IOCON.TXD.Bits.MODE = IOCON_PULLUP;
//寄存器写法
        IOCON.TXD.Regs = (IOCON_TXD << IOCON_FUNC)
                       | (IOCON_PULLUP << IOCON_MODE);
//位域写法
        IOCON.RXD.Bits.FUNC = IOCON_RXD;
        IOCON.RXD.Bits.MODE = IOCON_PULLUP;
//寄存器写法
        IOCON.RXD.Regs = (IOCON_RXD << IOCON_FUNC)
                       | (IOCON_PULLUP << IOCON_MODE);
//位域写法
        IOCON.PIO2_6.Bits.FUNC = IOCON_PIO2_6;//选择PIO2.6为IO
        IOCON.PIO2_6.Bits.FUNC = IOCON_PIO;//选择PIO2.6为IO
        IOCON.PIO2_6.Bits.MODE = IOCON_PULLUP;//选择PIO2.6上拉电阻
        IOCON.PIO2_0.Bits.FUNC = IOCON_PIO2_0_SSEL1;//选择PIO2.0为SSEL1
        IOCON.PIO2_0.Bits.FUNC = IOCON_SSEL1;//选择PIO2.0为SSEL1
        P0.DIR.Bits.Pin2 = 1;
        Px(0).DIR.Bits.Pin2 = 1;
        Px(1).DIR.Bits.Pin8 = 1;
//最新写法
PIO.PORT.DIR.Regs = 1;
PIO.PORT1.DIR.Bits.Pin2 = 1;
*/
//
//读LM75
        I2c.SetAddress(0x90);//设置LM75器件地址
        I2c.WriteByte(1, Data);//写配置命令1
        I2c.ReadByte(0, Data);//读温度命令0
        Uart.Send(Data);//发送串口数据
//读写AT24C16       
        I2c.SetAddress(0xa0);//设置AT24C16器件地址
        for (int i = 1; i < 16; i ++)//延时
        {
                I2c.WriteByte(i, i);//写入EEPROM一个字节
                I2c.WriteWait();//延时等待写入完成
                I2c.ReadByte(i, Data);//读出EEPROM一个字节
                Uart.Send(Data);//发送串口数据
        }
        while(1) {//主循环
                if (SystemTick.Timer.Bits.T1000mS)
                {//每秒读取温度一次
                        SystemTick.Timer.Bits.T1000mS = 0;
//读LM75
                        I2c.SetAddress(0x90);//设置LM75器件地址,公有只写属性
                        I2c.WriteByte(1, Data);//写配置命令1
                        I2c.ReadByte(0, Data);//读温度命令0
                        k = 0;
//                        if (I2c.State == I2C_BUS_OK) {//不能访问私有属性State
                        if (I2c.GetState() == I2C_BUS_OK) {//成功,通过只读属性GetState()访问State
                                k ++;
                  }
                        Uart.Send(Data);//发送串口数据
//读写AT24C16       
                        I2c.SetAddress(0xa0);//设置AT24C16器件地址,公有只写属性
                        for (int i = 1; i < 16; i ++)//延时
                        {
                                I2c.ReadByte(i, Data);//读出EEPROM一个字节
                                if (I2c.GetState() == I2C_BUS_OK) {//成功
                                        k ++;
                          }
                                Uart.Send(Data);//发送串口数据
                        }
                        if (k == 16)
                        {
                                PortLed1.DATA.Bits.PinLed1 ^= 1;//LED1闪烁
                        }
                        else
                        {
                                PortLed1.DATA.Bits.PinLed1 = 1;//LED1灭
                        }
                }
                if (SystemTick.Timer.Bits.T500mS)
                {//每半秒闪烁一次
                        SystemTick.Timer.Bits.T500mS = 0;
//                PortLed2.DATA.Bits.PinLed2 ^= 1;
//                P0.DATA.Bits.Pin2 ^= 1;
//                Px(0).DATA.Bits.Pin2 ^= 1;
//                PIO.PORT.DATA.Bits.Pin2 ^= 1;//LED2
                        PIO.PORT0.DATA.Bits.Pin2 ^= 1;//LED2
//                PortLed3.DATA.Bits.PinLed3 ^= 1;
//                P2.DATA.Bits.Pin7 ^= 1;
//                Px(2).DATA.Bits.Pin7 ^= 1;
//                PIO.PORT.DATA.Bits.Pin7 ^= 1;//LED3
                        PIO.PORT2.DATA.Bits.Pin7 ^= 1;//LED3
//                PortLed4.DATA.Bits.PinLed4 ^= 1;
//                P2.DATA.Bits.Pin8 ^= 1;
//                Px(2).DATA.Bits.Pin8 ^= 1;
//                PIO.PORT2.DATA.Bits.Pin8 ^= 1;//LED4
                        PIO.PORT.DATA.Bits.Pin8 ^= 1;//LED4
//                PortLed5.DATA.Bits.PinLed5 ^= 1;
//                P2.DATA.Bits.Pin1 ^= 1;
//                Px(2).DATA.Bits.Pin1 ^= 1;
//                PIO.PORT2.DATA.Bits.Pin1 ^= 1;//LED5
                        PIO.PORT.DATA.Bits.Pin1 ^= 1;//LED5
//                PortLed6.DATA.Bits.PinLed6 ^= 1;
//                P1.DATA.Bits.Pin9 ^= 1;
//                Px(1).DATA.Bits.Pin9 ^= 1;
//                PIO.PORT1.DATA.Bits.Pin9 ^= 1;//LED6
                        PIO.PORT.DATA.Bits.Pin9 ^= 1;//LED6

                        if (!PortKey2.DATA.Bits.PinKey2)//Key2压下
                        {
                                PortLed8.DATA.Bits.PinLed8 ^= 1;//LED8闪烁
                        }
                        else
                        {
                                PortLed8.DATA.Bits.PinLed8 = 1;//LED8不亮
                        }
                }
                if (SystemTick.Timer.Bits.T20mS)
                {
                        SystemTick.Timer.Bits.T20mS = 0;
                        if (!PortKey1.DATA.Bits.PinKey1)//Key1压下
                        {
                                PortBeep.DATA.Bits.PinBeep ^= 1;//蜂鸣器响
                        }
                        else
                        {
                                PortBeep.DATA.Bits.PinBeep = 0;//蜂鸣器不响
                        }
                }
                if (Uart.Receive(ch))//不等待读串口数据到ch变量中
                {
                        Uart.Send(ch);//发送串口数据,即自发自收
                }       
        }
}

hotpower 发表于 2010-12-5 02:37:08

宏定义三板斧:Target.h

#include "main.h"

#ifndef __LPC11xxTarget_H__
#define __LPC11xxTarget_H__

#ifdef __cplusplus
extern "C" {
#endif


//KEY1宏定义三板斧
#define PioKey1   PIO2_6 //P2.6
#define PortKey1P2   //P2
#define PinKey1   Pin6   //Px.6
//KEY2宏定义三板斧
#define PioKey2   PIO2_0 //P2.0
#define PortKey2P2   //P2
#define PinKey2   Pin0   //Px.0

//LED1宏定义三板斧
#define PioLed1   PIO1_8 //P1.8
#define PortLed1P1   //P1
#define PinLed1   Pin8   //Px.8
//LED2宏定义三板斧
#define PioLed2   PIO0_2 //P0.2
#define PortLed2P0   //P0
#define PinLed2   Pin2   //Px.2
//LED3宏定义三板斧
#define PioLed3   PIO2_7 //P2.7
#define PortLed3P2   //P2
#define PinLed3   Pin7   //Px.7
//LED4宏定义三板斧
#define PioLed4   PIO2_8 //P2.8
#define PortLed4P2   //P2
#define PinLed4   Pin8   //Px.8
//LED5宏定义三板斧
#define PioLed5   PIO2_1 //P2.1
#define PortLed5P2   //P2
#define PinLed5   Pin1   //Px.1
//LED6宏定义三板斧
#define PioLed6   PIO1_9 //P1.9
#define PortLed6P1   //P1
#define PinLed6   Pin9   //Px.9
//LED7宏定义三板斧
#define PioLed7   PIO3_4 //P3.4
#define PortLed7P3   //P3
#define PinLed7   Pin4   //Px.4
//LED8宏定义三板斧
#define PioLed8   PIO3_5 //P3.5
#define PortLed8P3   //P3
#define PinLed8   Pin5   //Px.5
//BEEP宏定义三板斧
#define PioBeep   PIO0_8 //P0.8
#define PortBeepP0   //P0
#define PinBeep   Pin8   //Px.8

#define UART_BPS115200


class TargetObj {//系统类
public:
TargetObj(void);
private:
inline void TargetInit(void);
public:
private:
};

extern "C" void __irq WAKEUP_IRQHandler(void);
extern "C" void __irq PIOINT0_IRQHandler(void);
extern "C" void __irq PIOINT1_IRQHandler(void);
extern "C" void PIOINT2_IRQHandler(void);
//extern "C" void __irq PIOINT2_IRQHandler(void);
extern "C" void __irq PIOINT3_IRQHandler(void);


#ifdef __cplusplus
}
#endif
#endif/* __LPC11xxTarget_H__ */

HYLG 发表于 2010-12-5 02:50:00

好久不见,这么晚还在线呀.

armok 发表于 2010-12-5 03:03:36

hotpower 发表于 2010-12-5 03:33:27

回复【4楼】armok 阿莫
回复【3楼】hylg
好久不见,这么晚还在线呀.
-----------------------------------------------------------------------
真的好久不见,hotpower 仍是这么晚 ...

-----------------------------------------------------------------------
由于历史遗留的问题,一直没来。
所以只在马潮教授的领地发帖。也算配合老师开展CM0活动。
再就是推广近10年成熟的“红杏系列产品”,让学M051的网友不要用寄存器方法来编程。
ARM建议用CMSIS编程,但是ARM的头一直不能有大的进步,所以菜农推出了一系列的“红杏系列”在ARM和DSP等应用。

马潮教授:
    菜农向老师敬礼了~~~
冒泡一下,从今起开始休眠~~~

Fire_cow 发表于 2010-12-5 07:27:57

mark

YL_L 发表于 2010-12-5 07:46:54

Mark!

hexenzhou 发表于 2010-12-5 08:19:23

菜农永远对LPC那么情有独钟啊!

cool33777612 发表于 2010-12-5 09:33:34

偶不见菜农好多时,半年有余?冒了泡,又要休眠了,猫冬~~岂不要明年见了./emotion/em018.gif
哈哈 开心。

eddia2000 发表于 2010-12-16 19:20:39

Mark!

biaoge 发表于 2010-12-24 23:05:26

菜农,我请教你,在keil下,怎么修改CPSR的I F位

a305566 发表于 2011-3-23 13:42:03

mark

liubo1234 发表于 2011-8-27 15:16:30

hotpower, 请问你使用过LPC1111/LPC1112的掉电模式吗?
我现在同段掉电代码创建 Keil4.21上以LPC1111编译生成bin文件
在LPC1114上工作测试掉电后静态电流为33uA
而在LPC1111/1112上测试却是3.7mA
想问问是否有什么需要注意的地方?

abcdzhy 发表于 2011-8-28 20:15:57

mark

liubo1234 发表于 2011-8-30 10:25:36

有没有人用过LPC1111/1112的掉电模式做过如下实验:

板子上GPIO1_9接一个发光管用来标识程序是否运行
一个SW2用来控制唤醒,当按下时拉低WAKEUP管脚
一个SW4用来控制在主程序中进入掉电状态
整个板子除了复位电路和上述的东西就再没别的东西了

使用内部时钟,用KEIL4.21编译
芯片是LPC1111/101 33脚的

void LpcPowerDown(void)
{
        LPC_PMU->PCON   = 0x802;
        SCB->SCR |= 4;
        LPC_SYSCON->PDRUNCFG &= ~( ( 1 << 0) | ( 1 << 1 ) );
        __wfi();
        __nop();
        __nop();
}

int main( )
{       
    // LED输出管脚方向配置(P1_9)
        LPC_GPIO1->DIR= 0x200;   // 0010 0000 0000

        // 点亮LED
        LPC_GPIO1->DATA |= 0x200;   // 0010 0000 0000
        // 等待SW4按下(P3_4)
        while(1)
        {
             if((LPC_GPIO3->DATA & 0x10)==0) break;
        }

        // 低功耗待机
        LpcPowerDown();
}

在测试时发现,
1.新焊上的芯片第一次下载上述程序的bin文件后,当按下SW4,进入休眠,测试电流为0.4uA
2.然后擦除flash后重新下载同一个bin文件,按下SW4后,测试电流1mA左右
再次重复2步骤,测试发现电流为2.4mA左右
再次重复2步骤,测试发现电流为3.7mA左右
此后反复擦除测试均稳定在3.7mA左右

每次测试均在休眠后按SW2唤醒点亮过LED,可以确定每次都休眠了

现在很困惑啊,项目急用!!!
请各位大侠指点指点
先行谢过!

yu_studio 发表于 2011-8-30 11:14:32

最近弄了块1114的板子,记号下

kingsabbit 发表于 2011-8-30 11:42:35

欢迎菜老头大叔回来了,值得庆贺.知识名人呀

myhonour 发表于 2011-8-30 13:58:34

mark
页: [1]
查看完整版本: 菜农LPC11xx学习笔记1