- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 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++); //延时
rGPGD
您可能关注的文档
- 8《电力工程基础》模拟试卷八及参考答案(江新琴)8《电力工程基础》模拟试卷八及参考答案(江新琴).doc
- 8煤集中运输巷揭8煤层专项防突设计8煤集中运输巷揭8煤层专项防突设计.doc
- =《消防管理员》(三级/高级)竞赛方案=《消防管理员》(三级/高级)竞赛方案.doc
- ABN:平台公司融资工具集合的新丁---贺明田ABN:平台公司融资工具集合的新丁---贺明田.doc
- Abmwhui英语六级翻译集训(免费下载)Abmwhui英语六级翻译集训(免费下载).doc
- AB组团基坑边坡支护施工方案AB组团基坑边坡支护施工方案.doc
- Adeeluq浙江省教师招聘考试说明(幼儿园)《教育基础知识》Adeeluq浙江省教师招聘考试说明(幼儿园)《教育基础知识》.doc
- adobe photoshop教程 ps教程 平面设计教程PS制作网页中的清新横幅adobe photoshop教程 ps教程 平面设计教程PS制作网页中的清新横幅.doc
- aix系统--配置NTP时钟源aix系统--配置NTP时钟源.doc
- AIX小型机测试题2AIX小型机测试题2.doc
文档评论(0)