ARM IO程序设计基础.docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM IO程序设计基础.doc

实验三 ARM IO程序设计基础 09电信一班 姓名:叶晓伟 学号:20094081007 实验目的 1、了解ARM C语言程序的特点 2、了解ARM C语言外部IO口地址的定义与使用方法 3、掌握ARM 简单IO程序设计 实验仪器设备及软件 ARM实验箱,计算机,ADS程序开发软件 实验原理 1、开发ARM系统,使用C语言编程是大势所趋 在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量的巨大的,并且不易移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码移植十分方便,程序的重复使用率高,程序架构清晰易懂,管理较为容易等等。因此,C语言在ARM系统开发中具有重要的地位。 2、ARM C语言的基本规则 在ARM的程序开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般是用汇编语言来编写的,比如ARM的启动代码,ARM操作系统的移植代码等,除此之外,绝大多数可以使用C语言来完成。 ARM的开发环境是一个嵌入式集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编程序以文件的形式加入项目中,通过ATPCS的规定与C程序相互调用与访问。 ATPCS规定,请参阅ARM相关文档资料 满足ATPCS规定的汇编程序应满足下面3个条件: 在子程序编写中,必须遵守相应的ATPCS规则(函数的参数引用与返回) 堆栈的使用要遵守相应的ATPCS规则 在汇编编译器中使用 –atpcs选项 汇编程序调用C程序 (1)汇编程序的设置要遵守ATPCS规则,保证程序调用时参数正确传递 (2)在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数 (3)在调用C程序时,要正确设置入口参数,然后使用BL调用 C程序调用汇编程序 (1)汇编程序的设置要遵守ATPCS规则,保证程序调用时参数正确传递 (2)在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此程序 (3)在C程序中使用extern关键字声明外部函数(声明要调用的汇编子程序)。 在C语言环境内开发应用程序,一般要一个汇编的启运程序,从汇编的启动程序,跳到C语言下的主程序,然后执行C程序,在C环境下读写硬件寄存器,一般是通过宏调用进行,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里定义了所有关于2410的硬件寄存器的宏,对宏的读写就能操作2410的硬件。 其它请参阅《嵌入式C语言程序设计》 3、实验箱IO端口定义与内存地址定义 在C语言中定义寄存器和固定地址内存语句较为复杂,下面简要说明定义语句。 #define rBWSCON??? (*(volatile unsigned *)0 //定义地址为0存器 #define rOUT ??? (*( unsigned *)0 //定义地址为0存 0常数,前面加(volatile unsigned *)表示强置转换为地址,易失的无符号整型数地址。写入时是无符号整型数据,读出时也是无符号整型数据。即固定指针。关键字volatile 确保本条指令不会因C 编译器的优化而被省略,且要求每次直接读值。内存地址定义时(或数据不会被其它程序改变时,可以不加volatile)。 前面加 * ,? *(volatile unsigned *)0示为变量,即指向这个地址的变量。 使用方法与变量完全相同 rBWSCON = 0x123; rOUT = 0x345; 实验内容 1、用ARM C语言编写程序,控制GPIO的G口的两个LED灯,使其交替点亮。并在LCD上同步显示LED的状态。 实验电路如图所示。 通过控制GPG8,GPG9的高低电平就可以控制LED的亮暗。 rGPGDAT = rGPGDAT 0xcff | 0x200; //0ch=1100b,D2亮,D1暗 rGPGDAT = rGPGDAT 0xcff | 0x100; //0ch=1100b,D2暗,D1亮 实验程序如下: void ledflash(void) { int i; rGPGDAT = rGPGDAT 0xcff | 0x200; //请补充LCD显示相关程序 for(i=0;i++); //延时 rGPGDAT = rGPGDA

文档评论(0)

cai + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档