TA的每日心情 | 开心 2019-11-20 15:00 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
LPC2103之GPIO寄存器
5 f x! j3 Z! h% C
- o& I3 \& b" V: N. u. S% m% s* HGPIO port 0模式选择寄存器/ {, q0 Q7 i. g
GPIO0M的bit0为GPIO port0模式选择。当其为0时,GPIO通过APB地址进行访问(LegacyGPIO),当其为1时,使能高速GPIO port 0,GPIO通过片上存储区访问(FastGPIO)。% w( {" f* [0 H* ]' a( J* M
' R% E* a% w$ {7 {
管脚功能选择寄存器+ l5 D/ F' X+ ^2 P) ]7 ~, ^
PINSEL0和PINSEL14 Y8 ~* U9 n3 a8 G. M
PINSEL0和PINSEL1寄存器控制各个管脚的功能(查看datasheet的Table 62和Table63)。IO0DIR寄存器的方向控制位仅仅当相应管脚的GPIO功能使能时有效。管脚在其它功能时,CPU自动配置管脚方向。/ [( z7 ~$ P! L- E! ^
PINSEL0和PINSET1值 | 功能 | 复位值 | 00. x7 @' Z0 d' B% v# _
| 主要功能,作为GPIO管脚2 c6 U- q' c) B5 F1 W+ t
| 00
c; M5 e* M+ |% a | 01
/ z6 y5 q5 c6 u. ^! @9 f | 第一复用功能5 U; Z- t5 K8 y6 S, n
| | 103 v) T: c7 d0 G1 [; o" `; D9 E) X
| 第二复用功能
5 C: Z7 M( T, s2 Z | | 115 ?6 h5 a$ W) H$ r5 {5 ~
| 第三复用功能
% N2 X+ ^( ]: ?/ g* U% g | | 32bit寄存器PINSEL0对应PIN0.0-PIN0.15;32bit寄存器PINSEL0对应PIN0.16-PIN0.31。
" A5 ?: L( t: w+ z
- {- F+ _9 \1 l! C0 WGPIO控制寄存器:* ?6 U/ l) F9 [+ m6 o6 F. l' I% g
慢速GPIO控制寄存器 (APB访问寄存器)
" V& s: P- u+ a# i! r, b2 _* z0 p寄存器 | 描述 | 访问 | 复位值 | 地址 | IOPIN9 y! O) n; P1 I; z2 }$ D8 R& k3 M
| GPIO管脚值寄存器。不论管脚方向如何,管脚当前值都可以在该寄存器读出7 x% K3 [) x* L1 K/ d& `
| R(推荐只读,否则会发生不可预料情况)/ q( V2 d5 m, d6 t: a0 }) d
| NA
0 Z6 j. m# u2 f7 ] | 0xE002 8000 IO0PIN | IOSET+ m* O& e% V! W" c) f! F
| GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。- w4 R- ^& R% q9 E( Z. q$ V
| R/W( d' D% Y& `! X5 l
| 0x0000 0000
" {1 ?4 Y) ?& x) k# R H | 0xE002 8004 IO0SET | IODIR: h! T# c! I9 u! c. J
| GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。! A @+ E- T; a w% x# w5 B
| R/W- ~. L! \3 I2 ?
| 0x0000 0000
U( O9 C* r3 ?4 Q( h9 G% h( {) o | 0xE002 8008 IO0DIR | IOCLR% r- `4 Y+ B4 C
| GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。3 @# ]5 z9 t5 a
| WO
/ t: I, G& n# }8 _8 y: M- C! m2 _ | 0x0000 00004 R( p8 z1 b! z: Z
| 0xE002 800C IO0CLR | 快速GPIO控制寄存器 (本地接口存储访问寄存器——增强的GPIO特性)8 i( \/ ^6 f$ N0 U. b+ D
寄存器 | 描述 | 访问 | 复位值 | 地址 | FIODIR
" x$ S) |9 S2 R# t( h; z F# b$ k1 l | 快速GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。
6 L/ c; N2 p* i o | R/W7 S: q+ r. H$ X3 l0 d
| 0x0000 0000
! z& T+ z0 O. a& H" s" o* z | 0x3FFF C000 FIO0DIR | FIOMASK
5 g* M5 a+ T+ s; |+ c) k | 快速GPIO管脚屏蔽寄存器,对快速IO管脚的任何操作只有在对该寄存器对应位激活(写0)时有效
6 K. g' B& p: H* `7 L& b" ]' S | R/W1 w) i; \* p2 N
| 0x0000 0000
) [5 J, e u7 H3 f, Q0 O$ ^' ? | 0x3FFF C010 FIO0MASK | FIOPIN8 Z! S9 r5 L1 M0 n6 p) @7 l
| 快速GPIO管脚值寄存器。
; P! X; b6 p! [% m, _4 ^, u | R/W9 @0 q5 Q% V9 J. v
| NA; q, g$ n |# Q5 |4 M8 Q/ a
| 0x3FFF C014 FIO0PIN ; B5 d: ]" T% G, ?/ J
| FIOSET
/ y3 I$ R+ a( e( J, V- _/ t | GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。
" b* c8 R( x' _* {2 P( e( J | R/W
4 ]8 Z8 A2 C5 a1 X0 W4 c1 f5 I | 0x0000 0000
) p: T& L6 Z0 H7 q. N( m0 y | 0x3FFF C018 FIO0SET | FIOCLR' F4 }% |& W4 W
| GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。
# u6 L( [7 Y! R" z! k | WO
7 A% y$ x; s3 A; o f2 Z | 0x0000 0000
# X/ N6 O6 Y( h, M. g2 s+ V% y1 t, G. k | 0x3FFF C01C FIO0CLR | 8 R C, b, W( j8 ?0 q" B
首先,要明确,对IOSET和ISCLR写0是没有效果的,即等于没操作。3 d; q, N. z4 k6 H4 \
7 \3 b. o% g! }# l) b. N在写1602的驱动时,发现并没有像先前的51,或者是430那样可以给8个管脚直接赋值的寄存器。由于置1和清0要靠IOSET和IOCLR两个寄存器配合完成,所以写起来不像以前那么直接。最后,我想了个比较还算可以的方法,假设要赋给液晶D0~D7的值为dat,可以这样写:IOSET=dat<<(D0在哪个管脚);IOCLR=(~dat)<<(D0在哪个管脚);这种写法,把该置1的和该清0的都完成了,而且互相不会影响。
- S5 t4 ~% Q6 H. x9 k. p | ! i# r; F# v/ _
~( W" Q1 X o( M6 B
; X% i) b1 Q; o( `
' e! H4 p- L {+ T; f
9 V8 B7 I) a; z- K& E | 4 Z% b4 u9 x6 `) F' F4 L5 T2 C# C
| % Z! \( k1 t9 @' b$ ?* p3 K
|
|