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

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
smfox10 M币 +8 不能错过! 2012-08-23
11211 M币 +5 謝謝分享 2012-08-22
埋头苦修 M币 +6 謝謝分享 2012-08-22
msug M币 +7 優秀文章 2012-08-22
 
 
离线 nbzwt

发帖
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脚的产品!以下是一个支持设备简表
引脚数 支持的存储器位数 支持的设备
144 8位 SRAM,Flash
180 8位 16位 SRAM,Flash
208 8位 16位 32位 SRAM,Flash,SDRAM

    注意:以上表格仅供参考,我对Flash什么的不是很了解,具体的可以看UM。
    以下是各片选的地址和范围大小
片选管脚 地址范围 存储器类型 范围大小 
EMC_CS0 0x8000 0000-0x83FF FFFF 静态 64Mb
EMC_CS1 0x9000 0000-0x93FF FFFF 静态 64Mb
EMC_CS2 0x9800 0000-0x9BFF FFFF 静态 64Mb
EMC_CS3 0x9C00 0000-0x9FFF FFFF 静态 64Mb
EMC_DYCS0 0xA000 0000-0xAFFF FFFF 动态 256Mb
EMC_DYCS1 0xB000 0000-0xBFFF FFFF 动态 256Mb
EMC_DYCS2 0xC000 0000-0xCFFF FFFF 动态 256Mb
EMC_DYCS3 0xD000 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

发帖
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格式的原理图,方便大家制作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值