装配裸金属BeagleBoard

时间:2012-01-13 13:53:29

标签: assembly beagleboard bare-metal

我最近刚尝试进入嵌入式编程,并且正在寻找一些资源。我已经在更高级别的语言中完成了相当多的编程,但总是对硬件的实际工作方式着迷。作为强迫函数让我自己最终了解硬件,我最近购买了BeagleBoard XM,其目标是使用装配对裸机进行编程。

我花了一个星期左右在业余时间阅读TRM,并在网上搜索示例代码。我找到了一些资源,这些资源提供了通过串口显示数据的良好示例,但除此之外没什么。我曾希望找到一些人们使用中断和sdma的例子,但还没有找到。我作为入门项目的目标是编写一个非常简单的程序,该程序将从串行端口输入字符并将其回显到屏幕。我想使它使用中断/ sdma。通过TRM阅读并不清楚如何实现这一目标。对于这个主题来说是全新的,要知道我甚至需要寻找什么来理解文档是非常困难的。我想知道是否有任何专家可以提供任何样本asm代码,它使用了BeagleBoard的一些硬件功能。毕竟,没有多少文档可以替代一个好的具体代码示例。

3 个答案:

答案 0 :(得分:1)

BeagleBoard使用Cortex-A8。这是一个相当复杂的芯片,只需阅读手册就可以让它运行起来并不是一件容易的事,特别是初学者。您可以尝试读取已在其上运行的现有代码 - U-Boot,以及Linux内核中的驱动程序。除了非常低级别的启动代码之外,不要期望看到更多的程序集。

但可能更好的想法是fvu建议的 - 获得一个简单的MCU板,如LPCXpressor或mbed和playh。 Cortex-M3 / M0虽然不是一件容易的事,但运行起来要简单得多,而且各种外围设备都有很多简单的小样本。

答案 1 :(得分:1)

我必须同意其他人的意见。虽然从理论上讲,你需要的一切都在那里,但是比格犬并不是第一次做这样的事情的最佳平台。我有很多关于如何开发一些小型微控制器的例子http://github.com/dwelch67,还有像http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/这样的网站以及其他更多的例子。

我有一个beagleboard,baremetal uart out代码,但听起来像你有(在yagbat,因为缺少一个更好的地方(不值得自己的回购)我有一个beagleboard目录。)

msp430启动板的价格低于5美元,处理器也不错。由德州仪器(制作omap的人)制作,因此手册应该有类似的感觉。

当然有arduinos,但你想绕过沙箱,这并不难,请看我的例子。

留在手臂家里有mbed(大约50美元以上),(避开沙盒,容易做)和一个你可能喜欢的好的,因为它几乎没有微控制器,里面有它的所有东西是st的stm32f4发现板,我的示例页面中有链接。它大约是20美元,高达168MHz,浮点数减少(微控制器很少见)独立的指令和数据缓存,与其他微控制器相比有很多ram / rom等等。所有价格都是20美元。

很多这些微控制器都是拇指或拇指+拇指2。皮质m3和4是armv7-m所以支持拇指加上完整的拇指2。 cortex-m0和-m1是基于armv6的,因此只支持一点拇指2,不足以打扰。我有一个拇指模拟器,你可以用拇指玩(没有拇指2支持)。我认为beagleboard中的cortex-A是基于armv7的,因此它支持与cortex-m3和-m4支持相同的拇指+拇指2。 stm32f4是基于-m4的mbed有两种口味,一种是-m3,另一种是基于-m0。很多基于cortex-m的微控制器都是基于-m3的,因为它首先出现-m4和-m0正在获得一些牵引力。你可以用拇指或拇指2开始使用统一的指令集,这是一个模糊的手臂和拇指之间(2)允许一个源组装到手臂指令和拇指指令(当然有一些限制)。所以你可以用拇指/拇指2书写并直接将这些知识带到皮质-A(用一条bx指令将模式从ARM切换到拇指)或将你的thumb2代码或统一代码直接带到cortex-A并汇编为臂。

这里最重要的不是学习装配,虽然关键是阅读手册,来自更多供应商的手册越多,你就越能理解如何找到这个更复杂的目标所需的信息。根据我的经验,我也很难使用omap手册的部分内容。大多数手册都有错误,或者是不完整的等等,你必须学会​​工作/破解,这只需要经验。使用omap,您可能需要挖掘该平台的linux或uboot源以补充手册。由于beagle使用引导加载程序,因为有些东西是为你完成的,所以很糟糕,因为你需要对硬件和软件进行反向工程,以找出放置中断向量表的位置,以便你可以执行基于中断的解决方案。我强烈建议从非中断,轮询开始,然后慢慢过渡知识到中断。每次击球时尝试击中本垒打都会失败。一次打一个基地。

答案 2 :(得分:0)

您的问题有两个方面:了解裸机和OS编程并了解beagleboard硬件。对于后者,我建议在数据表旁边查看其他人的代码。仅读取数据就非常耗时。从beagleboard的u-boot代码开始:

其他一些不是BB-XM的裸机项目,但我发现它很有用:

您的第二个问题是了解ARM上的低级编程。我推荐这些书,但请注意,这些是为旧架构编写的。不过,它们对您仍然非常有用:

后者甚至还有关于编写自己的小型操作系统的章节。