找回密码
 注册
关于网站域名变更的通知
查看: 176|回复: 1
打印 上一主题 下一主题

【开发教程8】ARM功能手机-中断实验教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-6-21 18:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
中断实验教程
——疯壳·开发板系列
$ X9 x- n6 H: J" ^" h

$ V5 z2 M% ]+ g    
* v: Q7 i  G3 I9 S: }2 y( O% Z    图1
/ ?. L( f7 ?6 b3 U" S" ~. J9 F: _' r& k" [) k3 D
    第一节中断硬件电路
; R4 p, h/ N. u    将P12、P13配置为中断输入口,P12和P13已通过排针引出,如下图所示:, m+ z# z/ n$ E# z" e, K
+ E3 |" \) |: H1 ?
  1 [' P' d- n8 F$ H' P" k6 A* O
  
) F( c2 Y* m8 K" e7 N5 Z6 C: I    图2% ]8 w. y3 N) Q' z
  w) n" L$ J4 W' B1 z9 p

" I( ~& E+ ^( Y$ W& @# J    第二节 中断$ s; _' G& P# U! r5 q/ V) k$ j
    2.1 中断介绍
% g7 M) G. P1 z. y        芯片内部有嵌套中断向量控制器(NVIC,Nested Vectored Interrupt Controller),支持24个中断,能够中断配置与处理异常代码。当发生一个中断请求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有4个不同的可编程的优先级,NVIC自动处理嵌套中断。对于安全关键系统,有不可屏蔽中断(NMI,Non maskable interrupt)输入。
0 e1 a( [/ f6 m6 t' s    DA14580内部有一个键盘控制器,可以用于延时GPIO信号进入的时间。可以检测所有的I/O口的电平变化。当检测到信号时,可以产生中断(KEYBR_IRQ)。同时,另外有5个中断(GPIOn_IRQ)可以被GPIO口触发。2 a9 r* r0 y9 W
    2.2 寄存器介绍* g# j4 t" m4 V/ M/ o, }/ j$ y5 s
    2.2.1 GPIO_IRQ0中断源选择寄存器" N$ I( B6 n8 _) [0 i# G/ Y0 k
% t6 A+ b8 n4 X; c" \0 ^" N

0 |4 r* _) M" P$ X5 b0 Z    
& T( H! e1 G( _: `) g    图3. o- N9 o. f8 r+ z7 U; c
    15:6位:保留不使用;- u# C: N6 j+ j1 [5 g# B) x
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
$ _. U/ g- z9 \! p; e" u7 M    2.2.2 GPIO_IRQ1中断源选择寄存器
$ E1 R# |6 I& a2 i0 a0 ~4 i5 [9 K& X0 E- R# m) Q$ N- T
   
; x5 v+ A9 B; p* c+ n4 \    图49 p" [4 M" G5 F9 S" a9 i2 m- o
    15:6位:保留不使用;, R* S' q( @" M; ^
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
1 s) M, d6 x/ ]% i! ?* q& o    2.2.3 GPIO_IRQ2中断源选择寄存器9 t) N; \1 \) l, E# P/ U$ A" n2 s
+ a4 e; h6 y9 _! t% _  M
   
0 V6 d- J" m% l* \7 k* q1 N    图58 |) G% s+ q% P/ O6 D; D5 A
    15:6位:保留不使用;  H* P; h  |1 o' ?* g& [2 s% T
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
4 X8 U0 ]1 K: p( Y    4.2.4 GPIO_IRQ3中断源选择寄存器
- S: w- v2 o5 n. t; i  [9 L- V# O! v% [. S8 ^$ ^/ V9 t
    ! T7 f# g- }# u: i$ z( Y: I" y" \
    图6. [% m$ K" e" F# f5 w7 C6 n8 Q4 G
    15:6位:保留不使用;
0 g4 Z- o! `6 f; Q    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
: {5 T/ k" G& D4 W5 U    2.2.5 GPIO_IRQ4中断源选择寄存器  b- Y8 W' ]: I- {3 ^

( q1 ~2 Z! u1 I4 T. Y1 v     / F, I7 }% k. Q/ U9 y, S. a% L
    图7( b; v: [0 F+ y# \2 \$ w
    5:6位:保留不使用;& C- T& n7 N& A3 f8 {
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;& g* @5 a: K5 r. i
    2.2.6 GPIO延时寄存器/ K$ [: h  W( ^3 d* b' c
9 L$ ~, v# f% K# F# A  U3 ]
   " k1 V7 g9 I# q  n
    图8
/ j0 {+ A1 Y$ ?' V- e    15:14位:保留不使用;
4 @$ z9 |/ D+ K# D& w    13位:使能键盘接口延时计数;
$ H) L- U2 p. A+ O, B! m# ]" W2 m    12位:使能GPIO IRQ4延时计数;5 I3 T4 O6 I; U
    11位:使能GPIO IRQ3延时计数;
3 C1 O& ?: b, M6 [* X    10位:使能GPIO IRQ2延时计数;4 j' X0 T+ C" N# P- ^- z  N8 M
    9位:使能GPIO IRQ1延时计数;
6 ~0 C- f* y% }$ o- H( F    8位:使能GPIO IRQ0延时计数;! N8 \- s6 O. P( ]
    7:6位:保留不使用;( C1 {6 v. s: h1 H4 C+ ^5 p
    5:0位:延时值,为N毫秒。' e- A' ?  _6 p5 j
    2.2.7 GPIO中断复位寄存器
! m" y: i9 {4 h2 @
. n0 n3 ~% i& L" U9 P2 `    / _4 S( ~7 W& J! F
    图9* f, ^0 [0 e/ S
    15:6位:保留不使用;) ?2 p3 q7 p  s5 S) n& s
    5位:对该位写1,则复位KBRD中断,读取返回0;& Z2 [6 _" `' A$ d% L
    4位:对该位写1,则复位GPIO4中断,读取返回0;* {- X7 F0 Q" ^' [4 W/ \# {
    3位:对该位写1,则复位GPIO3中断,读取返回0;- ^+ c: h  K3 c9 s' u7 h
    4位:对该位写1,则复位GPIO2中断,读取返回0;4 a5 r( G% [; R& ^1 I! j
    1位:对该位写1,则复位GPIO1中断,读取返回0;
" v6 c% R$ ^2 t9 w2 v    0位:对该位写1,则复位GPIO0中断,读取返回0。1 h0 |1 d0 k" y( O& S
    2.2.8 GPIO中断电平控制寄存器( p& ~% Y) b+ a; U5 {7 Y9 Q9 @

" }5 j4 q; \6 } . {8 C" h6 ]' D' O* ~
   
8 b+ |; W' ?% Y6 H8 [( \& o9 W    图10( k' ^; h( v3 d. _& U, D
    15:14位:保留不使用;
9 }& W2 T+ v3 C) ?. r' f    12位:在复位GPIO中断4时不需要等待按键释放,所以一个新的中断会立刻产生;& ^  d+ |- S! d6 Z$ b* s/ s  c
    11位:在复位GPIO中断3时不需要等待按键释放,所以一个新的中断会立刻产生;
+ C' A0 K9 l0 M" Q) l    10位:在复位GPIO中断2时不需要等待按键释放,所以一个新的中断会立刻产生;
+ z  f: e( U9 N5 B    9位:在复位GPIO中断1时不需要等待按键释放,所以一个新的中断会立刻产生;$ K# J$ @$ O2 J( `. i, E. ~$ b
    8位:在复位GPIO中断0时不需要等待按键释放,所以一个新的中断会立刻产生;
( d; _  s9 u7 _( x- p& j! Z! f    7:6位:保留不使用;
4 A. I0 O- R* f$ P# s' D# v; N    4位:为0则表示输入高电平产生GPIO中断4,为1则表示输入低电平产生GPIO中断4;
8 {  G, \. q, ^2 d, N# e    3位:为0则表示输入高电平产生GPIO中断3,为1则表示输入低电平产生GPIO中断3;+ _1 e% x) B% a" a
    2位:为0则表示输入高电平产生GPIO中断2,为1则表示输入低电平产生GPIO中断2;
( `: q  L0 X. K  C( ^    1位:为0则表示输入高电平产生GPIO中断1,为1则表示输入低电平产生GPIO中断1;
% V2 h( ~; o/ y% h3 A- u! r    0位:为0则表示输入高电平产生GPIO中断0,为1则表示输入低电平产生GPIO中断0;
& ~5 D2 v4 [* U! f. I. |    注:数据手册中该寄存器中没有标注13位和5位,可能是勘误。
; r9 Q8 H7 a4 b* x2 x    2.2.9 键盘中断源选择寄存器0
0 a1 [9 d, N. G. x8 Q, }1 N5 U
2 w) M! o/ Q* j% w7 u; ?9 H/ L    
' b+ A+ H3 ?5 f2 ~7 `    图11
+ V: m, H4 R( }    15位:为0则表示按键释放不产生中断,为1表示按键释放也产生中断;. ]( a$ n9 r; ]" B* M
    14位:为0则表示输入高电平产生KBRD中断,为1则表示输入低电平产生KBRD中断;1 E8 k5 E1 j& J) |) \2 n8 x
    13:8位:当按键按下,在不等于0的规定时间之后,自动产生重复按键中断,为0则禁止定时器;- U3 J! k% O/ Z! \) v+ f. z
    7位:使能P07产生键盘中断;, ?) G9 ?# t, e0 T9 s3 @9 W
    6位:使能P06产生键盘中断;! J) E: V  J, R9 |9 Y5 v% K
    5位:使能P05产生键盘中断;# W% O2 J9 ~( f6 C
    4位:使能P04产生键盘中断;8 @1 A1 A8 R$ x2 @" ^5 J
    3位:使能P03产生键盘中断;
% z# P3 U$ s5 s) W. Y1 w    2位:使能P02产生键盘中断;
* V. {: `8 Q* m6 B. `    1位:使能P01产生键盘中断;
( P7 {: r9 g) P7 s    0位:使能P00产生键盘中断。
* a! u( g% Y+ b4 E, d& n1 [    2.2.10 键盘中断源选择寄存器12 t% \5 K& ]+ l, A( ?# }

2 k  C5 n9 t3 ^- b" P    
$ I% ^7 g2 ^9 l/ S- L+ g    图12
7 e& w/ ~7 j. A$ n    15位:使能P15产生键盘中断;- |; [" L7 t- y; I5 `
    14位:使能P14产生键盘中断;
6 K1 y# m7 I0 ?, K2 X+ N% i8 L    13位:使能P13产生键盘中断;
5 k5 h! a: H8 h9 V* g    12位:使能P12产生键盘中断;! c( E1 b: y! R7 }' _3 d
    11位:使能P11产生键盘中断;
0 G2 @% k5 p7 ~. Y    10位:使能P10产生键盘中断;* u  k4 v, x$ ?: l
    9位:使能P29产生键盘中断;# E9 O( l3 C5 J. U4 `1 l; X
    8位:使能P28产生键盘中断。4 t8 I; f+ {9 E6 H
    7位:使能P27产生键盘中断;2 K" O2 e; h4 X0 d& i
    6位:使能P26产生键盘中断;4 l* I( G: k) S# q% h
    5位:使能P25产生键盘中断;& K+ p! W- x0 K) r
    4位:使能P24产生键盘中断;. a9 v5 R: G% z2 W, E$ D$ f; D
    3位:使能P23产生键盘中断;# B* }) g6 m) X  P8 O* d9 A, @
    2位:使能P22产生键盘中断;
* }5 h: ^, s% X* ~    1位:使能P21产生键盘中断;2 i1 Q/ S* r7 Y2 T. I* w5 ?: ?- d
    0位:使能P20产生键盘中断。/ C  a9 v, K$ H1 b8 C* e( w
    2.2.11 键盘中断源选择寄存器2
6 b& K" Z4 e- U+ o6 D  L
- O& D$ Z7 q/ ]8 J+ y. k+ i, ?4 Z% G    ( s1 i4 q- s+ c) P6 }6 L1 f
    图13& r/ v; Q0 i/ [8 L  F8 m
    7位:使能P37产生键盘中断;
: d# y2 r3 y% ^) d* E    6位:使能P36产生键盘中断;
/ l9 V6 x1 G- z+ l( y3 |+ Z( l    5位:使能P35产生键盘中断;
2 |! H7 z! }7 B. V1 c' E7 P    4位:使能P34产生键盘中断;0 ^- F, h) ]) Q
    3位:使能P33产生键盘中断;; d1 c( a' W& `- X! \* w
    2位:使能P32产生键盘中断;
* U; ^1 f2 {8 H  P+ F* u- m7 A    1位:使能P31产生键盘中断;
& s2 N$ w$ w% v+ p4 }# w    0位:使能P30产生键盘中断。
) J3 a% H9 h8 C; J    2.3 寄存器配置讲解: M# q' _$ p+ ~5 y: ]$ g
    #define GPIO_IRQ0_IN_SEL_REG        (* ( volatile uint16*) 0x50001400)
7 W, {2 }6 D& g  f0 ^0 D  t    #define GPIO_IRQ1_IN_SEL_REG        (* ( volatile uint16*) 0x50001402)
1 R' A; {' k2 T0 S% p# Z$ M* v    #define GPIO_IRQ2_IN_SEL_REG        (* ( volatile uint16*) 0x50001404)
4 b( y1 `1 |6 L' k: q; |$ F7 a    #define GPIO_IRQ3_IN_SEL_REG        (* ( volatile uint16*) 0x50001406)4 \- b; w2 b; O, M# g  h
    #define GPIO_IRQ4_IN_SEL_REG        (* ( volatile uint16*) 0x50001408)5 K: _/ y; h1 E% [/ Y* x; n
    #define GPIO_DEBOUNCE_REG         (* ( volatile uint16*) 0x5000140C)
8 L: D( l6 ~3 F5 `    #define GPIO_RESET_IRQ_REG          (* ( volatile uint16*) 0x5000140E)
& m0 v" S$ p/ |2 ?  y* n5 l    #define GPIO_INT_LEVEL_CTRL_REG     (* ( volatile uint16*) 0x50001410)
) X3 Z* _- J' o8 Q, @    #define KBRD_IRQ_IN_SEL0_REG        (* ( volatile uint16*) 0x50001412)
. v6 Z: o  o+ Q+ K1 q    #define KBRD_IRQ_IN_SEL1_REG        (* ( volatile uint16*) 0x50001414)
) b% D' u  P# N, }- l+ D    #define KBRD_IRQ_IN_SEL2_REG         (* ( volatile uint16*) 0x50001416)* S& y$ H" d1 F, `1 j% G1 W
    例1:P02为GPIO中断1的中断源,延时20毫秒,高电平产生中断,等待按键释放,如下所示:3 N' ?3 a6 I7 `) ~) w
    GPIO_IRQ1_IN_SEL_REG =0x0003;
4 [' `0 a) h8 j2 t  P    GPIO_DEBOUNCE_REG =0x0114;# {, a3 d& Y, e- J+ N% c  A& a
    GPIO_INT_LEVEL_CTRL_REG =0x0202;# B1 O9 B; r, \+ V' k" n3 R; ?
    GPIO中断1配置完成,在GPIO中断1的中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0002;这样才能进行下一次中断。0 M8 d1 n* D: C0 g
    例2:P03,P12,P28为KBRD中断源,低电平有效,释放不产生中断,不重复触发中断,延时30毫秒,如下所示:
$ c0 R" |4 a* i5 Z0 B% Q* U; @8 v    KBRD_IRQ_IN_SEL0_REG =0x4008;  u, ]( Z. B+ `; w
    KBRD_IRQ_IN_SEL1_REG =0x1100;
, J' y8 N- c' x" b# j9 _    GPIO_DEBOUNCE_REG =0x201e;
% a" ^  o; N, O% f    键盘中断配置完成,在键盘中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0020;这样才能进行下一次中断。$ E/ p: _1 J4 a* I  r8 T; U# o  A

9 c" F! Z( U5 m- ~6 \$ T& E/ a' g0 f7 J& L' d7 ?9 T' o
    第三节 中断实验( E: @2 @# N; z! i) M
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。% D+ y; T) ]& J/ P% c( ]
    使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:1 ]# F8 {" g/ }+ V/ B
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
! |6 C) i, l/ i+ U# c) }. ?+ `4 ^% M4 s$ @+ a
   
* i  e' y* |1 r    图14
% ?0 k. F1 e( t& [' i# d# Q    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:, b0 |, v, o: C- T0 X4 u! ^) @
- k) w0 S, o) _) f5 b( W" k4 J
   
. \$ Q3 d' D9 W0 @7 A, u6 e4 R    图159 o! U- U6 e9 U& ]0 L/ ^' \8 `% R, o
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。/ r- U8 q" O9 K
    打开中断实验的Keil工程blinky.uvproj,位于目录:3 ?  s! _' q9 W3 X- a5 ^; P- a
    ..\WT_Mobile\1.初级教程\DA14580\4_初级_中断\projects\target_apps\peripheral_examples\interrupt\Keil_5,如下图所示:
. K) P0 `, U1 n3 a8 E9 [% _- Z9 u5 a# d& C; J
   + _7 d- m5 {3 h& f2 X
    图16
# {+ r% l" ~; {' D* q. U    在KEIL中编译源代码,点击DEBUG,然后点击全速运行,如下图所示:
7 n' a! G* ^. R; h/ v9 m
& ~: e/ }0 u9 z2 T0 D0 n( m3 f   X) S  X% T! P4 b8 B( H) S
( ]+ V  a2 ^0 r' V% F  z1 ]+ I
   
: |8 ~( ~3 V! A) m6 p9 V4 q8 N    图17
' f0 N( Z5 O# s5 M    全速运行之后,将杜邦线的一头接在3.3V引脚上,另一头碰一下P13引脚,即可进入P13对应的外部中断,执行中断内的程序(点亮LED),碰一下P12引脚,则进入P12对应的外部中断,执行中断中的程序(关闭LED)。注意:因为中断触发方式为边沿触发,碰上之后再断开才有效。
: v# I8 [7 a% d% C, w0 N" F( }( K8 _% |1 ~& T& P4 S( d4 `  n

$ h6 t6 c+ [3 {. H
6 o' X5 b8 U6 w. V5 |6 w: D    配套资料:http://www.fengke.club 7 h' }) O' c  ], h. ~
    套件地址:http://shop115904315.taobao.com/5 d1 l& o3 _0 w7 u
    文件下载请点击: 中断教程.pdf (1.09 MB, 下载次数: 0) 5 U. O4 K3 j$ L/ J" e# ]
9 L, p- X' z+ O% E4 o) B
0 `$ q' m. N- }
  • TA的每日心情
    开心
    2022-11-22 15:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-22 11:27 | 只看该作者
    支持24个中断
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-23 18:53 , Processed in 0.171875 second(s), 27 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表