ImageVerifierCode 换一换
格式:DOC , 页数:30 ,大小:2.13MB ,
资源ID:7655075      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7655075.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(自己的ARM学习历程(入门版).doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

自己的ARM学习历程(入门版).doc

1、 第一部分 罗嗦与废话(必看) 我写这个,再次申明:这不是教程,至少不是教科书式的教程。 只是自己学习的一个过程,准确说是我个人学习的一个思维方式,学 习顺序。可能我后面的写的有些乱,又有些天马行空,不过这真正是 反映我学习的一个先后过程。 说实话,入门真的很痛苦,那种徘徊再门外而不得要领的感觉真 的很痛苦,论坛上大多数教程啊例子什么的都是 ADS 的,刚看时那个 郁闷啊,特别是对于学单片机用惯 KEIL 的人来说哦,还要再去学 ADS, 我们能够像学习 51 单片机一样学习 ARM。 刚开始也是什么都不懂,在

2、论坛上下了好多 ARM 的教程。也逐个 浏览下了,就我个人认为,比较好的两本书,也是我自己整个浏览完 (注意,是浏览)的两本。一本是“《ARM 嵌入式基础教程》配套讲 义”,这个是 PPT 文档,我没有找到完整的原书。这个教程我从头到 尾看了一次,不过看完还是脑袋糊糊的。在这里,我也请大家对它不 要钻研,糊糊的看完即可(要看完),大致知道 ARM 是什么意思,知 道 ARM 是有一个内核的,ARM 公司开发内核(什么 ARM7,ARM9,AR1M1 就是内核不同),然后交给其他公司添加其他外围设备,所以导致 ARM 有衍生出很多种类;然后知道

3、ARM 都几种操作模式,什么用户模式, 系统模式等等(我到现在也叫不全),至于具体什么时候用,干什么 用,不用管,用的时候再看; 还有就是知道 ARM 分为 ARM 指令集及 Thumb 指令,这个是汇编的,暂 且搁搁吧,哎,本来我也是想向 51 一样先学汇编再学 C 的,不过看 来看去,还是不知道汇编从何下手;然后看到 PPT 里一直有个什么启 动代码的,什么意思?8 懂,留着,到后面就知道了。。不过要写出 来,,,有难度。。然后。。。自己看看,反正看完脑袋还是浆糊就对了, 你都搞懂了,我想下面的你也不用看了,你是天才。。。

4、 说说我当初用 keil 学 ARM 的开端。刚开始不知道 keil C51 原来 和 KEIL for arm 是两个东西,从论坛上下了例子后,直接 keil 编译, 失败 ing。。后来下了个 keil for arm 的,想自己建个工程呢,楞是 找不到 LPCXX 在哪里,找到 Philips,下面只写着 see NXP——就是 这个就搞了好久,把 keil C51,KIEL FOR ARM 反复装来装去,然后又 下了别的版本的 keil for arm,还是搞不定,再网上找了几个 keil arm 的教程,就是看不不到怎么教人找到 L

5、PCXX 栏目的―――后来,光是 这个就搞了两个多星期,没头绪。于是下了个 ADS,看教程,发现。。。 不会用。没法,又转会 keil,一个偶然的以外,被我发现创建时左 边有个 NXP 的栏目,于是点开,往下拉,天啊,上帝啊,终于看到 然后问题又来了,看了 ADS 的例子(下了一个基于 PROTEUS 的 ARM 虚 拟 开 发 技 术 , 是 ADS 的 ), 我 晕 , 文 件 好 多 啊 , 什 么 main.c,target.c,starup.c,lpcxx.c,….然后又看 keil 的,我靠, 又是一堆文件―――说实话,对

6、初学者来说,看见这些文件就怕,干 嘛搞那么多啊,我××××无语。。。。。 哪些是可以放在一个文件里的?还是必须要分成几个文件的?还 是分成的几个文件必须那样命名的?还是这些文件是必须的,哪些是 不必要的?哪些是系统的,哪些自己写的,哪些是可以更改的?还 机,就建立一个工程,一个程序文件,写两句:SETB P1.0 ,END,OK。 装上那个 dpj.dll(平凡老师的,大家不陌生吧),效果就出来的,多 为了研究这个问题,我反复实验,一个一个的改,删,得出结论: 可以删,通通删(lpcxx。H 是自动生成)。..

7、 然后说说我看的另一本书,也是我现在还在看的一本书(电子档 的)“深入浅出 ARM7(上,下)”,这是本好书,建议大家开始写程序看 这个。前面的就像看我说的第一本一样,浏览,纯粹的浏览,,有个 印象即可;有不懂的地方,以后后面写程序时可以再回过头来研究, 带着问题学习――――这是最好的;否则都不明白对后面的学习有什 么帮助,看了也白看,没理解,转眼就忘了。。 我这里说的,像学 C51 一样学 ARM,只是给大家一个入门的路, 只能说入门,更高深的偶也 8 懂。至于到“会”的程度,我记得曾经 学 VC 时有句话说的好“什么叫会 VC,会建个工程

8、能弹出个‘Hello World’就叫会 VC 了?”所以这里也说“不是会点亮个 LED 就叫会 ARM 的!!”至于“精通”,当今 21 世纪,呵呵,谁敢言“精通”二字? 那么“入门者”和“高手”有什么区别呢?借用当初学单片机时 平凡老师的话,“入门者和高手的区别,看到 FEH 这个 16 进制数,入 门者只有看到 8 个 LED,7 个灭,1 个亮,然后才能回过头把 FEH 这 个数和 LED7 灭 1 亮联想起来;而高手一看到 FEH,脑海里自然就想 最后一句正文,我这个应当是大多数正常人的思维模式了,不敢 说让大

9、家成为高手,不过入个门应该不是什么难事。如果最后还没有 入门的人,只能说我的思维方式不适合你。一种要么你是牛 B 的天才, 好了,废话就说到这里了,脑袋又糊了,打游戏去。。。。 王谷成 于  2008 年 12 月 8 日星期一 农历戊子鼠年 冬月十一 晚 第二部分 像学 51 一样学 ARM ■一些说明: 本文所述的以及附带的 keil-protues 仿真例子,我都一一重新 运行了的,能够 protues 仿真,然后基本上逐条逐句都有详尽的注释。

10、 例子以及注释主要参考了论坛下的“基于 PROTEUS 的 ARM 虚拟开发技 术”(光盘)和“深入浅出 ARM7(上,下)”,不过不是像“基于××” 样完全照抄“深入××”,其中有我自己的理解,有些地方有疑问的 我都标出了,哪位如果后来解决了可以发到论坛共享下。。。 我使用的 keil for arm 版本是 mdk 3.22a,protues 版本是 protues 7.2 sp6(自己装第三方库).如果有人仿真不能的话,估计 可能是软件版本的问题。大家可以网上搜搜自己下载。 1:开始-创建工程+点亮一个 L

11、ED 还是从最简单的开始,点亮一个 LED。 ◆打开 keilu3(mdk3.22a),进入时如下图: ◆ 然后选择 project(工程)-New uVision Project(新工程), 起一个工程名,保存。 ◆ 然后进入如下界面 ◆ 下拉滚条,找到 NXP(founded by Philips),展开

12、下拉滚条, 选择自己所用的 ARM 型号(我下面的都是 LPC2131 的) ◆ 确定后弹出一个对话框如下,问你是否要加载启动代码,选择是, 这里必须要加载启动代码(不像 51,加启动代码 A51 反而出错) ◆ 然后就是和 keil C51 一样了,建立一个程序文件,加载到工程里。 然后写程序,编译,链接。要生成 HEX 代码的话,要在 target 里 设置,如下图: 好了,开始点亮一个 LED

13、 使用的是 LPC2131,点亮 LED2. 程序如下(后续省略,建附带的例子文件): #include int main() { PINSEL0=0X00000000;  //P0 口配置为 GPIO 功能 IODIR0=0XFFFFFFFF; IOSET0=0XFFFFFFFF; 闭 IOCLR0=0X00000002; LED } KEIL 编译会警告  //P0 口为输出状态 //P0 口置高电平,所有

14、 LED 关 //P0.1 置低电平,点亮第二个 //这里(19 行)必须空出一行,否则 具体的可以看 keil-protues 的例子。 在这里,#include表示是包含一个 LPC213X.H 的文件 这个文件在...keil\ARM\INC\Philips 目录下,里面有一些关于寄存 器地址的定义,至于到底是如何定义的,先不管他,反正知道用 C 语言写,都要包含这个文件就是了。 然后是 PINSEL0=0X00000000 这句,表示把 P0 口用作 GPIO

15、功能。 在 ARM 里,每一个端口可能有很多功能,什么 GPIO,串口,IIC,SPI 等等等等,而要让每个端口工作在什么功能下,就要靠 PINSEL0 或 PINSEL1 这两个寄存器来选择了,GPIO- General Purpose Input Output,通用输入输出,就是指那些可以通过软件把输入输出设置为 高低电平 1,0 之类的端口,类似与 C51 中的 P0,P1,P2 等口。在 ARM 里,各端口的默认功能是 GPIO,所以这一句 PINSEL0=0X00000000 可 以不要。 IOSET0=0XFFFFFFF

16、F; IOCLR0=0X00000002;IOSET0,IOCLR0 是 P0 口设置高低电平的两个寄存器,只有当选择 GPIO 功能时才有效。 IOSET0,IOCLR0 为 1 时,相应的端口才输出高或低电平,注意,不是 IOCLR0=0 输 出 低 电 平 , IOSET0,IOCLR0 为 0 时 , 也 就 是 说 对 IOSET0,IOSET1 赋值(写)0 是无效的。 最后一点,貌似是 mdk 的 BUG?就是 C 程序写完后,要空一行, 注意,这行必须是空的,不能有任何字,注释的也不行,否则 keil

17、 编译会有警告,可以看看附带的例子,删掉空行试试。 2:按键识别,点亮一个 LED 具体程序见我的附带实例。 前面的都一样,设置 GPIO 功能,输入输出等。刚开始 P0.0 口置 高电平,LED 是灭的。然后 while 语句不停的循环,检查是否有按键 按下。IOPIN0 这个寄存器是一个读/写的状态寄存器,可以反映当前 I/O 口状态,将它与 0X400(0100 0000 0000)相与,检查第【11】 位(其他位“相与”后恒

18、为 0),即按键接的 P0.10 口。当按下键时, P0.10 为低电平,执行 if 语句后面的一句,将 P0.0 变为低电平,LED 点亮。 这里有一个问题,用 if 语句查询按键时,如果将 IOPIN0&0X400 得出的值赋给另一个变量,例如我程序中的 temp,然后检测 temp 是 否为 0,结果 protues 仿真时会出错:不会判断 if 语句,而是跳过 if 语句,直接点亮 LED。这里不知道为什么,是程序的问题,还是 protues 仿真的问题呢? 3:按键控制 LED 闪烁 具体程序见我的附

19、带实例。 基本上是在前一个实验的基础上增加闪烁效果,不停的使 P0.0 口高/低电平切换。 这里有两种方法:一是循环灯亮-延时-灯灭-延时;二是使用 取反,检测 P0.0 口电平,为高-则变低,为低-则变高。 4:多按键控制 LED 闪烁 具体程序见我的附带

20、 四个按键控制 4 个 LED,按下相应按键时,LED 闪烁。这个算法不 是很好,我用的是一个一个检查,并且只能依次 1-2-3-4,按键时才 会被识别。加入 LED1 闪烁,按下 K3 时,则不会被识别。 5:流水灯 具体程序见我的附带 跟 51 单片机的原

21、理一样的。这里有 2 中方法,一是我写的先定 义一个数组,然后在程序中直接调用该数组即可;另一种是用指针的 方式,使灯亮的顺序递增。 本例首先查询按键,有键按下时,灯开始从上到下流动。 6:串口通信_查询方式 具体程序见我的附带例子 关于串口的工作原理,这里就不赘述了,可以参考周立功的那 本书或随便找个单片机的书,都一样。 这里说一下一个问题,周立功的书上

22、说,在系统默认情况下, 也就是上电复位时,系统频率 Fcclk=外部晶振频率 Fosc,VPB 频率 Fpclk=Fcclk/4,按照这样,如果在程序开头不进行分频设置,也就 是采用系统默认的频率,计算出当串口波特率=9600 时的除数锁存 寄存器 U0DLM/U0DLL 的值,由公式得出(外部晶振 11.0592MHz): U0DLM,U0DLL= (11059200÷4)/(16×9600)=18=0X0012 则: U0DLM=0X00,U0DLL=0X12 按照这个值写入程序里,并在 protues 里设置通信波特率

23、为 9600(如下图),结果仿真时无任何反映。说明,程序的波特率和 protues 设置的波特率不一致。 然而,当按照默认系统频率 Fcclk=5×Fosc 计算 U0DLM 和 U0DLL 时(波特率为 9600),protues 仿真却能够正常通信。不知道 是我那个环节弄错了,还是周立功的书上搞错了。。。 这里有个问题?怎么接收字符串呢?

24、 如上图,这里是直接使用的 protues 的虚拟串口终端。右边那个 是跟计算机串口连接的,要装一个虚拟串口才行(像虚拟光驱那 样的 DD),然后用串口调试助手类的软件发送/接收数据。 7:I2C 通信_查询方式 这个是开始写的一个 I2C 查询程序。但是怎么也不能仿真成功, 不知道是程序不对呢?还是 proteus

25、的问题。后来到论坛翻了好多帖 子,大家都说 proteus 的 I2C 口有 bug。也不晓得是不是,反正怎么 折腾程序都不对。尤其是用 I2C-debugger 的时候,更本就不会弹出 数据。按照论坛上一些人说的,把上拉电阻用数字的,电源用无电压 范围的,也不行。 还有一个问题就是,Fpclk 的值问题,这里按照 I2C 的时钟频率 来算,应该默认时是 Fcclk=Fosc,郁闷,都不知道到底哪个是对的? 这个程序,proteus 仿真时,可以看到数据线在闪烁,但是 I2Cdebugger 没反应,在 keil 里仿真,发

26、现程序运行到 case0x08 后 直接跳到 break 跳出 while 循环,然后一直这样,也就是说一直在循 环发送起始条件。。。折腾了 N 久都不行,,, 9:SPI 通信主机模式 具体程序见附带的实例 SPI-Serial Peripheral interface,串行外围接口。SPI 通 信也是一种串行通信。跟 I2C 不同的是,它有两根数据线,可在同一 时刻一

27、根发送,一根接收,也就是说 SPI 是全双工通信。 一般用到 4 根线: (1):MOSI – 主设备数据输出,从设备数据输入 (2):MISO – 主设备数据输入,从设备数据输出 (3):SCLK – 时钟信号,由主设备产生 (4):CS – 片选,从设备使能信号,由主设备控制 发送/接收子程序,这个有点类似串口通信的子程序,把要发 送的数据放到数据寄存器里,然后检查发送/接收标志即可。 初始化,这里有两点是必须要设置的,一是 SPI 通信的时钟频 率,另一种是主从模式设置(默认主机模式)。 说到时钟

28、频率,大家都有可能注意到,无论在串口还是 I2C 还 是 SPI 通信时,都要设置一个通信速率, 而这个通信速率是通过 Fpclk 计算出来,也就是通过 VPB 频率计算出来的,通常叫做 VPB 时 钟分频,“VPB 时钟分频”,这几个字应该见得很多了。这里来说说 VPB 时钟分频的意思: 首先我们要知道,任何一个器件或模块,工作都必需要一个时 间基准的,也就是说要有一个时钟给它时间基准,让它在规定的时刻 执行任务。那么,SPI 工作时,也是需要时钟来指定它的通信速率/ 协议的,而这个时钟就与 VPB 时钟有关。 那么什么是 VP

29、B 时钟,VPB 时钟就是外部设备时钟。 看下面这个图: 刚开始学 ARM 的时候可能看不懂,现在就能看懂了。 可以看到,像串口 UART,I2C,SPI 等外部设备都并联到一条总 线上,这条总线就是 VPB 总线,外设需要的时钟即通过 VPB 分频器得 到的。 从这里可以看出,ARM 的核心是 VPB 上面的部分,下面是一些 扩展功能,也就是各个不同的公司作出的 ARM 都不同的了。 10:中断 具体程序见附带的实例 这里的中断有三个,FIQ 中断,向量中断,非向量中断。是为

30、 学习后面串口,I2C 等的中断方式做准备的。 这里说一下 FIQ 快速中断。不知道为什么,FIQ 中断总是不行,从周 立功的例子来看,发现多了一个 FIQ/IRQEnable()函数,字面看是 中断使能的意思,可能是没有加这一句的关系。不过后面的向量中断 和非向量中断不加这一句还是可以仿真起来,搞不懂。是 FIQ 不能仿 真呢?还是程序某个地方不对?也有可能跟启动代码有关?目前搞 不  明  白  。 写到这里,暂告一段落,后面的大体上差不多, 就是一些外设不同而已,其实在例子里我应该写得比 较清楚了,推荐大家要好好研究下周立功那本深入浅 出的书。 继续研究种

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服