讲稿通用输入输出口_第1页
讲稿通用输入输出口_第2页
讲稿通用输入输出口_第3页
讲稿通用输入输出口_第4页
讲稿通用输入输出口_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1S3C2410A的通用的通用I/O简介简介 q 在S3C2410A中,共有117个可以作为通用输入输出的引脚。总共分为8组,也就是8个端口。分别是:A组(23位的输出端口)B组(11位的输入输出端口)C组(16位的输入输出端口)D组(16位的输入输出端口)E组(16位的输入输出端口)F组(8位的输入输出端口)G组(16位的输入输出端口)H组(11位的输入输出端口)2这些引脚在硬件中的位置可以参考有关资料。由于不同封装形式对应引脚位置有差别,这里就不详细介绍了。所有的这些引脚都是复用引脚,也就是每个引脚既可以作为通用引脚,也可以作为专用的,用于特定功能的引脚。而且有的引脚既可以作为输入,也可以

2、作为输出,如何将这些引脚配置成通用输入输出引脚,和将这些引脚配置特定的输入输出方式,需要通过程序进行设置。下面就介绍与此有关的寄存器。3端口相关寄存器的概述 PORT CONFIGURATION REGISTER (GPACON-GPHCON)端口配置寄存器决定了每个引脚的功能。PORT DATA REGISTER (GPADAT-GPHDAT)如果端口被配置为输出,那么可以通过写入写这些寄存器的值来控制相应的输出。如果端口被配置为输入,那么可以通过读这些寄存器来得到相应的引脚的值。PORT PULL-UP REGISTER (GPBUP-GPHUP)端口上拉寄存器决定引脚是否允许上拉。4A组

3、端口寄存器 寄存器名寄存器地址R/W描述复位值GPACON0 x56000000R/W端口A配置寄存器0 x7fffffGPADAT0 x56000004 R/W端口数据寄存器未定义保留0 x56000008保留0 x5600000c567B组端口寄存器 寄存器名寄存器地址R/W描述复位值GPBCON0 x56000010R/W端口B配置寄存器0GPBDAT0 x56000014 R/W端口B数据寄存器未定义GPBUP0 x56000018 R/W端口B引脚上拉许可寄存器0保留0 x5600001c8910 C组端口寄存器 寄存器名寄存器地址R/W描述复位值GPCCON0 x56000020R

4、/W端口C配置寄存器0GPCDAT0 x56000024 R/W端口C数据寄存器未定义GPCUP0 x56000028 R/W端口C引脚上拉许可寄存器0保留0 x5600002c111213D组端口寄存器 寄存器名寄存器地址R/W描述复位值GPDCON0 x56000030R/W端口D配置寄存器0GPDDAT0 x56000034 R/W端口D数据寄存器未定义GPDUP0 x56000038 R/W端口D引脚上拉许可寄存器0保留0 x5600003c141516E组端口寄存器寄存器名寄存器地址R/W描述GPECON0 x56000040R/W端口E配置寄存器GPEDAT0 x56000044R

5、/W端口E数据寄存器GPEUP0 x56000048R/W端口E引脚上拉许可寄存器保留0 x5600004c171819F组端口寄存器寄存器名寄存器地址R/W描述GPFCON0 x56000050R/W端口F配置寄存器GPFDAT0 x56000054R/W端口F数据寄存器GPFUP0 x56000058R/W端口F引脚上拉许可寄存器保留0 x5600005c202122G组端口寄存器寄存器名寄存器地址R/W描述GPGCON0 x56000060R/W端口G配置寄存器GPGDAT0 x56000064R/W端口G数据寄存器GPGUP0 x56000068R/W端口G引脚上拉许可寄存器保留0 x

6、5600006c232425H组端口寄存器寄存器名寄存器地址R/W描述GPHCON0 x56000070R/W端口H配置寄存器GPHDAT0 x56000074R/W端口H数据寄存器GPHUP0 x56000078R/W端口H引脚上拉许可寄存器保留0 x5600007c262728通用端口的应用举例 在实际应用中,我们可以通过通用并行端口向设备输出一个数据,也可以通过通用并行端口从设备得到一个数据,数据的位数可以是任意的,只要不超过端口的位数就可以了。在利用通用并行端口进行数据输入输出之前,必须对端口进行正确的配置。也就是需要使用前面介绍过的寄存器,按需求进行编程。在掌握了端口的编程原理后,编

7、程应该是非常简单的。下面,就用一个跑马灯程序,说明端口的编程原理。29这个程序的作用是:在机箱中有四个发光二极管(可以作为小灯管使用),让它们从左到右轮流发光。管1连到了F口的第4引脚,管2连到了F口的第5引脚,管3连到了F口的第6引脚,管4连到了F口的第7引脚。当对应引脚为低电平时,发光二极管发光,高电平时就熄灭。编程原理就先让管1亮,隔一段时间后管2亮,再一段时间后管3亮,再一段时间后管4亮。一段时间后管1熄灭,再一段时间后管2熄灭,再一段时间后管3熄灭,再一段时间后管4熄灭。不断重复这个过程。30 时间间隔采用循环语句完成。下面分析代码。启动汇编代码:ResetEntry movsp,#

8、0 x31000000 ;定义堆栈指针 IMPORT Main ;声明主函数MainBL Main ;调用主函数这段代码非常简单,首先定义栈顶的初始指针。然后调用C语言的主函数Main。因为Main时其它文件定义的,故此需要IMPORT 伪指令。延时代码31EXPORT delaydelaysub r0,r0,#1 ;r0=r0-1 cmp r0,#0 x0 ;将r0的值与0相比较bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句mov pc,lr ;返回这段代码是将r0的内容不断减1,直到它变成0。显然,r0数据越大,延时越长。由于这个函数要被外文件

9、使用,故此要使用EXPORT。端口寄存器的表示。#define rGPFCON (*(volatile unsigned *)0 x56000050)这里定义了一个宏rGPFCON,该宏的表示了一个整型变量,该变量的类型是无符号整型,而该变量的地址是0 x56000050,也就是GPFCON寄存器的地址。32有了这样的宏定义后,可以象操作变量一样的对端口寄存器进行读写操作了。 volatile是一个C语言中的关键字,这里表示了表示对应变量所对应单元是端口,而非内存地址,有可能被意外改变。#defineLED1_ON() (rGPFDAT &= 0 x10)这个宏的作用是将F口的第4脚变为低电平,从而将第1管点亮。为什么不直接用rGPFDAT = 0 x10呢?因为这样做将其它管脚指也改变了。而rGPFDAT &= 0 x10只是把第1引脚指改变,其它不变。#defineLED1_OFF() (rGPFDAT |= 0 x10)这个宏的作用是将F口的第4脚变为高电平,从而将第1管熄灭。原理同上。rGPFCON=0 x5500 将F口4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论