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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章S3C2410A的I/O口

从这一章开始,就进入了S3C2410A底层驱动程序开发的学习过程中了。在第一章已经介绍了ARM系统开发的层级结构,本课程的内容符合层次结构中的第二层底层驱动开发,但是这里不包含启动代码的编写和操作系统移植。一般来讲ARM开发系统如广州友善之臂的micro2440开发板,英贝特公司的开发板,在加上达盛公司的实验系统等等,出厂时各类底层的相关驱动程序和应用的操作系统移植都已经编写测试完毕,其中ARM的启动代码是现成可以使用的,不需要重新编写。另外,出厂时的底层驱动代码都是可以直接使用的,这些代码可以提供给使用者自学时参考,当然如果觉得这些代码在结构上表达上都不尽如人意,读者随时都可以自行修改。达盛公司的实验系统的底层驱动程序也是现成可以使用的,但是鉴于教学需要,本课程会引导读者在理解底层硬件的基础上对这些程序进行修改或者重写编写部分驱动程序,以便使读者能够熟练掌握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)23bit I/O端口为:Port A

(4)8bit I/O端口为:Port F

(5)在这里需要说明几个问题:

①端口的bit数是什么意思?

例如,Port C为16bit I/O端口,即Port C共有16位,从Port C[0]到Port C[15]都可以应用。

②多功能复用是什么意思?

ARM7和ARM9这些CPU的I/O口都可以配置成不同的功能,也就是说这些端口可以作为普通的输入输出端口使用,也可以配置成UART使用,还可以配置成I2C、SPI和SSI等总线信号使用。

(6)如何操作这些I/O端口?

用配置和访问S3C2410A的功能寄存器的方法可以操作S3C2410A的硬件资源。

2.I/O端口的控制寄存器

下面这些宏定义摘自头文件2410ADDR.H,这些通过这些寄存器就可以控制S3C2410A 的I/O端口了。还有一些功能寄存器在这里没有列出,读者可自行在2410ADDR.H这个文件中查找学习。

// I/O PORT

#define rGPACON (*(volatile unsigned *)0x) //Port A control

#define rGPADAT (*(volatile unsigned *)0x) //Port A data

#define rGPBCON (*(volatile unsigned *)0x) //Port B control

#define rGPBDAT (*(volatile unsigned *)0x) //Port B data

#define rGPBUP (*(volatile unsigned *)0x) //Pull-up control B

#define rGPCCON (*(volatile unsigned *)0x) //Port C control

#define rGPCDAT (*(volatile unsigned *)0x) //Port C data

#define rGPCUP (*(volatile unsigned *)0x) //Pull-up control C

#define rGPDCON (*(volatile unsigned *)0x) //Port D control

#define rGPDDAT (*(volatile unsigned *)0x) //Port D data

#define rGPDUP (*(volatile unsigned *)0x) //Pull-up control D

#define rGPECON (*(volatile unsigned *)0x) //Port E control

#define rGPEDAT (*(volatile unsigned *)0x) //Port E data

#define rGPEUP (*(volatile unsigned *)0x) //Pull-up control E

#define rGPFCON (*(volatile unsigned *)0x) //Port F control

#define rGPFDAT (*(volatile unsigned *)0x) //Port F data

#define rGPFUP (*(volatile unsigned *)0x) //Pull-up control F

#define rGPGCON (*(volatile unsigned *)0x) //Port G control

#define rGPGDAT (*(volatile unsigned *)0x) //Port G data

#define rGPGUP (*(volatile unsigned *)0x) //Pull-up control G

#define rGPHCON (*(volatile unsigned *)0x) //Port H control

#define rGPHDAT (*(volatile unsigned *)0x) //Port H data

#define rGPHUP (*(volatile unsigned *)0x) //Pull-up control H

在这里,我们以Port G为例来说明如何对I/O端口进行控制。和Port G有关的寄存器有:#define rGPGCON (*(volatile unsigned *)0x) //Port G control

#define rGPGDAT (*(volatile unsigned *)0x) //Port G data

#define rGPGUP (*(volatile unsigned *)0x) //Pull-up control G

rGPGCON、rGPGDAT和rGPGUP为寄存器的名称,0x、0x和0x为寄存器在S3C2410A中的硬件地址。即用名称来代替地址来操作。与寄存器描述相关的表格如下:

表4.1

说明:

①地址0x5600006C为保留地址,其功能没有定义。

②寄存器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中的一个。比如GPGCON[31:30]对应于GPG15。

相关文档
最新文档