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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
中断实验教程
——疯壳·开发板系列
' v8 H3 `! H4 M- b  U
) T3 |# v! j: p8 U) q% n# y
   
$ N  T/ }5 K) Y) h4 I) x    图1
; [' D1 K* y$ F" w+ T5 @$ [
4 a0 B8 `* U0 C. H6 h    第一节中断硬件电路( B0 G1 H1 c! H% M6 G
    将P12、P13配置为中断输入口,P12和P13已通过排针引出,如下图所示:
! [- C2 g: E" }- v& |
* Q; B; O1 [, L# ]   
- Y! g5 b, h) [( g   
' r& W7 k# D7 u0 W5 N! h    图2
3 x1 `* M3 G: X( D* Z- N& y- j: G3 Z' j* f3 y8 d, J+ L+ ^1 Z. A
, l2 P3 ^$ T% O5 H5 v
    第二节 中断5 b% {3 s1 n& ^1 W  E
    2.1 中断介绍
# Z# W7 ?) P7 I& Y$ B+ p: u; h4 m        芯片内部有嵌套中断向量控制器(NVIC,Nested Vectored Interrupt Controller),支持24个中断,能够中断配置与处理异常代码。当发生一个中断请求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有4个不同的可编程的优先级,NVIC自动处理嵌套中断。对于安全关键系统,有不可屏蔽中断(NMI,Non maskable interrupt)输入。5 Z( w! B5 `! y* g  R
    DA14580内部有一个键盘控制器,可以用于延时GPIO信号进入的时间。可以检测所有的I/O口的电平变化。当检测到信号时,可以产生中断(KEYBR_IRQ)。同时,另外有5个中断(GPIOn_IRQ)可以被GPIO口触发。
$ W2 d' B! x8 B8 F    2.2 寄存器介绍- ^1 c6 L" S3 M. ~, a: S% Z
    2.2.1 GPIO_IRQ0中断源选择寄存器
- G) z* k% O& a: l3 d* @' A/ i0 Z6 q0 @0 e9 I0 U
# f; B( P' U. T7 {  Q
    5 F( a+ V4 \( U8 L0 f5 |! H# q, h
    图3
! s5 M; [9 B8 n' o5 t    15:6位:保留不使用;
7 p1 q' P6 A+ a+ h5 L: Z9 {    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;$ w2 {/ ^* y+ F7 J5 e/ v
    2.2.2 GPIO_IRQ1中断源选择寄存器  p2 `: D$ u& O" I
* U+ L0 Z) ]3 X( r6 \5 {
   
% `  g  c0 q$ e. e4 d; [- u5 O5 Z    图4
& l' K' z. I- i9 @) \    15:6位:保留不使用;
$ k8 F2 L9 i7 m4 y2 ^0 S8 p! Q5 o    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
* ?, ~$ ^9 k) y$ \    2.2.3 GPIO_IRQ2中断源选择寄存器
9 P! l9 }/ C9 x  b+ w7 [/ z
: M) ~6 N) _# i6 Z; V$ r    $ Y- b3 N  C( ^4 ^
    图59 k4 V8 p/ l0 x" v
    15:6位:保留不使用;9 o, i7 @0 Y6 w! X1 u% Q# Y/ n
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
) t* v( u/ Q6 C- a. R# l    4.2.4 GPIO_IRQ3中断源选择寄存器
" N! j! M: D' s9 P6 M0 t, _
+ C. ?+ v; r: f0 d3 s9 ~    
6 i+ ^- |2 W5 Y% s! V* j    图6: v( S+ h' Q0 v7 @" o
    15:6位:保留不使用;+ h/ K  ]; ]" [+ k9 `- V' s
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
& ?+ o& B" U7 X! o: T' s    2.2.5 GPIO_IRQ4中断源选择寄存器
  l$ ?, M* `; ?7 f8 m% v  H; w0 \
   
7 j  Q. P( R& k# L' G' s9 k+ v" H    图7
$ e7 y; ^" @7 d3 x    5:6位:保留不使用;3 C7 R- Z4 Z  D9 Y: o
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;4 c& W1 W; N& q4 u# P
    2.2.6 GPIO延时寄存器6 Y. b& g) V' N. S  ?* w
( S) i) x  r/ O+ h+ y
   ; P6 u6 i0 H9 g7 u1 w% H  L
    图8
) W2 j; {) e( Z; w/ x    15:14位:保留不使用;4 u! ?6 z, N6 p
    13位:使能键盘接口延时计数;
: Q# I8 J+ P8 [) k+ B: f; m7 ^* y    12位:使能GPIO IRQ4延时计数;
% p, B& F" n4 Y7 Y- {1 n8 P, o$ b0 ^    11位:使能GPIO IRQ3延时计数;1 r) c* r! y( ~- Z
    10位:使能GPIO IRQ2延时计数;8 U. G2 _1 ]0 H  t$ [
    9位:使能GPIO IRQ1延时计数;/ j9 P- p) K. M
    8位:使能GPIO IRQ0延时计数;
8 j) J3 I' Z% v6 f& G. H    7:6位:保留不使用;9 K5 l) v" d+ l; B
    5:0位:延时值,为N毫秒。8 y1 v7 Y# s& f7 @& r2 e4 e' t5 k6 a1 t
    2.2.7 GPIO中断复位寄存器. M0 `: [% p4 V- P4 N) b
3 |9 a" I, P( ?/ z
   * |; c8 |0 Y7 w- P5 I4 Y( P
    图9* C: n9 n; O0 R# L' Q: `
    15:6位:保留不使用;
+ }' K3 Q! q. h6 J! L1 ~" k    5位:对该位写1,则复位KBRD中断,读取返回0;) Z. J, n- k/ P7 A2 t$ k2 E
    4位:对该位写1,则复位GPIO4中断,读取返回0;
: G6 I6 p; N3 a+ j, Q% ^8 g    3位:对该位写1,则复位GPIO3中断,读取返回0;6 a' C5 H3 X/ H; j" Z) Z* K
    4位:对该位写1,则复位GPIO2中断,读取返回0;
% p( Z/ e0 l5 O( }. M4 F, L$ w+ z    1位:对该位写1,则复位GPIO1中断,读取返回0;
. y$ J$ \7 V$ U% o* F$ h% g    0位:对该位写1,则复位GPIO0中断,读取返回0。2 x: s6 o0 }7 y# v% h
    2.2.8 GPIO中断电平控制寄存器
6 P8 h( v6 e: h$ g5 Q2 N- S! m8 v, _8 x8 z

. s. P8 D) B. u7 e; p& J$ w) [0 ]    
3 v% b) Z, S7 y: E- l9 ~    图10: m' f5 q: y6 W! \
    15:14位:保留不使用;( A* @3 Z& [' q* ~1 q* k* f
    12位:在复位GPIO中断4时不需要等待按键释放,所以一个新的中断会立刻产生;
% F2 y5 M4 }9 w  c2 j    11位:在复位GPIO中断3时不需要等待按键释放,所以一个新的中断会立刻产生;
: H8 ]1 _5 l/ s- j+ Y' ~    10位:在复位GPIO中断2时不需要等待按键释放,所以一个新的中断会立刻产生;
$ Q" ?4 M* o' o, |2 I7 W8 U    9位:在复位GPIO中断1时不需要等待按键释放,所以一个新的中断会立刻产生;
6 q* f: {, A; P. t    8位:在复位GPIO中断0时不需要等待按键释放,所以一个新的中断会立刻产生;
0 U% T+ P9 e  m: T2 I6 ~    7:6位:保留不使用;% L3 B$ m4 O2 ?% p5 A' _
    4位:为0则表示输入高电平产生GPIO中断4,为1则表示输入低电平产生GPIO中断4;, Y; i2 J0 A/ \: I
    3位:为0则表示输入高电平产生GPIO中断3,为1则表示输入低电平产生GPIO中断3;1 C. i, |* T/ `- k/ n* N7 |
    2位:为0则表示输入高电平产生GPIO中断2,为1则表示输入低电平产生GPIO中断2;
2 h& R) a, s/ |% j. `6 f    1位:为0则表示输入高电平产生GPIO中断1,为1则表示输入低电平产生GPIO中断1;; y) {7 b- X7 G
    0位:为0则表示输入高电平产生GPIO中断0,为1则表示输入低电平产生GPIO中断0;; O: S8 x( |$ _% x2 R  K# c/ G
    注:数据手册中该寄存器中没有标注13位和5位,可能是勘误。
: |1 p3 [% u7 J( ]+ Y" c    2.2.9 键盘中断源选择寄存器0
6 s5 S9 I6 T. s  z# G9 o& k' _  {$ b/ u+ \1 r
    $ p1 {' m* b4 p5 X* E+ C
    图11' P# @% ^( u9 v, Q  D
    15位:为0则表示按键释放不产生中断,为1表示按键释放也产生中断;
5 }& |; x- ]0 _3 d  ^; v6 r    14位:为0则表示输入高电平产生KBRD中断,为1则表示输入低电平产生KBRD中断;
3 U* z$ W2 {( Y) ]5 a) I# [8 R. m: ?    13:8位:当按键按下,在不等于0的规定时间之后,自动产生重复按键中断,为0则禁止定时器;
2 U$ ]" g3 r; H# f# U; R. Q    7位:使能P07产生键盘中断;
- j8 y. N2 X" l; k    6位:使能P06产生键盘中断;0 m9 f) b( l1 \7 A
    5位:使能P05产生键盘中断;+ K$ F( A0 k/ Q  f
    4位:使能P04产生键盘中断;
3 Q# R3 W, ^/ `! G    3位:使能P03产生键盘中断;
# j* L8 t3 G3 n! H4 h5 r2 ~, l    2位:使能P02产生键盘中断;
" j, F8 I$ ~. @+ T" x    1位:使能P01产生键盘中断;6 Z$ s) U1 c8 |
    0位:使能P00产生键盘中断。
) w: e- Q8 p5 G3 W7 j    2.2.10 键盘中断源选择寄存器1: i: {" n) a" M+ ^( z
, [. N7 {  f( r% ]' A
   
) P" |5 \) A0 U$ X    图128 S: {+ G3 i; C+ F2 x, c
    15位:使能P15产生键盘中断;6 `$ K" {0 u( I6 `/ C4 `
    14位:使能P14产生键盘中断;- x0 M; i9 e7 ~# O
    13位:使能P13产生键盘中断;2 J& v' E$ [/ c1 h
    12位:使能P12产生键盘中断;
; z* F' O! W) G' {: U  E; F    11位:使能P11产生键盘中断;* K6 G$ F2 D, R( E* ^( ^  x, e5 M
    10位:使能P10产生键盘中断;
- @- K) \2 x8 ^+ i    9位:使能P29产生键盘中断;
) U9 [# l5 B, L- q  H! V' w; X! [    8位:使能P28产生键盘中断。' Z9 m1 Q5 b. h5 Y  Q
    7位:使能P27产生键盘中断;; \" g" d! m' L9 a3 ]4 l
    6位:使能P26产生键盘中断;
& ?2 u4 s1 t3 J) ^4 J( O- T    5位:使能P25产生键盘中断;
1 T& _: c1 K/ M# A% F    4位:使能P24产生键盘中断;
" q  k, Q) G% F: ?3 r  x    3位:使能P23产生键盘中断;3 z5 N. ^, g& R
    2位:使能P22产生键盘中断;# B6 R' H/ V$ ]5 }- A/ B  C. T+ R
    1位:使能P21产生键盘中断;
+ n% e4 ~; d7 }. T4 L    0位:使能P20产生键盘中断。
. r$ a* F5 u* {7 S& {$ }    2.2.11 键盘中断源选择寄存器2( h3 q+ O6 t- n
+ _! [; }/ x( }; [, T
   
9 I  W* R3 Y& C0 C+ M( c* A& [( u8 ?    图13( Y7 Z3 D$ Q( o7 R
    7位:使能P37产生键盘中断;
! e; M3 q; `1 i. S. l- |; W    6位:使能P36产生键盘中断;) f. b: I8 l4 y9 A( Q; q7 ^7 B7 J/ O
    5位:使能P35产生键盘中断;2 r7 ?& q+ m4 v, a/ [3 f
    4位:使能P34产生键盘中断;) p# e  f4 g$ ~! G
    3位:使能P33产生键盘中断;
" s- z+ y1 M, [: S    2位:使能P32产生键盘中断;: k/ I. V  i. `6 W% ~9 u
    1位:使能P31产生键盘中断;" {% B! s3 X2 h, d# T" y
    0位:使能P30产生键盘中断。1 x5 a- x8 T/ C) a4 X
    2.3 寄存器配置讲解  z6 d" P+ i) ]& D5 Y4 A
    #define GPIO_IRQ0_IN_SEL_REG        (* ( volatile uint16*) 0x50001400)
0 N6 q9 q7 |; e; W3 x! E" E% E# Q    #define GPIO_IRQ1_IN_SEL_REG        (* ( volatile uint16*) 0x50001402)
; d1 ^- @* C! Q: E    #define GPIO_IRQ2_IN_SEL_REG        (* ( volatile uint16*) 0x50001404)! @" r3 B" S+ o; n! w
    #define GPIO_IRQ3_IN_SEL_REG        (* ( volatile uint16*) 0x50001406)3 {- D3 W4 p1 Z" t  Z3 M1 b
    #define GPIO_IRQ4_IN_SEL_REG        (* ( volatile uint16*) 0x50001408)" t8 ^4 S  f7 }2 w7 C# D
    #define GPIO_DEBOUNCE_REG         (* ( volatile uint16*) 0x5000140C)
: D9 L) b" Y( z, S0 x" ?) G! U    #define GPIO_RESET_IRQ_REG          (* ( volatile uint16*) 0x5000140E)
" o4 A) V1 m2 H: H7 e5 Z) i+ f    #define GPIO_INT_LEVEL_CTRL_REG     (* ( volatile uint16*) 0x50001410)* K9 |* `- ^; a# c5 }$ R( e
    #define KBRD_IRQ_IN_SEL0_REG        (* ( volatile uint16*) 0x50001412)8 K- o" t; _; g3 r; @% b2 }7 g
    #define KBRD_IRQ_IN_SEL1_REG        (* ( volatile uint16*) 0x50001414)
' h# A! y1 Q+ d0 ?2 d6 }    #define KBRD_IRQ_IN_SEL2_REG         (* ( volatile uint16*) 0x50001416)
% R8 t4 ~) k0 V9 H" Y" \: f  e    例1:P02为GPIO中断1的中断源,延时20毫秒,高电平产生中断,等待按键释放,如下所示:
+ `( O2 V% ~  Z6 a" ?9 {+ O( V: r9 `    GPIO_IRQ1_IN_SEL_REG =0x0003;
; v+ \  ?) l' O2 y    GPIO_DEBOUNCE_REG =0x0114;
1 ]& `# s+ w2 m$ x) {% x    GPIO_INT_LEVEL_CTRL_REG =0x0202;4 T: z. Y4 [' r. F0 C
    GPIO中断1配置完成,在GPIO中断1的中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0002;这样才能进行下一次中断。
+ u) v6 o4 Y* J% P    例2:P03,P12,P28为KBRD中断源,低电平有效,释放不产生中断,不重复触发中断,延时30毫秒,如下所示:* \4 s; A* H: N+ u" X* ]. a
    KBRD_IRQ_IN_SEL0_REG =0x4008;* E" a5 _4 `9 `, `
    KBRD_IRQ_IN_SEL1_REG =0x1100;& D4 [$ Q( ]+ f
    GPIO_DEBOUNCE_REG =0x201e;; o# X8 X5 B9 d/ S# \  j
    键盘中断配置完成,在键盘中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0020;这样才能进行下一次中断。7 J2 j& }' H! b- D) s4 v$ a5 \
. U3 e' w) l4 d5 h
5 C$ ?5 `, ^2 ]4 x
    第三节 中断实验% N, @! H3 X1 }0 R) V  s
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。
8 D4 r* a4 G3 J' S  o# V    使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:
' f8 o) c& c: E, m. ~    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
0 P$ S; c, z% x& X. |$ g; N/ r) d+ C% M2 B8 k9 o1 b; D
   
) o4 m3 _+ x6 h6 W) z    图14
1 U% l' ^+ f8 O3 D9 I    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:8 I- v% B8 E0 b% N
, P' T2 `) e/ h# @1 |) U
   
& f( w, \) t/ [. v    图15
9 s7 v, s* e% n0 z' c  A    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
$ w3 L$ i2 P# [    打开中断实验的Keil工程blinky.uvproj,位于目录:
& g6 o  {4 d" D6 v6 E    ..\WT_Mobile\1.初级教程\DA14580\4_初级_中断\projects\target_apps\peripheral_examples\interrupt\Keil_5,如下图所示:
  Q( M# i8 d6 k' S( q
7 I+ j7 k& k" g0 b  O0 x3 A    ! ^: `$ Y0 A& b  x
    图16
/ \* _$ L& Y# T    在KEIL中编译源代码,点击DEBUG,然后点击全速运行,如下图所示:
; U) O5 _, R, G8 D; r, x& z$ P0 l. `7 O. {- P. t1 R! }
$ o, G, V) `5 v& m( N
4 d0 v3 B  P4 h$ R% H1 A! O3 S
   ' a: ~8 h" P. {! m& r7 M: q
    图17
2 y% X! u7 _# i3 F1 M# q4 R- P9 }    全速运行之后,将杜邦线的一头接在3.3V引脚上,另一头碰一下P13引脚,即可进入P13对应的外部中断,执行中断内的程序(点亮LED),碰一下P12引脚,则进入P12对应的外部中断,执行中断中的程序(关闭LED)。注意:因为中断触发方式为边沿触发,碰上之后再断开才有效。+ P+ M+ m" ~, f" @- T9 |* k

# g7 ]; d( P# G! h" q7 |6 M
- u3 ^: @0 H  x8 ~; B- @! ~: m" Q+ ~# F( \9 Y& o
    配套资料:http://www.fengke.club $ h- I& E- E  |: w8 t7 c  U
    套件地址:http://shop115904315.taobao.com/
9 F2 }$ z, j" V. c0 F% O2 k: q    文件下载请点击: 中断教程.pdf (1.09 MB, 下载次数: 0)
( J% S& o* v* `* Y$ s+ c
/ c( {9 i& G6 K& ~& I8 |, g' g6 b9 Y: U2 [9 z
  • 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:01 , Processed in 0.203125 second(s), 26 queries , Gzip On.

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

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

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