S3C2410IO端口
- 格式:pdf
- 大小:204.56 KB
- 文档页数:10
实验2 S3C2410GPIO控制实验一、实验目的1.熟悉ADS1.2 开发环境,正确使用仿真调试电缆进行编译、下载、调试。
2.了解S3C2410 的通用I/O 接口,3.掌握I/0 功能的复用并熟练的配置,4.对相应I/0接口进行编程实验,控制实验箱LED 灯点亮。
二、实验设备硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。
软件:PC 机操作系统REDHAT LINUX 9.0+超级终端(或X-shell)+ARM-LINUX 开发环境。
三、预备知识S3C2410 CPU 共有117个多功能复用输入输出口,分为8组端口:●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位。
往该地址中写入相应的数据,即可实现功能及数据配置。
GPACON (0x56000000) //Port A controlGPADAT (0x56000004) //Port A dataGPBCON (0x56000010) //Port B controlGPBDAT (0x56000014) //Port B dataGPBUP (0x56000018) //Pull-up control BGPCCON (0x56000020) //Port C controlGPCDAT (0x56000024) //Port C dataGPCUP (0x56000028) //Pull-up control CGPDCON (0x56000030) //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 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 现用C口举例说明。
ARM微处理器 S3C2410的简介1.1 ARM微处理器的介绍1)ARM微处理器的工作状态和工作模式从编程的角度看,ARM微处理器的工作状态有两种,可在两种状态之间切换:第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
2)ARM微处理器支持7种运行模式,分别为:用户模式(USR):ARM处理器正常程序执行的模式。
快速中断模式( FIQ ):用于高速数据传输或通道处理用于快速中断服务程序。
当处理器的快速中断请求引脚有效,且CPSR(6位)中F位为0时(开中断),会产生FIQ异常。
外部中断模式( IRQ ):用于通用的中断处理,当处理器的外部中断请求引脚有效,且CPSR(7位)中I位为0时(开中断),会产生IRQ异常。
系统的外设可通过该异常请求中服务。
特权模式或管理员模式(SVE):操作系统使用的保护。
执行软件中断SWI 指令和复位指令时,就进入管理模式,在对操作系统运行时工作在该模式下。
1.2 S3C2410微处理器1.2.1 概述S3C2410是韩国三星公司的一款基于ARM920T内核的16/32位RISC嵌入式微处理器,主要面向手持设备以及高性价比,低功耗的应用。
运行的频率可以达到203MHz。
ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。
其中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache 组成。
ARM920T有两个协处理器:CP14和CP15。
CP14用于调试控制,CP15用于存储系统控制以及测试控制。
ARM920T体系结构框图图2-1 ARM920T体系结构框图1.2.2 S3C2410微处理器的结构S3C2410内部结构原理内部原理框图如下:图2-2S3C2410内部结构原理ARM 微处理器中共定义了37个编程可见寄存器,每个寄存器的长度均为32位。
第九章I/O端口概述S3C2410有117个多功能的输入输出引脚,这些端口是:—端口A(GPA):23个输出口—端口B(GPB):11个输入输出口—端口C(GPC):16个输入输出口—端口D(GPD):16个输入输出口—端口E(GPE):16个输入输出口—端口F(GPF):8个输入输出口—端口G(GPG):16个输入输出口—端口H(GPH):11个输入输出口每个端口可以根据系统配置和设计需求通过软件配置成相应的功能。
在启动主程序之前,必须定义好每个引脚的功能。
如果某个引脚不用作复用功能,则可以将它配置成IO脚。
初始的引脚状态被无缝配置好的以避免产生问题。
表1端口配置见英文版Table9-1.S3C2410A Port Configuration端口控制描述端口控制寄存器(GPACON-BGHCON)在S3C2410中,大部分端口都是复用的,因此需要决定每个引脚使用哪个功能。
端口控制寄存器PnCON决定每个引脚的功能。
如果GPF0–GPF7and GPG0–GPG7用于掉电模式的唤醒信号,这些端口必须被配置成中断模式。
端口数据寄存器(GPADAT-GPHDAT)如果端口被配置成输出端口,可以向PnDAT中的相关位写入数据;如果端口被配置成输入端口,可以从PnDAT中的相关位读入数据。
端口上拉电阻寄存器(GPBUP-GPHUP)端口上拉电阻寄存器控制每个端口组的上拉电阻的使能和禁止。
当相关位为0,上拉电阻使能;当相关位为1,上拉电阻禁止;当端口上拉电阻寄存器使能时,不管引脚选择什么功能(输入、输出、数据、外部中断等),上拉电阻都工作。
外部中断控制寄存器(EXTINTN)24个外部中断可响应各种信号请求方式。
EXTINTn寄存器可以配置如下信号请求方式:低电平触发、高电平触发、上升沿触发、下降沿触发、双边沿触发。
这8个外部中断引脚具有数字滤波器。
(见EINTFLTn相关)只有16个外部中断引脚(EINT[15:0])被用于唤醒源。
/* s3c2410_map_io** register the standard cpu IO areas, and any passed in from the* machine specific initialisation.*/注册标准CPU的IO领域,并通过从任何特定的机器初始化。
struct cpu_table {unsigned long idcode;unsigned long idmask;void (*map_io)(struct map_desc *mach_desc, int size);void (*init_uarts)(struct s3c2410_uartcfg *cfg, int no);void (*init_clocks)(int xtal);int (*init)(void);const char *name;};s3c24xx_init_io()-→ iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));smdk2410_map_io()---→s3c24xx_init_io()MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch* to SMDK2410 *//* Maintainer: Jonas Dietsche */.phys_io = S3C2410_PA_UART,.io_pg_offst = (((u32)S3C24XX_V A_UART) >> 18) & 0xfffc,.boot_params = S3C2410_SDRAM_PA + 0x100,.map_io = smdk2410_map_io,.init_irq = s3c24xx_init_irq,.init_machine = smdk2410_init,.timer = &s3c24xx_timer,MACHINE_ENDvoid __init s3c2410_map_io(struct map_desc *mach_desc, int mach_size){/* register our io-tables */iotable_init(s3c2410_iodesc, ARRAY_SIZE(s3c2410_iodesc));iotable_init(mach_desc, mach_size);}Cpu.c (linux-2.6.22.6\arch\arm\plat-s3c24xx):.map_io = s3c2410_map_io,E:\华清远见资料\zhihua_file1《ARM Linux静态映射分析.pdf》研究这个就够了:Cpu.c (linux-2.6.22.6\arch\arm\plat-s3c24xx): IODESC_ENT(GPIO),/* minimal IO mapping */static struct map_desc s3c_iodesc[] __initdata = {IODESC_ENT(GPIO),IODESC_ENT(IRQ),IODESC_ENT(MEMCTRL),IODESC_ENT(UART)};linux/include/asm-arm/arch-s3c2410/map.h#define S3C2410_PA_GPIO (0x56000000)#define S3C24XX_PA_GPIO S3C2410_PA_GPIOstruct map_desc {unsigned long virtual;unsigned long pfn;unsigned long length;unsigned int type;};#def ine IODESC_ENT(x) {(unsignedlong)S3C24XX_V A_##x, __phys_to_pf n(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }#define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT)IODESC_ENT(GPIO)------- S3C24XX_V A_GPIO, __phys_to_pfn(S3C24XX_P A_GPIO),从这里可以看出来了,把物理地址(寄存器相关的代映射到V A)#define MACHINE_START(_type,_name) \static const struct machine_desc __mach_desc_##_type \__used \__attribute__((__section__(".init"))) = { \.nr = MACH_TYPE_##_type, \.name = _name,#define MACHINE_END \MACHINE_START(S3C2440, "SMDK2440").phys_io = S3C2410_PA_UART,.io_pg_offst = (((u32)S3C24XX_V A_UART) >> 18) & 0xfffc,.boot_params = S3C2410_SDRAM_PA + 0x100,.init_irq = s3c24xx_init_irq,.map_io = smdk2440_map_io,.init_machine = smdk2440_machine_init,.timer = &s3c24xx_timer,MACHINE_END#define MACHINE_START(S3C2440,SMDK2440)\static const struct machine_desc __mach_desc_S3C2440 \__used \__attribute__((__section__(".init"))) = { \.nr = MACH_TYPE_S3C2440, \.name = SMDK2440,#define MACHINE_END \ //MACHINE_ENC = };这个符号呀,作为结构体的结束部分。
第九章I/O端口
概述
S3C2410有117个多功能的输入输出引脚,这些端口是:
— 端口A(GPA):23个输出口
— 端口B(GPB):11个输入输出口
— 端口C(GPC):16个输入输出口
— 端口D(GPD):16个输入输出口
— 端口E(GPE):16个输入输出口
— 端口F(GPF):8个输入输出口
— 端口G(GPG):16个输入输出口
— 端口H(GPH):11个输入输出口
每个端口可以根据系统配置和设计需求通过软件配置成相应的功能。
在启动主程序之前,必须定义好每个引脚的功能。
如果某个引脚不用作复用功能,则可以将它配置成IO脚。
初始的引脚状态被无缝配置好的以避免产生问题。
表1 端口配置见英文版Table 9-1. S3C2410A Port Configuration
端口控制描述
端口控制寄存器(GPACON-BGHCON)
在S3C2410中,大部分端口都是复用的,因此需要决定每个引脚使用哪个功能。
端口控制寄存器PnCON决定每个引脚的功能。
如果GPF0 – GPF7 and GPG0 – GPG7用于掉电模式的唤醒信号,这些端口必须被配置成中断模式。
端口数据寄存器(GPADAT-GPHDAT)
如果端口被配置成输出端口,可以向PnDAT中的相关位写入数据;如果端口被配置成输入端口,可以从PnDAT中的相关位读入数据。
端口上拉电阻寄存器(GPBUP-GPHUP)
端口上拉电阻寄存器控制每个端口组的上拉电阻的使能和禁止。
当相关位为0,上拉电阻使能;当相关位为1,上拉电阻禁止;
当端口上拉电阻寄存器使能时,不管引脚选择什么功能(输入、输出、数据、外部中断等),上拉电阻都工作。
外部中断控制寄存器(EXTINTN)
24个外部中断可响应各种信号请求方式。
EXTINTn寄存器可以配置如下信号请求方式:低电平触发、高电平触发、上升沿触发、下降沿触发、双边沿触发。
这8个外部中断引脚具有数字滤波器。
(见EINTFLTn相关)
只有16个外部中断引脚(EINT [15:0])被用于唤醒源。
掉电模式和IO口
所有的GPIO寄存器的值在掉电模式下被保存。
这在时钟功率管理模块中的掉电模式下提到。
EINTMASK不能禁止从掉电模式唤醒,但是如果EINTMASK屏蔽了EINT[15:4]中的1位,系统可以被唤醒,但是SRCPND中的EINT4_7 bit and EINT8_23 bit不会在唤醒后被置1。
IO口控制寄存器
端口A控制寄存器(GPACON/GPADAT)
注意:ADDR[15:1]并没有端口寄存器,但是有对应的引脚,它们仅用作地址总线,而且A端口默认为ADDR功能,没有内部上拉电阻。
端口B控制寄存器(GPBCON, GPBDAT, and GPBUP)
端口C-H与B类似,具体参加英文版。
MISCELLANEOUS CONTROL REGISTER (MISCCR) USB相关端口由USB主机或者设备寄存器控制。
DCLK CONTROL REGISTERS (DCLKCON)
此寄存器定义DCLKn信号,作为外部资源的时钟。
如何设置DCLKn信号见下表。
只有当CLKOUT[1:0]设置为发生DCLKn信号时DCLKCON寄存器才会生效。
外部中断控制寄存器(EXTINTn)
24个外部中断可响应各种信号请求方式。
EXTINTn 寄存器可以配置如下信号请求方式:低电平触发、高电平触发、上升沿触发、下降沿触发、双边沿触发。
由于EINT[15:0]具有滤波功能,EXTINTn 引脚上的逻辑电平必须保持至少40ns ,才能正确识别中断。
注意:EINT16-23可以被设置为快速中断模式,通过EXTINT2的3、7、11……
位设置位设置,,
外部中断过滤寄存器(EINTFLTn)
(EINTFLTn)寄存器控制EINT[23:16]这8个外部中断的过滤器时间。
外部中断屏蔽寄存器(EINTMASK)
EINTMASK控制EINT[23:4]这20个外部中断的屏蔽与否。
注:复位后,这些中断默认都是被屏蔽掉的。
外部中断请求寄存器(EINTPENDn)
只有EINT[23:4]这20个外部中断受EINTPENDn寄存器控制,可以通过向寄存器的相应位写入“1”来清零这一位。
通用状态寄存器(GSTATUSn)。