嵌入式技术应用教程——基于S3C2410第四章.doc

上传人:hw****26 文档编号:4209310 上传时间:2019-10-04 格式:DOC 页数:16 大小:1.31MB
下载 相关 举报
嵌入式技术应用教程——基于S3C2410第四章.doc_第1页
第1页 / 共16页
嵌入式技术应用教程——基于S3C2410第四章.doc_第2页
第2页 / 共16页
嵌入式技术应用教程——基于S3C2410第四章.doc_第3页
第3页 / 共16页
嵌入式技术应用教程——基于S3C2410第四章.doc_第4页
第4页 / 共16页
嵌入式技术应用教程——基于S3C2410第四章.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、第四章 S3C2410A 的 I/O 口 从这一章开始,就进入了 S3C2410A 底层驱动程序开发的学习过程中了。在第一章已 经介绍了 ARM 系统开发的层级结构,本课程的内容符合层次结构中的第二层底层驱动开发, 但是这里不包含启动代码的编写和操作系统移植。一般来讲 ARM 开发系统如广州友善之臂 的 micro2440 开发板,英贝特公司的开发板,在加上达盛公司的实验系统等等,出厂时各 类底层的相关驱动程序和应用的操作系统移植都已经编写测试完毕,其中 ARM 的启动代码 是现成可以使用的,不需要重新编写。另外,出厂时的底层驱动代码都是可以直接使用的, 这些代码可以提供给使用者自学时参考,当

2、然如果觉得这些代码在结构上表达上都不尽如 人意,读者随时都可以自行修改。达盛公司的实验系统的底层驱动程序也是现成可以使用 的,但是鉴于教学需要,本课程会引导读者在理解底层硬件的基础上对这些程序进行修改 或者重写编写部分驱动程序,以便使读者能够熟练掌握 S3C2410A 底层的驱动开发。 4.1 S3C2410A 的 GPIO 1. S3C2410A CPU 有 117 个多功能复用的 I/O 口,共分为 8 组。 (1 ) 16bit I/O 端口为:Port C、Port D、Port E 和 Port G (2 ) 11bit I/O 端口为:Port B 和 Port H (3 ) 23

3、bit I/O 端口为:Port A (4 ) 8bit I/O 端口为:Port F (5 )在这里需要说明几个问题: 端口的 bit 数是什么意思? 例如,Port C 为 16bit I/O 端口,即 Port C 共有 16 位,从 Port C0到 Port C15都可以 应用。 多功能复用是什么意思? ARM7 和 ARM9 这些 CPU 的 I/O 口都可以配置成不同的功能,也就是说这些端口可以 作为普通的输入输出端口使用,也可以配置成 UART 使用,还可以配置成 I2C、SPI 和 SSI 等 总线信号使用。 (6 )如何操作这些 I/O 端口? 用配置和访问 S3C2410

4、A 的功能寄存器的方法可以操作 S3C2410A 的硬件资源。 2. I/O 端口的控制寄存器 下面这些宏定义摘自头文件 2410ADDR.H,这些通过这些寄存器就可以控制 S3C2410A 的 I/O 端口了。还有一些功能寄存器在这里没有列出,读者可自行在 2410ADDR.H 这个文 件中查找学习。 / I/O PORT #define rGPACON (*(volatile unsigned *)0x56000000) /Port A control #define rGPADAT (*(volatile unsigned *)0x56000004) /Port A data #defi

5、ne rGPBCON (*(volatile unsigned *)0x56000010) /Port B control #define rGPBDAT (*(volatile unsigned *)0x56000014) /Port B data #define rGPBUP (*(volatile unsigned *)0x56000018) /Pull-up control B #define rGPCCON (*(volatile unsigned *)0x56000020) /Port C control #define rGPCDAT (*(volatile unsigned *

6、)0x56000024) /Port C data #define rGPCUP (*(volatile unsigned *)0x56000028) /Pull-up control C #define rGPDCON (*(volatile unsigned *)0x56000030) /Port D control #define rGPDDAT (*(volatile unsigned *)0x56000034) /Port D data #define rGPDUP (*(volatile unsigned *)0x56000038) /Pull-up control D #defi

7、ne rGPECON (*(volatile unsigned *)0x56000040) /Port E control #define rGPEDAT (*(volatile unsigned *)0x56000044) /Port E data #define rGPEUP (*(volatile unsigned *)0x56000048) /Pull-up control E #define rGPFCON (*(volatile unsigned *)0x56000050) /Port F control #define rGPFDAT (*(volatile unsigned *

8、)0x56000054) /Port F data #define rGPFUP (*(volatile unsigned *)0x56000058) /Pull-up control F #define rGPGCON (*(volatile unsigned *)0x56000060) /Port G control #define rGPGDAT (*(volatile unsigned *)0x56000064) /Port G data #define rGPGUP (*(volatile unsigned *)0x56000068) /Pull-up control G #defi

9、ne rGPHCON (*(volatile unsigned *)0x56000070) /Port H control #define rGPHDAT (*(volatile unsigned *)0x56000074) /Port H data #define rGPHUP (*(volatile unsigned *)0x56000078) /Pull-up control H 在这里,我们以 Port G 为例来说明如何对 I/O 端口进行控制。和 Port G 有关的寄存器 有: #define rGPGCON (*(volatile unsigned *)0x56000060)

10、/Port G control #define rGPGDAT (*(volatile unsigned *)0x56000064) /Port G data #define rGPGUP (*(volatile unsigned *)0x56000068) /Pull-up control G rGPGCON、rGPGDAT 和 rGPGUP 为寄存器的名称,0x56000060 、0x56000064 和 0x56000068 为寄存器在 S3C2410A 中的硬件地址。即用名称来代替地址来操作。与寄存器 描述相关的表格如下: 表 4.1 说明: 地址 0x5600006C 为保留地址,其

11、功能没有定义。 寄存器 GPGCON 为可读可写的寄存器(R/W ) ,其描述为配置 port G 的引脚,其复位 值为 0x0(Reset Value) 。 寄存器 GPGDAT 为可读可写的寄存器( R/W) ,其描述为 port G 的数据寄存器,复位 值没有定义。 寄存器 GPGUP 为可读可写的寄存器( R/W) ,其描述为 port G 的上拉功能禁止寄存器。 表 4.2 表在下页 说明: 从表 4. 2 可以看出寄存器 GPGCON 是 32 位的。 GPGCON 的每 2bit 对应 16bit 端口 G 中的一个。比如 GPGCON31:30对应于 GPG15。 端口 GPG

12、10GPG8 是可以允许 5V 电平输入的。 以 GPG15 为例说明利用 GPGCON 是如何进行端口配置的。GPGCON31:30 这 2bit 用来 对 port G 中的 GPG15 进行配置: 表 4. 3 GPGCON31:30配置值 GPG15 的功能 00 Input(输入) 01 Output(输出) 10 外部中断 23 11 触摸屏 Y 轴加操作开关控制信号 表 4. 4 说明: GPGDAT 寄存器是 16bit 寄存器。 具体功能为: 当端口被配置为输入端口时,来自外部数据源的数据将会被读入到相对应的管脚中去, 即 GPGDAT 是作为缓冲区用的。 当端口被配置为输出

13、端口时,写入这个寄存器中的数据将会被发送到相应的端口上去。 当端口被配置为功能管脚时,在端口上会读到未定义的值。 表 4. 5 说明: GPGUP15:0对应着 GPG15:0,如果 GPGUP15:0的某一位为“0” ,则相对应的 GPG 管脚的上拉功能就被使能了;如果 GPGUP15:0的某一位为“1” ,则相对应的 GPG 管脚的 上拉功能就被禁止了。在 S3C2410A 上电的时候,GPGUP15:11默认数值为“1 ”,也即 GPG15:11的上拉功能是禁止的。 这里说明一下什么是上拉功能,附带再说明一下相对应的下拉功能。一般,上拉和下 拉功能只在数字电路中有效。 上拉如图 4.1

14、所示: 数 字 P i n 芯 片 电 阻 V C C 图 4.1 上拉就是在数字芯片的管脚上通过一个电阻连接到电源上,一般可用的电阻值为 3.3K、4.7K、5.1K 或者 10K,电阻值不易过大。具体作用是在引脚没有输出的情况下给该引 脚一个确定的电平(高电平) ,另外还可以增加该管脚对外的驱动电流。如果引脚是输入作 用的,那么在该引脚开路时,上拉操作也会给该引脚一个确定的高电平。 下拉如图 4. 2 所示: 数 字 P i n 芯 片 电 阻 图 4. 2 下拉就是在数字芯片的管脚上通过一个电阻连接到地上,一般可用的电阻值为 3.3K、4.7K、5.1K 或者 10K,电阻值不易过大。具

15、体作用是在引脚没有输出的情况下给该引 脚一个确定的电平(低电平) 。如果引脚是输入作用的,那么在该引脚开路时,下拉操作也 会给该引脚一个确定的低电平。 4.2 S3C2410A GPIO 寄存器 这里只列举各个端口的控制寄存器和其他相关寄存器,各个端口的数据寄存器和上拉 寄存器基本功能都是相同的,这里就不再重复列出了。 1. PortA 端口 A 只有控制寄存器和数据寄存器而没有上拉寄存器。数据寄存器位宽为 23bit。 控制寄存器的具体内容定义详见 S3C2410A 的数据手册,这里不再详细说明。 2. PortB 端口 B 的控制寄存器只有 22bit 有效。其数据寄存器和上拉寄存器只有

16、11bit 有效。 3. PortC 端口 C 的数据寄存器和上拉寄存器只有 16bit 有效。 4. PortD 端口 D 的数据寄存器和上拉寄存器只有 16bit 有效。 5. PortE 端口 D 的数据寄存器和上拉寄存器只有 16bit 有效。 6. PortF 端口 F 的数据寄存器和上拉寄存器只有 8bit 有效。 7. PortG 端口 G 的数据寄存器和上拉寄存器只有 16bit 有效。 8. PortH 端口 H 的数据寄存器和上拉寄存器只有 11bit 有效。 9. MISCCR 寄存器 这个寄存器主要和 USB Host 和 USB Device 有关。 10. DCLK

17、CON 寄存器 这个寄存器定了 DCLKn 信号,这个信号可以作为外部设备的时钟源使用。这个寄存器 只在 CLKOUT1:0被置位而发送 DCLKn 信号时才能正常工作。 11. 通用状态寄存器(GSTATUSn) 鉴于篇幅,与外部中断相关的寄存器就不在本文中列出了,有兴趣的读者可以详细参 阅 S3C2410A 的数据手册。 4.3 I/O 编程实验 1. 实验要求 使目标板上的两个 LED(LED1 和 LED2)交替闪亮。LED1 和 LED2 是共阳极连接。LED1 接到了 S3C2410A 的 G 端口的第 8 位上,LED2 接到了 S3C2410A 的 G 端口的第 9 位上。 2

18、. 实验设备 (1) EL-ARM-830 教学实验箱,PentiumII 以上的 PC 机,仿真调试电缆。 (2) PC 操作系统 WIN98 或 WIN2000 或 WINXP,ADS1.2 集成开发环境,仿真调试驱动程 序。 3. 实验分析 已知两个 LED 分别接到了 G 端口的第 8 和第 9 位上,那么这两位需要设置成输出端口。 LED 是共阳极连接,那么高电平熄灭,低电平点亮。 开机后,两个 LED 就交替闪亮,那么改程序必须是死循环程序。 要实现交替闪亮就需要有亮灭的延时功能。 4. 实验原理 S3C2410A CPU 共有 117 个多功能复用输入输出口,分为 8 组端口:

19、4 个 16 位的 I/O 端口 (PORT C、PORT D、PORT E、PORT G) 2 个 11 位的 I/O 端口 (PORT B 和 PORT H) 1 个 8 位的 I/O 端口(PORT F) 1 个 23 位的 I/O 端口(PORT A) 这些通用的 GPI/O 接口,是可配置的, PORTA 除功能口外,它们仅用作输出使用, 剩下的 PORTB、PORTC、PORTD、PORTE、PORTF、PORTG 均可作为输入输出口使用。 配置这些端口,是通过一些寄存器来实现的,这些寄存器均有各自的地址,位长 32 位。 往该地址中写入相应的数据,即可实现功能及数据配置。 GPA

20、CON (0x56000000) /Port A control GPADAT (0x56000004) /Port A data GPBCON (0x56000010) /Port B control GPBDAT (0x56000014) /Port B data GPBUP (0x56000018) /Pull-up control B GPCCON (0x56000020) /Port C control GPCDAT (0x56000024) /Port C data GPCUP (0x56000028) /Pull-up control C GPDCON (0x56000030)

21、/Port D control GPDDAT (0x56000034) /Port D data GPDUP (0x56000038) /Pull-up control D GPECON (0x56000040) /Port E control GPEDAT (0x56000044) /Port E data GPEUP (0x56000048) /Pull-up control E GPFCON (0x56000050) /Port F control GPFDAT (0x56000054) /Port F data GPFUP (0x56000058) /Pull-up control F

22、 GPGCON (0x56000060) /Port G control GPGDAT (0x56000064) /Port G data GPGUP (0x56000068) /Pull-up control G GPHCON (0x56000070) /Port H control GPHDAT (0x56000074) /Port H data GPHUP (0x56000078) /Pull-up control H 现用 G 口、H 口举例说明。对于 G 口如表 4.6、表 4.7、表 4.8, 表 4.6 表 4.7 (见下页) 表 4.8 也就是说,在地址 0x0x5600006

23、0 中,给 32 位的每一位赋值,那么,在 CPU 的管脚上 就定义了管脚的功能值。当 G 口某管脚配置成输出端口,则在 PDATG 对应的地址中的对应 位上,写入 1,则该管脚输出为高电平,写入 0,则该管脚输出为低电平。若配置为功能管 脚,则该管脚变成具体的功能脚。 5. 实验步骤 (1)本实验使用实验教学系统的 CPU 板,在进行本实验时,LCD 电源开关、音频的左右 声道开关、AD 通道选择开关、触摸屏中断选择开关等均应处在关闭状态。 (2)在 PC 机并口和实验箱的 CPU 板上的 JTAG 接口之间,连接 WIGGER 调试电缆。 (3)检查连接是否可靠,可靠后,接入电源线,系统上

24、电,打开 H_JTAG 软件检测 CPU。 (4)打开 ADS1.2 开发环境,从里面打开实验程序HARDWAREADS实验五IO.mcp 项 目文件,进行编译。 (5)编译通过后,进入 ADS1.2 调试界面,加载实验程序HARDWAREADS实验二 IO_DataDebug 中的映象文件程序映像 IO.axf。 (6)在 ADS 调试环境下全速运行映象文件。观察 CPU 板左下角的 LED1、LED2 灯轮流的 的闪烁!这是对 GPIO 口操作的结果。 6. 具体实现过程 (1 )将 G 端口的第 8 和第 9 位设置成输出端口。程序段如下: rGPGCON = rGPGCON 上面的操作

25、就将 GPGCON17:16和 GPGCON19:18设置为了“01 ”,也即 GPG8 和 GPG9 为输出管脚。 上述程序段也可写为: rGPGCON = rGPGCON 执行这一句后,两个 LED 全部熄灭。上面的程序也可以写为: rGPGDAT = rGPGDAT (3 )延时程序 这里采用循环延时的方法来处理。程序段如下: for(i=0;i4000000;i+); 程序运行到这一句后,i 将一直计数到 4000000 才会推出 for 循环。 (4 )死循环 在 C 语言里,死循环可以表示为:for(;)或者 while(1)。 (5 )主程序代码 #include “INCcon

26、fig.h“ void Main(void) int i; Target_Init(); rGPGCON = rGPGCON rGPGDAT = rGPGDAT for(i=0;i4000000;i+); for(i=0;i4000000;i+); for(;) rGPGDAT = rGPGDAT for(i=0;i4000000;i+); /延时 for(i=0;i4000000;i+); /延时 rGPGDAT = rGPGDAT for(i=0;i4000000;i+); /延时 for(i=0;i4000000;i+); /延时 说明: 在主程序的开头,包含了一个头文件 config.h,#include “INCconfig.h“这种写法的意 思是包含当前目录下子目录 INC 中的 config.h 文件。包含这个文件的目的是包含一些 S3C2410A 执行程序时的必要的头文件,这里就有头文件 2410ADDR.h。在今后的程序开发 过程中,基本上都要包含 config.h 这个文件。另外函数 Target_Init()的功能是对目标板进行 初始化操作,在以后的程序开发过程中都要在主程序的开头调用这个函数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。