Assembly 裸金属BeagleBoard组件

Assembly 裸金属BeagleBoard组件,assembly,beagleboard,bare-metal,Assembly,Beagleboard,Bare Metal,我最近刚刚尝试进入嵌入式编程领域,正在寻找一些资源。我用高级语言做过不少编程,但一直对硬件的实际工作方式着迷。为了让自己最终了解硬件,我最近购买了BeagleBoard XM,目标是用汇编语言对其进行裸机编程 我在业余时间花了一周左右的时间阅读TRM,并在网上搜索示例代码。我发现了一些资源,它们提供了通过串行端口显示数据的好例子,但除此之外没有其他内容。我曾希望找到一些人利用中断和sdma的例子,但还没有找到。作为一个初学者项目,我的目标是编写一个非常简单的程序,从串行端口接收字符输入并将其返回

我最近刚刚尝试进入嵌入式编程领域,正在寻找一些资源。我用高级语言做过不少编程,但一直对硬件的实际工作方式着迷。为了让自己最终了解硬件,我最近购买了BeagleBoard XM,目标是用汇编语言对其进行裸机编程


我在业余时间花了一周左右的时间阅读TRM,并在网上搜索示例代码。我发现了一些资源,它们提供了通过串行端口显示数据的好例子,但除此之外没有其他内容。我曾希望找到一些人利用中断和sdma的例子,但还没有找到。作为一个初学者项目,我的目标是编写一个非常简单的程序,从串行端口接收字符输入并将其返回到屏幕。我想让它利用中断/sdma。通过阅读TRM,不清楚如何实现这一点。由于对这个主题完全陌生,要准确地知道我需要寻找什么才能理解文档,这是难以置信的困难。我想知道是否有专家能够提供任何利用BeagleBoard的一些硬件特性的asm代码示例。毕竟,任何数量的文档都无法替代一个好的具体代码示例

BeagleBoard使用Cortex-A8。这是一个相当复杂的芯片,仅仅通过阅读手册就可以运行它,特别是对于初学者来说。您可以尝试读取已经在其上运行的现有代码-U-Boot,可能还有Linux内核中的驱动程序。除了极低级别的启动代码之外,不要期望看到太多的程序集


但fvu建议的可能是一个更好的主意——使用一个简单的MCU板,如LPCXpressor或mbed,并使用它进行播放。Cortex-M3/M0虽然不平凡,但运行起来要简单得多,而且有很多简单的小样本可用于各种外围设备。

我不得不同意其他人的说法。虽然从理论上讲,你需要的一切都在那里,但小猎犬并不是第一次做这种事情的最佳平台。我有很多关于如何开发一些小型微控制器的例子,还有一些类似的网站和其他网站,还有更多的例子

我有一个beagleboard,纯金属uart输出代码,但听起来像你有那个(在yagbat中,因为没有更好的地方(不值得自己回购),我有一个beagleboard目录)

msp430 launchpad的价格低于5美元,处理器也不错。由德州仪器公司(与omap公司相同)制造,因此手册应该有类似的感觉

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

为了留在arm系列中,有一款mbed(大约50美元以上)(避免使用沙箱,操作简单),还有一款您可能会喜欢的好产品,因为它几乎不是一个微控制器,里面有st的stm32f4发现板,我在示例页面中有链接。它大约20美元,高达168MHz,有一个简化的浮点单元(对于微控制器来说很少见),独立的指令和数据缓存,与其他微控制器相比有很多ram/rom,等等。所有这些都以20美元的赠品价格出售

这些微控制器中有很多将是thumb或thumb+thumb2。cortex-m3和cortex-4为armv7-m,因此支撑拇指和完整拇指2。cortex-m0和-m1是基于armv6的,因此只支持一点thumb2,这还不够麻烦。我有一个thumb模拟器,你也可以用它玩thumb(不支持thumb2)。我认为beagleboard中的cortex-A基于armv7,因此它支持cortex-m3和-m4支持的thumb+thumb2。stm32f4是基于-m4的mbed有两种风格,一种是基于-m3的,另一种是基于m0的。很多基于cortex-m的微控制器都是基于-m3的,因为它最先问世,-m4和-m0只是获得了一些吸引力。您可以使用thumb或thumb2开始使用统一的指令集,该指令集在arm和thumb之间模糊(2),允许一个源组合到arm指令和thumb指令(当然有一些限制)。因此,您可以直接使用thumb/thumb2编写代码,并将这些知识直接带到cortex-A(使用一个bx指令从ARM切换到thumb),或者将thumb2代码或统一代码直接带到cortex-A并作为ARM进行组装


这里最大的事情并不是真正的组装学习,尽管关键是阅读手册,更多供应商的手册越多,您就越了解如何为这个更复杂的目标找到所需的信息。根据我的经验,我对omap手册的部分内容也很难理解。大多数手册都有错误,或者不完整,等等,你必须学习如何解决这些问题,这需要经验。使用omap,您可能需要深入了解该平台的linux或uboot源代码,以补充手册。由于beagle使用了引导加载程序,这是好的,因为有些东西是为您做的,不好的,因为您需要对硬件和软件进行反向工程,以确定在何处放置中断向量表,以便执行基于中断的解决方案。我强烈建议从非中断、轮询、基于开始,然后慢慢地将知识转换为中断。试图每次击球都打出本垒打是失败的。你的问题是双重的:了解裸机和操作系统编程以及beagleboard硬件。对于后者,我建议查看数据表旁边的其他人代码。仅读取数据非常耗时。从beagleboard的u-boot代码开始:

其他一些非BB-XM的裸金属项目,但我发现它们很有用:

  • (原件)