EasyARM1138经验之谈.doc

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EasyARM1138经验之谈

内嵌USB仿真器的Cortex-M3开发板  EasyARM1138是专门针对广大电子信息专业在校大学生而设计的一款基于  ARM Cortex-M3先进内核的高性能、低价格开发板,用于教学、毕业设计、  电子竞赛,等等。也是广大单片机爱好者、开发工程师首选的Cortex-M3开  发板。  EasyARM1138的核心MCU是Luminary Micro公司的Stellaris(群星)  系列ARM之LM3S1138。该芯片采用的是国际上最优秀的MCU内核设计公司  ARM必威体育精装版推出的先进Cortex-M3处理器;国内最大、技术最强的晶圆制造公司台积电(TSMC)代工;世界上最专业的封装测试公司(OSE、i2a/IPAC)层层把关,确保产品的可靠性。Stellaris(群星)系列ARM芯片在电磁兼容性方面的优势明显。 今天拿到了周立功的EasyARM1138开发板,又要准备大干一场了!晒晒: ? 我准备分以下几个方面开始学习: 1.了解LM3s1138内部结构,包括存储器,ADC,GPIO,等等。其中我认为最重要的是对各个寄存器地址的掌握。因为个人认为写驱动程序就是对各种寄存器的读写,只要把各个寄存器的地址弄清楚了(个人愚见),那么很多问题也就迎刃而解了。 2.熟悉软件开发平台IAR。这一点我就不想多啰唆了,反正每个处理器都有一个自己的软件开发平台,所以我就烦感:又得花时间去熟悉。那么多家大公司能不能合伙一起开发一个软件平台呢,这样给用户带来好多的方便。 3.软件硬件结合开发。这就要好多东西了~!有的搞的,呵呵。。 下面结合实例程序谈谈对这个板子的理解。 这是一个简单的LED程序: 第一行是添加到系统的头文件,我们找到这个头文件: 在这个头文件里面,又包含了很多的头文件,还有一些宏定义,不要怕麻烦,在看看这些子头文件里面到底是什么:我们打开第一个头文件hw_types.h,字面意思应该是硬件类型的定义。打开看看就知道了: 果然如此,第一句就说这是Stellaris外设驱动程序库3223的一部分;第二句蓝色字体就是说定义了一个Boolean类型,它的值是true 表示1,false表示0。我们接着往下看: 同样,这里也无非就是些#define,咋一看有点复杂。不怕,我们看看蓝体字:意思是宏硬件访问,不管是直接访问还是通过bit-band区域访问。这里我对bit-band 就不了解了,没关系,现在就去了解它。查看lm3s1138的datasheet。 这里说的很清楚。具体是这样的: Stellaris器件内部的SRAM的地址是0x2000.0000,为了减少读-修改-写(RMW) 操作的时间,ARM在Cortex-M3处理器中引入了bit-banding技术。在bit-banding使能的处理器中, 存储器映射的特定区域(SRAM和外设空间)能够使用地址别名,在单个原子操作中访问各个位。 使用下面的公式来计算bit-band别名: bit-band别名 = bit-band基址 + (字节偏移量 * 32) + (位编号 * 4) 例如,如果要修改地址0x2000.1000的位3,则bit-band别名计算如下: 0x2200.0000 + (0x1000 * 32) + (3 * 4) = 0x2202.000C 通过计算得出的别名地址,对地址0x2202.000C执行读/写操作的指令仅允许直接访问地址0x2000.1000处字节的位3。其中0x2200.0000是bit-band基址的起始地址,0x1000是偏移地址,3是位编号。好,这里先告一段落,我们继续看前面的宏: #define HWREG(x)????? (*? (? (volatile?? unsigned?? long *?)? (x)? )???? 这一句后面的 (*((volatile unsigned long *)(x)))? 是什么意思呢?我也不知道了,那么百度一下吧。搜到这样的文章: #define A (* (volatile unsigned long *) 详解 2008/08/03 09:00 A.M. #define A??? (* (volatile unsigned long *)?? 0) ????? 对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语言完成实际对设备的控制,因为C语言并没有提供真正的“端口”的概念。如果是内存映射,那就方便的多了。 ??? 举个例子,比如像寄存器A(地址假定为0写入数据0x01,那么就可以这样设置了。 #define A (*(volatile unsigned long *)

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档