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

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10816132.html】到电脑端继续下载(重复下载不扣费)。

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(arm菜鸟成长.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

arm菜鸟成长.docx

1、arm菜鸟成长arm菜鸟成长 WORD文档使用说明:arm菜鸟成长 来源于PDFWORD 本WOED文件是采用在线转换功能下载而来,因此在排版和显示效果方面可能不能满足您的应用需求。如果需要查看原版WOED文件,请访问这里arm菜鸟成长 文件原版地址:arm菜鸟成长|PDF转换成WROD_PDF阅读器下载从开始搞ARM到现在将近半年多了,第一个项目搞得有些眉目了,终于感觉像是入门了,半年来,有开始的新鲜,中间的苦闷,到最后的欣喜。其中过程可谓曲折离奇,遇到了很到前人没有遇到过的疑难杂症,当然很多时候是因为我的粗心酿成的。曾经也有过放弃的念头,那个焦虑,像得了狂躁症一样。后来下定决心即使绩效没了

2、,工作丢了也要搞完它。其实在这个过程中,看到跟我一样的很多新人在论坛上发帖求助,可是很多时候回者寥寥无几,可能问题太幼稚,也可能问题描述的不清楚。我发过很多帖子,甚至直接骚扰了网上很多的牛人,他们都给了我很大的帮助,但是我当时的想法太简单了,总想着某个牛人能够解决掉这个问题,现在想想,即使是牛人,没有看到具体的问题也很难给你一个解决方法,遇到困难不能把希望完全寄托在别人身上,要挖掘自身潜力,一遍遍仔细看手册,反复试验,不断思考,问题肯定能解决掉,只是时间问题而已。再次要感谢公司对我的容忍,一个这么简单的东东允许我搞了这么久。 其实,在前面的过程中,一直有写点什么的冲动,但是当时困难重重、前途未

3、卜,也没了这个心情。现在可以坐下来仔细总结下前面的问题,有现在都没搞明白的,特向大家请教了;有解决掉的,那就说说经验教训,给其他人一些参考。首先声明本人脑瓜笨,逻辑思维差,点一个灯点了一个多月,最后还发现没点对。所以提到的问题可能很幼稚,说话也好像前言不搭后语,有兴趣看的那就受累了哈。 先说说我们的这个块板子,裸奔的at91sam9260,外扩Norflash、SRAM,实现程序既可以跑在Norflash中,也可以拷贝到Sram中跑。任务就一个:控制一个片外AD,读出数据然后通过串口发出。很简单的吧,这我都搞了几个月呢,你说菜不菜吧。以下我将回想整个的ARM学习过程,涉及到的知识都是很简单的基

4、础知识,老鸟就不用看了,希望可以帮助到像我一样的菜鸟。 前三个月主要是熟悉的过程,当时完全没有想到后面程序的调试会如此的困难,想当然地认为又不上系统,无非是32位的单片机嘛。板子做回来一大段时间内,元器件都没有凑齐,当时傻了呀,应该先熟悉熟悉编程环境,每天就为几个破元件折腾,什么都没干。 后来板子焊接好了,才发现只会用H-JTAG识别芯片,其他的什么都不懂。然后开始看例程,只玩过51的我,初次接触32位的单片机,当时看到AT91C_BASE_PMC->PMC_PCER= (0x1代表个啥?二是为啥写成0x1”字样。而内部的SRAM0的起始地址还是在0x20 0000处,而片外Norflas

5、h起始地址是0x1000 0000处。然后我们利用h-flasher 或J-Flash将生成的Bin文件下载到Norflash内,即起始地址为0x1000 0000处。然后将BMS接低,此时Norflash被映射在 0X0地址处,即此时Norflash的起始地址为0X0,(你可能要问那ROM的地址现在在哪儿呢?我也不知道,因为Norflash的地址范围是 0X00X1F FFFF,而ROM的起始地址默认是0X10 0000,恰好在Norflash的范围内,所以此时ROM哪儿去了?)此时上电,因为 0X0地址处即Norflash起始地址有八个合法的中断向量,程序会从Norflash启动,接着执行

6、启动代码,初始化SMC、PMC,然后Copy中断向量表到内部SRAM0,然后,将MATRIX_MRCR寄存器相应位置1,实现REMAP,此时,Norflash的起始地址又变回 0X1000 0000,而内部的SRAM0的起始地址又变回0x0了,系统如果发生异常,将从地址0X0处即内部SRAM0取中断向量,而内部SRAM 的访问速度显然高于外部的Norflash,所以提高程序性能。这是我对at91sam9260 REMAP的理解,欢迎讨论指教。2、Bootloader: 说实话,这个概念到现在也不是很明白。可能对于裸奔的系统来说,Bootloader这个概念本身就比较模糊吧,望文生义的话,Boo

7、t,靴子,Load,穿上靴子走路才比较舒服(这个比喻好像比较烂喔),对于ARM来说,初始化好,并将向量表以及数据什么的拷贝到RAM,运行起来才顺畅。就是传说中的引导装载。所以我理解的Bootloader就是完成ARM的初始化、建立中断向量表并映射到RAM中、将数据段和必要的代码段拷贝到RAM、完成 REMAP、跳转到Main,这一系列过程。说白了就是启动代码干的活。这个理解我自己都感觉很牵强,还请大家多多指点。3、Flashloader: 这个概念更是模糊,总感觉跟Bootloader差不多,只不过Flashloader可以实现对Flash的读写、擦除等操作,并与调试软件配合实现将程序下载到F

8、lash中。IAR中有一个选项:Use Flashloader,不过好像一般都是针对片内Flash的,我们的板子是外扩的 Norflash,好像就没有用到这个东东。接下来准备说说基于KEIL MDK下的启动代码的理解。 当Norflash被映射在0X0地址处时,此时Norflash的起始地址为0X0,那ROM的地址现在在哪儿呢?因为Norflash的地址范围是 0X00X1F FFFF,而ROM的起始地址默认是0X10 0000,恰好在Norflash的范围内,所以此时ROM哪儿去了?该死的启动代码提起启动代码,我就嗷嗷郁闷,IAR下的程序都死在了这里,Keil中出现的问题很多都是通过对启动代

9、码的修修补补才解决的,一句话:成也启动代码,败也启动代码。启动代码应该是刚接触ARM的新手必须面对而又很头痛的问题吧,刚开始我也很纳闷,为什么搞个这玩意,学51的时候咋就没见过呢。而且还都是汇编写的,俺的汇编还停留在“MOV”阶段,其他的不是很懂,没办法,谁让汇编的效率高呢。提到启动代码还不得不老生常谈一下其中要完成的任务:1、建立异常中断向量表,ARM从0X0开始给每个异常中断分配4个字节的空间,一般存放一个跳转指令(B)或PC的装载指令(LDR PC,X_Vector),当发生异常时,ARM从此处取得相应异常中断处理程序入口地址,再跳转执行;2、ARM都是高速处理器,而在高速下启动很可能会

10、不稳定,所以在启动代码从慢时钟开始运行,在适当的位置,从切换到高速运行;3、ARM一般带有片外存储器,Flash、SDRAM等,这些存储器都需要初始化才能使用,这都是在启动代码中完成,但是Norflash的初始化要在时钟初始化之前;4、ARM有不同的模式,每种模式都需要相应的堆栈;5、Copy异常中断向量表到RAM,并实现REMAP,具体请参照上一节;6、Copy可执行映像的数据段到RAM,并将ZI区清零。这个一般都是由编译器完成的,IAR下是?main来实现,Keil中由_main实现。现在启动代码可以看懂一些,不过自己写启动代码还是很遥远的事情。如果开始对启动代码很抵触,可以考虑使用Kei

11、l,因为Keil由启动代码的图形化配置,直接点击鼠标操作就可以实现自己的启动代码。下面结合我们at91sam9260的板子,说说Keil中的启动代码。打开Keil生成的,点击左下角的“Configuration Wizard”进入图形化配置向导,根据你的需要选择参数,全部选择完毕后,再点击Text Editor,将会看到生成的启动代码。我靠,不是吧,将近2000行,开始你可能会很泄气,但仔细一看,前面不都是些宏定义嘛,跟图形化配置向导一一对应的,只有从1200多行的这一句开始的才是真正的启动代码部分。;- CODE - PRESERVE8 开始是8个PC装载指令,注意第六个向量,即地址0X14

12、处,存放可执行映像的大小,|Image$ER_ROM1$RO$Length|+|Image$RW_RAM1$RW$Length|。接下来是SMC、PMC的初始化,我们的板子外扩了Norflash,如果在未初始化Norflash前,切换到快时钟,系统起不来,所以应该先初始化 SMC,再初始化PMC,而Keil自带的启动代码中默认PMC在前,怎么办,可以将前面PMC的宏定义部分和初始化部分剪切,然后分别粘贴在SMC宏定义部分和初始化部分的后面,然后再看“Configuration Wizard”中,PMC自动放到了SMC的后面了。接下来是关闭看门狗(默认是打开的),拷贝异常中断表到RAM中,然后R

13、EMAP,建立缓存,建立各个模式的堆栈指针。最后进入_main进行数据段和代码段的拷贝以及初始化语言库函数,然后跳转到main执行。Keil中有详细的注释,理解起来应该不是很难,具体的语句无需明白,知道个大致意思就行了。无非是将某个外设的基地址装载(LDR)到一个寄存器R0,将要向这个外设的某个寄存器赋的值装载到另一个寄存器R1,然后加载(STR)。一般的模式就是这样:LDR R0,=Periphral_BASE ;某外设的基地址LDR R1,=0XFFFF0000 ;向寄存器要赋的值STR R1,R0,#Periphral_Register_OFS ;向外设Peripheral基地址偏移OF

14、S的寄存器Register赋值0xFFFF0000Keil的启动代码部分有两个注意的地方:1、启动代码中有很多IF语句,如:IF :DEF:RAM_INTVEC。这就可以通过在Options/Asm对话框中的Define中填入 RAM_INTVEC就可以实现中断向量从Flash到RAM的拷贝。同理,还有IF :DEF:REMAP等等;2、带有Keil特色的MICROLIB,通过在Options/Target中选择“Used MICROLIB”,比不使用微库相比生成的代码较小。不过除此之外,应该还有其他的关系,因为我们的程序如果选择不使用微库的话,就执行不成功。对于微库只有这些很片面的理解,还请

15、老手指教。总而言之,Keil中的启动代码还是比较好理解的,而且借助图形化配置向导,可以更快的上手,以实现自己的启动代码。下面要说说Keil下,怎样实现程序在片外Norflash运行、片外SRAM调试、片外SRAM运行。ARM菜鸟成长记-之三2009年03月28日 星期六 14:19提起启动代码,我就嗷嗷郁闷,IAR下的程序都死在了这里,Keil中出现的问题很多都是通过对启动代码的修修补补才解决的,一句话:成也启动代码,败也启动代码。启动代码应该是刚接触ARM的新手必须面对而又很头痛的问题吧,刚开始我也很纳闷,为什么搞个这玩意,学51的时候咋就没见过呢。而且还都是汇编写的,俺的汇编还停留在“MO

16、V”阶段,其他的不是很懂,没办法,谁让汇编的效率高呢。提到启动代码还不得不老生常谈一下其中要完成的任务:1、建立异常中断向量表,ARM从0X0开始给每个异常中断分配4个字节的空间,一般存放一个跳转指令(B)或PC的装载指令(LDR PC,X_Vector),当发生异常时,ARM从此处取得相应异常中断处理程序入口地址,再跳转执行;2、ARM都是高速处理器,而在高速下启动很可能会不稳定,所以在启动代码从慢时钟开始运行,在适当的位置,从切换到高速运行;3、ARM一般带有片外存储器,Flash、SDRAM等,这些存储器都需要初始化才能使用,这都是在启动代码中完成,但是Norflash的初始化要在时钟初

17、始化之前;4、ARM有不同的模式,每种模式都需要相应的堆栈;5、Copy异常中断向量表到RAM,并实现REMAP,具体请参照上一节;6、Copy可执行映像的数据段到RAM,并将ZI区清零。这个一般都是由编译器完成的,IAR下是?main来实现,Keil中由_main实现。现在启动代码可以看懂一些,不过自己写启动代码还是很遥远的事情。如果开始对启动代码很抵触,可以考虑使用Keil,因为Keil由启动代码的图形化配置,直接点击鼠标操作就可以实现自己的启动代码。下面结合我们at91sam9260的板子,说说Keil中的启动代码。打开Keil生成的,点击左下角的“Configuration Wizar

18、d”进入图形化配置向导,根据你的需要选择参数,全部选择完毕后,再点击Text Editor,将会看到生成的启动代码。我靠,不是吧,将近2000行,开始你可能会很泄气,但仔细一看,前面不都是些宏定义嘛,跟图形化配置向导一一对应的,只有从1200多行的这一句开始的才是真正的启动代码部分。;- CODE - PRESERVE8 开始是8个PC装载指令,注意第六个向量,即地址0X14处,存放可执行映像的大小,|Image$ER_ROM1$RO$Length|+|Image$RW_RAM1$RW$Length|。接下来是SMC、PMC的初始化,我们的板子外扩了Norflash,如果在未初始化Norfla

19、sh前,切换到快时钟,系统起不来,所以应该先初始化SMC,再初始化PMC,而Keil自带的启动代码中默认PMC在前,怎么办,可以将前面PMC的宏定义部分和初始化部分剪切,然后分别粘贴在SMC宏定义部分和初始化部分的后面,然后再看“Configuration Wizard”中,PMC自动放到了SMC的后面了。接下来是关闭看门狗(默认是打开的),拷贝异常中断表到RAM中,然后REMAP,建立缓存,建立各个模式的堆栈指针。最后进入_main进行数据段和代码段的拷贝以及初始化语言库函数,然后跳转到main执行。Keil中有详细的注释,理解起来应该不是很难,具体的语句无需明白,知道个大致意思就行了。无非

20、是将某个外设的基地址装载(LDR)到一个寄存器R0,将要向这个外设的某个寄存器赋的值装载到另一个寄存器R1,然后加载(STR)。一般的模式就是这样:LDR R0,=Periphral_BASE ;某外设的基地址LDR R1,=0XFFFF0000 ;向寄存器要赋的值STR R1,R0,#Periphral_Register_OFS ;向外设Peripheral基地址偏移OFS的寄存器Register赋值0xFFFF0000Keil的启动代码部分有两个注意的地方:1、启动代码中有很多IF语句,如:IF :DEF:RAM_INTVEC。这就可以通过在Options/Asm对话框中的Define中填

21、入RAM_INTVEC就可以实现中断向量从Flash到RAM的拷贝。同理,还有IF :DEF:REMAP等等;2、带有Keil特色的MICROLIB,通过在Options/Target中选择“Used MICROLIB”,比不使用微库相比生成的代码较小。不过除此之外,应该还有其他的关系,因为我们的程序如果选择不使用微库的话,就执行不成功。对于微库只有这些很片面的理解,还请老手指教。总而言之,Keil中的启动代码还是比较好理解的,而且借助图形化配置向导,可以更快的上手,以实现自己的启动代码。下面要说说Keil下,怎样实现程序在片外Norflash运行、片外SRAM调试、片外SRAM运行。 尊重他人劳动,转载请注明来自 PDF转换成WROD_PDF阅读器下载:本文【arm菜鸟成长】网址:

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2