搜索
bottom↓
回复: 18

菜农LPC11xx学习笔记1

[复制链接]

出0入0汤圆

发表于 2010-12-5 02:33:34 | 显示全部楼层 |阅读模式
/*--------------------------------------------------------------------------
文   件   名 :  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周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2010-12-5 02:35:05 | 显示全部楼层
应用:main.cpp
#include "main.h"
volatile unsigned int SystemRamTest = 0x55aa55aa;//RAM不初始化

/*-------------------------------------------
注意:
1.全局类对象实例的构造函数运行级别高于main()
2.类的构造函数的运行次序与申请次序一样
--------------------------------------------*/
SystemObj System;//自动调用构造函数
SysTickObj SystemTick;//自动调用构造函数
TimerObj  Timer;//自动调用构造函数
UartObj   Uart;//自动调用构造函数
I2cObj   I2c;//自动调用构造函数
WdtObj Wdt;//自动调用构造函数
TargetObj Target;//自动调用构造函数
/*-------------------------------------------
main()将在以上构造函数后才能运行
--------------------------------------------*/
int main()
{
unsigned char ch;
unsigned char Data;
int k;
/*
LPC_REG xxx;
ADC.DR[1].Bits.RESULT = 0x3ff;
ADC.DR[1].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[1].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[0].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[2].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[2].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[2].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[1].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);//发送串口数据,即自发自收
                }       
        }
}

出0入0汤圆

 楼主| 发表于 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 PortKey1  P2     //P2
#define PinKey1   Pin6   //Px.6
//KEY2宏定义三板斧
#define PioKey2   PIO2_0 //P2.0
#define PortKey2  P2     //P2
#define PinKey2   Pin0   //Px.0

//LED1宏定义三板斧
#define PioLed1   PIO1_8 //P1.8
#define PortLed1  P1     //P1
#define PinLed1   Pin8   //Px.8
//LED2宏定义三板斧
#define PioLed2   PIO0_2 //P0.2
#define PortLed2  P0     //P0
#define PinLed2   Pin2   //Px.2
//LED3宏定义三板斧
#define PioLed3   PIO2_7 //P2.7
#define PortLed3  P2     //P2
#define PinLed3   Pin7   //Px.7
//LED4宏定义三板斧
#define PioLed4   PIO2_8 //P2.8
#define PortLed4  P2     //P2
#define PinLed4   Pin8   //Px.8
//LED5宏定义三板斧
#define PioLed5   PIO2_1 //P2.1
#define PortLed5  P2     //P2
#define PinLed5   Pin1   //Px.1
//LED6宏定义三板斧
#define PioLed6   PIO1_9 //P1.9
#define PortLed6  P1     //P1
#define PinLed6   Pin9   //Px.9
//LED7宏定义三板斧
#define PioLed7   PIO3_4 //P3.4
#define PortLed7  P3     //P3
#define PinLed7   Pin4   //Px.4
//LED8宏定义三板斧
#define PioLed8   PIO3_5 //P3.5
#define PortLed8  P3     //P3
#define PinLed8   Pin5   //Px.5
//BEEP宏定义三板斧
#define PioBeep   PIO0_8 //P0.8
#define PortBeep  P0     //P0
#define PinBeep   Pin8   //Px.8

#define UART_BPS  115200


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__ */

出0入0汤圆

发表于 2010-12-5 02:50:00 | 显示全部楼层
好久不见,这么晚还在线呀.
头像被屏蔽

出0入0汤圆

发表于 2010-12-5 03:03:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2010-12-5 03:33:27 | 显示全部楼层
回复【4楼】armok 阿莫
回复【3楼】hylg  
好久不见,这么晚还在线呀.
-----------------------------------------------------------------------
真的好久不见,hotpower 仍是这么晚 ...

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

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

出0入0汤圆

发表于 2010-12-5 07:27:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-5 07:46:54 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-12-5 08:19:23 | 显示全部楼层
菜农永远对LPC那么情有独钟啊!

出0入0汤圆

发表于 2010-12-5 09:33:34 | 显示全部楼层
偶不见菜农好多时,半年有余?冒了泡,又要休眠了,猫冬~~岂不要明年见了
哈哈 开心。

出0入0汤圆

发表于 2010-12-16 19:20:39 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-12-24 23:05:26 | 显示全部楼层
菜农,我请教你,在keil下,怎么修改CPSR的I F位

出0入0汤圆

发表于 2011-3-23 13:42:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-27 15:16:30 | 显示全部楼层
hotpower, 请问你使用过LPC1111/LPC1112的掉电模式吗?
我现在同段掉电代码创建 Keil4.21上以LPC1111编译生成bin文件
在LPC1114上工作测试掉电后静态电流为33uA
而在LPC1111/1112上测试却是3.7mA
想问问是否有什么需要注意的地方?

出0入0汤圆

发表于 2011-8-28 20:15:57 | 显示全部楼层
mark

出0入0汤圆

发表于 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,可以确定每次都休眠了

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

出0入0汤圆

发表于 2011-8-30 11:14:32 | 显示全部楼层
最近弄了块1114的板子,记号下

出0入0汤圆

发表于 2011-8-30 11:42:35 | 显示全部楼层
欢迎菜老头大叔回来了,值得庆贺.知识名人呀

出0入0汤圆

发表于 2011-8-30 13:58:34 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 19:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表