找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 4|回复: 0
打印 上一主题 下一主题

[硬件] 嵌入式最基础的GPIO接口操作了解一下!

[复制链接]

551

主题

1462

帖子

3万

积分

EDA365管理团队

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

积分
39465
跳转到指定楼层
1#
发表于 2019-10-9 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1、GPIO( d5 y# W- {4 `
GPIO(General Purpose Input/Output Port),即通用输入输出端口,就是芯片的一些引脚。作为输入端口时,我们可以通过它们读入引脚的状态--高电平或低电平,作为输出端口时,我们可以通过它们输出高电平或低电平来控制连接的外围设备。' {, p$ L0 o  X; |: |' `9 C

7 H% \9 k2 Q/ E+ K% I9 J- o' t3 w3 z4 \% r: V* H4 V9 q5 I+ o9 ]
S3C2440有130个GPIO引脚,分为A~J共9组:GPA、GPB、…、GPJ。通过设置相应的寄存器来设置某个引脚的功能(输入或输出或是其他特殊功能)。1 D2 i. _$ V+ [  J

: M7 B- r' H- O- {. L4 X& b
3 M+ h2 u# m% t% i' s2、通过寄存器操作GPIO3 b, {! o% F* R+ ^% d9 I
每个端口可以很容易的通过软件配置以满足各种系统配置和设计需求,在使用之前你必须定义每个引脚的功能,如果不是用于复用功能,则引脚可以配置为普通输入输出端口。
- b/ J8 h2 T. t" U# k3 X0 ^" Z4 q! e4 m+ s( k' Y0 c' p3 `

! ]  B- W5 a6 l3 I- S: z9 \1)端口配置寄存器GPxCON(x为A~J)6 z( n, b% w; J2 P; v; H
GPxCON是用于选择引脚功能。0 w& i9 J4 y1 f3 U+ C8 B( O1 ]3 n6 B
PORT A的端口配置寄存器GPACON中每一位对应一个引脚(PORT A共23个引脚,bit0~bit22对应GPA0~GPA22)。当某位被设为0时,相应的引脚被设置成输出引脚,此时可以在GPADAT中相应位写入0或1让此引脚输出低电平或高电平。当某位被设为1时,相应的引脚被设为地址线或用于地址控制,此时GPADAT无用。(GPACON通常被设为全1,以便访问外部存储器件)5 z) y. X, U9 @8 U$ I3 E# B0 d: z) j  |. q
, e4 y$ U$ s5 N* O7 Z4 W1 E' Q2 A

" F% s) i9 M& z) p% Y7 gPORT B~PORT J的端口配置寄存器操作完全相同:GPxCON中每两位控制一个引脚,00为输入、01为输出、10为特殊功能、11保留。
5 u- n) p6 ?3 y( `) X1 G3 y
6 g) O5 R5 ]* w  u
2 U8 C# X2 [! L/ P4 ?/ `2)端口数据寄存器GPxDAT(x为A~J)  n6 \8 i" a- w; O
GPxDAT是用于读/写引脚数据。
3 e# S, K/ f7 w6 ]# x当引脚被设为输入时,读此寄存器可得到相应引脚的电平状态是高还是低;当引脚被设为输出时,通过写此寄存器的相应位可设置相应引脚输出高电平或低电平。; V& u( l7 Q1 I* G8 T+ W$ s' v
8 b8 k3 |( n' z4 ^+ J- ?* E
; c% }2 Q, d& ^* o. T) p' z  Y5 d
3)端口上拉寄存器GPxUP(x为B~J,注意:PORT A端口没有这个寄存器)5 V8 H7 ^! m1 d  e1 m) l; z' A
GPxUP是用于选择是否使用内部上拉电阻。% N. ]! O" b& Y7 x! [  R& Y7 o
此寄存器的某位被设置为1时,相应引脚不使用内部上拉电阻;设置为0时,相应引脚使用内部上拉电阻。
! k5 J! U  w$ d5 w. Q: c  v7 g & p) O/ z0 N$ S/ s' W
# N* {, P( u. I# z$ I$ F' @7 q7 i7 \
图1 上拉电阻0 U( m8 h( f+ `$ t
$ l4 e# Y1 w# ~( d
* o! E1 U2 _+ d" @6 P
) r; }9 E3 @6 n7 p
3、使用软件来访问硬件+ f" L, }5 p" m  G8 M& Z
对单个引脚的操作有3种:输出高低电平、检测引脚状态、中断,这些操作一般通过读、写寄存器完成。如图2所示电路,可以设置GPFCON寄存器将GPF4、GPF5、GPF6引脚设置4为输出功能,然后写GPFDAT寄存器的相应位使这3个引脚输出高电平或低电平来控制相应的LED。相应的引脚输出低电平时,LED点亮,输出高电平时,LED熄灭。
, j4 O1 |& G6 F- t( e) k   J1 [! C" H: ^9 \" V: S
& l" n0 x; ?% l; X7 z
图2 LED电路图! R- j( `7 V9 H& B0 D  L' m1 q
& r; f- _# {* k( |9 [) ]. ^; v

; ]) v; k4 Y/ ?: `0 N+ S. `8 I. V
S3C2440的GPFCON、GPFDAT寄存器地址分别是0x56000050、0x56000054,通过软件读写它们的地址可以访问这些寄存器。S3C2440芯片手册对这些寄存器的介绍如下图:
  C+ O, F) s; m% U8 f
. p1 _! N( A0 ^4 I6 Z$ z( w& G$ ?' a2 x* v
图3 PORT F寄存器介绍
2 F% `4 [" R0 N9 R2 Y' B% Y! E
; N& v1 h$ O3 \* k& l/ P
- v- ?. `# ^6 p# T& X; y6 \- _/ k5 I& \  Z, |, J
4、GPIO操作实例
1 f2 O# w  T0 G8 Y/ L使用GPIO控制一个LED。例如,我们要想点亮LED1,就需要设置GPF4引脚为输出功能,然后设置该引脚输出低电平。
$ C- n" P, \9 ^, @# ], _* K& |4 d! B; h/ [1 `4 T. K: C2 |4 e

3 p7 C; F2 C! h板子上电后执行的第一条指令,并不是main函数,如果我们使用keil开发,启动文件会由编译器完成(会有一个S3C2440.S文件就是启动文件),它要做的工作主要是各种初始化然后跳转到C文件的main函数执行。但是我们在Linux系统下使用arm-linux-gcc编译裸机程序时,就需要自己编写一个这样的启动文件代码。(建一个目录led_on_c,把编写的代码文件和Makefile文件放在该目录下)
* d5 B1 j1 g% w7 l
1 [7 U8 F, m7 A8 @+ v8 e6 B' T
- c  ?6 L8 G1 F& X8 i0 c自己编写的启动文件代码crt0.S内容:
' ^9 O' l0 w: C8 Y/ o7 i7 w: p; ^! `& |
( o% ~# A! ~) f
* u# F! M8 S) z9 p  @' [0 ?6 e! a) ?( j+ x
下面是LED1的控制程序led_on_c.c文件,内容如下: ) x& R# C$ b" H# ]6 n
2 a- o+ U1 m% M/ ^' u% [$ ]9 F

( ^% j; _. B" r/ a  Y  L* D
6 N& h% ~9 A! xMakefile文件:  6 Y" I& ~+ b1 ~( a/ X& c+ o

; W- p/ A0 ~1 \- ~6 G( M9 x6 M" p
6 a0 q7 C/ ~& a! F+ j% V+ R* Q$ @" g; R3 d) X7 r( l" X/ ^& f
第2、3行分别编译源程序crt0.S、led_on_c.c
+ @. {( n% G% |) g% L
+ _* m* {2 k9 H+ Q. j+ W第4行将编译得到的结果连接起来1 K6 Z( u( A6 I/ J& V: x! u

* S& P5 l$ V, b6 k( g) \- K) u, f, Y3 |! L$ d) p, p
第5行把连接得到的ELF格式可执行文件led_on_c_elf转换成二进制格式文件led_on_c.bin
6 v0 {) q- H2 [, \1 E% Z) b" j: @/ C+ h% k0 d8 b

+ Q8 W) B$ P4 p5 m3 `第6行将结果转换为汇编码以供查看
+ i2 V. C; x& u9 H8 ^7 k在led_on_c目录下执行make命令生成可执行文件led_on_c.bin,然后把该文件烧写到NAND Flash。* w* c$ k5 @' q4 v' T6 |7 O
本文转自网络,版权归原作者,如果您觉得不好,请联系我们删除!
% }6 v5 E1 S" b& S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-5 16:23 , Processed in 0.058006 second(s), 33 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表