- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于ARM loader的一些心得
最近的项目里需要用KS8695这块MPU,它是ARM922T内核的,有cache,也有MMU,RAM和ROM需要外扩,最大都支持到64M,足以跑起一个完整功能的linux核.虽然这MPU主频最高只有166Mhz,相比三星的S3C2410等性能不是很强,但有内置的硬件WAN口和LAN口,构建网络路由器非常方便.
考虑到各种原因,最主要是实时性响应和速度响应的原因,决定不上linux操作系统,当作普通单片机以单一任务不断循环的方式实现,这就涉及到了loader的问题.由于专用于网络,普及率不大,这块MPU的网上资料不多,随开发板赠送的loader是uboot,uboot是引导linux内核的,功能多,但要在linux环境下编译和调试,比较麻烦.我习惯用的工具是ADS,因此决定用ADS的汇编实现一个简单功能的loader(以下提到的代码语法全部是针对ADS环境的,而且仅是KS8695这块芯片,对于Keil for ARM或GCC环境或其他ARM芯片需要做别的考虑,但可以参考下面的作法和思路).
玩ARM的朋友,少不免要接触loader,但因为loader涉及到很多跟硬件有关的很抽象的东西,看起来比较复杂和难理解。希望下面说的这些能帮助有兴趣的朋友更好理解。
下面由简单到复杂来说说这个loader。
先想想,这个loader该有哪些功能呢?很明显,最重要的是,它必须最后能调用C语言里的Main函数,因为我不想整个项目都用汇编写,毕竟我不是自虐狂.而很明显,如果你要调用函数,必须进行入栈,出栈这些保护现场的工作,否则程序就会乱套.那保护现场工作需要什么?当然就是需要RAM来保存现场.对于KS8695,它没有内置可随意使用的RAM(实际上,它有特殊的小容量的RAM,但那是给网卡这些做硬件数据缓冲,用户是不能随意调用的,顺便提一下,ARM芯片很多,不同的厂家有不同的硬件配置,譬如很多低端应用的ARM芯片其实有内置的SRAM,譬如菲利浦的LPC系列),因此,就得使用外扩的RAM了.开发板上用的是SDRAM,SDRAM的本身的特性决定,需要定时刷新的支持,KS8695有内置的SDRAM控制器,只要往某个专用的寄存器写入一些与硬件参数有关的数值,该SDRAM控制器就能自动产生各种读写SDRAM的时序信号来驱动SDRAM。然后用户程序只需用str和ldr指令就能读写SDRAM的内容.
OK,现在有点头绪了,loader至少要完成这两个功能:
1.初始化SDRAM控制器,让SDRAM可以读写(而且我想没有谁的程序会不打算使用RAM吧??)
2.建立堆栈区,设置好堆栈指针,把堆栈指针设到SDRAM里面,以便进出函数时的参数能保存到SDRAM里. 只要这两部做完,其实就可以调用C里的main函数,然后由main函数再调用各种功能的子函数,以后就爱咋滴就咋滴了.咋一看,似乎这两步做完,就天下太平了,真的就这么简单吗?未必,别忘了,几乎所有的CPU都带有中断触发机制.一个稍能完成点实用功能的项目,你想完全避开中断处理这一部分是完全不可能的,也不现实,你必须按你的需要来编写各种各样的中断服务程序,处理各种各样的中断触发(至于中断触发对CPU来说是必需的吗?中断有什么好处?中断时CPU的硬件会做什么动作?...这些就不想罗嗦,有兴趣的可以参考51系列的中断原理作为入门理解).编写中断服务程序,可以在C语言里实现,不要在loader里实现,loader里要实现的,是要建立中断向量表.中断向量表是一个有点专业的名词,请自行查入门资料.
这里说说为什么要建立中断向量表.在51单片机里,是不用自己建立中断向量表的,这是因为标准51核的中断,本身就是一个向量中断(自行查资料),自身硬件里就已经有内置的中断向量表,没必要自己去建立.就是说,当某个中断触发时,51核的硬件会自动把PC置成相应的固定的地址入口来执行相应的中断处理程序,不同的中断触发时,会有不同的地址入口,一一对应,俗称向量中断.但KS8695不是这样(很多arm芯片没中断向量表,但有些arm芯片同时支持向量中断和非向量中断两种模式,可以按需要设定),它没内置的中断向量表,当中断触发时,无论什么中断,入口地址只有一个,你必须在这个入口程序里读取某些中断寄存器的内容,来判断究竟是发生了哪个中断,然后通过查表,查自己建立的中断向量表,来调用相应的中断处理程序.
现在看来,loader复杂一点点了,归纳一下,现在变成有三个功能需要而且是必须要完成了:
1.初始化SDRAM控制器,让SDRAM可以读写(而且我想没有谁的程序会不打算使用RAM吧??)
2.建立堆栈区,设置好堆栈指针,把堆栈指针设到SDRAM里面,以便进出函数时的参数能保存到SDRAM里.
3.在内存里建立异常中断
您可能关注的文档
最近下载
- 中华民族共同体概论教案合集(第一讲-第十六讲)附《中华民族共同体概论》课程大纲.doc VIP
- “中华民族共同体概论”课程教学与建设关键问题探讨.docx VIP
- 诸侯纷争与变法运动【课件】.pptx VIP
- 中国高血压防治指南(2024年修订版)_中国高血压防治指南修订委员会__.pdf VIP
- “扬子石化杯”2024年第38届中国化学奥林匹克(江苏赛区)初赛化学.pdf VIP
- 民事诉讼法中案外第三人对执行的异议之诉.pdf VIP
- 车险承保方案.pdf VIP
- “扬子石化杯”2024年第38届中国化学奥林匹克(江苏赛区)初赛化学试卷含答案.pdf VIP
- 临海市城市生活垃圾焚烧发电厂扩建工程环境影响报告.pdf
- 2025内蒙古鄂尔多斯市公安机关招聘留置看护警务辅助人员115人笔试参考题库附答案解析.docx VIP
文档评论(0)