我最近刚刚尝试进入嵌入式编程,并正在寻找一些资源。我用更高级的语言做了相当多的编程,但一直对硬件的实际工作方式着迷。作为一个强迫自己最终学习硬件的功能,我最近购买了一台BeagleBoard XM,目的是用汇编对它进行裸机编程。
我花了一周左右的时间在业余时间通读TRM,并在网上搜索示例代码。我找到了一些资源,它们为通过串口显示数据提供了很好的示例,但仅此而已。我曾希望找到一些使用中断和sdma的人的例子,但还没有找到。作为一个入门项目,我的目标是编写一个非常简单的程序,它将从串口输入一个字符,并将其回显到屏幕上。我想让它使用中断/sdma。通读TRM,并不清楚如何实现这一点。作为这个主题的新手,很难确切地知道我需要寻找什么才能理解文档。我想知道是否有专家能够提供任何使用BeagleBoard的一些硬件特性的示例代码。毕竟,再多的文档也无法替代一个很好的具体代码示例。
发布于 2012-01-13 22:28:36
BeagleBoard使用Cortex-A8。这是一个相当复杂的芯片,仅仅通过阅读手册就能让它运行起来并不是一件容易的事情,对于初学者来说尤其如此。您可以尝试读取已在其上运行的现有代码- U-Boot,也许还可以读取来自Linux内核的驱动程序。除了非常低级的启动代码之外,不要期望看到太多的汇编。
但也许fvu建议的是一个更好的想法--买一个简单的MCU板,比如LPCXpressor或mbed,然后用它玩。Cortex-M3/M0虽然不是微不足道的,但运行起来要简单得多,并且有大量简单、小的示例可用于各种外围设备。
发布于 2012-02-25 22:19:56
我不得不同意其他人所说的话。虽然,从理论上讲,您需要的一切都在那里,但beagle并不是第一次做这样的事情的最佳平台。我有很多关于如何创建一些小型微控制器的例子,http://github.com/dwelch67,还有像http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/这样的网站,还有更多的例子。
我有一个beagleboard,裸机uart输出代码,但听起来你有(在yagbat,由于缺乏更好的地方(不值得自己的repo),我有一个beagleboard目录)。
msp430 launchpad售价不到5美元,处理器也不错。由德州仪器制造(同样是制造omap的人),所以手册应该有类似的感觉。
当然有arduinos,但您想绕过沙箱,这并不难,请参阅我的示例。
在arm家族中有mbed (在$50+周围),(避免沙盒,很容易做)和一个你可能会喜欢的好东西,因为它只是一个微控制器,里面有来自st的stm32f4发现板,我在我的示例页面中有链接。它大约20美元,高达168 etc,有一个精简的浮点单元(对于微控制器来说很少见),分离的指令和数据缓存,与其他微控制器相比有大量的ram/rom,等等。所有的赠品价格都是20美元。
许多这样的微控制器将是thumb或thumb+thumb2。皮质-m3和4是armv7-m,因此支持拇指加上完整的thumb2。cortex M0和-m1是基于armv6的,所以只支持很少的thumb2,不足以造成麻烦。我有一个拇指模拟器,你可以用它来玩拇指(不支持thumb2 )。我认为beagleboard中的cortex-A是基于armv7的,因此它支持与cortex-m3和-m4相同的thumb+thumb2。stm32f4是基于-m4的,mbed有两种风格,一种是-m3,另一种是基于-m0的新版本。许多基于cortex-m的微控制器都是基于-m3的,因为它最先问世的时候,-m4和-m0才刚刚获得一些吸引力。您可以使用thumb或thumb2 start来使用统一的指令集,这是arm和thumb之间的一种模糊(2)允许一个源汇编成arm指令和thumb指令(当然有一些限制)。因此,您可以直接将知识写入thumb/thumb2并将知识直接带到cortex-A (使用一个bx指令将模式从arm切换到thumb),或者将您的thumb2代码或统一代码直接带到cortex-A并组装为ARM。
这里最重要的事情并不是学习汇编,尽管关键是阅读手册,来自更多供应商的手册越多,你就越能理解如何为这个更复杂的目标找到所需的信息。根据我的经验,我也很难理解omap手册的某些部分。大多数手册都有错误,或者是不完整的,等等,你必须学会如何解决这些问题,这只需要经验。使用omap时,您可能需要深入研究该平台的linux或uboot源代码,以补充手册。因为beagle使用引导加载程序,所以它是好的,因为有些东西是为你做的,坏的是因为你需要对硬件和软件进行反向工程,以确定将中断向量表放在哪里,以便你可以执行基于中断的解决方案。我强烈建议从无中断、基于轮询的模式开始,然后慢慢地将知识转移到中断模式。每次击球都要打出全垒打的尝试将会失败。一次击出一垒安打。
发布于 2013-02-05 15:48:40
您的问题是双重的:了解裸机和操作系统编程,并了解beagleboard硬件。对于后者,我建议在查看数据表的同时查看其他人的代码。只读取数据量是非常耗时的。从beagleboard的u-boot代码开始:
其他一些不是BB-XM的裸机项目,但我发现它们很有用:
您的第二个问题是理解ARM上的低级编程。我推荐这些书,但请注意,这些书是为较旧的体系结构编写的。尽管如此,它们仍然对您非常有用:
《ARM圣经》(the ARM
后者甚至有一章是关于编写你自己的小型操作系统的。
https://stackoverflow.com/questions/8851619
复制相似问题