EDA365电子论坛网

标题: LPC2103之GPIO寄存器 [打印本页]

作者: Ferrya    时间: 2018-10-26 13:01
标题: LPC2103之GPIO寄存器
LPC2103之GPIO寄存器
. R/ c. l+ r. B6 \
0 E; t( w' ~2 C( n  T1 d/ M$ b0 I
GPIO port 0模式选择寄存器
- h/ e5 c$ q- ^, p$ K( w$ ^GPIO0Mbit0GPIO port0模式选择。当其为0时,GPIO通过APB地址进行访问(LegacyGPIO),当其为1时,使能高速GPIO port 0GPIO通过片上存储区访问(FastGPIO)。! [$ R, T! x" w! c
& Y2 W( ]9 y& K0 [7 H9 b' q
管脚功能选择寄存器+ R  A1 z( ?- m! D/ G  a" _. p+ E
PINSEL0PINSEL1
  h! f  c! Y# f2 O9 h0 ^PINSEL0和PINSEL1寄存器控制各个管脚的功能(查看datasheet的Table 62和Table63)。IO0DIR寄存器的方向控制位仅仅当相应管脚的GPIO功能使能时有效。管脚在其它功能时,CPU自动配置管脚方向。$ M5 U2 B+ m* j" P
PINSEL0PINSET1
功能
复位值
00& L8 B: n" r1 Z; ~1 ?7 Q! Q
主要功能,作为GPIO管脚
; y, o' U+ b% _; T# C% H
00/ {" e+ ~- ?3 P7 P, _
01; B  ~9 S! M4 ?6 |' E( A; y9 c+ {
第一复用功能
) w+ s3 O2 R6 d4 h( }" y' ~- q
10
& s6 N+ N5 Q; {7 G+ i  M# U
第二复用功能
: v1 ~% L6 s0 x6 p7 {) K+ {+ d; w
11
" a" }9 C/ y6 R
第三复用功能/ H& Y+ a7 r" \5 T/ ]
32bit寄存器PINSEL0对应PIN0.0-PIN0.1532bit寄存器PINSEL0对应PIN0.16-PIN0.31
+ |- G7 k5 v' o) g6 U: X5 ]3 m
6 r: Y) v1 o' q. A; T( X" x) xGPIO控制寄存器:2 T9 q! S, h; n0 q0 ~
慢速GPIO控制寄存器 (APB访问寄存器)
2 A+ I+ j* D) N8 p) p- t
寄存器
描述
访问
复位值
地址
IOPIN3 L/ W- N$ A8 a7 y: y$ W3 X" r' ^$ [
GPIO管脚值寄存器。不论管脚方向如何,管脚当前值都可以在该寄存器读出
$ e" x6 c; e  {
R(推荐只读,否则会发生不可预料情况)1 h6 i0 n9 Z* y( \# K% C
NA+ Q* i5 V* n; H' z% G8 V% j
0xE002 8000
IO0PIN
IOSET
0 T; F$ E8 _$ J( \7 V
GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。
  c$ S5 o: `1 P$ M8 f/ k+ {' H- Y
R/W* ^! L: V, z  b" H
0x0000 00000 k: m! N* Q8 w2 n7 [4 b( u
0xE002 8004
IO0SET
IODIR; ]& v" N, o4 m8 _, _: v6 U
GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。
' V; f: L+ f; W2 a8 Z' C) N5 f
R/W! `2 b$ f0 s4 C! y3 t3 o+ N
0x0000 0000, L* j/ x9 r2 Q' r
0xE002 8008
IO0DIR
IOCLR9 i7 k8 g; I8 f. \# l: O
GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。
1 n9 o9 c& B& [- }/ ?8 _3 t; R! v
WO2 E' Q* G$ y' C; O. g) j
0x0000 0000
3 c3 K& }8 }8 F  [+ \. E
0xE002 800C
IO0CLR
快速GPIO控制寄存器 (本地接口存储访问寄存器——增强的GPIO特性)
2 G( V1 ]) g, e2 a$ Z5 M
寄存器
描述
访问
复位值
地址
FIODIR
0 ]4 L* ^/ V; K+ b
快速GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。% |9 J1 Z* v  f# ]
R/W9 e! d3 D7 c' a9 S
0x0000 0000
2 D' Z$ B; {# r' y+ b( V
0x3FFF C000
FIO0DIR
FIOMASK
* V; a$ C- R! k
快速GPIO管脚屏蔽寄存器,对快速IO管脚的任何操作只有在对该寄存器对应位激活(写0)时有效
  U; Q/ [2 X. I8 M* k, z
R/W
$ U! L7 W2 K5 U( j3 R" P
0x0000 0000/ \$ w$ C# E4 r& C4 f
0x3FFF C010
FIO0MASK
FIOPIN
8 l8 o% k2 f& e0 Z- g2 @1 T' G+ ?$ n
快速GPIO管脚值寄存器。' k& b! O* i! x, p9 G  b% {
R/W8 v- `- h+ W( `1 n& s$ B- O
NA
* w0 j! D( @# U8 z  o& q
0x3FFF C014
FIO0PIN
  H" T0 a" l' `: @+ y
FIOSET
8 q, ?. G$ Z6 y5 ]
GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。
7 t1 {, O3 q6 E0 u4 e: E) c
R/W
2 l* S. ~$ r. k* z
0x0000 0000
0 T: `+ H& R: v. R; f  Z! f" s. Z3 R
0x3FFF C018
FIO0SET
FIOCLR. }, |7 F6 @3 @/ y+ U
GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。
* E$ u# B$ d% t( {+ Q- p& I
WO
  ^6 ~9 P! P6 ]+ |- O
0x0000 0000
' N( G4 }1 r9 s$ Q1 B. q. ?
0x3FFF C01C
FIO0CLR
, n, k& S1 J: X7 [( _
首先,要明确,对IOSET和ISCLR写0是没有效果的,即等于没操作。
0 _# J. T$ w# j+ l# ^0 J% K/ Q1 k6 N; e
在写1602的驱动时,发现并没有像先前的51,或者是430那样可以给8个管脚直接赋值的寄存器。由于置1和清0要靠IOSET和IOCLR两个寄存器配合完成,所以写起来不像以前那么直接。最后,我想了个比较还算可以的方法,假设要赋给液晶D0~D7的值为dat,可以这样写:IOSET=dat<<(D0在哪个管脚);IOCLR=(~dat)<<(D0在哪个管脚);这种写法,把该置1的和该清0的都完成了,而且互相不会影响。
5 e1 Y, P( n+ D0 `& I, o

& b* K, f) s- x, w  `5 `" Q. \, T" W* i+ T. s, o# g% I# T

, }7 b9 m  F: J" D# J$ Q; ^& |) i4 l; y+ x
- m  r2 d1 j9 y$ m9 j
7 j  [* J. ~1 V0 j  z% Q

; ~7 G/ A) ^2 C5 \& L
作者: 姗姗的shanshan    时间: 2018-10-26 21:50
谢谢分享




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2