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