您的位置:首页 > 其它

转 从51到ARM——LPC1788学习笔记[最后更新:8月23日

2014-01-21 11:24 661 查看
http://bbs.mydigit.cn/read.php?tid=459137&page=1

也许我发在MyDigit人气不高,毕竟这里很多都还是初学51,但是因为本人和这个站有一些特殊的感情,所以呢,还是发在这个地方。就算大家不看,也能捧个场,谢谢。

/****************************广告开始**************************/

51单片机入门教程:http://bbs.mydigit.cn/read.php?tid=455109&page=1(这个教程我也参加编写了,所以打个小广告)

/****************************广告结束**************************/

前言

51单片机学完后,下一步是干什么呢?挑战51的极限 or 入门更高级的单片机?我不知道你的选择是什么,不过我选择了后者,这也就有了这个学习笔记。无论你学不学LPC17XX单片机,反正多看看没有坏处,对吧?如果里面有错误,也欢迎指出。

如果要入门更高级的单片机,那么具体我们要怎么选择呢?这个单片机的选型,我可是做足了功夫,各种单片机的对比介绍我也看了快半年了,这里我来做个总结。但是发现心中有千言万语但却不好表达,用文字来叙述会非常的混乱,所以呢,我列了个表格。



从表格中我们看到,单片机厂商是愈战愈勇,啥配置都往上加,说不定几年后单片机就超过曾经辉煌的P3 P4了呢。在这么多单片机当中,我最终选择了LPC178X系列,原因是我看中了它的LCD控制器和SDRAM支持,并在此论坛立贴为证,我要拿它搞个终极单片机时钟。有了目标,就好办了,先Google百度一下,看看有没有前人已经弄过这个东西,找点相关的学习资料(教程啊,学习笔记啊,例程啊),还有别忘了去它的官网把资料也打个包拖下来,事实证明,官网资料还是最强的。比如我现在学LPC1788,我找来了EK-LPC1788开发板的原理图和例程,还有官网的一堆资料,包括了数据手册,用户手册,应用手册,库和几个例程。值得一提的是,NXP免费提供emWin图形库供大家使用,在NXP单片机上使用无需担心授权问题(我映像中ST也是有自己图形库的。)而emWin的前身就是大名鼎鼎的uCGUI。准备好和我一同踏上这激动人心而又稍显艰苦的旅程了吗?

楼层导航

1L:手册阅读笔记

2L:PCB设计笔记

3L:程序编程笔记

最后感谢rgwan对本人提供的支持

更新记录:

8月22日:更新 1L时钟和复位 2L电源

8月23日:更新 1L EMC

[ 此帖被nbzwt在2012-08-23 06:45重新编辑 ]

本帖最近评分记录:共4条评分 ,M币+26

smfox10M币 +8不能错过!2012-08-23
11211M币 +5謝謝分享2012-08-22
埋头苦修M币 +6謝謝分享2012-08-22
msugM币 +7優秀文章2012-08-22
收藏 新鲜事 喜欢+3

回复

举报

分享到淘江湖新浪QQ微博QQ空间开心人人豆瓣网易微博百度鲜果白社会飞信
离线nbzwt









数码2级






发帖358

M币4902

专家14

贡献10

粉丝77

加关注

发消息

只看该作者1楼 发表于:
2012-08-22

时钟&复位

时钟和复位可以说就是单片机最小系统的基本要素,所以呢,先开始将时钟和复位。 时钟方面,我们来看看Datasheet是怎么说的。

 Clock generation:

 Clock output function that can reflect the main oscillator clock, IRC clock, RTC clock, CPU clock, USB clock, or the watchdog timer clock.

 On-board crystal oscillator with an operating range of 1 MHz to 25 MHz.

 12 MHz Internal RC oscillator (IRC) trimmed to 1% accuracy that can optionally be used as a system clock.

 An on-chip PLL allows CPU operation up to the maximum CPU rate without the need for a high-frequency crystal. May be run from the main oscillator or the internal RC oscillator.

 A second, dedicated PLL may be used for USB interface in order to allow added flexibility for the Main PLL settings.

E文好的童鞋应该是一看就明白的,E文作为基本功还是很重要的。当然,NXP的工程师也非常贴心的把1000多页的User Manual翻译成中文,在这里呢,像他们致敬,能提供如此给力的芯片供我们发挥,谢谢。(DS原文应该中有一处错误,以上提供的我已经改正。)

接下来我们来看看时钟部分的Block图(谁能告诉我这个中文标准说法是什么?)



其中,irc_clk就是内部12MHz RC振荡器,而osc_clk则是外部晶振。从图中我们可以看到,sysclk可以从内部RC和外部晶振两个中选一个,并且sysclk进入主PLL进行倍频,为CPU、外设和EMC提供时钟。而USB比较特殊,它的时钟选择是独立的,可以从sysclk、主PLL和副PLL中选择。其中,副PLL不能选择IRC作为输入,所以如果使用内部RC振荡器还要用USB,那么唯一的解决方法就是,IRC通过主PLL倍频到192MHz,然后CPU二分频到96MHz,而USB选择主PLL输入,然后同样二分频到96MHz。

为什么一定要是96MHz呢?CPU没有办法,因为要和USB共用一个PLL,而USB必须输入48MHz的整偶数倍的频率才能工作(也就是96MHz的倍数),那么在PLL工作范围之内的唯一选择就是CPU也96MHz。

复位方面,继续看数据手册,不过很遗憾,我只找到一句话:

 On-chip Power-On Reset (POR).

具有片内上电复位,那好吧,我们看看用户手册怎么说。

LPC178x/177x 有 6 个复位源: RESET 管脚复位、看门狗复位、上电复位(POR)、掉电检测(BOD)复位、系统复位,以及锁定。

前面几个复位源还是蛮好理解的,这里来说说后面几个。

掉电检测复位实际上就是一个持续运行的电压比较器,它会检测当前的电压,当低于2.2V的时候就会产生一个中断,让软件处理低电压;而当低于1.8V时,会直接复位,因为在电压过低时,各器件工作会不可靠。 系统复位则是软件通过访问寄存器的方式来进行的复位。 锁定么,还是来看原文好了。

执行NMI 或硬故障处理程序时,如果发生硬故障,则处理器进入一个锁定状态。当处理器处于锁定状态时,它不执行任何指令。处理器保持在锁定状态,直到发生以下情况之一:

• 处理器被复位;

• 发生一个 NMI 故障。

注: 如果NMI处理程序使处理器进入锁定状态,则后续NMI也不会改变理器的锁定状态。

但是这个到底是什么呢?我个人理解就是处理器执行出错了 ,之后处理器就停止执行代码。(这部分的参考电路设计请参考2L)

EMC

同我在项目预告中所说,LPC1788最吸引我的一点是支持挂SDRAM,原因我就不重复了。 现在我看来,或许我可以把Code放到SDRAM里面,这样就不用再在板上弄个Nor Flash了。OS+GUI可以放在片内的512KB Flash里面,然后跑User Application的时候直接从SD卡里面把二进制代码Copy到SDRAM里面,然后跳转到SDRAM中运行。不过唯一遗憾的是速度,我为了方便布线用了16bit的SDRAM,而M3内核的指令大多数是16bit的,那么一次只能读出一条指令,为了提高速度,可能最好还是让CPU和SDRAM跑在同频率下以提高速度。如果不介意稍微让EMC超点频的话,可以上84MHz(毕竟咱的RAM颗粒是100MHz的)。好吧,废话讲了一堆,该说正事了。

EMC功能简介

 External Memory Controller (EMC) provides support for asynchronous static memory devices such as RAM, ROM and flash, as well as dynamic memories such as single data rate SDRAM.

怎么样,还是不错的吧。不过需要注意的是,如果你要用SDRAM,就不要使用144脚的产品!以下是一个支持设备简表

引脚数支持的存储器位数支持的设备
1448位SRAM,Flash
1808位 16位SRAM,Flash
2088位 16位 32位SRAM,Flash,SDRAM
注意:以上表格仅供参考,我对Flash什么的不是很了解,具体的可以看UM。

以下是各片选的地址和范围大小

片选管脚地址范围存储器类型范围大小
EMC_CS00x8000 0000-0x83FF FFFF静态64Mb
EMC_CS10x9000 0000-0x93FF FFFF静态64Mb
EMC_CS20x9800 0000-0x9BFF FFFF静态64Mb
EMC_CS30x9C00 0000-0x9FFF FFFF静态64Mb
EMC_DYCS00xA000 0000-0xAFFF FFFF动态256Mb
EMC_DYCS10xB000 0000-0xBFFF FFFF动态256Mb
EMC_DYCS20xC000 0000-0xCFFF FFFF动态256Mb
EMC_DYCS30xD000 0000-0xDFFF FFFF动态256Mb
注:应该是UM写错了,不应该是Mb,而应该是MB。

应该也就这样了吧,也没有什么值得多说的,编程方面的,等我开始写了再说吧。

最后,奉上参考IC选型。

NAND Flash:HY27UF081G2A (128MB MLC Nand Flash)

NOR Flash:JS28F128P30 (具体的大小我也没查到,反正我自己不用,也懒得继续找了)

SDRAM:hy57v561620 (这个最好买,32MB PC100 SDRAM)

SDRAM电路设计方面请参考2楼

To be continued

[ 此帖被nbzwt在2012-08-23 06:44重新编辑 ]

回复

举报

离线nbzwt









数码2级






发帖358

M币4902

专家14

贡献10

粉丝77

加关注

发消息

只看该作者2楼 发表于:
2012-08-22

SCH篇

不得不说,NXP芯片的引脚排列是我看过的最坑爹的,布线压力直线上升啊。

给大家截个图吧



自己看下旁边的引脚号,你就知道是什么意思了。而且有意思的是,引脚号都是跳着来的,我估计晶片上的引脚也是双层的,上下引脚一个单数走,一个双数走。这样封装的倒是方便了,但是苦了我们DIYer啊!

附上LPC1788的原理图库,AD9格式的,希望对大家有用(208脚弄起来不容易啊)


Schlib.rar (4
K) 下载次数:8

供电

首先呢,我们可以看见这个IC有很多电源脚,实际上,它们在内部都是连通的。那么为什么还要这么多呢?我也不太清楚,据说为的是更合理的去耦,而且如果不接的话回流的串扰很大,芯片的性能大大降低。反正在外部连起来就对了,记得每组电源旁都要连退耦电容。有些童鞋可能还不知道什么是退藕电容,这个是用来减少芯片对电源的干扰的。这里呢,我们看见了很多种电源引脚,其中VSSA和VDDA是模拟部分的电源,因为这次设计我不用用到IC片内的模拟功能,所以我就直接接上了电源。VREFP是AD DA参考电压,手册上建议和VDDA连通,那么我这里也直接接上了电源。如果需要用到模拟功能,那么模拟VCC和数字VCC一定要记得分离,滤波。

一下是电源正极部分的参考电路图,负极全部连在一起就可以了



PCB篇

还没开始呢,不过估计开始了就被整死了……

未完待续,完成后我会提供AD9格式和PDF格式的原理图,方便大家制作。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: