我最近刚刚尝试进入嵌入式编程,正在寻找一些资源。我用高级语言做了很多编程,但一直对硬件的实际工作方式着迷。为了让自己最终了解硬件,我最近购买了一台BeagleBoard XM,目的是通过组装对其进行裸机编程。
我花了一周左右的时间在业余时间阅读TRM,并在网上搜索示例代码。我发现了一些资源,它们提供了通过串行端口显示数据的好例子,但除此之外没有什么。我曾希望能找到一些使用中断和sdma的例子,但还没有找到。作为一个入门项目,我的目标是编写一个非常简单的程序,该程序将从串行端口输入一个字符,并将其回显到屏幕上。我想让它使用中断/sdma。通读TRM,不清楚如何实现这一点。作为一个对这个主题完全陌生的人,我很难确切地知道我需要寻找什么才能理解文档。我想知道是否有专家能够提供任何利用BeagleBoard的一些硬件功能的示例asm代码。毕竟,再多的文档也无法替代一个好的具体代码示例。
BeagleBoard使用Cortex-A8。这是一个相当复杂的芯片,只需阅读手册就可以运行它,尤其是对于初学者来说。您可以尝试读取已经在其上运行的现有代码——U-Boot,也许还有Linux内核中的驱动程序。除了极低级别的启动代码外,不要期望看到太多程序集。
但一个更好的想法可能是fvu建议的-获得一个简单的MCU板,如LPCXpressor或mbed,并用它玩。Cortex-M3/M0虽然不是微不足道的,但运行起来要简单得多,各种外设都有很多简单的小样本。
我不得不同意其他人的说法。虽然从理论上讲,你需要的一切都在那里,但比格犬并不是第一次做这种事情的最佳平台。我有很多关于如何开发一些小型微控制器的例子http://github.com/dwelch67还有一些网站http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/以及其他有更多例子的人。
我有一个beagleboard,裸金属uart out代码,但听起来你有(在yagbat,因为没有更好的地方(不值得自己回购),我有一份beagleboard目录)。
msp430启动板不到5美元,处理器也不错。由得克萨斯仪器制造(与制造omap的人相同),因此手册应该有类似的感觉。
当然有arduinos,但你想绕过沙箱,这并不难,看看我的例子。
要留在arm家族中,有mbed(大约50美元以上)(避免沙盒,很容易做到),还有一个你可能喜欢的好的,因为它几乎不是一个微控制器,里面有所有的东西,那就是st的stm32f4发现板,我的示例页面中有链接。它大约20美元,最高可达168MHz,有一个减少的浮点单元(对于微控制器来说很少见),独立的指令和数据缓存,与其他微控制器相比有很多ram/rom,等等。所有这些都是20美元的免费价格。
很多这样的微控制器将是拇指或拇指+拇指2。皮质-m3和4是手臂v7-m,所以支撑拇指加上整个拇指2。cortex-m0和-m1是基于armv6的,所以只支持一点thumb2,不足以解决问题。我有一个拇指模拟器,你也可以用拇指玩(没有拇指2支持)。我认为beagleboard中的cortex-A是基于armv7的,因此它支持与cortex-m3和-m4相同的拇指+拇指2。stm32f4基于-m4,mbed有两种风格——一种是-m3,另一种是基于-m0。许多基于cortex-m的微控制器都是基于-m3的,因为它最初推出时,-m4和-m0只是获得了一些吸引力。你可以用拇指或拇指2开始使用统一的指令集,这是手臂和拇指之间的模糊(2),允许一个源组合成手臂指令和拇指指令(当然有一些限制)。因此,你可以只写thumb/tumb2,并将这些知识直接带到cortex-A(使用一条bx指令将模式从ARM切换到thumb),也可以将thumb2代码或统一代码直接带到cortex-A,并组装为ARM。
这里最重要的不是学习组装,尽管关键是阅读手册,来自更多供应商的手册越多,你就越了解如何找到这个更复杂目标所需的信息。根据我的经验,我也很难理解omap手册的部分内容。大多数手册都有错误,或者不完整等,你必须学会克服这些错误,这只需要经验。使用omap,您可能需要挖掘该平台的linux或uboot源代码,以补充手册。由于beagle使用了引导程序,这很好,因为有些事情是为你做的,而不好,因为你需要对硬件和软件进行逆向工程,以确定将中断向量表放在哪里,这样你就可以执行基于中断的解决方案。我强烈建议从非中断、轮询开始,然后慢慢地将知识转换为中断。每次击球都试图击出一支全垒打是失败的。一次击出一垒安打。
您的问题有两个方面:了解裸机和操作系统编程以及了解beagleboard硬件。对于后者,我建议在数据表旁边查看其他人的代码。只读取数据热非常耗时。从beagleboard的u-boot代码开始:
- https://github.com/beagleboard
其他一些不是BB-XM但我发现有用的裸金属项目:
- https://github.com/mrd/puppy(原始比格犬)
- https://github.com/wayling/xboot-clone(无Cortex-A8)
第二个问题是理解ARM上的低级编程。我推荐这些书,但请注意,这些书是为较旧的体系结构而写的。尽管如此,它们仍然对您非常有用:
- http://www.hitex.com/index.php?id=download-内部人士指南(免费)
- http://www.amazon.com/ARM-System-Developers-Guide-Architecture/dp/1558608745/(ARM圣经)
后者甚至有一章是关于编写自己的小型操作系统的。