TA的每日心情 | 开心 2019-11-20 15:00 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
LPC2103之GPIO寄存器
* t. I" k) j7 ~/ L. s7 A7 U# [* l4 i( P1 a
GPIO port 0模式选择寄存器
! X$ d7 Y' D* }5 G* MGPIO0M的bit0为GPIO port0模式选择。当其为0时,GPIO通过APB地址进行访问(LegacyGPIO),当其为1时,使能高速GPIO port 0,GPIO通过片上存储区访问(FastGPIO)。
' F% ?2 D5 i3 v! ?* Z9 n! B, v& O" o/ S2 q* \, h k
管脚功能选择寄存器
1 I, g1 s' \# ^PINSEL0和PINSEL1! z% W7 k+ K/ y0 D+ X
PINSEL0和PINSEL1寄存器控制各个管脚的功能(查看datasheet的Table 62和Table63)。IO0DIR寄存器的方向控制位仅仅当相应管脚的GPIO功能使能时有效。管脚在其它功能时,CPU自动配置管脚方向。
* ~5 S/ Z4 k6 l7 [, bPINSEL0和PINSET1值 | 功能 | 复位值 | 008 `) K- a) j) p) o) w$ i. A! @6 w
| 主要功能,作为GPIO管脚 J( p4 B( K) e$ T2 I6 m
| 00
# U8 d: T5 Y: ^ | 01; Q' E2 j4 |* Y1 k1 @* @; g
| 第一复用功能/ e, z! e% V5 |/ \6 L$ i% w
| | 10
, H7 I; h: o9 V& i5 c0 ~- h | 第二复用功能
! b% @2 q6 `; ~: b/ f' \! y! h | | 11; K6 E6 `) F8 Y% h
| 第三复用功能
+ o% M: q4 ?. H6 b$ [ | | 32bit寄存器PINSEL0对应PIN0.0-PIN0.15;32bit寄存器PINSEL0对应PIN0.16-PIN0.31。# u3 `6 A; X$ n- u+ X
% k4 r5 q0 J0 b0 R/ ]$ r8 B! dGPIO控制寄存器:. L. A+ j) F6 g8 v* |) E% v9 Q& L
慢速GPIO控制寄存器 (APB访问寄存器)7 ]3 O3 a; N2 @' j S( A
寄存器 | 描述 | 访问 | 复位值 | 地址 | IOPIN
( S+ b- N+ X+ V( M. Q5 |6 L | GPIO管脚值寄存器。不论管脚方向如何,管脚当前值都可以在该寄存器读出
5 V, q5 u0 `$ }; d# k( F | R(推荐只读,否则会发生不可预料情况)* M: d# S5 j8 u8 K
| NA, _! A4 m1 J0 h, G
| 0xE002 8000 IO0PIN | IOSET/ z$ z2 k$ r7 k5 U' W$ E
| GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。3 m, v, ]9 w) e( U" z. R
| R/W- ^; p; m) F# G2 {! b
| 0x0000 0000
2 q6 _! [+ p; a. Z N | 0xE002 8004 IO0SET | IODIR
t% ^- k; N, s1 \8 v4 d | GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。# P W& j5 F5 }. b; H
| R/W% i0 q1 C. @/ V% C" x* i# v' }
| 0x0000 0000# b" a. R5 {: t; m+ u3 m) f
| 0xE002 8008 IO0DIR | IOCLR
+ p8 j; s1 t; q | GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。
5 V' h* e: l' \ | WO
8 ~7 R; F0 r" B$ L4 g* @; R" w | 0x0000 0000
: x6 |7 F2 _/ ?' [5 R3 E0 H- v | 0xE002 800C IO0CLR | 快速GPIO控制寄存器 (本地接口存储访问寄存器——增强的GPIO特性)
. s3 ?9 L) h/ q; s寄存器 | 描述 | 访问 | 复位值 | 地址 | FIODIR7 N+ [9 O0 R3 r+ d2 b& n) ~/ ^( d
| 快速GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。6 n3 j/ |3 [2 e& M
| R/W# f5 K3 m( d3 j v3 d2 u; p, B
| 0x0000 0000
$ s I. i9 x+ C) p | 0x3FFF C000 FIO0DIR | FIOMASK
% h& Y- y+ H1 f- b( S( j* R | 快速GPIO管脚屏蔽寄存器,对快速IO管脚的任何操作只有在对该寄存器对应位激活(写0)时有效
! l5 ^6 p; Z8 a+ l5 A( h# [9 w | R/W
7 h+ {- h% Z6 w2 r7 c | 0x0000 0000
7 A' V: O8 W9 |% w1 _- W | 0x3FFF C010 FIO0MASK | FIOPIN! ?- [2 o. T3 s4 L$ ^! u0 p7 |7 W ?
| 快速GPIO管脚值寄存器。
2 _1 r( ?" T& M, W+ ] A" g& Y | R/W
+ q4 W& p! P$ n' e | NA
( e. [( J6 |: J% B" `' i* ^3 X! r+ Q | 0x3FFF C014 FIO0PIN
8 i1 F, O+ p: e$ I | FIOSET
9 X$ e1 W' f0 p) H3 c7 u | GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。& ], f' u$ }7 r2 [
| R/W
# c6 z" S- l6 { | 0x0000 0000- e: K( {5 [- q+ F8 [* g
| 0x3FFF C018 FIO0SET | FIOCLR, f) c1 ]1 j4 p, _$ ]
| GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。9 L9 j+ w2 m5 Z
| WO% [. i; N/ h! |
| 0x0000 0000
* L, } n5 |7 N | 0x3FFF C01C FIO0CLR |
6 z& _' l0 n! B" w8 j4 m: }首先,要明确,对IOSET和ISCLR写0是没有效果的,即等于没操作。
- O! ~7 J6 D- O" j" j1 R/ q
+ _+ [+ \+ g* ~, m7 ?在写1602的驱动时,发现并没有像先前的51,或者是430那样可以给8个管脚直接赋值的寄存器。由于置1和清0要靠IOSET和IOCLR两个寄存器配合完成,所以写起来不像以前那么直接。最后,我想了个比较还算可以的方法,假设要赋给液晶D0~D7的值为dat,可以这样写:IOSET=dat<<(D0在哪个管脚);IOCLR=(~dat)<<(D0在哪个管脚);这种写法,把该置1的和该清0的都完成了,而且互相不会影响。
- o7 h5 A9 S, X2 [ | 4 p& e- A: ~5 Y/ y
& U4 G/ _7 p; y: {
2 T" o! {0 E, R0 b. w8 ]) z _1 x* z* d. X/ L% P6 r4 _& f
' L/ O% m& }" C! y$ u B* {; E9 E* ~
| # a) A3 M+ \- E o! c7 M
|
; [0 T: U9 `$ |# H8 R/ Z5 V7 o o |
|