打印
[ZLG-ARM]

CortexMo菜鸟之头文件搭建过程(第5天作业)

[复制链接]
3838|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2010-7-31 00:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hotpower 于 2010-7-31 01:21 编辑

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


#ifdef __cplusplus
}
#endif
#endif  /* __LPC11xxcfg_H__ */

相关帖子

沙发
hotpower|  楼主 | 2010-7-31 00:57 | 只看该作者
真累,只做了UART、I2C和GPIO这三个就累的快倒塌了~~~
作完估计要三天,不过顺便把各个寄存器也了解一番。

使用特权

评论回复
板凳
chenxu_1| | 2010-8-13 09:37 | 只看该作者
:victory:继续关注,呵呵

使用特权

评论回复
地板
chenxu_1| | 2010-8-13 09:38 | 只看该作者
大雁塔前的那片喷泉还活跃否?

使用特权

评论回复
5
yjwpm| | 2010-8-13 16:39 | 只看该作者
我6月份去的时候还活跃着,不知道现在怎样了。。。

使用特权

评论回复
6
a305566| | 2010-9-13 15:58 | 只看该作者
这种事情很辛苦,支持下!!!!!

使用特权

评论回复
7
lintar| | 2010-9-14 12:27 | 只看该作者
N人

使用特权

评论回复
8
-自己人| | 2010-9-17 23:33 | 只看该作者
高手啊,继续关注

使用特权

评论回复
9
kyzb001| | 2010-11-13 23:53 | 只看该作者
关注

使用特权

评论回复
10
maoyanketi| | 2010-11-14 14:49 | 只看该作者
关注中

使用特权

评论回复
11
kyzb001| | 2010-11-14 19:07 | 只看该作者
:)

使用特权

评论回复
12
hotpower|  楼主 | 2011-1-25 16:09 | 只看该作者
顶,准备开战

使用特权

评论回复
13
ty新气象| | 2011-1-26 20:15 | 只看该作者
我偷看作业来了,哈哈,

使用特权

评论回复
14
红舞林檬浩| | 2011-2-18 14:15 | 只看该作者
guanzhu 关注 跟着菜农学习啊

使用特权

评论回复
15
sunshitao| | 2011-2-20 12:37 | 只看该作者
问个问题  extern "C" {
这句是什么意思 ?楼主能告诉一下吗?

使用特权

评论回复
16
amini| | 2011-2-20 15:53 | 只看该作者
学习的来了。

使用特权

评论回复
17
sunshitao| | 2011-2-20 17:24 | 只看该作者
extern "C" {
哪位高手能说一下这是什么语法?

使用特权

评论回复
18
被冒充了| | 2011-9-13 14:54 | 只看该作者
//如果用的是C++编译器,就加上extern ''C''{
表示这段内容是C语言写的,要按照C语言的方式编译,因为他们编译出的内容有差异,不能相互调用,因此加上这一段来兼容。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1538

主题

21697

帖子

505

粉丝