EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2009/6/16 2:03:39

0

关于投票

菜农再次升级改造Delphi串口控件SPCOMM

http://bbs.embcom.net/viewthread.php?tid=674&page=1&extra=

开源的Delphi串口控件SPCOMM老外很久没升级了,菜农一直感觉不错。

由于USB转串口现在非常时髦,速率很高,而且装载串口序号有的随USB口的不同而不同序号。

故串口超出10个很普通,这样老的SPCOMM就不能打开COM10.

菜农在公社独家发布,转载望注明出处,谢谢!!!

//----------------------------------------------------------------------------------//
//  经过改造的Delphi环境下应用的串口控件SPComm(使用例程祥见SPCOMMDEMO.PAS)  //
//  (请勿做为商业用途,改造版仅供学习使用,版权归源程序设计人所有)                        //
//                                                                                                               //
//  本Delphi控件版权归原开源作者所有,菜农对原创的改动主要考虑更大的应用领域.        //
//                                                                                                             //
//  修改原因: 发现原创对COM10以上串口不支持. 故决定本次升级                           //
//  修改时间: 2009.6.14                                                                             //
//  改 造 者:雁塔菜农HotPower@126.com    2009.6.15 于西安大雁塔菜地        //
//--------------------------------------------------------------------------//

点击下载菜农多次升级改造的Delphi串口控件SPCOMM

SPComm.rar (14.21 KB)

系统分类: 软件开发  |  用户分类: ARM  |  标签: 串口控件  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1390) | 回复(0)

发表于 2009/3/24 23:27:28

4

关于投票

I2C(TWI/SMBUS)LPC213X主机通讯例程


I2C(TWI/SMBUS)LPC213X主机通讯例程
雁塔菜农 发表于 2006-10-28 11:33:00

void TwiObj::TWStart(void)
{
  Busy = true;
  Status = 0;//主机准备发送启始位
  Count = 0;//发送数据个数
  I2C0->I2C_CONSET = (1 << I2EN) | (1 << STA);
}

void TwiObj::TWREStart(void)
{
  Busy = true;
  Status = 0x55;//主机准备发送启始位
  Count = 0;//接收数据个数
  I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);
  I2C0->I2C_CONSET = (1 << I2EN) | (1 << STA);
}
//__inline
void TwiObj::TWStop(void)
{
  Busy = false;
  Status = 0x88;//通讯成功
  I2C0->I2C_CONSET = (1 << I2EN) | (1 << STO);
  I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);
}

void TwiObj::TWExit(void)
{
  Busy = false;//通讯失败
  I2C0->I2C_CONSET = (1 << I2EN) | (1 << STO);
  I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);
}

void TwiObj::Exec(void)
{
  switch(I2C0->I2C_STAT & 0xf8) {
    case I2C_START://主机收到自己发送的开始信号
        if (Status == 0) {//本次中断应该接收TW_START信号//pwy
          I2C0->I2C_DAT = SubAddr & 0xfe;//发送子机地址(写)
    Status = 1;//Status下次主发为1,主收为2
             I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);//清除中断标志
     }
     else TWExit();//通讯失败
        break;
 case I2C_REP_START://主机收到自己发送的重新开始信号
        if ((Status == 0x55) && (SubAddr & 0xfe)) {//本次中断应该接收TW_START信号//pwy
          I2C0->I2C_DAT = SubAddr;//发送子机地址(读)
       Status = 2;//Status下次主发为1,主收为2
             I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);//清除中断标志
     }
     else TWExit();//通讯失败
        break;
 case I2C_MT_SLA_ACK://主发机接收到从机的地址应答信号后发送命令
        if (Status == 1) {//本次中断应该接收TW_MT_SLA_ACK信号
       Status = 3;//Status下次应该收TW_MT_DATA_ACK
             I2C0->I2C_DAT = SubComm;//发送子机命令
             I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);//清除中断标志
     }
     else TWExit();//通讯失败
        break;
 case I2C_MR_SLA_ACK://主收机接收到从机的地址应答信号
        if (SubCount && (Status == 2)) {//本次中断应该接收TW_MR_SLA_ACK信号
       Status = 4;//Status下次应该收TW_MR_DATA_ACK
             I2C0->I2C_CONCLR = (1 << STA) | (1 << SI);//清除中断标志,主机转入接收状态
    I2C0->I2C_CONSET = (1 << AA);
     }
     else TWExit();//通讯失败
     break;
 case I2C_MT_DATA_ACK:
        if ((Count < MainCount) && (Status == 3)) {//本次中断应该接收TW_MT_DATA_ACK信号
          I2C0->I2C_DAT = TxBuffer[Count ++];//发送子机数据
             I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);//清除中断标志
     }
     else {
          if ((Count == MainCount) && (Status == 3) && (SubAddr & 1)) {//本次中断应该接收TW_MT_DATA_ACK信号
         TWREStart();//
    }
             else TWExit();//通讯失败
     }
     break;
// case I2C_MT_DATA_NACK://数据发送结束
//         TWExit();//通讯失败
//     break;
 case I2C_MR_DATA_ACK:
        if ((Count < SubCount) && (Status == 4)) {
          RxBuffer[Count ++] = I2C0->I2C_DAT;//接收子机数据
    if (Count < SubCount) {
               I2C0->I2C_CONCLR = (1 << STA) | (1 << SI);//主机转入接收状态
      I2C0->I2C_CONSET = (1 << AA);//
    }
    else {
               I2C0->I2C_CONCLR = (1 << STA) | (1 << SI) | (1 << AA);//清除中断标志,主机转入接收状态
      Status = 6;//下次进入I2C_MR_DATA_NACK,接收数据准备完成
    }
     }
     else TWExit();//通讯失败
     break;
 case I2C_MR_DATA_NACK://数据接收结束
        if ((Count == SubCount) && (Status == 6)) {
       SetDataBuff();//取出接收字节
       TWStop();//通讯成功
     }
     else TWExit();//通讯失败
     break;
 default:
     TWExit();//通讯失败
  }
}

系统分类: ARM  |  用户分类: ARM  |  标签: I2C(TWI/SMBUS)  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(999) | 回复(2)

发表于 2009/3/5 17:48:31

0

关于投票

菜农发布自主知识产权的HotWC3密码算法及加密流程图

HotWC3 发表于 2009-3-5 17:48 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 菜农发布自主知识产权的HotWC3密码算法及加密流程图


HotWC3密码是由:

1.菜农星期公式
2.菜农三角密码
3.菜农CRC密码

这三部分“和谐”而成,其中:

1.菜农星期公式,起收敛8位密码为一个字节(年月日--->星期)
2.菜农三角密码,起发散作用,将一个字节再无(外力)作用下变为2字节
3.菜农CRC密码,利用最基本的“群魔乱舞的CRC”的初值、权、方向进行“洗牌”

最后逼迫解密者只能用穷举来对付菜农~~~哈哈,真要这样就是“苍天助俺菜农”~~~


今天是个“好日子”~~~雷锋同志都在保佑俺~~~
点击看大图




 

点击开大图

系统分类: 单片机  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(390) | 回复(0)

发表于 2009/3/5 7:20:25

0

关于投票

农会公告:为配合汇编数组嵌入CRC/三角密码,即日起由HotCRC代主席

hotpower 发表于 2009-3-5 07:21 裸奔式实时操作系统HotTask51 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 农会公告:为配合汇编数组嵌入CRC/三角密码,即日起由HotCRC代主席

农会公告:为配合汇编数组嵌入CRC/三角密码,即日起由HotCRC代主席

暂时解除HotC51代主席一职,但继续负责HotC51汇编数组免费250套之任务。

农会常任主席菜农先生为在MCU领域彻底“摧毁恐怖势力”,特发此公告


HotCRC代主席联络信箱:HotCRC@126.com

菜农HotPower@126.com  2009.3.5 “学习雷锋好榜样日”于农会

系统分类: 单片机  |  用户分类: ARM  |  标签: 与阶级敌人斗  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(325) | 回复(0)

发表于 2009/3/5 6:53:41

0

关于投票

今天由俺HotCRC专职处理CRC事宜~~~

原讨论处:http://bbs.21ic.com/club/bbs/list.asp?boardid=11&t=3250936

HotCRC 发表于 2009-3-5 06:55 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖


18楼: 今天由俺HotCRC专职处理CRC事宜~~~

首先可以肯定楼主的:“不过是您从没有想到过站到CRC运算电路的背面去观察电路运算过程!”

这是肯定的。

因为作为一个具备各种经典计算机语言编程能力的菜农不可能去用长除法来分析和解决问题。

再者:“这算是加密了?小孩子玩游戏呢。这么简单的算术反序难道还要用“16位右移还原CRC反函数计算”?

就这么简单的一个方向视角变换方法,让HOT老师研究思索了十几年!?

贻笑大方。


实际楼主并未研究好菜农这个“人”~~~至少可以搜索他有关CRC的词条

菜农称之为CRC密码的绝非那个“网上CRC/PEC”中的“计算”和“还原”

这个小程序只是方便大家网上随时查看,这符合现代网络编程模式的需求。
很多编程者几乎都离不开网络~~~


这里的“计算”实际是个加密“过程”的基本方法。
      “还原”也是“解密”之道。

“加密”并非一个小算法可以代替的,但“计算”和“还原”就连“异或”都配~~~!!!

在任一加密和解密中,移位是“洗牌”,异或是“老千”,盒子是“墓坑”。
试问那种加密算法可以离了“它们”吗???


菜农称之为“网上CRC/PEC”中的“计算”和“还原”

至少可以让人感觉到“加密”和“解密”的气息,它总比整日拿个“长除法”

加个“铁算盘”也“潇洒”一些~~~

为什么菜农不把此程序标注为“解密”与“解密”呢???
为何菜农敢把下图标注为“解密”与“解密”呢???

还敢狂言:“成功完善CRC密码技术并发帖自贺且等待攻击”

道理很简单:“网上CRC/PEC计算器”是以验证CRC/PEC为目的的,“还原”只是
个搞笑的事,如同附带的“三角密码”一样好玩,但此“三角密码”是菜农
根据小时候苏联数学家推论的公式,加以“平方”和“砍半”的平民化理解。

再根据自己的思维方式和计算机基础,搞笑出《三角恋爱密码表》。

言归正传,:“网上CRC/PEC计算器”不能作为密码的原因:

1.“权”在“计算”和“还原”过程中都是恒定的。
2.初值为恒定的0,且每个字节的CRC结果即本次CRC运算的结果将是下次CRC运算
  的初值。

这2个为演算被限制的条件,实际是给出:
1.在“密文”串中任取一个字节,它都是下个“明文”字节CRC运算的初值。
2.由于“权”未变,故根据CRC逆运算(俺现在还不承认有,为何???自己想)
  在知道“初值”,“权”和“密文”这三大要素时,“明文”真已成了明文!!!

所以,“这算是加密了?小孩子玩游戏呢。这么简单的算术反序难道还要用“16位右移还原CRC反函数计算”?


感觉应该好好搜索一下:
crc hotpower

三角密码 hotpower

整数直角三角形谜底——一种MCU加密解密算法(hotpower)


点击看大图

系统分类: 单片机  |  用户分类: ARM  |  标签: CRC密码 三角密码  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(524) | 回复(0)

发表于 2009/2/28 22:14:13

0

关于投票

菜农对电源网-TI博客大赛实施的第一轮刷屏战况汇报

农会公告:接到“帝国主义战书”,决定由HotTIDSP接任代主席参战

HotC51共产儿童团团课更新

菜农发布C5402CFG.H/C(枚举感知版)

汇编数组的C++和COM的两种实现方式

TIDSP之RTDX注册表大揭秘

BQ2060之4路SMBUS操作及菜农星期公式之ARM7 C++程序片段

ISL6295中SMBUS/PEC程序SMBUS片段

菜农网上CRC/(SMBUS)PEC计算器(自带菜农独创的CRC密码)

菜农瞎搞的“数组汇编”在DSP上之应用

DSP之裸奔框架C++程序源码(菜农C++裸奔大法之二)

DSP菜鸟的首个菜菜的DSP例程

谢谢TestCode~~~这个我早已折腾过~~~无果

菜农利用球赛熬夜整理的一些常用COM接口表

菜农首先在DSP上缔造的“汇编数组”并配备重型武器---COM接口

不抛弃不放弃,终知DSP/BIOS+RTDX真谛~~~

RTDX烧写DSP5402的FLASH程序芯片贴图留念

DSP281X硬件SPI读写一体化C++函数(驱动74hc595)

DSP28/54上FLASH数组成功战胜FLASH指针帖图

DSP5402最小系统中DSP/BIOS的debug下的MEM配置

DSP281X变量地址数组定位方法

DSP2812串口状态机解码之C++程序

DSP2812读写SST39VF800A之C++程序源码

在DSP2812上的"零耗时键盘"演示C++程序

McBSP模块配置为LCD12864的SPI接口

波特率自适应技术在DSP5402上的应用之C++接收程序

不下地狱难升天堂

原创的倒塌之烦恼~~~

DSP5402之McBSP从设备SPI硬件四种模式配置C++例程

裸奔裸出精彩---菜农成功在DSP5402上将汇编正法,发帖自贺

菜农搞残废DSP54XX启动过程汇编文件核心代码部分

新版c5402cfg.h应用范例及升级说明

DSP54X系列上超级暴力武器艳照

在DSP中实现并口+McBSP通讯测试及下载程序和数据等功能

DSP程序中断中使用XF管脚不再成为

关于C语言中DSP5402中断向量表的配置问题

DSP2812串口FIFO设置及"手动触发"发送中断服务之C++程序

DSP2812菜鸟非典灵光再现,想歇菜都难~~~

DSP2812串口波特率正确和良好的设计方法

并口BQ2060测试管理系统SMBus操作通过测试

DSP5402菜鸟初识DSP/BIOS

如何掌控MCU?

零耗时键盘各种事件及消抖处理模板裸奔程序详解

点击下载Study-2812增强版上Verilog源码

菜农的HotTIDSP农场今天开始放牧(哈哈,现在改帝国了)

在Study-2812增强版上改写CPLD增加键盘测试功能

(TI的MSC1210)MCS51之裸奔框架C++程序源码(菜农C++裸奔大法系…

MSP430之裸奔框架C++程序源码(菜农C++裸奔大法系列之一)

关于锂电池保护块的二次保护问题及解决方法

关于USI接口密文传送增加I2C模块拦截难度的问题

并口BQ2060测试管理系统EEPROM操作通过测试

求助BQ2060A通讯死琐(自锁)问题(借大赛求助)

AD转换中的"跳水"滤波算法

并口BQ2060测试管理系统HDQ16操作测试受阻

在LabWindows/CVI中完成并口的I2C/SmBus/HDQ16协议的封装

通用异步串口实现单总线硬件控制器的研究和实现方法(菜农)

系统分类: DSP  |  用户分类: ARM  |  标签: TI博客大赛  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(728) | 回复(0)

发表于 2009/2/28 10:58:33

0

关于投票

农会公告:接到“帝国主义战书”,决定由HotTIDSP接任代主席参战

        去年菜农和小菜农到处高举“打到帝国主义”的小红旗,瞎闹喊~~~

如今机会来了,不为什么“奖金”,先派遣HotTiDSP作为农会代表出击,

先将“鬼子”的论坛灌翻再回来交差。

       主席菜农先生决定先放弃“CRC的国内战斗”,和鬼子先干仗,机会难得,

先让菜农爽一爽~~~

       同时也将开通早已在EDNChina埋伏好的“HotTIDSP小组”,在21ic上的总会

也由HotTIDSP开始上台,HotTask51、HotC51等先下台休息~~~

HotPower农会代主席 HotTiDSP@126.com   2009.2.28 于农会发布

hotpower,您好:

电源网联合德州仪器正在举办“2009TI博客大赛”,如果您有关于TI产品和技术方面的文章,可以和TI公司的工程师进行交流和探讨。目前已经有上百篇精彩博文。同时您发布的博文进行参赛,将有机会赢取千元现金和精美礼品。
大赛进行日期:2008年12月10日 至 2009年3月31日。
大赛结果公布:2009年4月5日
查看大赛情况:http://www.dianyuan.com/wangping/ti/blog_index.php

★ 如何参加“TI博客大赛”
1. 登陆电源网,开通博客; (点击登录)
2. 报名"TI博客大赛"。 (点击去看大赛)

★ ”TI博客大赛” 丰厚奖品等你拿 (点击查看详细)
TI博客大赛官方网址:http://www.dianyuan.com/wangping/ti/blog_index.php

关于“TI博客大赛”,如果您有任何疑问,欢迎咨询:卢先生(Austin) 电话:022-58392381-610


电源网 卢先生(Austin)
Tel : 022-58392381-610
Fax : +86(022)58392385
Email : ljt@dianyuan.com

系统分类: DSP  |  用户分类: ARM  |  标签: DSP  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(411) | 回复(0)

发表于 2009/2/21 23:21:15

1

关于投票

菜农公告:欢迎计算机仿真技术专家吴旭光教授加入农会

hotpower 发表于 2009-2-21 23:22 裸奔式实时操作系统HotTask51 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 菜农公告:欢迎计算机仿真技术专家吴旭光教授加入农会

航海学院科协邀请吴旭光老师作报告 作者: 航海学院科协 编辑: 凌海涛 发布时间: 2008-11-27 21:00 来自: 学生之友网站 阅读次数:115次
        2008年11月25日晚7点,航海学院科协邀请吴旭光教授在海院701为大家做了一场题为“嵌入式系统原理与设计——后PC时代的春天”的报告会,吴旭光老师长期从事嵌入式系统方面的科研开发工作,堪称“西北嵌入式第一人”,此次报告吸引了很多同学前来听讲。
        吴老师从嵌入式系统的基本结构,基本特性等方面讲起,通过结合他近年来实际开发的一些产品,较为全面地讲解了嵌入式系统的应用,使同学们对嵌入式系统的原理及设计开发有了较为深入的认识,收获颇多。此次报告会取得了圆满成功。



菜农公告:欢迎计算机仿真技术专家吴旭光教授加入农会
鉴于农会之迅速扩展和即将问世的HotTask51裸奔之OS在很多方面采取
的非常规手段,使其被农会成员所看好,其风格继承了菜农当初想PK
C语言而在汇编上研制的类宏语言http://www.dzsc.com/dzbbs/20030626/20076520455812234.html工控HPL语言
在设计HotTask51就采用了其软硬件看门狗自动管理之方法,特为其增加狗任务。
由于HotTask51衍生出很多的C51“非典副产品”,故菜农建立了“HotC51共产
儿童团”,并同时建立了http://www.HotTask51.comhttp://www.HotC51.com这两个网站。
前者作为HotTask51的技术服务和延伸,后者提供基础知识。
菜农进来想明白了,他愿为后人贡献出他的“红色脑浆”~~~
为经HotTask51之精华继续移植到DSP和ARM7上,也相继在EDNChina建立了相应
的小组,随后可能更多的农会成员小组,因为菜农在很多领域都有很深的研究,
而且在很多方法都有“雷翻的创意”~~~
HotPower农会主席菜农先生特此公告   2009.2.21 于农会
 

计算机仿真技术专家吴旭光教授

系统分类: 嵌入式  |  用户分类: ARM  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(528) | 回复(0)

发表于 2009/2/3 21:00:30

0

关于投票

LPCARM的"手动激活"串口发送中断问题

LPCARM的"手动激活"串口发送中断问题
雁塔菜农 发表于 2006-12-20 23:53:00

hotpower 发表于 2006-12-20 23:42 

11楼: 最后折算为指针与数组,51与ARM的关系

问题一:
指针与数组最大的不同是数组有"家",而指针是路边的"野花".

当uint8   FIFO_STR[]="FIFO_TEST" ;后
一般用FIFO_STR[i]=0x..;用数组名访问数组.
也可用*(FIFO_STR+i)=0x..;用"固定指针"访问数组.
但都离不开"家"---FIFO_STR.
正如00所说,FIFO_STR是数组名,它不能移动"家"!!!
即不能FIFO_STR++.
只能用FIFO_STR[i]或*(FIFO_STR+i)在"家"附近忽悠.

如想要分家,必须先建个小家---申请指针变量.
即00所说的---uint8   * pFIFO_STR=FIFO_STR;

这样就可用U0THR = *pFIFO_STR ++; 胡作非为了~~~

不过分家后一定要小心指针带来的后患...

指针与数组的关系很微妙,在某些场合他们的很多方面确实是一样的,
也可从编译后的代码看出.

可能在某些场合数组的效率甚至超过了指针,这要看编译器了.

问题二:
首先:
U0THR = 'F';   //"上善若水"提示说要先发送一字符再使能中断,随便送个字
U0IER |= 0x02;     //使能THRE发送中断

大家知道51的TI可以强制置'1'而"手动激活"发送中断.
而ARM等却不能,因为这是考虑"安全"的举动,但也对FIFO的发送带来了负面影响.

即要激活发送中断必须要向U0THR写入才能实现!!!

实际也可仿效51的方法来实现"手动激活"发送中断,我认为这样才更能体现FIFO的作用.
因为在实际应用中,发送首字节很罗嗦~~~

再者FIFO的最大好处是"闭着眼睛黑发"---爽~~~

//"手动激活"发送中断
if (!Uart.TxBusy) {//发送FIFO不忙并且以换行符为界
  VIC->SoftInt = (1 << VICIntSel_UART0);//软件中断模拟激活UART0中断
}



extern "C" void IRQ_UART0 (void) __irq
{
static unsigned char cData = 0;
unsigned char ch;
  Status = U0->IIR & 0x0f;
  switch (Status) {
    case 0x06://接收线状态
      switch (U0->LSR) {
        case 0x63:
          break;
      }
      break;
    case 0x04://接收数据可用
    case 0x0c://字符超时指示
      while((U0->LSR & 0x01) == 1) {
        ch = U0->RBR;
        if (ch == '$') {
          cData = '$';
          RxBuffer[RxCount ++] = ch;
        }
        else if(cData == '$'){
          if (ch >= 0x20) {
            RxBuffer[RxCount ++] = ch;
          }
          else if (ch == 0x0d) {
            RxBuffer[RxCount ++] = ch;
          }
          else if (ch == 0x0a) {
            if (RxBuffer[RxCount] == 0x0d) {
              cData = 0;
              RxBuffer[RxCount ++] = ch;
//isr_evt_set (DefBeep_1, Beep_Task);
              isr_evt_set (1, Uart_Task);
            }
          }
        }
      }
      break;
    case 0x01://LPCARM保留中断,可用于软件模拟激活UART0中断
     if (!(VIC->SoftInt & (1 << VICIntSel_UART0))) {//硬件UART0中断
       break;//正常的UART0中断退出
     }
    case 0x02://THRE中断
        TxBusy = TxCount != TxdCount;//保证FIFO发送全部结束时,缓冲区空不拒绝发送
      for (int i = 0; (i < 16) && (TxCount != TxdCount); i ++) {//1次写入FIFO最多16个字节
        ch = TxBuffer[(TxdCount ++) & 0x3ff];//取出缓冲区1个字节数据
        if (ch >= 0x0a) {//防止非法字符漏入
          U0->THR = ch;//将缓冲区1个字节数据写入FIFO
        }
      }
      break;
//    case 0x0f://保留中断
//      break;
  }   
  VIC->SoftIntClr = (1 << VICIntSel_UART0);
  VIC->VectAddr = 0x00;    
}

系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(817) | 回复(0)

发表于 2007/12/14 7:10:44

0

关于投票

关于周立功213X的SSP例程应该说明的问题

http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2793459

21班猪 发表于 2007-12-14 03:50 ZLG-ARM ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: ZLG 213X的SSP例程会害死人的.

unsigned char SSP_SendData(unsigned char  data)
{  
//    IOCLR = SLAVE_CS;                    // &Ntilde;&iexcl;&Ocirc;&ntilde;&acute;&Oacute;&raquo;ú   
    SSPDR = data;
    while( (SSPSR & 0x01)==0 );        // &micro;&Egrave;&acute;&yacute;TFE&Ouml;&Atilde;&Icirc;&raquo;&pound;&not;&frac14;&acute;·&cent;&Euml;&Iacute;FIFO&iquest;&Otilde;   
//    IOSET = SLAVE_CS;
    return(SSPDR);
}

大家发觉有什么问题没有?

刚开始用时就怀疑有问题的,后来使用证实确实存在问题,
不应该发送FIFO空就返回数据。应该SSP空闲时反回数据
unsigned char SSP_SendData(unsigned char  data)
{  
//    IOCLR = SLAVE_CS;                    // &Ntilde;&iexcl;&Ocirc;&ntilde;&acute;&Oacute;&raquo;ú   
    SSPDR = data;
    while( (SSPSR & 0x10) );        // &micro;&Egrave;&acute;&yacute;TFE&Ouml;&Atilde;&Icirc;&raquo;&pound;&not;&frac14;&acute;·&cent;&Euml;&Iacute;FIFO&iquest;&Otilde;   
//    IOSET = SLAVE_CS;
    return(SSPDR);
}


hotpower 发表于 2007-12-14 06:59 ZLG-ARM ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

2楼: 哈哈~~~1年半前菜地已经遇到和指出过此问题了~~~

菜地早发现此问题: http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?id=2140869
unsigned char AdsObj::AdsReadWriteByte(unsigned char cData)
{
  SSP->SSP_DR = cData;
//  while( !(SSP->SSP_SR & (1 << TFE)) );// 等待TFE置位,即发送FIFO空   
//应该改为:
  while( SSP->SSP_SR & (1 << BSY) );// 等待BSY清零,即控制器空闲   
  return SSP->SSP_DR;
}


不过IAR的例程为:(通过验证没问题)

/*************************************************************************
* Function Name: MmcTranserByte
* Parameters: Int8U ch
* Return: Int8U
*
* Description: Read byte from SPI
*
*************************************************************************/
Int8U MmcTranserByte (Int8U ch)
{
  while(!SSPSR_bit.TNF);
  SSPDR = ch;
  while(!SSPSR_bit.RNE);
  return((Int8U)SSPDR);
}

/*************************************************************************
* Function Name: MmcSendBlock
* Parameters: pInt8U pData, Int32U Size
*
* Return: void
*
* Description: Read byte from SPI
*
*************************************************************************/
void MmcSendBlock (pInt8U pData, Int32U Size)
{
Int32U OutCount = Size;
  while (OutCount)
  {
    while(SSPSR_bit.TNF && OutCount)
    {
      SSPDR = *pData++;
      --OutCount;
    }
  }
  while (SSPSR_bit.RNE || !SSPSR_bit.TFE)
  {
    volatile Int32U Dummy = SSPDR;
  }
}

/*************************************************************************
* Function Name: MmcReceiveBlock
* Parameters: pInt8U pData, Int32U Size
*
* Return: void
*
* Description: Read byte from SPI
*
*************************************************************************/
void MmcReceiveBlock (pInt8U pData, Int32U Size)
{
Int32U Delta = 0;
  while (Size || Delta)
  {
    while(SSPSR_bit.TNF && (Delta < SSP_FIFO_SIZE) && Size)
    {
      SSPDR = 0xFF;
      --Size; ++Delta;
    }
    while (SSPSR_bit.RNE)
    {
      *pData++ = SSPDR;
      --Delta;
    }
  }
}


ADS7870的LPC213X之SSP接口配置及应用

系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(1124) | 回复(2)

发表于 2007/12/14 6:43:22

1

关于投票

LPC213X四路单边PWM模块应用源码

LPC213X四路单边PWM模块应用源码
雁塔菜农 发表于 2006-6-26 23:48:00
/*----------------------------------------------------------------
ARM水鸟  HotPower@126.com
2006.06.26 23:55  于西安大雁塔村队部
-----------------------------------------------------------------*/

void PwmObj::OpenPwm(unsigned int worknum)
{
  worknum &= 3;
  PWM->PWM_PR = 0x00;
  PWM->PWM_MCR   =  (1 << PWMMCRR0);
  switch (worknum) {
    case 0://CD1
      PINSEL->PIN_SEL0 |= (P0_7_PWM2 << P0_7_PINSEL);// P0.7连接到PWM2
      PWM->PWM_PCR  |=  (1 << PWMENA2);
      PWM->PWM_MR0   =  PwmSize;//16KHz    (周期数=864)
      PWM->PWM_MR2   =  PwmStartSize;
      PWM->PWM_LER   =  (1 << PWMLER2) | (1 << PWMLER0);
   break;
    case 1://CD2
      PINSEL->PIN_SEL0 |= (P0_8_PWM4 << P0_8_PINSEL);// P0.8连接到PWM4
      PWM->PWM_PCR  |=  (1 << PWMENA4);
      PWM->PWM_MR0   =  PwmSize;//16KHz    (周期数=864)
      PWM->PWM_MR4   =  PwmStartSize;
      PWM->PWM_LER   =  (1 << PWMLER4) | (1 << PWMLER0);
   break;
    case 2://CD3
      PINSEL->PIN_SEL0 |= (P0_9_PWM6 << P0_9_PINSEL);// P0.9连接到PWM6
      PWM->PWM_PCR  |=  (1 << PWMENA6);
      PWM->PWM_MR0   =  PwmSize;//16KHz    (周期数=864)
      PWM->PWM_MR6   =  PwmStartSize;
      PWM->PWM_LER   =  (1 << PWMLER6) | (1 << PWMLER0);
   break;
    case 3://CD4
      PINSEL->PIN_SEL1 |= (P0_21_PWM5 << P0_21_PINSEL);// P0.21连接到PWM5
      PWM->PWM_PCR  |=  (1 << PWMENA5);
      PWM->PWM_MR0   =  PwmSize;//16KHz    (周期数=864)
      PWM->PWM_MR5   =  PwmStartSize;
      PWM->PWM_LER   =  (1 << PWMLER5) | (1 << PWMLER0);
   break;
  }
  PWM->PWM_TCR   =  0x02;
  PWM->PWM_TCR   =  0x09;
}

void PwmObj::ClosePwm(unsigned int worknum)
{
  worknum &= 3;
  switch (worknum) {
    case 0:
      PWM->PWM_MR2 = 0;//PWM2
      CDPORT->IOCLR  = (1 << P0_7);
      CDPORT->IODIR |= (1 << P0_7);
      PINSEL->PIN_SEL0 &= ~(3 << P0_7_PINSEL);// P0.7连接到GPIO
   break;
    case 1:
      PWM->PWM_MR4 = 0;//PWM4
      CDPORT->IOCLR  = (1 << P0_8);
      CDPORT->IODIR |= (1 << P0_8);
      PINSEL->PIN_SEL0 &= ~(3 << P0_8_PINSEL);// P0.8连接到GPIO
   break;
    case 2:
      PWM->PWM_MR6 = 0;//PWM6
      CDPORT->IOCLR  = (1 << P0_9);
      CDPORT->IODIR |= (1 << P0_9);
      PINSEL->PIN_SEL0 &= ~(3 << P0_9_PINSEL);// P0.9连接到GPIO
   break;
    case 3:
      PWM->PWM_MR5 = 0;//PWM5
      CDPORT->IOCLR  = (1 << P0_21);
      CDPORT->IODIR |= (1 << P0_21);
      PINSEL->PIN_SEL1 &= ~(3 << P0_21_PINSEL);// P0.21连接到GPIO
   break;
  }
}

void PwmObj::IncPwm(unsigned int worknum)
{
  worknum &= 3;
  switch(worknum) {
    case 0:
           if ((PWM->PWM_MR2 + 1) < (PWM->PWM_MR0 * 70 / 100)) {
             PWM->PWM_MR2 += 1;
             PWM->PWM_LER  = (1 << PWMLER2) | (1 << PWMLER0);
        }
     break;
    case 1:
           if ((PWM->PWM_MR4 + 1) < (PWM->PWM_MR0 * 70 / 100)) {
             PWM->PWM_MR4 += 1;
             PWM->PWM_LER  = (1 << PWMLER4) | (1 << PWMLER0);
     }
     break;
    case 2:
           if ((PWM->PWM_MR6 + 1) < (PWM->PWM_MR0 * 70 / 100)) {
             PWM->PWM_MR6 += 1;
             PWM->PWM_LER  = (1 << PWMLER6) | (1 << PWMLER0);
     }
     break;
    case 3:
           if ((PWM->PWM_MR5 + 1) < (PWM->PWM_MR0 * 70 / 100)) {
             PWM->PWM_MR5 += 1;
             PWM->PWM_LER  = (1 << PWMLER5) | (1 << PWMLER0);
     }
     break;
  }
}

void PwmObj::DecPwm(unsigned int worknum)
{
  worknum &= 3;
  switch(worknum) {
 case 0:
           if (PWM->PWM_MR2 >= 1) {
             PWM->PWM_MR2 -= 1;
             PWM->PWM_LER  = (1 << PWMLER2) | (1 << PWMLER0);
     }
        break;
 case 1:
           if (PWM->PWM_MR4 >= 1) {
             PWM->PWM_MR4 -= 1;
             PWM->PWM_LER  = (1 << PWMLER4) | (1 << PWMLER0);
        }
     break;
    case 2:
           if (PWM->PWM_MR6 >= 1) {
             PWM->PWM_MR6 -= 1;
             PWM->PWM_LER  = (1 << PWMLER6) | (1 << PWMLER0);
        }
        break;
 case 3:
           if (PWM->PWM_MR5 >= 1) {
             PWM->PWM_MR5 -= 1;
             PWM->PWM_LER  = (1 << PWMLER5) | (1 << PWMLER0);
     }
     break;
  }
}


阅读全文(830) | 回复(1) | 引用通告(0) | 编辑
 


系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1316) | 回复(0)

发表于 2007/12/14 6:41:12

0

关于投票

ADS7870的LPC213X之SSP接口配置及应用

ADS7870的LPC213X之SSP接口配置及应用
雁塔菜农 发表于 2006-6-27 0:06:00

/*----------------------------------------------------------------
ARM水鸟  HotPower@126.com
2006.06.27 00:12  于西安大雁塔村队部
-----------------------------------------------------------------*/

void AdsObj::AdsInit(void)
{
  PINSEL->PIN_SEL1 |= (P0_16_EINT0 << P0_16_PINSEL);// P0.16连接到EINT0

  AdsSSPInit();//SSP初始化

  ADSPORT->IODIR |= (__1 << ADSTART) | (__1 << ADRST);
  ADSPORTCS->IODIR |= (1 << ADCS);
  ADSPORTCS->IOSET  = (1 << ADCS);
  ADSPORT->IOCLR = (1 << ADSTART);//自动转换

  ADSPORT->IOCLR = (__1 << ADRST);//
  _delay_loop_(1);
  ADSPORT->IOSET = (__1 << ADRST);//
  _delay_loop_(1);

  AdsWriteReg(ADS7870_SERIFCTRL, 0x00);
  AdsIdTest();
  if (AdsTestStatus) {
    AdsWriteReg(ADS7870_REFOSC, ADS7870_REFOSC_OSCE | ADS7870_REFOSC_REFE | ADS7870_REFOSC_BUFE);
  }
  AdsIdValue = 0;
  AdsCount = 0;
  for (int i = 0; i < 8; i ++) {
    AdsTestRes[i] = 0;
 AdsTestVal[i] = 0;
    AdsTestCount[i] = 0;
    AdsTestSum[i] = 0;
    AdsTestMax[i] = 0;
    AdsTestMin[i] = 0xffff;
  }
  for (int i = 0; i < 4; i ++) {
    AdsCountA[i] = 0;
 AdsTestValV[i] = 0;
 AdsTestValA[i] = 0xffff;
 AdsTestSumA[i] = 0;
 AdsTestMaxA[i] = 0;
 AdsTestMinA[i] = 0xffff;
  }
}

void AdsObj::AdsSSPInit(void)
{
  POWER->P_CONP |= (1 << PCSPI1);
  PINSEL->PIN_SEL1 |= (P0_17_SCK1 << P0_17_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL);
  SSP->SSP_CR0 = (0x01 << 8) |              // SCR  设置SPI时钟分频0x01
                 (0x00 << 7) |              // CPHA 时钟输出相位,仅SPI模式有效
                 (0x00 << 6) |              // CPOL 时钟输出极性,仅SPI模式有效
                 (0x00 << 4) |              // FRF  帧格式 00=SPI,01=SSI,10=Microwire,11=保留
                 (0x07 << 0);               // DSS  数据长度,0000-0010=保留,0011=4位,0111=8位,1111=16位

  SSP->SSP_CR1 = (0x00 << 3) |              // SOD  从机输出禁能,1=禁止,0=允许
                 (0x00 << 2) |              // MS   主从选择,0=主机,1=从机
                 (0x01 << 1) |              // SSE  SSP使能,1=允许SSP与其它设备通信
                 (0x00 << 0);               // LBM  回写模式
            
//  SSP->SSP_CPSR = 8;                     // PCLK分频值
//  SSP->SSP_CPSR = 18;                     // PCLK分频值
  SSP->SSP_CPSR = 0x52;                     // PCLK分频值
   // SSP->SSP_IMSC = 0x07;                     // 中断屏蔽寄存器
  SSP->SSP_ICR  = 0x03;                     // 中断清除寄存器
}

void AdsObj::AdsConvertStart(void)
{
//unsigned short result;
unsigned int cNum;
  AdsCount &= 7;//只取8个通道(0~3测试电流,4~7测试电压)
  cNum = AdsCount;
/*-----------------------------------------------------------------
  D7 D6 D5 D4 D3 D2 D1 D0  cNumber
   X  X  X  X  X  0  X  X  电流测试
   X  X  X  X  X  1  X  X  电压测试

   X  X  X  X  0  X  X  0  电流测试
   X  X  X  X  1  X  X  1  电压测试
------------------------------------------------------------------*/
  if (cNum >= 4) {//电压测试用单端(4~7)
    cNum <<= 1;//电压测试用单端(8~f)
    cNum ++;//电压测试只测试端电压
  }
  else {//电流测试用差分(0~3)
    cNum += 4;
    cNum |= ADS7870_GAIN_20X;//电流增益20倍
  }
  AdsWriteReg(ADS7870_REFOSC, ADS7870_REFOSC_OSCE | ADS7870_REFOSC_REFE | ADS7870_REFOSC_BUFE);
  ADSPORTCS->IOCLR = (1 << ADCS);//打开片选信号
  AdsReadWriteByte(ADS7870_CONVERT | cNum);
//  sprintf(str, "ADC%1d.%05d", cNumber, result);
//  Uart.puts(str);
}

void AdsObj::AdsConvertStop(void)
{
unsigned short result;
//char str[16];
//  while(AdsReadReg(ADS7870_GAINMUX) & ADS7870_GAINMUX_CNVBSY);
  ADSPORTCS->IOCLR = (1 << ADCS);//打开片选信号
  AdsReadWriteByte(ADS7870_REG_READ | ADS7870_REG_16BIT | ADS7870_RESULTHI);
  result = AdsReadWriteByte(0xff) << 0x08;//读转换电压高4/3位
  result |= AdsReadWriteByte(0xff);//读转换电压低8位
  ADSPORTCS->IOSET = (1 << ADCS);//关闭片选信号
  if (result >= 0x8000) {
    result ^= 0xfff0;
 result += 0x0010;
  }
  AdsTestRes[AdsCount] = result;
//  sprintf(str, "AdsTestRes[%1d]=%04X", AdsCount, result);
//  Uart.puts(str);
}

unsigned char AdsObj::AdsReadWriteByte(unsigned char cData)
{
  SSP->SSP_DR = cData;
  while( (SSP->SSP_SR & (1 << BSY)) );     // 等待TFE置位,即发送FIFO空  
  return SSP->SSP_DR;
}

unsigned char AdsObj::AdsReadReg(unsigned char cReg)
{
unsigned char cData;
  ADSPORTCS->IOCLR = (1 << ADCS);//打开片选信号
  AdsReadWriteByte(ADS7870_REG_READ | cReg);
  cData = AdsReadWriteByte(0xff);
  ADSPORTCS->IOSET = (1 << ADCS);//关闭片选信号
  return cData;
}

void AdsObj::AdsWriteReg(unsigned char cReg, unsigned char cData)
{
  ADSPORTCS->IOCLR = (1 << ADCS);//打开片选信号
  AdsReadWriteByte(ADS7870_REG_WRITE | cReg);//写寄存器地址
  AdsReadWriteByte(cData);//写入控制命令
  ADSPORTCS->IOSET = (1 << ADCS);//关闭片选信号
}


void AdsObj::AdsIdTest(void)
{
  AdsWriteReg(ADS7870_SERIFCTRL, 0x00);//设置左移3线非8051模式
  AdsIdValue = AdsReadReg(ADS7870_ID);//读芯片ID
  if (AdsIdValue == ADS7870_ID_VALUE) {
    AdsTestStatus = true;
  }
  else {
    AdsTestStatus = false;
  }
}


阅读全文(912) | 回复(0) | 引用通告(4) | 编辑
 


系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1116) | 回复(0)

发表于 2007/12/14 0:20:15

0

关于投票

LPC2103快速FGPIO例程源码

LPC2103快速FGPIO例程源码
雁塔菜农 发表于 2006-7-7 22:34:00


void SystemObj::PortInit(void)
{
  SYSCON->SCS = 0;//设置普通GPIO模式
  PINSEL->PIN_SEL0 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL1 = 0x00000000;  // 设置管脚连接GPIO
  P0->IODIR  = 0x00000000;  // 设置P0口为输入
  FP0->FIODIR  = 0x00000000;  // 设置FP0口为输入
  FP0->FIOMASK = 0xffffffff;    //屏蔽快速IO.
}

void SystemObj::HC164init(void)
{
  SYSCON->SCS |= (1 << GPIOM);//设置快速FGPIO模式
  LEDFPORT->FIODIR |= (1 << HC164DATA) | (1 << HC164CLK);//设置快速IO为输出方式
  LEDFPORT->FIOMASK &= ~((1 << HC164DATA) | (1 << HC164CLK));//允许快速IO.
}

void SystemObj::HC164Write(unsigned char cData)
{
unsigned int i;
  for (i = 0; i < 8; i ++) {
    LEDFPORT->FIOCLR = (1 << HC164CLK);//时钟拉低。快速IO
    if (cData & 0x80) {//MSB最高位为1时
      LEDFPORT->FIOSET = (1 << HC164DATA);//数据为高。快速IO
 }
 else {
      LEDFPORT->FIOCLR = (1 << HC164DATA);//数据为低。快速IO
 }
 cData <<= 1;
    LEDFPORT->FIOSET = (1 << HC164CLK);//时钟拉高。快速IO
  } 
}


阅读全文(789) | 回复(4) | 引用通告(5) | 编辑
 


系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(940) | 回复(0)

发表于 2007/12/14 0:18:58

0

关于投票

LPC2103DEF.H(快速版)

LPC2103DEF.H(快速版)
雁塔菜农 发表于 2006-7-7 22:31:00

/*--------------------------------------------------------------------------
文   件   名 :  LPC2103DEF.H
创   建   人 :  ARM水鸟  HotPower@126.com
创 建 日  期 :  2006.7.06  10:06
最近修改日期 :  2006.7.07  11:33
创 建  地 点 : 西安大雁塔村队部
版   本   号 : V1.11(快速版)
说        明 : 已经过FFT2103赠品硬件调试,在此感谢西安FFT
                由于在不断更新中,故新旧版本以修改日期为准
备        注 : 本文件是由LPC213XDEF.H(尿童版)文件仓促改编而来。
                由此文件出现的问题,ARM水鸟不负任何责任。
    由于210x的目标是替代MCU,故将采用以裸奔为主的原则。

修 改  原 因 : 可以立即全面替代LPC2103.h
                增加快速FGPIO部分。
应 用  简 介:
SystemObj::SystemObj(void)
{
volatile unsigned int start;
  Disable_IRQ();//关中断
  PINSEL->PIN_SEL0 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL1 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL2 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL0 |= (P0_15_EINT2 << P0_15_PINSEL);// P0.15连接到EINT2
  P0->IODIR  = 0x00000000;  // 设置P0口为输入
  VIC->IntEnable = 0;
  VIC->SoftIntClr = 0xffffffff;//清除所有软中断标志
  VIC->IntSelect   = 0;//全部中断为IRQ中断或默认中断
  for(int i = 0; i <= 15; i ++) {
    VIC->VectAddrs[i] = 0;//刷新向量地址寄存器VICVectAddr0~VICVectAddr15
  }
  for (start = 1; start < 10000; start ++);
  SystemInit();
  Enable_IRQ();//开中断
}
-------------------------------------------------------------------------------*/

 


#ifndef __LPC213xDEF_H
#define __LPC213xDEF_H

typedef volatile unsigned long LPC_REG;// Hardware register definition

#define __noinit__ __attribute__((zero_init))//变量不初始化为0


typedef unsigned char  uint8; //无符号8位整型变量
typedef signed   char  int8;  //有符号8位整型变量
typedef unsigned short uint16;//无符号16位整型变量
typedef signed   short int16; //有符号16位整型变量
typedef unsigned int   uint32;//无符号32位整型变量
typedef signed   int   int32; //有符号32位整型变量
typedef float          fp32;  //单精度浮点数(32位长度
typedef double         fp64;  //双精度浮点数(64位长度)

#define __0                  (LPC_REG)0
#define __1                  (LPC_REG)1
#define __2                  (LPC_REG)2
#define __3                  (LPC_REG)3
#define __4                  (LPC_REG)4
#define __5                  (LPC_REG)5
#define __6                  (LPC_REG)6
#define __7                  (LPC_REG)7
#define __8                  (LPC_REG)8
#define __9                  (LPC_REG)9
#define __10                 (LPC_REG)10
#define __11                 (LPC_REG)11
#define __12                 (LPC_REG)12
#define __13                 (LPC_REG)13
#define __14                 (LPC_REG)14
#define __15                 (LPC_REG)15
#define __16                 (LPC_REG)16
#define __17                 (LPC_REG)17
#define __18                 (LPC_REG)18
#define __19                 (LPC_REG)19
#define __20                 (LPC_REG)20
#define __21                 (LPC_REG)21
#define __22                 (LPC_REG)22
#define __23                 (LPC_REG)23
#define __24                 (LPC_REG)24
#define __25                 (LPC_REG)25
#define __26                 (LPC_REG)26
#define __27                 (LPC_REG)27
#define __28                 (LPC_REG)28
#define __29                 (LPC_REG)29
#define __30                 (LPC_REG)30
#define __31                 (LPC_REG)31

#define VICIntSel_Watchdog   0//看门狗中断(WDINT)
#define VICIntSel_SoftInt1   1//保留给软件中断
#define VICIntSel_DbgCommRx  2//ARM内核中断
#define VICIntSel_DbgCommTx  3//ARM内核中断
#define VICIntSel_Time0      4//定时器0中断
#define VICIntSel_Time1      5//定时器1中断
#define VICIntSel_UART0      6//UART0中断
#define VICIntSel_UART1      7//UART1中断
#define VICIntSel_PWM0       8//PWM0中断
#define VICIntSel_I2C0       9//I2C0中断
#define VICIntSel_SPI0      10//SPI0中断
#define VICIntSel_SSP       11//SSP中断
#define VICIntSel_SPI1      11//SPI1中断
#define VICIntSel_PLL       12//PLL中断
#define VICIntSel_RTC       13//RTC中断
#define VICIntSel_EINT0     14//系统控制外部中断0
#define VICIntSel_EINT1     15//系统控制外部中断1
#define VICIntSel_EINT2     16//系统控制外部中断2
#define VICIntSel_EINT3     17//系统控制外部中断3
#define VICIntSel_ADC0      18//A/D转换器0中断
#define VICIntSel_I2C1      19//I2C1中断
#define VICIntSel_BOD       20//掉电检测中断
#define VICIntSel_ADC1      21//A/D转换器1中断
#define VICIntSel_SoftInt22 22//保留给软件中断
#define VICIntSel_SoftInt23 23//保留给软件中断
#define VICIntSel_SoftInt24 24//保留给软件中断
#define VICIntSel_SoftInt25 25//保留给软件中断
#define VICIntSel_SoftInt26 26//保留给软件中断
#define VICIntSel_SoftInt27 27//保留给软件中断
#define VICIntSel_SoftInt28 28//保留给软件中断
#define VICIntSel_SoftInt29 29//保留给软件中断
#define VICIntSel_SoftInt30 30//保留给软件中断
#define VICIntSel_SoftInt31 31//保留给软件中断
#define VICIntSel_Enable    32//使能向量中断

/*--------------------------------------------------------------------
应用示例
  VIC->VectCntls[0]   = VICIntSel_Enable//使能IRQ中断
                      | VICIntSel_EINT0;//获取EINT0的IRQ级别
  VIC->VectAddrs[0]   = (long) IRQ_Eint0;//取INT0中断服务地址
  VIC->IntEnable      = (1 << VICIntSel_EINT0); //使能EINT0中断
----------------------------------------------------------------------*/

/*---------------------------------------------------------------------
                 P0口链接配置位定义
----------------------------------------------------------------------*/

#define P0_0   0//P0.0
  #define TXD0    P0_0//UART0的发送器输出
#define P0_1   1//P0.1
  #define RXD0    P0_1//UART0的接收器输入
#define P0_2   2//P0.2
  #define SCL0    P0_2//I2C0时钟输入/输出。开漏输出(符合I2C规范)
#define P0_3   3//P0.3
  #define SDA0    P0_3//I2C0数据输入/输出。开漏输出(符合I2C规范)
#define P0_4   4//P0.4
  #define SCK0    P0_4//SPI0的串行时钟。SPI时钟从主机输出,从机输入
#define P0_5   5//P0.5
  #define MISO0   P0_5//SPI0主机输入从机输出端。从机到主机的数据传输
#define P0_6   6//P0.6
  #define MOSI0   P0_6//SPI0主机输出从机输入端。主机到从机的数据传输
#define P0_7   7//P0.7
  #define SSEL0   P0_7//SPI0从机选择。选择SPI接口用作从机
#define P0_8   8//P0.8
  #define TXD1    P0_8//UART1的发送器输出
#define P0_9   9//P0.9
  #define RXD1    P0_9//UART1的接收器输入
#define P0_10 10//P0.10
  #define RTS1    P0_10//UART1请求发送出端(仅用于LP138)
  #define CAP1_0  P0_10//定时器1的捕获输入通道0
  #define AIN3    P0_10//A/D转换器输入3。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_11 11//P0.11
  #define CTS1    P0_11//UART1清除发送入端(仅用于LP138)
  #define CAP1_1  P0_11//定时器1的捕获输入通道1
  #define AIN4    P0_11//A/D转换器输入4。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_12 12//P0.12
  #define DSR1    P0_12//UART1数据设置就绪端(仅用于 LPC2138)
  #define MAT1_0  P0_12//定时器1的匹配输出通道0
  #define AIN5    P0_11//A/D转换器输入5。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_13 13//P0.13
  #define DTR1    P0_13//UART1数据终端就绪
  #define MAT1_1  P0_13//定时器1的匹配输出通道1
#define P0_14 14//P0.14
  #define DCD1    P0_14//UART1数据载波检测输入(仅用于 LPC2138)
  #define SCK1    P0_14//SPI1的串行时钟。SPI时钟从主机输出,从机输入
#define P0_15 15//P0.15
  #define RI1     P0_15//UART1铃响指示输入(仅用于 LPC2138)
#define P0_16 16//P0.16
  #define MAT0_2  P0_16//定时器0的匹配输出通道2

#define P0_17 17//P0.17
  #define SCL1    P0_17//I2C1时钟输入/输出。开漏输出(符合I2C规范)
#define P0_18 18//P0.18
  #define SDA1    P0_18//I2C1数据输入/输出。开漏输出(符合I2C规范)
#define P0_19 19//P0.19
  #define MISO1   P0_19//SPI1主机输入从机输出端。从机到主机的数据传输
#define P0_20 20//P0.20
  #define MOSI1   P0_20//SPI1主机输出从机输入端。主机到从机的数据传输
#define P0_21 21//P0.21
  #define SSEL1   P0_21//SPI1从机选择。选择SPI接口用作从机
#define P0_22 22//P0.22
  #define AIN0    P0_22//A/D转换器输入0。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_23 23//P0.23
  #define AIN1    P0_23//A/D转换器输入1。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_24 24//P0.24
  #define AIN2    P0_24//A/D转换器输入2。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_25 25//P0.25
  #define AIN6    P0_25//A/D转换器输入6。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_26 26//P0.26
  #define AIN7    P0_26//A/D转换器输入7。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_27 27//P0.27
#define P0_28 28//P0.28
#define P0_29 29//P0.29
#define P0_30 30//P0.30
#define P0_31 31//P0.31

 

/*---------------------------------------
        SCS系统控制和状态寄存器位定义
----------------------------------------*/
#define GPIOM    0//0 低速GPIO  1 高速GPIO

/*---------------------------------------
        RTC中断位置寄存器ILR位定义
----------------------------------------*/
#define RTCCIF   0//为1时,计数器增量中断模块产生中断。向该位写入1清除计数器增量中断。
#define RTCALF   1//为1时,报警寄存器产生中断。向该位写入1清除报警中断。


/*---------------------------------------
        RTC时钟控制寄存器CCR位定义
----------------------------------------*/
#define CLKEN    0//时钟使能当该位为1 时,时间计数器使能。
#define CTCRST   1//CTC 复位为1 时,时钟节拍计数器复位。
#define CLKSRC   4//如果该位为1,CTC 计数连接在RTCX1 和RTCX2 两端的32kHz振荡器信号。

/*---------------------------------------
        RTC计数器增量中断寄存器CIIR位定义
----------------------------------------*/
#define IMSEC    0//为1时,秒值的增加产生一次中断。
#define IMMIN    1//为1时,分值的增加产生一次中断。
#define IMHOUR   2//为1时,小时值的增加产生一次中断。
#define IMDOM    3//为1时,日期(月)值的增加产生一次中断。
#define IMDOW    4//为1时,星期值的增加产生一次中断。
#define IMDOY    5//为1时,日期(年)值的增加产生一次中断。
#define IMMON    6//为1时,月值的增加产生一次中断。
#define IMYEAR   7//为1时,年值的增加产生一次中断。

/*---------------------------------------
        RTC报警屏蔽寄存器位AMR位定义
----------------------------------------*/
#define AMRSEC   0//为1 时,秒值不与报警寄存器比较。
#define AMRMIN   1//为1 时,分值不与报警寄存器比较。
#define AMRHOUR  2//为1 时,小时值不与报警寄存器比较。
#define AMRDOM   3//为1 时,日期(月)值不与报警寄存器比较。
#define AMRDOW   4//为1 时,星期值不与报警寄存器比较。
#define AMRDOY   5//为1 时,日期(年)值不与报警寄存器比较。
#define AMRMON   6//为1 时,月值不与报警寄存器比较。
#define AMRYEAR  7//为1 时,年值不与报警寄存器比较。

/*---------------------------------------
        TX中断寄存器TXIR位定义
----------------------------------------*/
#define MR0      0//匹配通道0中断标志
#define MR1      1//匹配通道1中断标志
#define MR2      2//匹配通道2中断标志
#define MR3      3//匹配通道3中断标志
#define CR0      4//捕获通道0事件中断标志
#define CR1      5//捕获通道0事件中断标志
#define CR2      6//捕获通道0事件中断标志
#define CR3      7//捕获通道0事件中断标志

 

/*---------------------------------------
        UARTX标识中断寄存器UXIIR
----------------------------------------*/
#define IIR0     0//中断挂起 0:至少有1个中断被挂起(挂起的中断可通过UXIER3:1确定)
#define IIR1     1//中断标识1
#define IIR2     2//中断标识2
#define IIR3     3//中断标识3


/*---------------------------------------
        UARTX线状态寄存器UXLSR
----------------------------------------*/
#define RDR      0//接收数据就绪
#define OE   1//溢出错误
#define PE   2//奇偶错误
#define FE   3//帧错误
#define BI   4//间隔中断
#define THRE     5//发送保持寄存器空
#define TEMT     6//发送器空
#define RXFE     7//Rx FIFO错误

/*---------------------------------------
        I2C控制置位寄存器I2CONSET位定义
----------------------------------------*/
#define AA       2//应答标志。
#define SI       3//I2C中断标志。
#define STO      4//停止标志。
#define STA      5//起始标志。
#define I2EN     6//I2C接口使能。

/*---------------------------------------
        I2C控制清零寄存器I2CONCLR位定义
----------------------------------------*/
#define AAC      2//应答标志。
#define SIC      3//I2C中断标志。
#define STAC     5//起始标志。
#define I2ENC    6//I2C接口使能。


/*---------------------------------------
        I2C运行状态代码定义
----------------------------------------*/
#define I2C_START            0x08 //已发送起始条件
#define I2C_REP_START        0x10 //已发送重复起始条件
/* Master Transmitter */      //主发送器模式
#define I2C_MT_SLA_ACK        0x18 //已发送SLA+W,且已接收ACK
#define I2C_MT_SLA_NACK        0x20 //已发送SLA+W,且未接收ACK
#define I2C_MT_DATA_ACK        0x28 //已发送I2DAT 中的数据字节,且已接收ACK
#define I2C_MT_DATA_NACK       0x30 //已发送I2DAT 中的数据字节,且未接收ACK
#define I2C_MT_ARB_LOST        0x38
/* Master Receiver */       //主接收器模式
#define I2C_MR_ARB_LOST        0x38
#define I2C_MR_SLA_ACK        0x40 //已发送SLA+R,且已接收ACK
#define I2C_MR_SLA_NACK        0x48 //已发送SLA+R,且未接收ACK
#define I2C_MR_DATA_ACK        0x50
#define I2C_MR_DATA_NACK       0x58
/* Slave Transmitter */
#define I2C_ST_SLA_ACK         0xA8
#define I2C_ST_ARB_LOST_SLA_ACK   0xB0
#define I2C_ST_DATA_ACK        0xB8
#define I2C_ST_DATA_NACK       0xC0
#define I2C_ST_LAST_DATA       0xC8
/* Slave Receiver */
#define I2C_SR_SLA_ACK        0x60
#define I2C_SR_ARB_LOST_SLA_ACK   0x68
#define I2C_SR_GCALL_ACK      0x70
#define I2C_SR_ARB_LOST_GCALL_ACK 0x78
#define I2C_SR_DATA_ACK        0x80
#define I2C_SR_DATA_NACK    0x88
#define I2C_SR_GCALL_DATA_ACK   0x90
#define I2C_SR_GCALL_DATA_NACK   0x98
#define I2C_SR_STOP            0xA0
/* Misc */
#define I2C_NO_INFO            0xF8
#define I2C_BUS_ERROR        0x00


/*-------------------------
        PWMMCR位定义
--------------------------*/
#define PWMMCRI0 0
#define PWMMCRR0 1
#define PWMMCRS0 2

#define PWMMCRI1 3
#define PWMMCRR1 4
#define PWMMCRS1 5

#define PWMMCRI2 6
#define PWMMCRR2 7
#define PWMMCRS2 8

#define PWMMCRI3 9
#define PWMMCRR3 10
#define PWMMCRS3 11

#define PWMMCRI4 12
#define PWMMCRR4 13
#define PWMMCRS4 14

#define PWMMCRI5 15
#define PWMMCRR5 16
#define PWMMCRS5 17

#define PWMMCRI6 18
#define PWMMCRR6 19
#define PWMMCRS6 20

 

/*-------------------------
        PWMPCR位定义
--------------------------*/
#define PWMSEL1 1
#define PWMSEL2 2
#define PWMSEL3 3
#define PWMSEL4 4
#define PWMSEL5 5
#define PWMSEL6 6

#define PWMENA1 9
#define PWMENA2 10
#define PWMENA3 11
#define PWMENA4 12
#define PWMENA5 13
#define PWMENA6 14

/*--------------------------
        PWMLER位定义
---------------------------*/
#define PWMLER0 0
#define PWMLER1 1
#define PWMLER2 2
#define PWMLER3 3
#define PWMLER4 4
#define PWMLER5 5
#define PWMLER6 6

/*--------------------------
        ADCR位定义
---------------------------*/
#define BURST   16
#define PDN     21

#define START   24//26:24=000

#define EDGE    27

/*------------------------------------------------
        A/D 数据寄存器ADDR位定义
-------------------------------------------------*/
#define OVERUN      30
#define DONE        31//A/D转换结束时该位置位。该位在ADDR被读出和ADCR被写入时清零。
/*-----------------------------------------
        复位源识别寄存器RSID位定义
------------------------------------------*/
#define POR          0//RSID.0//POR信号有效时该位置位,并清除RSID寄存器的其它位
#define EXTR         1//RSID.1//RESET信号有效时该位置位
#define WDTR         2//RSID.2//当看门狗定时器溢出和看门狗方式寄存器的WDTRESET位为1时,该位置位。
                              //该位可被其它任何一个复位源清除。
#define BODR         3//RSID.3//当3.3V的电源降到低于2.6V时该位置位

/*-----------------------------------------
        SSP状态寄存器SSPSR位定义
------------------------------------------*/
#define TFE          0//发送FIFO 空。发送FIFO 为空时该位为1,反之为0。
#define TNF          1//发送FIFO 未满。Tx FIFO 满时该位为0,反之为1。
#define RNE          2//接收FIFO 不为空。接收FIFO 为空时该位为0,反之为1。
#define RFF          3//接收FIFO 满。接收FIFO 满时该位为1,反之为0。
#define BSY          4//忙。SSP 控制器空闲、

/*-----------------------------------------
        S0SPCR位定义
------------------------------------------*/
#define CPHA         3//时钟相位控制
#define CPOL         4//时钟极性控制
#define MSTR         5//主模式选择。为1时,SPI处于主模式。为0时,SPI处于从模式。
#define LSBF         6//传输的每个字节的移动方向.为0 时,SPI数据传输MSB(位7)在先
#define SPIE         7//中断使能。为1时,每次SPIF或MODF置位时都会产生硬件中断
/*-----------------------------------------
        SPI 状态寄存器S0SPSR位定义
------------------------------------------*/
#define ABRT        3//从机中止。该位为1 时表示发生了从机中止。当读取该寄存器时,该位清零
#define MODF        4//模式错误。为1 时表示发生了模式错误。
#define ROVR        5//读溢出。为1 时表示发生了读溢出。当读取该寄存器时,该位清零。
#define WCOL        6//写冲突。为1 时表示发生了写冲突
#define SPIF        7//SPI 传输完成标志。为1 时表示一次SPI 数据传输完成。


/*-----------------------------------------
        功率控制寄存器PCON位定义
------------------------------------------*/
#define IDL         0//空闲模式
#define PD          1//掉电模式
#define PDBOD       2//空闲模式


/*-----------------------------------------
        外设功率控制寄存器PCONP位定义
------------------------------------------*/
#define PCTIM0      1//定时器0使能
#define PCTIM1      2//定时器1使能
#define PCURT0      3//UART0使能
#define PCURT1      4//UART1使能
#define PCPWM0      5//PWM0使能
#define PCI2C0      7//I2C0接口使能
#define PCSPI0      8//SPI接口使能
#define PCRTC       9//RTC使能
#define PCSPI1     10//SSP接口使能
#define PCAD0      12//A/D转换器0使能
#define PCI2C1     19//I2C1接口使能
#define PCAD1      20//A/D转换器1使能
/*-----------------------------------------
        WDMOD位定义
------------------------------------------*/
#define WDEN        0//
#define WDRESET     1//
#define WDTOF       2//
#define WDINT       3//

/*-----------------------------------------
        PLL 控制寄存器位定义
------------------------------------------*/
#define PLLEN       0//PLL 使能
#define PLLLK       1//PLL 连接
/*-----------------------------------------
        PLL 状态寄存器位定义
------------------------------------------*/
#define PLLE        8//PLL 使能位
#define PLLC        9//PLL 连接位
#define PLOCK      10//PLL 锁定状态

/*--------------------------------------------------
        外部中断标志寄存器EXTINT位定义
---------------------------------------------------*/
#define EINT0  0//EXTINT.0//写'1'清除EINT0中断标志
#define EINT1  1//EXTINT.1//写'1'清除EINT1中断标志
#define EINT2  2//EXTINT.2//写'1'清除EINT2中断标志
#define EINT3  3//EXTINT.3//写'1'清除EINT3中断标志

/*--------------------------------------------------
        外部中断方式寄存器EXTMODE位定义
---------------------------------------------------*/
#define EXTMODE0 0//EXTMODE.0//该位为0时,EINT0使用电平激活;该位为1时,EINT0使用边沿激活。
#define EXTMODE1 1//EXTMODE.1//该位为0时,EINT1使用电平激活;该位为1时,EINT1使用边沿激活。
#define EXTMODE2 2//EXTMODE.2//该位为0时,EINT2使用电平激活;该位为1时,EINT2使用边沿激活。
#define EXTMODE3 3//EXTMODE.3//该位为0时,EINT3使用电平激活;该位为1时,EINT3使用边沿激活。

/*--------------------------------------------------
        外部中断极性寄存器EXTPOLAR位定义 
---------------------------------------------------*/
#define EXTPOLAR0 0//EXTPOLAR.0//该位为0时,EINT0低电平或下降沿有效(由EXTMODE0决定)。
                   //该位为1时,EINT0高电平或上升沿有效(由EXTMODE0决定)。
#define EXTPOLAR1 1//EXTPOLAR.1//该位为0时,EINT1低电平或下降沿有效(由EXTMODE1决定)。
                   //该位为1时,EINT1高电平或上升沿有效(由EXTMODE1决定)。
#define EXTPOLAR2 2//EXTPOLAR.2//该位为0时,EINT2低电平或下降沿有效(由EXTMODE2决定)。
                   //该位为1时,EINT2高电平或上升沿有效(由EXTMODE2决定)。
#define EXTPOLAR3 3//EXTPOLAR.3//该位为0时,EINT3低电平或下降沿有效(由EXTMODE3决定)。
                   //该位为1时,EINT3高电平或上升沿有效(由EXTMODE3决定)。

/*--------------------------------------------------
        外部中断唤醒寄存器EXTWAKE位定义 
---------------------------------------------------*/
#define EXTWAKE0  0//EXTWAKE.0//该位为1时,使能EINT0将处理器从掉电模式唤醒。
#define EXTWAKE1  1//EXTWAKE.1//该位为1时,使能EINT1将处理器从掉电模式唤醒。
#define EXTWAKE2  2//EXTWAKE.2//该位为1时,使能EINT2将处理器从掉电模式唤醒。
#define EXTWAKE3  3//EXTWAKE.3//该位为1时,使能EINT3将处理器从掉电模式唤醒。
#define BODWAKE  14//EXTWAKE.14//该位为1时,BOD中断产生时可将处理器从掉电模式唤醒。
#define RTCWAKE  15//EXTWAKE.15//该位为1时,RTC中断产生时可将处理器从掉电模式唤醒。

/*---------------------------------------------------------------------------------------
  GPIO管脚功能配置
应用示例:
  PINSEL->PIN_SEL0  |= (P0_0_TXD0 << P0_0_PINSEL) | (P0_1_RXD0 << P0_1_PINSEL);
                   //选择P0.0和P0.1为UART0的输出输入引脚

  PINSEL->PIN_SEL0  |= (P0_3_EINT1 << P0_3_PINSEL); //选择P0.3为INT1外部中断引脚
  PINSEL->PIN_SEL0  |= (P0_14_EINT1 << P0_14_PINSEL); //选择P0.14也可为INT1外部中断引脚

  PINSEL->PIN_SEL0  |= (P0_1_EINT0 << P0_1_PINSEL)   //选择P0.1为INT0外部中断引脚
  PINSEL->PIN_SEL1  |= (P0_16_EINT0 << P0_16_PINSEL); //选择P0.16也可为INT0外部中断引脚
------------------------------------------------------------------------------------------*/

#define P0_0_GPIO      __0//通用数字输入输出管脚
  #define P0_0_TXD0    __1//UART0的发送器输出
  #define P0_0_MAT3_1  __2//**定时器3的匹配输出通道1
#define P0_0_PINSEL    2 * P0_0

#define P0_1_GPIO      __0//通用数字输入输出管脚
  #define P0_1_RXD0    __1//UART0的接收器输入
  #define P0_1_MAT3_2  __2//**定时器3的匹配输出通道2
#define P0_1_PINSEL    2 * P0_1

#define P0_2_GPIO      __0//通用数字输入输出管脚
  #define P0_2_SCL0    __1//I2C0时钟输入/输出。开漏输出(符合I2C规范)
  #define P0_2_CAP0_0  __2//***定时器0的捕获输入通道0
#define P0_2_PINSEL    2 * P0_2

#define P0_3_GPIO      __0//通用数字输入输出管脚
  #define P0_3_SDA0    __1//I2C0数据输入/输出。开漏输出(符合I2C规范)
  #define P0_3_MAT0_0  __2//**定时器0的匹配输出通道0
#define P0_3_PINSEL    2 * P0_3

#define P0_4_GPIO      __0//通用数字输入输出管脚
  #define P0_4_SCK0    __1//SPI0的串行时钟。SPI时钟从主机输出,从机输入
  #define P0_4_CAP0_1  __2//**定时器0的捕获输入通道1
#define P0_4_PINSEL  2 * P0_4

#define P0_5_GPIO      __0//通用数字输入输出管脚
  #define P0_5_MISO0   __1//SPI0主机输入从机输出端。从机到主机的数据传输
  #define P0_5_MAT0_1  __2//**定时器0的匹配输出通道1
#define P0_5_PINSEL    2 * P0_5

#define P0_6_GPIO      __0//通用数字输入输出管脚
  #define P0_6_MOSI0   __1//SPI0主机输出从机输入端。主机到从机的数据传输
  #define P0_6_CAP0_2  __2//***定时器0的捕获输入通道2
#define P0_6_PINSEL    2 * P0_6

#define P0_7_GPIO      __0//通用数字输入输出管脚
  #define P0_7_SSEL0   __1//SPI0从机选择。选择SPI接口用作从机
  #define P0_7_MAT2_0  __2//**定时器2的匹配输出通道0
#define P0_7_PINSEL    2 * P0_7

#define P0_8_GPIO      __0//通用数字输入输出管脚
  #define P0_8_TXD1    __1//UART1的发送器输出
  #define P0_8_MAT2_1  __2//**定时器2的匹配输出通道1
#define P0_8_PINSEL    2 * P0_8

#define P0_9_GPIO      __0//通用数字输入输出管脚
  #define P0_9_RXD1    __1//UART1的接收器输入
  #define P0_9_MAT2_2  __2//**定时器2的匹配输出通道2
#define P0_9_PINSEL    2 * P0_9

#define P0_10_GPIO     __0//通用数字输入输出管脚
  #define P0_10_RTS1   __1//UART1请求发送出端(仅用于LP138)
  #define P0_10_CAP1_0 __2//定时器1的捕获输入通道0
  #define P0_10_AIN3   __3//A/D转换器输入3。该模拟输入总是连接到相应的管脚
#define P0_10_PINSEL   2 * P0_10

#define P0_11_GPIO     __0//通用数字输入输出管脚
  #define P0_11_CTS1   __1//UART1清除发送入端(仅用于LP138)
  #define P0_11_CAP1_1 __2//定时器1的捕获输入通道1
  #define P0_11_AIN4   __3//A/D转换器输入4。该模拟输入总是连接到相应的管脚
#define P0_11_PINSEL   2 * P0_11

#define P0_12_GPIO     __0//通用数字输入输出管脚
  #define P0_12_DSR1   __1//UART1数据设置就绪端(仅用于 LPC2138)
  #define P0_12_MAT1_0 __2//定时器1的匹配输出通道0
  #define P0_12_AIN5   __3//A/D转换器输入5。该模拟输入总是连接到相应的管脚
#define P0_12_PINSEL   2 * P0_12

#define P0_13_GPIO     __0//通用数字输入输出管脚
  #define P0_13_DTR1   __1//UART1数据终端就绪
  #define P0_13_MAT1_1 __2//定时器1的匹配输出通道1
#define P0_13_PINSEL   2 * P0_13

#define P0_14_GPIO     __0//通用数字输入输出管脚
  #define P0_14_DCD1   __1//UART1数据载波检测输入(仅用于 LPC2138)
  #define P0_14_SCK1   __2//SPI1的串行时钟。SPI时钟从主机输出,从机输入
  #define P0_14_EINT1  __3//**外部中断1输入
#define P0_14_PINSEL   2 * P0_14

#define P0_15_GPIO     __0//通用数字输入输出管脚
  #define P0_15_RI1    __1//UART1铃响指示输入(仅用于 LPC2138)
  #define P0_15_EINT2  __2//**外部中断2输入
#define P0_15_PINSEL   2 * P0_15

#define P0_16_GPIO     __0//通用数字输入输出管脚
  #define P0_16_EINT0  __1//**外部中断0输入
  #define P0_16_MAT0_2 __2//**定时器0的匹配输出通道2
#define P0_16_PINSEL   2 * P0_0


#define P0_17_GPIO     __0//通用数字输入输出管脚
  #define P0_17_CAP1_2 __1//**定时器1的捕获输入通道2
  #define P0_17_SCL1   __2//I2C1时钟输入/输出。开漏输出(符合I2C规范)
#define P0_17_PINSEL   2 * P0_1

#define P0_18_GPIO     __0//通用数字输入输出管脚
  #define P0_18_CAP1_3 __1//**定时器1的捕获输入通道3
  #define P0_18_SDA1   __2//I2C1数据输入/输出。开漏输出(符合I2C规范)
#define P0_18_PINSEL   2 * P0_2


#define P0_19_GPIO     __0//通用数字输入输出管脚
  #define P0_19_MAT1_2 __1//**定时器1的匹配输出通道2
  #define P0_19_MISO1  __2//SPI1主机输入从机输出端。从机到主机的数据传输
#define P0_19_PINSEL   2 * P0_3


#define P0_20_GPIO     __0//通用数字输入输出管脚
  #define P0_20_MAT1_3 __1//**定时器1的匹配输出通道3
  #define P0_20_MOSI1  __2//SPI1主机输出从机输入端。主机到从机的数据传输
#define P0_20_PINSEL   2 * P0_4


#define P0_21_GPIO     __0//通用数字输入输出管脚
  #define P0_21_MAT3_0 __1//**定时器3的匹配输出通道0
  #define P0_21_SSEL1  __2//SPI1从机选择。选择SPI接口用作从机
#define P0_21_PINSEL   2 * P0_5


#define P0_22_GPIO     __0//通用数字输入输出管脚
  #define P0_22_AIN0   __1//A/D转换器输入0。该模拟输入总是连接到相应的管脚
#define P0_22_PINSEL   2 * P0_6


#define P0_23_GPIO     __0//通用数字输入输出管脚
  #define P0_23_AIN1   __1//A/D转换器输入1。该模拟输入总是连接到相应的管脚
#define P0_23_PINSEL   2 * P0_7

#define P0_24_GPIO     __0//通用数字输入输出管脚
  #define P0_24_AIN2   __1//A/D转换器输入2。该模拟输入总是连接到相应的管脚
#define P0_24_PINSEL   2 * P0_8


#define P0_25_GPIO     __0//通用数字输入输出管脚
  #define P0_25_AIN6   __1//A/D转换器输入6。该模拟输入总是连接到相应的管脚
#define P0_25_PINSEL   2 * P0_9


#define P0_26_GPIO     __0//通用数字输入输出管脚
  #define P0_26_AIN7   __1//A/D转换器输入7。该模拟输入总是连接到相应的管脚
#define P0_26_PINSEL   2 * P0_10


#define P0_27_GPIO     __0//通用数字输入输出管脚
  #define TRST         __1//JTAG接口的测试复位
  #define P0_27_CAP2_0 __2//***定时器2的捕获输入通道0
#define P0_27_PINSEL   2 * P0_11


#define P0_28_GPIO     __0//通用数字输入输出管脚
  #define TMS          __1//JTAG接口的测试模式选择
  #define P0_28_CAP2_1 __2//***定时器2的捕获输入通道1
#define P0_28_PINSEL   2 * P0_12


#define P0_29_GPIO     __0//通用数字输入输出管脚
  #define TCK          __1//JTAG接口的测试时钟
  #define P0_29_CAP2_2 __2//***定时器2的捕获输入通道2
#define P0_29_PINSEL   2 * P0_13


#define P0_30_GPIO     __0//通用数字输入输出管脚
  #define TDI          __1//JTAG接口的测试数据输入
  #define P0_30_MAT3_3 __2//**定时器3的匹配输出通道3
#define P0_30_PINSEL   2 * P0_14


#define P0_31_GPO      __0//通用数字输出管脚(注意:此管脚仅为输出)
  #define TDO          __1//JTAG接口的测试数据输出
#define P0_31_PINSEL   2 * P0_15

 


 
/*------------------------------------------------------------------------
        结构指针在ARM之应用(愚人节版)
------------------------------------------------------------------------*/


typedef struct _LPCS_VIC {
  LPC_REG IRQStatus;//IRQ 状态寄存器
  LPC_REG FIQStatus;//FIQ 状态请求
  LPC_REG RawIntr;//所有中断的状态寄存器
  LPC_REG IntSelect;//中断选择寄存器
  LPC_REG IntEnable;//中断使能寄存器
  LPC_REG IntEnClr;//中断使能清零寄存器
  LPC_REG SoftInt;//软件中断寄存器
  LPC_REG SoftIntClr;//软件中断清零寄存器
  LPC_REG Protection;//保护使能寄存器
  LPC_REG Reserved1[3]; //保留3个空位
  LPC_REG VectAddr;//向量地址寄存器
  LPC_REG DefVectAddr;//默认向量地址寄存器
  LPC_REG Reserved2[2]; //保留2个空位
  LPC_REG Reserved3[48];//保留48个空位
  LPC_REG VectAddrs[16];//向量地址寄存器,VICVectAddr0~VICVectAddr15
  LPC_REG Reserved4[48];//保留48个空位
  LPC_REG VectCntls[16];//向量控制寄存器,VICVectCntl0~VICVectCntl15
}LPCS_VIC, *LPCPS_VIC;

#define LPC_BASE_VIC  ((LPCPS_VIC)  0xFFFFF000)//定义硬件结构指针(硬件地址)
const LPCPS_VIC VIC = LPC_BASE_VIC;//定义全局结构指针变量

typedef struct _LPCS_PINSEL {
  LPC_REG PIN_SEL0;//管脚功能选择寄存器0
  LPC_REG PIN_SEL1;//管脚功能选择寄存器1
}LPCS_PINSEL, *LPCPS_PINSEL;

#define LPC_BASE_PINSEL  ((LPCPS_PINSEL)  0xE002C000)//定义硬件结构指针(硬件地址)
const LPCPS_PINSEL PINSEL = LPC_BASE_PINSEL;//定义全局结构指针变量PINSEL

typedef struct _LPCS_MAM {
  LPC_REG MAM_CR;//存储器加速器模块控制寄存器
  LPC_REG MAM_TIM;//存储器加速器定时控制
}LPCS_MAM, *LPCPS_MAM;

#define LPC_BASE_MAM  ((LPCPS_MAM)  0xE01FC000)//定义硬件结构指针(硬件地址)
const LPCPS_MAM MAM = LPC_BASE_MAM;//定义全局结构指针变量MAM

typedef struct _LPCS_PLL {//锁相环
  LPC_REG PLL_CON;//PLL 控制寄存器
  LPC_REG PLL_CFG;//PLL 配置寄存器
  LPC_REG PLL_STAT;//PLL 状态寄存器
  LPC_REG PLL_FEED;//PLL 愦送寄存器
}LPCS_PLL, *LPCPS_PLL;

#define LPC_BASE_PLL  ((LPCPS_PLL)  0xE01FC080)//定义硬件结构指针(硬件地址)
const LPCPS_PLL PLL = LPC_BASE_PLL;//定义全局结构指针变量PLL


typedef struct _LPCS_GPIO {//通用I/O口
  LPC_REG IOPIN;//GPIO管脚值寄存器
  LPC_REG IOSET;//GPIO输出置位寄存器
  LPC_REG IODIR;//GPIO方向寄存器
  LPC_REG IOCLR;//GPIO输出清零寄存器
}LPCS_GPIO, *LPCPS_GPIO;


#define LPC_BASE_GPIO0  ((LPCPS_GPIO)  0xE0028000)//定义硬件结构指针(硬件地址)
const LPCPS_GPIO P0 = LPC_BASE_GPIO0;//定义全局结构指针变量P0
/*--------------------------------------------------------------------
应用示例
  P0->IODIR |= (1 << P0_8);//设置P0.8为输出
  P0->IOSET  = (1 << P0_8);//P0.8输出高电平
  P0->IOCLR  = (1 << P0_8);//P0.8输出低电平
  P0->IOPIN ^= (1 << P0_8);//P0.8输出电平翻转
----------------------------------------------------------------------*/
typedef struct _LPCS_FGPIO {//通用I/O口
  LPC_REG FIODIR;//GPIO方向寄存器
  LPC_REG Reserved1[3]; //保留3个空位
  LPC_REG FIOMASK;//GPIO屏蔽寄存器
  LPC_REG FIOPIN;//GPIO管脚值寄存器
  LPC_REG FIOSET;//GPIO输出置位寄存器
  LPC_REG FIOCLR;//GPIO输出清零寄存器
}LPCS_FGPIO, *LPCPS_FGPIO;


#define LPC_BASE_FGPIO0  ((LPCPS_FGPIO)  0x3FFFC000)//定义硬件结构指针(硬件地址)
const LPCPS_FGPIO FP0 = LPC_BASE_FGPIO0;//定义全局结构指针变量FP0

 

typedef struct _LPCS_UART {
  union {//地址冲突处理
    LPC_REG _RBR;//接收缓冲
    LPC_REG _THR;//发送保持
    LPC_REG _DLL;//除数锁存低位
  }RBR_THR_DLL;//收发数据
  union {//地址冲突处理
    LPC_REG _IER;//中断使能
    LPC_REG _DLM;//除数锁存高位
  }IER_DLM;
  union {//地址冲突处理
    LPC_REG _IIR;//中断ID
    LPC_REG _FCR;//FIFO控制
  }IIR_FCR;//(8)
  LPC_REG LCR;//线控制
  LPC_REG MCR;//Modem控制(只有UART1)
  LPC_REG LSR;//线状态)
  LPC_REG MSR;//Modem状态(只有UART1)
  LPC_REG SCR;//高速缓存
  LPC_REG Reserved[4]; //保留4个空位
  LPC_REG TER;//发送使能
}LPCS_UART, *LPCPS_UART;

#define RBR RBR_THR_DLL._RBR
#define THR RBR_THR_DLL._THR
#define DLL RBR_THR_DLL._DLL

#define IER IER_DLM._IER
#define DLM IER_DLM._DLM

#define IIR IIR_FCR._IIR
#define FCR IIR_FCR._FCR


#define LPC_BASE_UART0  ((LPCPS_UART)  0xE000C000)//定义硬件结构指针(硬件地址)
const LPCPS_UART U0 = LPC_BASE_UART0;//定义全局结构指针变量U0
#define LPC_BASE_UART1  ((LPCPS_UART)  0xE0010000)//定义硬件结构指针(硬件地址)
const LPCPS_UART U1 = LPC_BASE_UART1;//定义全局结构指针变量U1


typedef struct _LPCS_TIMER {//定时器
  LPC_REG TIMER_IR;//中断寄存器
  LPC_REG TIMER_TCR;//定时器控制寄存器
  LPC_REG TIMER_TC;//定时器计数器
  LPC_REG TIMER_PR;//预分频寄存器
  LPC_REG TIMER_PC;//预分频计数器
  LPC_REG TIMER_MCR;
  LPC_REG TIMER_MR0;
  LPC_REG TIMER_MR1;
  LPC_REG TIMER_MR2;
  LPC_REG TIMER_MR3;
  LPC_REG TIMER_CCR;
  LPC_REG TIMER_CR0;
  LPC_REG TIMER_CR1;
  LPC_REG TIMER_CR2;
  LPC_REG TIMER_CR3;
  LPC_REG TIMER_EMR;
  LPC_REG Reserved[12]; //保留12个空位
  LPC_REG TIMER_CTCR;
  LPC_REG T0PWMCON; //
}LPCS_TIMER, *LPCPS_TIMER;


#define LPC_BASE_TIMER0  ((LPCPS_TIMER)  0xE0004000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TIMER1  ((LPCPS_TIMER)  0xE0008000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TIMER2  ((LPCPS_TIMER)  0xE0070000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TIMER3  ((LPCPS_TIMER)  0xE0074000)//定义硬件结构指针(硬件地址)
const LPCPS_TIMER T0 = LPC_BASE_TIMER0;//定义全局结构指针变量T0
const LPCPS_TIMER T1 = LPC_BASE_TIMER1;//定义全局结构指针变量T1
const LPCPS_TIMER T2 = LPC_BASE_TIMER2;//定义全局结构指针变量T2
const LPCPS_TIMER T3 = LPC_BASE_TIMER3;//定义全局结构指针变量T3


typedef struct _LPCS_PWM {
  LPC_REG PWM_IR; //中断寄存器
  LPC_REG PWM_TCR;//PWM定时器控制寄存器
  LPC_REG PWM_TC; //PWM定时器计数器
  LPC_REG PWM_PR; //PWM预分频寄存器
  LPC_REG PWM_PC; //PWM预分频计数器寄存器
  LPC_REG PWM_MCR;//PWM匹配控制寄存器
  LPC_REG PWM_MR0;//PWM匹配寄存器0
  LPC_REG PWM_MR1;//PWM匹配寄存器1
  LPC_REG PWM_MR2;//PWM匹配寄存器2
  LPC_REG PWM_MR3;//PWM匹配寄存器3
  LPC_REG Reserved[6]; //保留6个空位
  LPC_REG PWM_MR4;//PWM匹配寄存器4
  LPC_REG PWM_MR5;//PWM匹配寄存器5
  LPC_REG PWM_MR6;//PWM匹配寄存器6
  LPC_REG PWM_PCR;//PWM控制寄存器
  LPC_REG PWM_LER;//PWM锁存使能寄存器
}LPCS_PWM, *LPCPS_PWM;

#define LPC_BASE_PWM  ((LPCPS_PWM)  0xE0014000)//定义硬件结构指针(硬件地址)
const LPCPS_PWM PWM = LPC_BASE_PWM;//定义全局结构指针变量PWM

typedef struct _LPCS_I2C {
  LPC_REG I2C_CONSET; //I2C控制置位寄存器
  LPC_REG I2C_STAT;   //I2C状态寄存器
  LPC_REG I2C_DAT;   //I2C数据寄存器
  LPC_REG I2C_ADR;   //I2C从地址寄存器
  LPC_REG I2C_SCLH;   //SCH占空比寄存器高半字
  LPC_REG I2C_SCLL;   //SCL占空比寄存器低半字
  LPC_REG I2C_CONCLR; //I2C控制清零寄存器
}LPCS_I2C, *LPCPS_I2C;//


#define LPC_BASE_I2C0  ((LPCPS_I2C)  0xE001C000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_I2C1  ((LPCPS_I2C)  0xE005C000)//定义硬件结构指针(硬件地址)
const LPCPS_I2C I2C0 = LPC_BASE_I2C0;//定义全局结构指针变量I2C0
const LPCPS_I2C I2C1 = LPC_BASE_I2C1;//定义全局结构指针变量I2C1

typedef struct _LPCS_SPI {
  LPC_REG SPI_SPCR;
  LPC_REG SPI_SPSR;
  LPC_REG SPI_SPDR;
  LPC_REG SPI_SPCCR;
  LPC_REG Reserved[4]; //保留4个空位
  LPC_REG SPI_SPINT;
}LPCS_SPI, *LPCPS_SPI;

#define LPC_BASE_SPI  ((LPCPS_SPI)  0xE0020000)//定义硬件结构指针(硬件地址)
const LPCPS_SPI SPI = LPC_BASE_SPI;//定义全局结构指针变量SPI

typedef struct _LPCS_SSP {
  LPC_REG SSP_CR0;
  LPC_REG SSP_CR1;
  LPC_REG SSP_DR;
  LPC_REG SSP_SR;   //SSP状态寄存器
  LPC_REG SSP_CPSR;
  LPC_REG SSP_IMSC;
  LPC_REG SSP_RIS;
  LPC_REG SSP_MIS;
  LPC_REG SSP_ICR;
}LPCS_SSP, *LPCPS_SSP;

#define LPC_BASE_SSP  ((LPCPS_SSP)  0xE0068000)//定义硬件结构指针(硬件地址)
const LPCPS_SSP SSP = LPC_BASE_SSP;//定义全局结构指针变量SSP

typedef struct _LPCS_RTC {
  LPC_REG RTC_ILR;//中断位置寄存器
  LPC_REG RTC_CTC;//时钟节拍计数器
  LPC_REG RTC_CCR;//时钟控制寄存器
  LPC_REG RTC_CIIR;//计数器递增中断寄存器
  LPC_REG RTC_AMR;//报警屏蔽寄存器
  LPC_REG RTC_CTIME0;//完整时间寄存器0
  LPC_REG RTC_CTIME1;//完整时间寄存器1
  LPC_REG RTC_CTIME2;//完整时间寄存器2
  LPC_REG RTC_SEC;//秒寄存器
  LPC_REG RTC_MIN;//分寄存器
  LPC_REG RTC_HOUR;//小时寄存器
  LPC_REG RTC_DOM;//日期(月)寄存器
  LPC_REG RTC_DOW;//星期寄存器
  LPC_REG RTC_DOY;//日期(年)寄存器
  LPC_REG RTC_MONTH;//月寄存器
  LPC_REG RTC_YEAR;//年寄存器
  LPC_REG Reserved[8]; //保留8个空位
  LPC_REG RTC_ALSEC;//秒报警值
  LPC_REG RTC_ALMIN;//分报警值
  LPC_REG RTC_ALHOUR;//小时报警值
  LPC_REG RTC_ALDOM;//日期(月)报警值
  LPC_REG RTC_ALDOW;//星期报警值
  LPC_REG RTC_ALDOY;//日期(年)报警值
  LPC_REG RTC_ALMONTH;//月报警值
  LPC_REG RTC_ALYEAR;//年报警值
  LPC_REG RTC_PREINT;//预分频值,整数部分
  LPC_REG RTC_PREFRAC;//预分频值,小数部分
}LPCS_RTC, *LPCPS_RTC;

#define LPC_BASE_RTC  ((LPCPS_RTC)  0xE0024000)//定义硬件结构指针(硬件地址)
const LPCPS_RTC RTC = LPC_BASE_RTC;//定义全局结构指针变量RTC


typedef struct _LPCS_WDT {
  LPC_REG WDT_WDMOD;//狗模式寄
  LPC_REG WDT_WDTC;//看门狗定时器常数寄存器
  LPC_REG WDT_WDFEED;//看门狗喂狗寄存器
  LPC_REG WDT_WDTV;//看门狗定时器值寄存器
}LPCS_WDT, *LPCPS_WDT;

#define LPC_BASE_WDT  ((LPCPS_WDT)  0xE0000000)//定义硬件结构指针(硬件地址)
const LPCPS_WDT WDT = LPC_BASE_WDT;//定义全局结构指针变量WDT

typedef struct _LPCS_ADC {
  LPC_REG ADCR; //A/D 控制寄存器
  LPC_REG ADGDR; //A/D 全局数据寄存器
  LPC_REG Reserved[1]; //保留1个空位
  LPC_REG ADINTEN; //
  LPC_REG ADDRs[8];
  LPC_REG ADSTAT;//A/D 启动寄存器
}LPCS_ADC, *LPCPS_ADC;

#define LPC_BASE_ADC0  ((LPCPS_ADC)  0xE0034000)//定义硬件结构指针(硬件地址)
const LPCPS_ADC ADC0 = LPC_BASE_ADC0;//定义全局结构指针变量ADC0

typedef struct _LPCS_INTCON {
  LPC_REG EXT_INT;//外部中断标志寄存器
  LPC_REG INT_WAKE;//外部中断唤醒寄存器
  LPC_REG EXT_MODE;//外部中断方式寄存器
  LPC_REG EXT_POLAR;//外部中断极性寄存器
}LPCS_INTCON, *LPCPS_INTCON;

#define LPC_BASE_INTCON  ((LPCPS_INTCON)  0xE01FC140)//定义硬件结构指针(硬件地址)
const LPCPS_INTCON INTCON = LPC_BASE_INTCON;//定义全局结构指针变量INTCON

typedef struct _LPCS_POWER {
  LPC_REG P_CON;//功率控制寄存器
  LPC_REG P_CONP;//外部功率控制寄存器
}LPCS_POWER, *LPCPS_POWER;

#define LPC_BASE_POWER  ((LPCPS_POWER)  0xE01FC0C0)//定义硬件结构指针(硬件地址)
const LPCPS_POWER POWER = LPC_BASE_POWER;//定义全局结构指针变量INTCON

typedef struct _LPCS_SYSCON {
  LPC_REG MEM_MAP;//存储器映射控制     //0xE01FC040
  LPC_REG Reserved0[15]; //保留16个空位 //0xE01FC044
  LPC_REG PLL_CON;//PLL 控制寄存器  //0xE01FC080
  LPC_REG PLL_CFG;//PLL 配置寄存器  //0xE01FC084
  LPC_REG PLL_STAT;//PLL 状态寄存器  //0xE01FC088
  LPC_REG PLL_FEED;//PLL 愦送寄存器  //0xE01FC08C
  LPC_REG Reserved1[12]; //保留4个空位 //0xE01FC090
  LPC_REG P_CON;//功率控制寄存器  //0xE01FC0C0
  LPC_REG P_CONP;//外部功率控制寄存器 //0xE01FC0C4
  LPC_REG Reserved2[14]; //保留14个空位 //0xE01FC0C8
  LPC_REG VPB_DIV;//VPB 分频器控制寄存器//0xE01FC100
  LPC_REG Reserved3[15]; //保留15个空位 //0xE01FC104
  LPC_REG EXT_INT;//外部中断标志寄存器 //0xE01FC140
  LPC_REG INT_WAKE;//外部中断唤醒寄存器 //0xE01FC144
  LPC_REG EXT_MODE;//外部中断方式寄存器 //0xE01FC148
  LPC_REG EXT_POLAR;//外部中断极性寄存器//0xE01FC14C
  LPC_REG Reserved4[12]; //保留12个空位 //0xE01FC150
  LPC_REG RS_ID;//复位源识别寄存器  //0xE01FC180
  LPC_REG CS_PR;//代码安全保护寄存器 //0xE01FC184
  LPC_REG Reserved5[6]; //保留6个空位 //0xE01FC188
  LPC_REG SCS;//系统控制和状态寄存器 //0xE01FC1A0
}LPCS_SYSCON, *LPCPS_SYSCON;

#define LPC_BASE_SYSCON  ((LPCPS_SYSCON)  0xE01FC040)//定义硬件结构指针(硬件地址)
const LPCPS_SYSCON SYSCON = LPC_BASE_SYSCON;//定义全局结构指针变量SYSCON

#define IAP_FCCLK            11059

/* 定义IAP命令字 */
                                    //   命令           参数
#define     IAP_SELECTOR        50  // 选择扇区     【起始扇区号、结束扇区号】
#define     IAP_RAMTOFLASH      51  // 拷贝数据     【FLASH目标地址、RAM源地址、写入字节数、系统时钟频率】
#define     IAP_ERASESECTOR     52  // 擦除扇区     【起始扇区号、结束扇区号、系统时钟频率】
#define     IAP_BLANKCHK        53  // 查空扇区     【起始扇区号、结束扇区号】
#define     IAP_READPARTID      54  // 读器件ID     【无】<


阅读全文(655) | 回复(0) | 引用通告(7) | 编辑
 


系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(637) | 回复(0)

发表于 2007/12/14 0:14:33

0

关于投票

LPC2103DEF.H(裸奔版)及压缩头文件

工程师的收藏夹


俺的地盘俺做主


 

LPC2103DEF.H(裸奔版)及压缩头文件
雁塔菜农 发表于 2006-7-6 21:22:00
点击下载:LPC2103DEF.rar

/*--------------------------------------------------------------------------
文   件   名 :  LPC2103DEF.H
创   建   人 :  ARM水鸟  HotPower@126.com
创 建 日  期 :  2006.7.06  10:06
最近修改日期 :  2006.7.06  16:18
创 建  地 点 : 西安大雁塔村队部
版   本   号 : V1.10(裸奔版)
说        明 : 已经过FFT2103赠品硬件调试,在此感谢西安FFT
                由于在不断更新中,故新旧版本以修改日期为准
备        注 : 本文件是由LPC213XDEF.H(尿童版)文件仓促改编而来。
                由此文件出现的问题,ARM水鸟不负任何责任。
    由于210x的目标是替代MCU,故将采用以裸奔为主的原则。

修 改  原 因 : 可以立即全面替代LPC2103.h
                展示结构指针在ARM之特殊寄存器应用
                特殊寄存器变量可在WATCH窗口中显示,
                为软件仿真提供最大的方便。
应 用  简 介:
SystemObj::SystemObj(void)
{
volatile unsigned int start;
  Disable_IRQ();//关中断
  PINSEL->PIN_SEL0 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL1 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL2 = 0x00000000;  // 设置管脚连接GPIO
  PINSEL->PIN_SEL0 |= (P0_15_EINT2 << P0_15_PINSEL);// P0.15连接到EINT2
  P0->IODIR  = 0x00000000;  // 设置P0口为输入
  VIC->IntEnable = 0;
  VIC->SoftIntClr = 0xffffffff;//清除所有软中断标志
  VIC->IntSelect   = 0;//全部中断为IRQ中断或默认中断
  for(int i = 0; i <= 15; i ++) {
    VIC->VectAddrs[i] = 0;//刷新向量地址寄存器VICVectAddr0~VICVectAddr15
  }
  for (start = 1; start < 10000; start ++);
  SystemInit();
  Enable_IRQ();//开中断
}
-------------------------------------------------------------------------------*/

 


#ifndef __LPC213xDEF_H
#define __LPC213xDEF_H

typedef volatile unsigned long LPC_REG;// Hardware register definition

#define __noinit__ __attribute__((zero_init))//变量不初始化为0


typedef unsigned char  uint8; //无符号8位整型变量
typedef signed   char  int8;  //有符号8位整型变量
typedef unsigned short uint16;//无符号16位整型变量
typedef signed   short int16; //有符号16位整型变量
typedef unsigned int   uint32;//无符号32位整型变量
typedef signed   int   int32; //有符号32位整型变量
typedef float          fp32;  //单精度浮点数(32位长度
typedef double         fp64;  //双精度浮点数(64位长度)

#define __0                  (LPC_REG)0
#define __1                  (LPC_REG)1
#define __2                  (LPC_REG)2
#define __3                  (LPC_REG)3
#define __4                  (LPC_REG)4
#define __5                  (LPC_REG)5
#define __6                  (LPC_REG)6
#define __7                  (LPC_REG)7
#define __8                  (LPC_REG)8
#define __9                  (LPC_REG)9
#define __10                 (LPC_REG)10
#define __11                 (LPC_REG)11
#define __12                 (LPC_REG)12
#define __13                 (LPC_REG)13
#define __14                 (LPC_REG)14
#define __15                 (LPC_REG)15
#define __16                 (LPC_REG)16
#define __17                 (LPC_REG)17
#define __18                 (LPC_REG)18
#define __19                 (LPC_REG)19
#define __20                 (LPC_REG)20
#define __21                 (LPC_REG)21
#define __22                 (LPC_REG)22
#define __23                 (LPC_REG)23
#define __24                 (LPC_REG)24
#define __25                 (LPC_REG)25
#define __26                 (LPC_REG)26
#define __27                 (LPC_REG)27
#define __28                 (LPC_REG)28
#define __29                 (LPC_REG)29
#define __30                 (LPC_REG)30
#define __31                 (LPC_REG)31

#define VICIntSel_Watchdog   0//看门狗中断(WDINT)
#define VICIntSel_SoftInt1   1//保留给软件中断
#define VICIntSel_DbgCommRx  2//ARM内核中断
#define VICIntSel_DbgCommTx  3//ARM内核中断
#define VICIntSel_Time0      4//定时器0中断
#define VICIntSel_Time1      5//定时器1中断
#define VICIntSel_UART0      6//UART0中断
#define VICIntSel_UART1      7//UART1中断
#define VICIntSel_PWM0       8//PWM0中断
#define VICIntSel_I2C0       9//I2C0中断
#define VICIntSel_SPI0      10//SPI0中断
#define VICIntSel_SSP       11//SSP中断
#define VICIntSel_SPI1      11//SPI1中断
#define VICIntSel_PLL       12//PLL中断
#define VICIntSel_RTC       13//RTC中断
#define VICIntSel_EINT0     14//系统控制外部中断0
#define VICIntSel_EINT1     15//系统控制外部中断1
#define VICIntSel_EINT2     16//系统控制外部中断2
#define VICIntSel_EINT3     17//系统控制外部中断3
#define VICIntSel_ADC0      18//A/D转换器0中断
#define VICIntSel_I2C1      19//I2C1中断
#define VICIntSel_BOD       20//掉电检测中断
#define VICIntSel_ADC1      21//A/D转换器1中断
#define VICIntSel_SoftInt22 22//保留给软件中断
#define VICIntSel_SoftInt23 23//保留给软件中断
#define VICIntSel_SoftInt24 24//保留给软件中断
#define VICIntSel_SoftInt25 25//保留给软件中断
#define VICIntSel_SoftInt26 26//保留给软件中断
#define VICIntSel_SoftInt27 27//保留给软件中断
#define VICIntSel_SoftInt28 28//保留给软件中断
#define VICIntSel_SoftInt29 29//保留给软件中断
#define VICIntSel_SoftInt30 30//保留给软件中断
#define VICIntSel_SoftInt31 31//保留给软件中断
#define VICIntSel_Enable    32//使能向量中断

/*--------------------------------------------------------------------
应用示例
  VIC->VectCntls[0]   = VICIntSel_Enable//使能IRQ中断
                      | VICIntSel_EINT0;//获取EINT0的IRQ级别
  VIC->VectAddrs[0]   = (long) IRQ_Eint0;//取INT0中断服务地址
  VIC->IntEnable      = (1 << VICIntSel_EINT0); //使能EINT0中断
----------------------------------------------------------------------*/

/*---------------------------------------------------------------------
                 P0口链接配置位定义
----------------------------------------------------------------------*/

#define P0_0   0//P0.0
  #define TXD0    P0_0//UART0的发送器输出
#define P0_1   1//P0.1
  #define RXD0    P0_1//UART0的接收器输入
#define P0_2   2//P0.2
  #define SCL0    P0_2//I2C0时钟输入/输出。开漏输出(符合I2C规范)
#define P0_3   3//P0.3
  #define SDA0    P0_3//I2C0数据输入/输出。开漏输出(符合I2C规范)
#define P0_4   4//P0.4
  #define SCK0    P0_4//SPI0的串行时钟。SPI时钟从主机输出,从机输入
#define P0_5   5//P0.5
  #define MISO0   P0_5//SPI0主机输入从机输出端。从机到主机的数据传输
#define P0_6   6//P0.6
  #define MOSI0   P0_6//SPI0主机输出从机输入端。主机到从机的数据传输
#define P0_7   7//P0.7
  #define SSEL0   P0_7//SPI0从机选择。选择SPI接口用作从机
#define P0_8   8//P0.8
  #define TXD1    P0_8//UART1的发送器输出
#define P0_9   9//P0.9
  #define RXD1    P0_9//UART1的接收器输入
#define P0_10 10//P0.10
  #define RTS1    P0_10//UART1请求发送出端(仅用于LP138)
  #define CAP1_0  P0_10//定时器1的捕获输入通道0
  #define AIN3    P0_10//A/D转换器输入3。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_11 11//P0.11
  #define CTS1    P0_11//UART1清除发送入端(仅用于LP138)
  #define CAP1_1  P0_11//定时器1的捕获输入通道1
  #define AIN4    P0_11//A/D转换器输入4。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_12 12//P0.12
  #define DSR1    P0_12//UART1数据设置就绪端(仅用于 LPC2138)
  #define MAT1_0  P0_12//定时器1的匹配输出通道0
  #define AIN5    P0_11//A/D转换器输入5。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_13 13//P0.13
  #define DTR1    P0_13//UART1数据终端就绪
  #define MAT1_1  P0_13//定时器1的匹配输出通道1
#define P0_14 14//P0.14
  #define DCD1    P0_14//UART1数据载波检测输入(仅用于 LPC2138)
  #define SCK1    P0_14//SPI1的串行时钟。SPI时钟从主机输出,从机输入
#define P0_15 15//P0.15
  #define RI1     P0_15//UART1铃响指示输入(仅用于 LPC2138)
#define P0_16 16//P0.16
  #define MAT0_2  P0_16//定时器0的匹配输出通道2

#define P0_17 17//P0.17
  #define SCL1    P0_17//I2C1时钟输入/输出。开漏输出(符合I2C规范)
#define P0_18 18//P0.18
  #define SDA1    P0_18//I2C1数据输入/输出。开漏输出(符合I2C规范)
#define P0_19 19//P0.19
  #define MISO1   P0_19//SPI1主机输入从机输出端。从机到主机的数据传输
#define P0_20 20//P0.20
  #define MOSI1   P0_20//SPI1主机输出从机输入端。主机到从机的数据传输
#define P0_21 21//P0.21
  #define SSEL1   P0_21//SPI1从机选择。选择SPI接口用作从机
#define P0_22 22//P0.22
  #define AIN0    P0_22//A/D转换器输入0。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_23 23//P0.23
  #define AIN1    P0_23//A/D转换器输入1。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_24 24//P0.24
  #define AIN2    P0_24//A/D转换器输入2。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_25 25//P0.25
  #define AIN6    P0_25//A/D转换器输入6。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_26 26//P0.26
  #define AIN7    P0_26//A/D转换器输入7。该模拟输入总是连接到相应的管脚(仅用于 LPC2138)
#define P0_27 27//P0.27
#define P0_28 28//P0.28
#define P0_29 29//P0.29
#define P0_30 30//P0.30
#define P0_31 31//P0.31

 

/*---------------------------------------
        RTC中断位置寄存器ILR位定义
----------------------------------------*/
#define RTCCIF   0//为1时,计数器增量中断模块产生中断。向该位写入1清除计数器增量中断。
#define RTCALF   1//为1时,报警寄存器产生中断。向该位写入1清除报警中断。


/*---------------------------------------
        RTC时钟控制寄存器CCR位定义
----------------------------------------*/
#define CLKEN    0//时钟使能当该位为1 时,时间计数器使能。
#define CTCRST   1//CTC 复位为1 时,时钟节拍计数器复位。
#define CLKSRC   4//如果该位为1,CTC 计数连接在RTCX1 和RTCX2 两端的32kHz振荡器信号。

/*---------------------------------------
        RTC计数器增量中断寄存器CIIR位定义
----------------------------------------*/
#define IMSEC    0//为1时,秒值的增加产生一次中断。
#define IMMIN    1//为1时,分值的增加产生一次中断。
#define IMHOUR   2//为1时,小时值的增加产生一次中断。
#define IMDOM    3//为1时,日期(月)值的增加产生一次中断。
#define IMDOW    4//为1时,星期值的增加产生一次中断。
#define IMDOY    5//为1时,日期(年)值的增加产生一次中断。
#define IMMON    6//为1时,月值的增加产生一次中断。
#define IMYEAR   7//为1时,年值的增加产生一次中断。

/*---------------------------------------
        RTC报警屏蔽寄存器位AMR位定义
----------------------------------------*/
#define AMRSEC   0//为1 时,秒值不与报警寄存器比较。
#define AMRMIN   1//为1 时,分值不与报警寄存器比较。
#define AMRHOUR  2//为1 时,小时值不与报警寄存器比较。
#define AMRDOM   3//为1 时,日期(月)值不与报警寄存器比较。
#define AMRDOW   4//为1 时,星期值不与报警寄存器比较。
#define AMRDOY   5//为1 时,日期(年)值不与报警寄存器比较。
#define AMRMON   6//为1 时,月值不与报警寄存器比较。
#define AMRYEAR  7//为1 时,年值不与报警寄存器比较。

/*---------------------------------------
        TX中断寄存器TXIR位定义
----------------------------------------*/
#define MR0      0//匹配通道0中断标志
#define MR1      1//匹配通道1中断标志
#define MR2      2//匹配通道2中断标志
#define MR3      3//匹配通道3中断标志
#define CR0      4//捕获通道0事件中断标志
#define CR1      5//捕获通道0事件中断标志
#define CR2      6//捕获通道0事件中断标志
#define CR3      7//捕获通道0事件中断标志

 

/*---------------------------------------
        UARTX标识中断寄存器UXIIR
----------------------------------------*/
#define IIR0     0//中断挂起 0:至少有1个中断被挂起(挂起的中断可通过UXIER3:1确定)
#define IIR1     1//中断标识1
#define IIR2     2//中断标识2
#define IIR3     3//中断标识3


/*---------------------------------------
        UARTX线状态寄存器UXLSR
----------------------------------------*/
#define RDR      0//接收数据就绪
#define OE   1//溢出错误
#define PE   2//奇偶错误
#define FE   3//帧错误
#define BI   4//间隔中断
#define THRE     5//发送保持寄存器空
#define TEMT     6//发送器空
#define RXFE     7//Rx FIFO错误

/*---------------------------------------
        I2C控制置位寄存器I2CONSET位定义
----------------------------------------*/
#define AA       2//应答标志。
#define SI       3//I2C中断标志。
#define STO      4//停止标志。
#define STA      5//起始标志。
#define I2EN     6//I2C接口使能。

/*---------------------------------------
        I2C控制清零寄存器I2CONCLR位定义
----------------------------------------*/
#define AAC      2//应答标志。
#define SIC      3//I2C中断标志。
#define STAC     5//起始标志。
#define I2ENC    6//I2C接口使能。


/*---------------------------------------
        I2C运行状态代码定义
----------------------------------------*/
#define I2C_START            0x08 //已发送起始条件
#define I2C_REP_START        0x10 //已发送重复起始条件
/* Master Transmitter */      //主发送器模式
#define I2C_MT_SLA_ACK        0x18 //已发送SLA+W,且已接收ACK
#define I2C_MT_SLA_NACK        0x20 //已发送SLA+W,且未接收ACK
#define I2C_MT_DATA_ACK        0x28 //已发送I2DAT 中的数据字节,且已接收ACK
#define I2C_MT_DATA_NACK       0x30 //已发送I2DAT 中的数据字节,且未接收ACK
#define I2C_MT_ARB_LOST        0x38
/* Master Receiver */       //主接收器模式
#define I2C_MR_ARB_LOST        0x38
#define I2C_MR_SLA_ACK        0x40 //已发送SLA+R,且已接收ACK
#define I2C_MR_SLA_NACK        0x48 //已发送SLA+R,且未接收ACK
#define I2C_MR_DATA_ACK        0x50
#define I2C_MR_DATA_NACK       0x58
/* Slave Transmitter */
#define I2C_ST_SLA_ACK         0xA8
#define I2C_ST_ARB_LOST_SLA_ACK   0xB0
#define I2C_ST_DATA_ACK        0xB8
#define I2C_ST_DATA_NACK       0xC0
#define I2C_ST_LAST_DATA       0xC8
/* Slave Receiver */
#define I2C_SR_SLA_ACK        0x60
#define I2C_SR_ARB_LOST_SLA_ACK   0x68
#define I2C_SR_GCALL_ACK      0x70
#define I2C_SR_ARB_LOST_GCALL_ACK 0x78
#define I2C_SR_DATA_ACK        0x80
#define I2C_SR_DATA_NACK    0x88
#define I2C_SR_GCALL_DATA_ACK   0x90
#define I2C_SR_GCALL_DATA_NACK   0x98
#define I2C_SR_STOP            0xA0
/* Misc */
#define I2C_NO_INFO            0xF8
#define I2C_BUS_ERROR        0x00


/*-------------------------
        PWMMCR位定义
--------------------------*/
#define PWMMCRI0 0
#define PWMMCRR0 1
#define PWMMCRS0 2

#define PWMMCRI1 3
#define PWMMCRR1 4
#define PWMMCRS1 5

#define PWMMCRI2 6
#define PWMMCRR2 7
#define PWMMCRS2 8

#define PWMMCRI3 9
#define PWMMCRR3 10
#define PWMMCRS3 11

#define PWMMCRI4 12
#define PWMMCRR4 13
#define PWMMCRS4 14

#define PWMMCRI5 15
#define PWMMCRR5 16
#define PWMMCRS5 17

#define PWMMCRI6 18
#define PWMMCRR6 19
#define PWMMCRS6 20

 

/*-------------------------
        PWMPCR位定义
--------------------------*/
#define PWMSEL1 1
#define PWMSEL2 2
#define PWMSEL3 3
#define PWMSEL4 4
#define PWMSEL5 5
#define PWMSEL6 6

#define PWMENA1 9
#define PWMENA2 10
#define PWMENA3 11
#define PWMENA4 12
#define PWMENA5 13
#define PWMENA6 14

/*--------------------------
        PWMLER位定义
---------------------------*/
#define PWMLER0 0
#define PWMLER1 1
#define PWMLER2 2
#define PWMLER3 3
#define PWMLER4 4
#define PWMLER5 5
#define PWMLER6 6

/*--------------------------
        ADCR位定义
---------------------------*/
#define BURST   16
#define PDN     21

#define START   24//26:24=000

#define EDGE    27

/*------------------------------------------------
        A/D 数据寄存器ADDR位定义
-------------------------------------------------*/
#define OVERUN      30
#define DONE        31//A/D转换结束时该位置位。该位在ADDR被读出和ADCR被写入时清零。
/*-----------------------------------------
        复位源识别寄存器RSID位定义
------------------------------------------*/
#define POR          0//RSID.0//POR信号有效时该位置位,并清除RSID寄存器的其它位
#define EXTR         1//RSID.1//RESET信号有效时该位置位
#define WDTR         2//RSID.2//当看门狗定时器溢出和看门狗方式寄存器的WDTRESET位为1时,该位置位。
                              //该位可被其它任何一个复位源清除。
#define BODR         3//RSID.3//当3.3V的电源降到低于2.6V时该位置位

/*-----------------------------------------
        SSP状态寄存器SSPSR位定义
------------------------------------------*/
#define TFE          0//发送FIFO 空。发送FIFO 为空时该位为1,反之为0。
#define TNF          1//发送FIFO 未满。Tx FIFO 满时该位为0,反之为1。
#define RNE          2//接收FIFO 不为空。接收FIFO 为空时该位为0,反之为1。
#define RFF          3//接收FIFO 满。接收FIFO 满时该位为1,反之为0。
#define BSY          4//忙。SSP 控制器空闲、

/*-----------------------------------------
        S0SPCR位定义
------------------------------------------*/
#define CPHA         3//时钟相位控制
#define CPOL         4//时钟极性控制
#define MSTR         5//主模式选择。为1时,SPI处于主模式。为0时,SPI处于从模式。
#define LSBF         6//传输的每个字节的移动方向.为0 时,SPI数据传输MSB(位7)在先
#define SPIE         7//中断使能。为1时,每次SPIF或MODF置位时都会产生硬件中断
/*-----------------------------------------
        SPI 状态寄存器S0SPSR位定义
------------------------------------------*/
#define ABRT        3//从机中止。该位为1 时表示发生了从机中止。当读取该寄存器时,该位清零
#define MODF        4//模式错误。为1 时表示发生了模式错误。
#define ROVR        5//读溢出。为1 时表示发生了读溢出。当读取该寄存器时,该位清零。
#define WCOL        6//写冲突。为1 时表示发生了写冲突
#define SPIF        7//SPI 传输完成标志。为1 时表示一次SPI 数据传输完成。


/*-----------------------------------------
        功率控制寄存器PCON位定义
------------------------------------------*/
#define IDL         0//空闲模式
#define PD          1//掉电模式
#define PDBOD       2//空闲模式


/*-----------------------------------------
        外设功率控制寄存器PCONP位定义
------------------------------------------*/
#define PCTIM0      1//定时器0使能
#define PCTIM1      2//定时器1使能
#define PCURT0      3//UART0使能
#define PCURT1      4//UART1使能
#define PCPWM0      5//PWM0使能
#define PCI2C0      7//I2C0接口使能
#define PCSPI0      8//SPI接口使能
#define PCRTC       9//RTC使能
#define PCSPI1     10//SSP接口使能
#define PCAD0      12//A/D转换器0使能
#define PCI2C1     19//I2C1接口使能
#define PCAD1      20//A/D转换器1使能
/*-----------------------------------------
        WDMOD位定义
------------------------------------------*/
#define WDEN        0//
#define WDRESET     1//
#define WDTOF       2//
#define WDINT       3//

/*-----------------------------------------
        PLL 控制寄存器位定义
------------------------------------------*/
#define PLLEN       0//PLL 使能
#define PLLLK       1//PLL 连接
/*-----------------------------------------
        PLL 状态寄存器位定义
------------------------------------------*/
#define PLLE        8//PLL 使能位
#define PLLC        9//PLL 连接位
#define PLOCK      10//PLL 锁定状态

/*--------------------------------------------------
        外部中断标志寄存器EXTINT位定义
---------------------------------------------------*/
#define EINT0  0//EXTINT.0//写'1'清除EINT0中断标志
#define EINT1  1//EXTINT.1//写'1'清除EINT1中断标志
#define EINT2  2//EXTINT.2//写'1'清除EINT2中断标志
#define EINT3  3//EXTINT.3//写'1'清除EINT3中断标志

/*--------------------------------------------------
        外部中断方式寄存器EXTMODE位定义
---------------------------------------------------*/
#define EXTMODE0 0//EXTMODE.0//该位为0时,EINT0使用电平激活;该位为1时,EINT0使用边沿激活。
#define EXTMODE1 1//EXTMODE.1//该位为0时,EINT1使用电平激活;该位为1时,EINT1使用边沿激活。
#define EXTMODE2 2//EXTMODE.2//该位为0时,EINT2使用电平激活;该位为1时,EINT2使用边沿激活。
#define EXTMODE3 3//EXTMODE.3//该位为0时,EINT3使用电平激活;该位为1时,EINT3使用边沿激活。

/*--------------------------------------------------
        外部中断极性寄存器EXTPOLAR位定义 
---------------------------------------------------*/
#define EXTPOLAR0 0//EXTPOLAR.0//该位为0时,EINT0低电平或下降沿有效(由EXTMODE0决定)。
                   //该位为1时,EINT0高电平或上升沿有效(由EXTMODE0决定)。
#define EXTPOLAR1 1//EXTPOLAR.1//该位为0时,EINT1低电平或下降沿有效(由EXTMODE1决定)。
                   //该位为1时,EINT1高电平或上升沿有效(由EXTMODE1决定)。
#define EXTPOLAR2 2//EXTPOLAR.2//该位为0时,EINT2低电平或下降沿有效(由EXTMODE2决定)。
                   //该位为1时,EINT2高电平或上升沿有效(由EXTMODE2决定)。
#define EXTPOLAR3 3//EXTPOLAR.3//该位为0时,EINT3低电平或下降沿有效(由EXTMODE3决定)。
                   //该位为1时,EINT3高电平或上升沿有效(由EXTMODE3决定)。

/*--------------------------------------------------
        外部中断唤醒寄存器EXTWAKE位定义 
---------------------------------------------------*/
#define EXTWAKE0  0//EXTWAKE.0//该位为1时,使能EINT0将处理器从掉电模式唤醒。
#define EXTWAKE1  1//EXTWAKE.1//该位为1时,使能EINT1将处理器从掉电模式唤醒。
#define EXTWAKE2  2//EXTWAKE.2//该位为1时,使能EINT2将处理器从掉电模式唤醒。
#define EXTWAKE3  3//EXTWAKE.3//该位为1时,使能EINT3将处理器从掉电模式唤醒。
#define BODWAKE  14//EXTWAKE.14//该位为1时,BOD中断产生时可将处理器从掉电模式唤醒。
#define RTCWAKE  15//EXTWAKE.15//该位为1时,RTC中断产生时可将处理器从掉电模式唤醒。

/*---------------------------------------------------------------------------------------
  GPIO管脚功能配置
应用示例:
  PINSEL->PIN_SEL0  |= (P0_0_TXD0 << P0_0_PINSEL) | (P0_1_RXD0 << P0_1_PINSEL);
                   //选择P0.0和P0.1为UART0的输出输入引脚

  PINSEL->PIN_SEL0  |= (P0_3_EINT1 << P0_3_PINSEL); //选择P0.3为INT1外部中断引脚
  PINSEL->PIN_SEL0  |= (P0_14_EINT1 << P0_14_PINSEL); //选择P0.14也可为INT1外部中断引脚

  PINSEL->PIN_SEL0  |= (P0_1_EINT0 << P0_1_PINSEL)   //选择P0.1为INT0外部中断引脚
  PINSEL->PIN_SEL1  |= (P0_16_EINT0 << P0_16_PINSEL); //选择P0.16也可为INT0外部中断引脚
------------------------------------------------------------------------------------------*/

#define P0_0_GPIO      __0//通用数字输入输出管脚
  #define P0_0_TXD0    __1//UART0的发送器输出
  #define P0_0_MAT3_1  __2//**定时器3的匹配输出通道1
#define P0_0_PINSEL    2 * P0_0

#define P0_1_GPIO      __0//通用数字输入输出管脚
  #define P0_1_RXD0    __1//UART0的接收器输入
  #define P0_1_MAT3_2  __2//**定时器3的匹配输出通道2
#define P0_1_PINSEL    2 * P0_1

#define P0_2_GPIO      __0//通用数字输入输出管脚
  #define P0_2_SCL0    __1//I2C0时钟输入/输出。开漏输出(符合I2C规范)
  #define P0_2_CAP0_0  __2//***定时器0的捕获输入通道0
#define P0_2_PINSEL    2 * P0_2

#define P0_3_GPIO      __0//通用数字输入输出管脚
  #define P0_3_SDA0    __1//I2C0数据输入/输出。开漏输出(符合I2C规范)
  #define P0_3_MAT0_0  __2//**定时器0的匹配输出通道0
#define P0_3_PINSEL    2 * P0_3

#define P0_4_GPIO      __0//通用数字输入输出管脚
  #define P0_4_SCK0    __1//SPI0的串行时钟。SPI时钟从主机输出,从机输入
  #define P0_4_CAP0_1  __2//**定时器0的捕获输入通道1
#define P0_4_PINSEL  2 * P0_4

#define P0_5_GPIO      __0//通用数字输入输出管脚
  #define P0_5_MISO0   __1//SPI0主机输入从机输出端。从机到主机的数据传输
  #define P0_5_MAT0_1  __2//**定时器0的匹配输出通道1
#define P0_5_PINSEL    2 * P0_5

#define P0_6_GPIO      __0//通用数字输入输出管脚
  #define P0_6_MOSI0   __1//SPI0主机输出从机输入端。主机到从机的数据传输
  #define P0_6_CAP0_2  __2//***定时器0的捕获输入通道2
#define P0_6_PINSEL    2 * P0_6

#define P0_7_GPIO      __0//通用数字输入输出管脚
  #define P0_7_SSEL0   __1//SPI0从机选择。选择SPI接口用作从机
  #define P0_7_MAT2_0  __2//**定时器2的匹配输出通道0
#define P0_7_PINSEL    2 * P0_7

#define P0_8_GPIO      __0//通用数字输入输出管脚
  #define P0_8_TXD1    __1//UART1的发送器输出
  #define P0_8_MAT2_1  __2//**定时器2的匹配输出通道1
#define P0_8_PINSEL    2 * P0_8

#define P0_9_GPIO      __0//通用数字输入输出管脚
  #define P0_9_RXD1    __1//UART1的接收器输入
  #define P0_9_MAT2_2  __2//**定时器2的匹配输出通道2
#define P0_9_PINSEL    2 * P0_9

#define P0_10_GPIO     __0//通用数字输入输出管脚
  #define P0_10_RTS1   __1//UART1请求发送出端(仅用于LP138)
  #define P0_10_CAP1_0 __2//定时器1的捕获输入通道0
  #define P0_10_AIN3   __3//A/D转换器输入3。该模拟输入总是连接到相应的管脚
#define P0_10_PINSEL   2 * P0_10

#define P0_11_GPIO     __0//通用数字输入输出管脚
  #define P0_11_CTS1   __1//UART1清除发送入端(仅用于LP138)
  #define P0_11_CAP1_1 __2//定时器1的捕获输入通道1
  #define P0_11_AIN4   __3//A/D转换器输入4。该模拟输入总是连接到相应的管脚
#define P0_11_PINSEL   2 * P0_11

#define P0_12_GPIO     __0//通用数字输入输出管脚
  #define P0_12_DSR1   __1//UART1数据设置就绪端(仅用于 LPC2138)
  #define P0_12_MAT1_0 __2//定时器1的匹配输出通道0
  #define P0_12_AIN5   __3//A/D转换器输入5。该模拟输入总是连接到相应的管脚
#define P0_12_PINSEL   2 * P0_12

#define P0_13_GPIO     __0//通用数字输入输出管脚
  #define P0_13_DTR1   __1//UART1数据终端就绪
  #define P0_13_MAT1_1 __2//定时器1的匹配输出通道1
#define P0_13_PINSEL   2 * P0_13

#define P0_14_GPIO     __0//通用数字输入输出管脚
  #define P0_14_DCD1   __1//UART1数据载波检测输入(仅用于 LPC2138)
  #define P0_14_SCK1   __2//SPI1的串行时钟。SPI时钟从主机输出,从机输入
  #define P0_14_EINT1  __3//**外部中断1输入
#define P0_14_PINSEL   2 * P0_14

#define P0_15_GPIO     __0//通用数字输入输出管脚
  #define P0_15_RI1    __1//UART1铃响指示输入(仅用于 LPC2138)
  #define P0_15_EINT2  __2//**外部中断2输入
#define P0_15_PINSEL   2 * P0_15

#define P0_16_GPIO     __0//通用数字输入输出管脚
  #define P0_16_EINT0  __1//**外部中断0输入
  #define P0_16_MAT0_2 __2//**定时器0的匹配输出通道2
#define P0_16_PINSEL   2 * P0_0


#define P0_17_GPIO     __0//通用数字输入输出管脚
  #define P0_17_CAP1_2 __1//**定时器1的捕获输入通道2
  #define P0_17_SCL1   __2//I2C1时钟输入/输出。开漏输出(符合I2C规范)
#define P0_17_PINSEL   2 * P0_1

#define P0_18_GPIO     __0//通用数字输入输出管脚
  #define P0_18_CAP1_3 __1//**定时器1的捕获输入通道3
  #define P0_18_SDA1   __2//I2C1数据输入/输出。开漏输出(符合I2C规范)
#define P0_18_PINSEL   2 * P0_2


#define P0_19_GPIO     __0//通用数字输入输出管脚
  #define P0_19_MAT1_2 __1//**定时器1的匹配输出通道2
  #define P0_19_MISO1  __2//SPI1主机输入从机输出端。从机到主机的数据传输
#define P0_19_PINSEL   2 * P0_3


#define P0_20_GPIO     __0//通用数字输入输出管脚
  #define P0_20_MAT1_3 __1//**定时器1的匹配输出通道3
  #define P0_20_MOSI1  __2//SPI1主机输出从机输入端。主机到从机的数据传输
#define P0_20_PINSEL   2 * P0_4


#define P0_21_GPIO     __0//通用数字输入输出管脚
  #define P0_21_MAT3_0 __1//**定时器3的匹配输出通道0
  #define P0_21_SSEL1  __2//SPI1从机选择。选择SPI接口用作从机
#define P0_21_PINSEL   2 * P0_5


#define P0_22_GPIO     __0//通用数字输入输出管脚
  #define P0_22_AIN0   __1//A/D转换器输入0。该模拟输入总是连接到相应的管脚
#define P0_22_PINSEL   2 * P0_6


#define P0_23_GPIO     __0//通用数字输入输出管脚
  #define P0_23_AIN1   __1//A/D转换器输入1。该模拟输入总是连接到相应的管脚
#define P0_23_PINSEL   2 * P0_7

#define P0_24_GPIO     __0//通用数字输入输出管脚
  #define P0_24_AIN2   __1//A/D转换器输入2。该模拟输入总是连接到相应的管脚
#define P0_24_PINSEL   2 * P0_8


#define P0_25_GPIO     __0//通用数字输入输出管脚
  #define P0_25_AIN6   __1//A/D转换器输入6。该模拟输入总是连接到相应的管脚
#define P0_25_PINSEL   2 * P0_9


#define P0_26_GPIO     __0//通用数字输入输出管脚
  #define P0_26_AIN7   __1//A/D转换器输入7。该模拟输入总是连接到相应的管脚
#define P0_26_PINSEL   2 * P0_10


#define P0_27_GPIO     __0//通用数字输入输出管脚
  #define TRST         __1//JTAG接口的测试复位
  #define P0_27_CAP2_0 __2//***定时器2的捕获输入通道0
#define P0_27_PINSEL   2 * P0_11


#define P0_28_GPIO     __0//通用数字输入输出管脚
  #define TMS          __1//JTAG接口的测试模式选择
  #define P0_28_CAP2_1 __2//***定时器2的捕获输入通道1
#define P0_28_PINSEL   2 * P0_12


#define P0_29_GPIO     __0//通用数字输入输出管脚
  #define TCK          __1//JTAG接口的测试时钟
  #define P0_29_CAP2_2 __2//***定时器2的捕获输入通道2
#define P0_29_PINSEL   2 * P0_13


#define P0_30_GPIO     __0//通用数字输入输出管脚
  #define TDI          __1//JTAG接口的测试数据输入
  #define P0_30_MAT3_3 __2//**定时器3的匹配输出通道3
#define P0_30_PINSEL   2 * P0_14


#define P0_31_GPO      __0//通用数字输出管脚(注意:此管脚仅为输出)
  #define TDO          __1//JTAG接口的测试数据输出
#define P0_31_PINSEL   2 * P0_15

 


 
/*------------------------------------------------------------------------
        结构指针在ARM之应用(愚人节版)
------------------------------------------------------------------------*/


typedef struct _LPCS_VIC {
  LPC_REG IRQStatus;//IRQ 状态寄存器
  LPC_REG FIQStatus;//FIQ 状态请求
  LPC_REG RawIntr;//所有中断的状态寄存器
  LPC_REG IntSelect;//中断选择寄存器
  LPC_REG IntEnable;//中断使能寄存器
  LPC_REG IntEnClr;//中断使能清零寄存器
  LPC_REG SoftInt;//软件中断寄存器
  LPC_REG SoftIntClr;//软件中断清零寄存器
  LPC_REG Protection;//保护使能寄存器
  LPC_REG Reserved1[3]; //保留3个空位
  LPC_REG VectAddr;//向量地址寄存器
  LPC_REG DefVectAddr;//默认向量地址寄存器
  LPC_REG Reserved2[2]; //保留2个空位
  LPC_REG Reserved3[48];//保留48个空位
  LPC_REG VectAddrs[16];//向量地址寄存器,VICVectAddr0~VICVectAddr15
  LPC_REG Reserved4[48];//保留48个空位
  LPC_REG VectCntls[16];//向量控制寄存器,VICVectCntl0~VICVectCntl15
}LPCS_VIC, *LPCPS_VIC;

#define LPC_BASE_VIC  ((LPCPS_VIC)  0xFFFFF000)//定义硬件结构指针(硬件地址)
const LPCPS_VIC VIC = LPC_BASE_VIC;//定义全局结构指针变量

typedef struct _LPCS_PINSEL {
  LPC_REG PIN_SEL0;//管脚功能选择寄存器0
  LPC_REG PIN_SEL1;//管脚功能选择寄存器1
}LPCS_PINSEL, *LPCPS_PINSEL;

#define LPC_BASE_PINSEL  ((LPCPS_PINSEL)  0xE002C000)//定义硬件结构指针(硬件地址)
const LPCPS_PINSEL PINSEL = LPC_BASE_PINSEL;//定义全局结构指针变量PINSEL

typedef struct _LPCS_MAM {
  LPC_REG MAM_CR;//存储器加速器模块控制寄存器
  LPC_REG MAM_TIM;//存储器加速器定时控制
}LPCS_MAM, *LPCPS_MAM;

#define LPC_BASE_MAM  ((LPCPS_MAM)  0xE01FC000)//定义硬件结构指针(硬件地址)
const LPCPS_MAM MAM = LPC_BASE_MAM;//定义全局结构指针变量MAM

typedef struct _LPCS_PLL {//锁相环
  LPC_REG PLL_CON;//PLL 控制寄存器
  LPC_REG PLL_CFG;//PLL 配置寄存器
  LPC_REG PLL_STAT;//PLL 状态寄存器
  LPC_REG PLL_FEED;//PLL 愦送寄存器
}LPCS_PLL, *LPCPS_PLL;

#define LPC_BASE_PLL  ((LPCPS_PLL)  0xE01FC080)//定义硬件结构指针(硬件地址)
const LPCPS_PLL PLL = LPC_BASE_PLL;//定义全局结构指针变量PLL


typedef struct _LPCS_GPIO {//通用I/O口
  LPC_REG IOPIN;//GPIO管脚值寄存器
  LPC_REG IOSET;//GPIO输出置位寄存器
  LPC_REG IODIR;//GPIO方向寄存器
  LPC_REG IOCLR;//GPIO输出清零寄存器
}LPCS_GPIO, *LPCPS_GPIO;


#define LPC_BASE_GPIO0  ((LPCPS_GPIO)  0xE0028000)//定义硬件结构指针(硬件地址)
const LPCPS_GPIO P0 = LPC_BASE_GPIO0;//定义全局结构指针变量P0
/*--------------------------------------------------------------------
应用示例
  P0->IODIR |= (1 << P0_8);//设置P0.8为输出
  P0->IOSET  = (1 << P0_8);//P0.8输出高电平
  P0->IOCLR  = (1 << P0_8);//P0.8输出低电平
  P0->IOPIN ^= (1 << P0_8);//P0.8输出电平翻转
----------------------------------------------------------------------*/
typedef struct _LPCS_FGPIO {//通用I/O口
  LPC_REG FIODIR;//GPIO方向寄存器
  LPC_REG Reserved1[3]; //保留3个空位
  LPC_REG FIOMASK;//GPIO屏蔽寄存器
  LPC_REG FIOPIN;//GPIO管脚值寄存器
  LPC_REG FIOSET;//GPIO输出置位寄存器
  LPC_REG FIOCLR;//GPIO输出清零寄存器
}LPCS_FGPIO, *LPCPS_FGPIO;


#define LPC_BASE_FGPIO0  ((LPCPS_FGPIO)  0x3FFFC000)//定义硬件结构指针(硬件地址)
const LPCPS_FGPIO FP0 = LPC_BASE_FGPIO0;//定义全局结构指针变量FP0

 

typedef struct _LPCS_UART {
  union {//地址冲突处理
    LPC_REG _RBR;//接收缓冲
    LPC_REG _THR;//发送保持
    LPC_REG _DLL;//除数锁存低位
  }RBR_THR_DLL;//收发数据
  union {//地址冲突处理
    LPC_REG _IER;//中断使能
    LPC_REG _DLM;//除数锁存高位
  }IER_DLM;
  union {//地址冲突处理
    LPC_REG _IIR;//中断ID
    LPC_REG _FCR;//FIFO控制
  }IIR_FCR;//(8)
  LPC_REG LCR;//线控制
  LPC_REG MCR;//Modem控制(只有UART1)
  LPC_REG LSR;//线状态)
  LPC_REG MSR;//Modem状态(只有UART1)
  LPC_REG SCR;//高速缓存
  LPC_REG Reserved[4]; //保留4个空位
  LPC_REG TER;//发送使能
}LPCS_UART, *LPCPS_UART;

#define RBR RBR_THR_DLL._RBR
#define THR RBR_THR_DLL._THR
#define DLL RBR_THR_DLL._DLL

#define IER IER_DLM._IER
#define DLM IER_DLM._DLM

#define IIR IIR_FCR._IIR
#define FCR IIR_FCR._FCR


#define LPC_BASE_UART0  ((LPCPS_UART)  0xE000C000)//定义硬件结构指针(硬件地址)
const LPCPS_UART U0 = LPC_BASE_UART0;//定义全局结构指针变量U0
#define LPC_BASE_UART1  ((LPCPS_UART)  0xE0010000)//定义硬件结构指针(硬件地址)
const LPCPS_UART U1 = LPC_BASE_UART1;//定义全局结构指针变量U1


typedef struct _LPCS_TIMER {//定时器
  LPC_REG TIMER_IR;//中断寄存器
  LPC_REG TIMER_TCR;//定时器控制寄存器
  LPC_REG TIMER_TC;//定时器计数器
  LPC_REG TIMER_PR;//预分频寄存器
  LPC_REG TIMER_PC;//预分频计数器
  LPC_REG TIMER_MCR;
  LPC_REG TIMER_MR0;
  LPC_REG TIMER_MR1;
  LPC_REG TIMER_MR2;
  LPC_REG TIMER_MR3;
  LPC_REG TIMER_CCR;
  LPC_REG TIMER_CR0;
  LPC_REG TIMER_CR1;
  LPC_REG TIMER_CR2;
  LPC_REG TIMER_CR3;
  LPC_REG TIMER_EMR;
  LPC_REG Reserved[12]; //保留12个空位
  LPC_REG TIMER_CTCR;
  LPC_REG T0PWMCON; //
}LPCS_TIMER, *LPCPS_TIMER;


#define LPC_BASE_TIMER0  ((LPCPS_TIMER)  0xE0004000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TIMER1  ((LPCPS_TIMER)  0xE0008000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TIMER2  ((LPCPS_TIMER)  0xE0070000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_TIMER3  ((LPCPS_TIMER)  0xE0074000)//定义硬件结构指针(硬件地址)
const LPCPS_TIMER T0 = LPC_BASE_TIMER0;//定义全局结构指针变量T0
const LPCPS_TIMER T1 = LPC_BASE_TIMER1;//定义全局结构指针变量T1
const LPCPS_TIMER T2 = LPC_BASE_TIMER2;//定义全局结构指针变量T2
const LPCPS_TIMER T3 = LPC_BASE_TIMER3;//定义全局结构指针变量T3


typedef struct _LPCS_PWM {
  LPC_REG PWM_IR; //中断寄存器
  LPC_REG PWM_TCR;//PWM定时器控制寄存器
  LPC_REG PWM_TC; //PWM定时器计数器
  LPC_REG PWM_PR; //PWM预分频寄存器
  LPC_REG PWM_PC; //PWM预分频计数器寄存器
  LPC_REG PWM_MCR;//PWM匹配控制寄存器
  LPC_REG PWM_MR0;//PWM匹配寄存器0
  LPC_REG PWM_MR1;//PWM匹配寄存器1
  LPC_REG PWM_MR2;//PWM匹配寄存器2
  LPC_REG PWM_MR3;//PWM匹配寄存器3
  LPC_REG Reserved[6]; //保留6个空位
  LPC_REG PWM_MR4;//PWM匹配寄存器4
  LPC_REG PWM_MR5;//PWM匹配寄存器5
  LPC_REG PWM_MR6;//PWM匹配寄存器6
  LPC_REG PWM_PCR;//PWM控制寄存器
  LPC_REG PWM_LER;//PWM锁存使能寄存器
}LPCS_PWM, *LPCPS_PWM;

#define LPC_BASE_PWM  ((LPCPS_PWM)  0xE0014000)//定义硬件结构指针(硬件地址)
const LPCPS_PWM PWM = LPC_BASE_PWM;//定义全局结构指针变量PWM

typedef struct _LPCS_I2C {
  LPC_REG I2C_CONSET; //I2C控制置位寄存器
  LPC_REG I2C_STAT;   //I2C状态寄存器
  LPC_REG I2C_DAT;   //I2C数据寄存器
  LPC_REG I2C_ADR;   //I2C从地址寄存器
  LPC_REG I2C_SCLH;   //SCH占空比寄存器高半字
  LPC_REG I2C_SCLL;   //SCL占空比寄存器低半字
  LPC_REG I2C_CONCLR; //I2C控制清零寄存器
}LPCS_I2C, *LPCPS_I2C;//


#define LPC_BASE_I2C0  ((LPCPS_I2C)  0xE001C000)//定义硬件结构指针(硬件地址)
#define LPC_BASE_I2C1  ((LPCPS_I2C)  0xE005C000)//定义硬件结构指针(硬件地址)
const LPCPS_I2C I2C0 = LPC_BASE_I2C0;//定义全局结构指针变量I2C0
const LPCPS_I2C I2C1 = LPC_BASE_I2C1;//定义全局结构指针变量I2C1

typedef struct _LPCS_SPI {
  LPC_REG SPI_SPCR;
  LPC_REG SPI_SPSR;
  LPC_REG SPI_SPDR;
  LPC_REG SPI_SPCCR;
  LPC_REG Reserved[4]; //保留4个空位
  LPC_REG SPI_SPINT;
}LPCS_SPI, *LPCPS_SPI;

#define LPC_BASE_SPI  ((LPCPS_SPI)  0xE0020000)//定义硬件结构指针(硬件地址)
const LPCPS_SPI SPI = LPC_BASE_SPI;//定义全局结构指针变量SPI

typedef struct _LPCS_SSP {
  LPC_REG SSP_CR0;
  LPC_REG SSP_CR1;
  LPC_REG SSP_DR;
  LPC_REG SSP_SR;   //SSP状态寄存器
  LPC_REG SSP_CPSR;
  LPC_REG SSP_IMSC;
  LPC_REG SSP_RIS;
  LPC_REG SSP_MIS;
  LPC_REG SSP_ICR;
}LPCS_SSP, *LPCPS_SSP;

#define LPC_BASE_SSP  ((LPCPS_SSP)  0xE0068000)//定义硬件结构指针(硬件地址)
const LPCPS_SSP SSP = LPC_BASE_SSP;//定义全局结构指针变量SSP

typedef struct _LPCS_RTC {
  LPC_REG RTC_ILR;//中断位置寄存器
  LPC_REG RTC_CTC;//时钟节拍计数器
  LPC_REG RTC_CCR;//时钟控制寄存器
  LPC_REG RTC_CIIR;//计数器递增中断寄存器
  LPC_REG RTC_AMR;//报警屏蔽寄存器
  LPC_REG RTC_CTIME0;//完整时间寄存器0
  LPC_REG RTC_CTIME1;//完整时间寄存器1
  LPC_REG RTC_CTIME2;//完整时间寄存器2
  LPC_REG RTC_SEC;//秒寄存器
  LPC_REG RTC_MIN;//分寄存器
  LPC_REG RTC_HOUR;//小时寄存器
  LPC_REG RTC_DOM;//日期(月)寄存器
  LPC_REG RTC_DOW;//星期寄存器
  LPC_REG RTC_DOY;//日期(年)寄存器
  LPC_REG RTC_MONTH;//月寄存器
  LPC_REG RTC_YEAR;//年寄存器
  LPC_REG Reserved[8]; //保留8个空位
  LPC_REG RTC_ALSEC;//秒报警值
  LPC_REG RTC_ALMIN;//分报警值
  LPC_REG RTC_ALHOUR;//小时报警值
  LPC_REG RTC_ALDOM;//日期(月)报警值
  LPC_REG RTC_ALDOW;//星期报警值
  LPC_REG RTC_ALDOY;//日期(年)报警值
  LPC_REG RTC_ALMONTH;//月报警值
  LPC_REG RTC_ALYEAR;//年报警值
  LPC_REG RTC_PREINT;//预分频值,整数部分
  LPC_REG RTC_PREFRAC;//预分频值,小数部分
}LPCS_RTC, *LPCPS_RTC;

#define LPC_BASE_RTC  ((LPCPS_RTC)  0xE0024000)//定义硬件结构指针(硬件地址)
const LPCPS_RTC RTC = LPC_BASE_RTC;//定义全局结构指针变量RTC


typedef struct _LPCS_WDT {
  LPC_REG WDT_WDMOD;//狗模式寄
  LPC_REG WDT_WDTC;//看门狗定时器常数寄存器
  LPC_REG WDT_WDFEED;//看门狗喂狗寄存器
  LPC_REG WDT_WDTV;//看门狗定时器值寄存器
}LPCS_WDT, *LPCPS_WDT;

#define LPC_BASE_WDT  ((LPCPS_WDT)  0xE0000000)//定义硬件结构指针(硬件地址)
const LPCPS_WDT WDT = LPC_BASE_WDT;//定义全局结构指针变量WDT

typedef struct _LPCS_ADC {
  LPC_REG ADCR; //A/D 控制寄存器
  LPC_REG ADGDR; //A/D 全局数据寄存器
  LPC_REG Reserved[1]; //保留1个空位
  LPC_REG ADINTEN; //
  LPC_REG ADDRs[8];
  LPC_REG ADSTAT;//A/D 启动寄存器
}LPCS_ADC, *LPCPS_ADC;

#define LPC_BASE_ADC0  ((LPCPS_ADC)  0xE0034000)//定义硬件结构指针(硬件地址)
const LPCPS_ADC ADC0 = LPC_BASE_ADC0;//定义全局结构指针变量ADC0

typedef struct _LPCS_INTCON {
  LPC_REG EXT_INT;//外部中断标志寄存器
  LPC_REG INT_WAKE;//外部中断唤醒寄存器
  LPC_REG EXT_MODE;//外部中断方式寄存器
  LPC_REG EXT_POLAR;//外部中断极性寄存器
}LPCS_INTCON, *LPCPS_INTCON;

#define LPC_BASE_INTCON  ((LPCPS_INTCON)  0xE01FC140)//定义硬件结构指针(硬件地址)
const LPCPS_INTCON INTCON = LPC_BASE_INTCON;//定义全局结构指针变量INTCON

typedef struct _LPCS_POWER {
  LPC_REG P_CON;//功率控制寄存器
  LPC_REG P_CONP;//外部功率控制寄存器
}LPCS_POWER, *LPCPS_POWER;

#define LPC_BASE_POWER  ((LPCPS_POWER)  0xE01FC0C0)//定义硬件结构指针(硬件地址)
const LPCPS_POWER POWER = LPC_BASE_POWER;//定义全局结构指针变量INTCON

typedef struct _LPCS_SYSCON {
  LPC_REG MEM_MAP;//存储器映射控制     //0xE01FC040
  LPC_REG Reserved0[15]; //保留16个空位 //0xE01FC044
  LPC_REG PLL_CON;//PLL 控制寄存器  //0xE01FC080
  LPC_REG PLL_CFG;//PLL 配置寄存器  //0xE01FC084
  LPC_REG PLL_STAT;//PLL 状态寄存器  //0xE01FC088
  LPC_REG PLL_FEED;//PLL 愦送寄存器  //0xE01FC08C
  LPC_REG Reserved1[12]; //保留4个空位 //0xE01FC090
  LPC_REG P_CON;//功率控制寄存器  //0xE01FC0C0
  LPC_REG P_CONP;//外部功率控制寄存器 //0xE01FC0C4
  LPC_REG Reserved2[14]; //保留14个空位 //0xE01FC0C8
  LPC_REG VPB_DIV;//VPB 分频器控制寄存器//0xE01FC100
  LPC_REG Reserved3[15]; //保留15个空位 //0xE01FC104
  LPC_REG EXT_INT;//外部中断标志寄存器 //0xE01FC140
  LPC_REG INT_WAKE;//外部中断唤醒寄存器 //0xE01FC144
  LPC_REG EXT_MODE;//外部中断方式寄存器 //0xE01FC148
  LPC_REG EXT_POLAR;//外部中断极性寄存器//0xE01FC14C
  LPC_REG Reserved4[12]; //保留12个空位 //0xE01FC150
  LPC_REG RS_ID;//复位源识别寄存器  //0xE01FC180
  LPC_REG CS_PR;//代码安全保护寄存器 //0xE01FC184
}LPCS_SYSCON, *LPCPS_SYSCON;

#define LPC_BASE_SYSCON  ((LPCPS_SYSCON)  0xE01FC040)//定义硬件结构指针(硬件地址)
const LPCPS_SYSCON SYSCON = LPC_BASE_SYSCON;//定义全局结构指针变量SYSCON

#define IAP_FCCLK            11059

/* 定义IAP命令字 */
                                    //   命令           参数
#define     IAP_SELECTOR        50  // 选择扇区     【起始扇区号、结束扇区号】
#define     IAP_RAMTOFLASH      51  // 拷贝数据     【FLASH目标地址、RAM源地址、写入字节数、系统时钟频率】
#define     IAP_ERASESECTOR     52  // 擦除扇区     【起始扇区号、结束扇区号、系统时钟频率】
#define     IAP_BLANKCHK        53  // 查空扇区     【起始扇区号、结束扇区号】
#define     IAP_READPARTID  


阅读全文(731) | 回复(0) | 引用通告(5) | 编辑

系统分类: ARM  |  用户分类: ARM  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(788) | 回复(0)

2Next >Total , Page /