首页 理论教育ARM嵌入式系统原理与应用:一个LED灯的例子

ARM嵌入式系统原理与应用:一个LED灯的例子

【摘要】:4个LED灯分别用4个GPIO口来进行单独控制,通过I/O控制发光二极管的亮和灭。图4.7GPIO与LED灯的连接通过电路原理图可以得到的物理连接如表4.2所示。表4.2物理连接对应如表4.3所示,GPH3相关的寄存器有:GPH3CON,GPH3DAT,GPH3PUD以及GPH3DRV。表4.3GPH3寄存器族表4.4GPH3CON端口配置寄存器表4.5GPH3DAT端口数据寄存器表4.6GPH3PUD端口上拉寄存器表4.7GPH3DRV端口驱动能力寄存器本例通过使用mmap方法实现不经过内核驱动直接在用户区映射的方式来控制寄存器,从而最终控制LED灯的功能。

IO口的操作是硬件控制的基础,本例子是一个最简单的IO口操作。4个LED灯分别用4个GPIO口来进行单独控制,通过I/O控制发光二极管的亮和灭。电路原理图如图4.7所示。

图4.7 GPIO与LED灯的连接

通过电路原理图可以得到的物理连接如表4.2所示。

表4.2 物理连接对应

如表4.3所示,GPH3相关的寄存器有:GPH3CON,GPH3DAT,GPH3PUD以及GPH3DRV。通过对不同寄存器的操作,可以配置GPIO的功能。

表4.3 GPH3寄存器族

表4.4 GPH3CON端口配置寄存器

表4.5 GPH3DAT端口数据寄存器

表4.6 GPH3PUD端口上拉寄存器

表4.7 GPH3DRV端口驱动能力寄存器

本例通过使用mmap方法实现不经过内核驱动直接在用户区映射的方式来控制寄存器,从而最终控制LED灯的功能。由于在应用程序中不能直接操作物理地址,因此通过mmap将一个文件或者其他对象映射进物理地址,应用程序就可以直接操作地址,从而达到控制寄存器的目的。在向端口写函数port_write中我们可以看到mmap方法。

port_write中的mmap函数有如下说明:

void∗mmap(void∗start,size_t length,int prot,int flags,int fd,off_t offset);

start:映射到进程空间的虚拟地址;

length:映射空间的大小;(www.chuimin.cn)

prot:映射到内存的读写权限;

flags flags:可取MAP_SHARED,MAP_PRIVATE,MAP_FIXED,如果是MAP_SHARED。此进程对映射空间的内容修改会影响到其他的进程,即对其他的进程可见,而MAP_PRIVATE,此进程修改的内容对其他的进程不可见;

fd:要映射文件的文件标识符;

offset:映射文件的位置,一般从头开始。而在设备文件中,表示映射物理地址的起始地址。

程序中另外的主要调用的函数定义分别如下:

LED灯分别用4个GPIO接口进行独立控制,实现一个一个连续单独亮起,程序名称为led4,工程文件列表makefile文件内容如下:

主程序如下:

运行上面程序,在终端中显示结果如下所示。

[root@CVTECH/]#.led4

LED1

LED2

LED3

LED4

LED1

LED2

LED3

LED4