|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
——疯壳·开发板系列 GPIO实验教程
" D9 X6 o- \; b0 {% p$ ]( b3 k- n& u/ L, m5 x3 D9 ^9 O* F
2 q6 P7 k, r- Y5 T2 ^. s
- v6 [0 N3 b( M3 o! i b
# U4 X; j6 P2 |
图1
% I4 W3 a5 |8 p. {& E$ u% e* e5 r$ h2 _/ N
第一节LED硬件电路
$ L2 e% F' q' q) E3 h) e. D) S- g9 w( F, s
板子中有一个可控LED,接在DA14580的P24引脚,LED串联1K的限流电阻,如下图所示:
2 c! [3 f/ ~; M
5 P5 E4 P# J' X8 S f
' T$ n H* \( t
图2+ s6 {" }: y- R9 j5 {# P- _4 _
! S" n A$ {. b+ A
! M1 l8 z$ F7 M4 _$ ?. X+ v, l8 S 第二节 GPIO寄存器5 M9 l2 Y4 K* ]- W, K# ^ t
8 c' @: S6 z1 c% Y z* @ 2.1 GPIO引脚介绍: B$ l& j( ]4 o& W0 A
DA14580的I/O引脚功能可以通过软件配置,分为4组,分别为Port0、Port1、Port2、Port3,其中Port2只在QFN40与QFN48封装的芯片中,Port3只在QFN48封装的芯片中。4 \7 Z2 E( [8 ~1 u2 n
Port0有8个引脚,Port1有6个引脚(其中包括DEBUG引脚SW_CLK与SWDIO),Port2有10个引脚,Port3有8个引脚;6 c7 Y& N; ]( D2 h& |
每个引脚都可以选择上拉或者下拉25KOhm的电阻;
; r+ L8 x q% x1 G; _: N 每个引脚上拉电压在VBAT3V(降压模式)与VBAT1V(升压模式)两者可选;
2 t% S4 A. t* s3 c7 P3 i 4路模数转换的引脚固定分配为Port0中的0:3引脚;
6 f# Y4 G+ w, G$ S. K 当系统进入睡眠模式时,引脚保持最后的状态。
% Q% P2 M6 a* |/ \5 c* N9 U5 s 2.2寄存器介绍( f8 j9 f6 ^8 g- E% t2 ]$ a* e
2.2.1 P0数据寄存器1 L/ ~" ^& S+ [3 @4 s- ~) g
' a& o7 U# Y, A/ ^& E
$ W! N8 K0 d" Z2 N1 f' R' g/ ^ 图3* \9 O. A6 p6 {$ A, T+ e5 D& S, M
15:8位:保留不使用;
( @0 O8 U8 p1 P8 X 7:0位:写该寄存器则设置P0输出寄存器的值,读该寄存器则返回P0口的值。/ v4 [2 e' a2 ^ ?
2.2.2 P0设置数据寄存器
/ j9 { {1 C$ }, y0 T$ U8 ?3 E& i
* l# D4 B$ L, [' P6 a( Y
4 S% f8 h: _; R7 ] 图4% I9 k8 T8 h9 X* \ j$ q! A
15:8位:保留不使用;
q6 ^, Y/ w" B, }# N& U 7:0位:写’1’到对应位则对应的引脚置’1’,写’0’无效,读该寄存器则返回0。6 O* X1 L+ x8 ?4 A/ Y
2.2.3 P0复位数据寄存器
% J3 r/ Z" e- Z" i& p
( K. N& V3 S5 x2 ]5 I) V: t6 f
) m. h! j. t _( d. `. Z8 q
图5
! e- H: R# l- c# ~1 ?& q' T. E6 @ 15:8位:保留不使用;7 ?! h0 q4 P3 ?5 W( j) G# y
7:0位:写’1’到对应位则对应的引脚置’0’,写’0’无效,读该寄存器则返回0。
; G; s; J, n" Y m, ~6 j D 2.2.4 P00模式寄存器( }' e1 b( Q9 P n4 C; k& R
. h4 h; n8 b( p7 F
9 }, S* _3 ^! H( P
! \0 W; a/ d. R+ N( J6 N
图69 D# C* E- O& Z6 d9 U
15:10位:保留不使用;
0 L. o( H, [ D( t6 W$ K 9:8位:设置引脚的上拉、下拉电阻的模式,00为输入,无电阻;01为输入,上拉电阻;10为输入,下拉电阻;11为输出,无电阻;在ADC模式中该位的设置无效。
9 r6 o9 w0 v& j 7:5位:保留不使用;
: g) E0 y1 U# M5 p 4:0位:设置引脚功能,0~25分别对应不同的功能,具体看上图,注:当一个输入功能设置为多个引脚时,引脚序号越低优先级越高,即优先选用序号低的引脚设置为该功能。P0的优先级比P1的高。
: w+ @. ~$ X. [. r2 g 2.2.5 P1~P3的寄存器配置! G9 y# \/ V/ _4 K# [
参照P0寄存器的配置,需要注意的是P14与P15两个引脚模式的默认值是1,即默认上拉电阻。
* V0 u" p1 S) j, Z( h 注:P14与P15为SWD调试接口的时钟与数据接口,在使用Jlink调试过程中不要使用这两个引脚。
% R+ I& {- P. p( Q+ c x/ Y+ S 2.3 寄存器配置讲解
5 e5 n% f( Q1 J( S3 y1 m #define P0_DATA_REG (* ( volatile uint16*)0x50003000)8 V: n4 X5 w, Z- S' A$ l& A" T
#define P0_SET_DATA_REG (* ( volatile uint16*)0x50003002)
0 H, n) x; \7 w #define P0_RESET_DATA_REG (* ( volatile uint16*)0x50003004) & o4 z8 T0 `3 l& w) P/ r
#define P00_MODE_REG (* ( volatile uint16*)0x50003006)
( r1 H/ K. \3 w #define P01_MODE_REG (* ( volatile uint16*)0x50003008)* T ]2 o5 l; u R8 o8 N: t
#define P02_MODE_REG (* ( volatile uint16*)0x5000300A)
; B6 u- n$ e' ]% ? #define P03_MODE_REG (* ( volatile uint16*)0x5000300C)
3 v6 {. F" V e% V; g) x5 K5 B #define P04_MODE_REG (* ( volatile uint16*)0x5000300E)
. P( p( R$ P7 X4 m$ y+ d, ?* W6 C2 ? #define P05_MODE_REG (* ( volatile uint16*)0x50003010)
2 X: }* s7 I& \& y1 P8 F- W$ h. b #define P06_MODE_REG (* ( volatile uint16*)0x50003012)
! R/ G! I n3 ]4 j" o) t, T1 q #define P07_MODE_REG (* ( volatile uint16*)0x50003014)" ?- I5 P: o+ N* Q
如果对P0整体操作,可以使用P0_DATA_REG寄存器,若使P0[7:0] = 0xaa,因为以上宏定义是定义的地址,则寄存器操作为P0_DATA_REG=0xaa;. C+ {3 I+ Y$ C* v' \" y
如果要读取P0的状态值,则通过读取P0_DATA_REG寄存器,P0_STATUS = P0_DATA_REG,若要读取某一位的状态值,则通过与操作之后返回逻辑值即可。6 d; X- ?5 J |3 M. y& L
作为输出时P0_DATA_REG适合对整体P0口操作,而对于某一位进行操作则需要经过一些逻辑操作保持其它位的值不变,不是很方便。而P0_SET_DATA_REG和P0_RESET_DATA_REG这两个寄存器对位操作就十分方便。对某一位置’0’或置’1’只需对应位赋1,其它位赋0即可,因为该寄存器忽视写0操作。若使P00 = 1,P01 = 0则P0_SET_DATA_REG =0x01; P0_RESET _DATA_REG=0x02;
0 r/ q% q" }2 ~$ l P0[x]_MODE_REG是P0口某一位的操作模式的设置寄存器,例如配置P00为输入口,不上拉电阻,P01为I2C_SDA,P02为输出口,则
) ]6 ^3 i8 L" ~ C# Q; [* X/ O P00_ MODE _DATA_REG=0x00;
" l/ i0 m" p9 ]8 A P01_ MODE _DATA_REG=0x0a;
) w, E' ?4 Q/ D P02_ MODE _DATA_REG=0x30;, W) K1 Y* m9 s/ }; q, k' g6 l
- Q# I( Q% Q0 L n; ^
3 M/ j0 J- q8 x" P L4 u: F' s0 Y
0 x$ s+ ?. w' Q+ d( }; w 第三节 GPIO实验5 N- k6 o: c( x, N. k, t/ S. s& i1 g
0 b6 U( Q9 H4 J% j4 m 实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。& H* G( l4 o5 |: w4 p0 A# H
使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:
1 K1 L6 s3 S/ o; _/ s9 E (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:# W w% x4 z* m2 l3 `2 `2 {
6 w7 t4 N T& T. M/ p
) I# Z. C0 O9 F 图7
7 M1 j# Q+ Q+ w/ W2 w8 L (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
3 _0 k0 j. b: f; X6 s7 A6 v' w: m0 `1 }: W) o9 N- J
' X7 n0 o5 ~" _3 k/ r( S8 E. p
图8
r1 i0 c% X( } 将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
- e; j9 W7 I! `2 L; G' ]6 m2 L 打开GPIO实验的Keil工程blinky.uvproj,位于目录:
6 @. }- ?8 ^3 U6 S! Y" F ...\WT_Mobile\1.初级教程\DA14580\1.GPIO实验\projects\target_apps\peripheral_examples\blinky\Keil_5。
?' _9 r0 M$ T4 w; i( z
9 Y1 A) O6 y. R9 z3 M$ N
2 j: C4 b+ X W8 o8 v
图9
1 f+ f: u) |. b$ _# f. z( j' Y* ? 打开工程文件之后,编译,点击DEBUG,然后点击全速运行,则可以看到开发板正面的蓝色LED灯开始闪烁,如下图所示:. S6 v. Z' L c* A; Q' r
& W5 L/ `" U( ?0 s$ }
% ], Q2 `7 G7 k& A1 M8 V/ H! Q& W1 t& l
* k) `4 H3 u* Z6 J S* {( P
图10
( q8 k- s' y3 w0 H
1 d, Z \) u+ T) k. a; ], S/ F3 W3 r3 C
! Q1 I& U- L2 {- V \- M# U: a 文件下载请点击:
GPIO实验教程.pdf
(710.42 KB, 下载次数: 0)
7 n. d* v+ s* ?: k
: W0 j. m/ l6 t$ j$ f' \7 m( B |
|