TA的每日心情 | 开心 2019-11-20 15:00 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
LPC2103之GPIO寄存器 ) C* U% V; G2 j# C8 h; H5 b
% f o- d7 f: m [4 Q2 {GPIO port 0模式选择寄存器5 S0 r K6 G0 u, d
GPIO0M的bit0为GPIO port0模式选择。当其为0时,GPIO通过APB地址进行访问(LegacyGPIO),当其为1时,使能高速GPIO port 0,GPIO通过片上存储区访问(FastGPIO)。
! d7 x" ?0 [/ x/ t4 r p0 }: B8 Z7 ^. T, w, H
管脚功能选择寄存器
6 u2 t, O3 ?) Y, p8 {/ E v3 nPINSEL0和PINSEL1
2 b9 u4 X, O) w# r q. WPINSEL0和PINSEL1寄存器控制各个管脚的功能(查看datasheet的Table 62和Table63)。IO0DIR寄存器的方向控制位仅仅当相应管脚的GPIO功能使能时有效。管脚在其它功能时,CPU自动配置管脚方向。" {# n' l% W$ E
PINSEL0和PINSET1值 | 功能 | 复位值 | 00) } u% N+ e' o5 c
| 主要功能,作为GPIO管脚8 b* ^5 k" V& N
| 00
m9 d) g: l$ s+ T4 |+ O* a5 J- U. k, x | 01
, ]3 R5 F8 t. N+ w# t4 S | 第一复用功能
1 K2 D h& g2 ~, ~7 L4 [$ d1 W9 O8 j | | 10
4 I9 T* b0 E4 G0 @( O. S | 第二复用功能
: J2 ^- G- ^, O1 Z' t& D | | 11
8 ~( ~# q; t' P o; A | 第三复用功能
) t( t$ z" K' N( q. u) K | | 32bit寄存器PINSEL0对应PIN0.0-PIN0.15;32bit寄存器PINSEL0对应PIN0.16-PIN0.31。( n$ J6 {. y3 E
0 @5 X- A E1 e# t2 x( @8 m
GPIO控制寄存器:
# J( W9 G9 C! Z. b, K. Z/ B8 l慢速GPIO控制寄存器 (APB访问寄存器)6 n# d5 H# ~% {" e( h- O0 _/ h* s! j- ^
寄存器 | 描述 | 访问 | 复位值 | 地址 | IOPIN
9 D1 P' ]5 v9 W& @. i' [: O | GPIO管脚值寄存器。不论管脚方向如何,管脚当前值都可以在该寄存器读出
3 q& [. }1 q* {( O) a5 c | R(推荐只读,否则会发生不可预料情况): _; X {0 q% B6 O
| NA9 I6 r' g5 N9 v
| 0xE002 8000 IO0PIN | IOSET
" R+ {* R4 [/ a" e | GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。
+ O( W Z) Z% U e | R/W& \# q6 E, g# G
| 0x0000 0000
! s: O; Y, h* f! L# M2 |3 K | 0xE002 8004 IO0SET | IODIR
1 V7 d! ^/ {! T | GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。
. m7 M' H! r' F2 B4 S9 K/ w | R/W
0 m8 ^$ L% z8 O- }& w' Y* L | 0x0000 0000: ?0 p, f- k3 R h3 u; F7 T# S
| 0xE002 8008 IO0DIR | IOCLR
5 \9 S& g0 D9 ?2 d1 `/ u7 _; \+ v3 r | GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。4 u8 z. n- Z: x- z$ y
| WO
* K! r* c9 [* o4 a5 f1 d9 s | 0x0000 0000( l$ P- {3 X) {. i, \* \3 w* W
| 0xE002 800C IO0CLR | 快速GPIO控制寄存器 (本地接口存储访问寄存器——增强的GPIO特性)/ E$ f, r5 o, i4 Y( k
寄存器 | 描述 | 访问 | 复位值 | 地址 | FIODIR' I' W6 @0 n7 \9 ?# v2 j8 b
| 快速GPIO管脚方向控制寄存器。该寄存器独立控制每个管脚方向,写1置相应管脚为输出。5 u4 x! Y7 T; C. B! g
| R/W
, ~" S" x4 z' |' b9 ~# w | 0x0000 0000
$ i5 ]* Z% F9 `; b7 V, T | 0x3FFF C000 FIO0DIR | FIOMASK
1 e' g" z8 q Z" p% O9 l, m' i | 快速GPIO管脚屏蔽寄存器,对快速IO管脚的任何操作只有在对该寄存器对应位激活(写0)时有效
* v& A4 t4 S' x& J8 u. N1 A9 X | R/W5 \2 |& C2 O, C( ?" G
| 0x0000 0000
! r @* Z! M% F& C& F | 0x3FFF C010 FIO0MASK | FIOPIN
6 N. ?4 w0 \/ A# z | 快速GPIO管脚值寄存器。
M6 V: o/ I* Y: H3 h1 _& j | R/W
/ d5 r, _" j' W! W | NA
$ a4 S$ t- y5 z' y5 D2 t8 | | 0x3FFF C014 FIO0PIN ! Z! o* @3 s8 N1 A4 J
| FIOSET% S7 y+ D/ L% S; {) w% J
| GPIO管脚置位寄存器。写1将相应管脚置高电平,写低无效。: Z: `4 ^% B9 v* q8 J* c( n
| R/W
6 x, K3 {: p1 ]" ]/ [ N+ ] | 0x0000 0000. f9 A) r7 {/ K: h
| 0x3FFF C018 FIO0SET | FIOCLR
/ m% H" N, C b | GPIO管脚清除寄存器。写1将相应管脚置低电平,写低无效。
- [: ^' v) h' G | WO
! Z$ F: [, G* C/ I X2 s! k | 0x0000 0000- c# Z) u0 A+ D2 [) m
| 0x3FFF C01C FIO0CLR |
# N# t3 u% t; y9 o首先,要明确,对IOSET和ISCLR写0是没有效果的,即等于没操作。
5 e! i( C: I. v" O8 ^
: R4 R+ z! x( u0 J& l在写1602的驱动时,发现并没有像先前的51,或者是430那样可以给8个管脚直接赋值的寄存器。由于置1和清0要靠IOSET和IOCLR两个寄存器配合完成,所以写起来不像以前那么直接。最后,我想了个比较还算可以的方法,假设要赋给液晶D0~D7的值为dat,可以这样写:IOSET=dat<<(D0在哪个管脚);IOCLR=(~dat)<<(D0在哪个管脚);这种写法,把该置1的和该清0的都完成了,而且互相不会影响。
& i. p \* s2 L, `0 x |
; @! ^, [! T" @* _$ g" L
! p/ b8 q9 n% S( z- a" [$ W, ` z. o+ T$ o6 ^5 M
. C C$ J$ y, ~2 N4 j$ n, @" Q g$ j& c* M1 g4 D" f- J" o- T8 W( i
| . b" X; k) c, e8 X4 z& J
| 8 K; h6 X) B- ?/ {: \! X
|
|