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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
中断实验教程
——疯壳·开发板系列
* A- ?6 C% X" X3 @/ I
7 H- P1 C/ M6 ~2 ~# V0 o
   
4 L# b6 J& w- o7 z; @+ `' x" e    图1! w: K! W# H$ [4 }3 |) J( I

* r$ K1 ~9 j* ~( j! u    第一节中断硬件电路- N3 W  w* Y1 k$ W' |
    将P12、P13配置为中断输入口,P12和P13已通过排针引出,如下图所示:
( K( ~1 e3 y7 C% Y* b9 a& `3 e# h  f+ k+ H1 S
  + a9 W  g$ E: E% d, ?
  
4 A# o+ A8 b+ p% C    图2
) e1 _# @$ i5 k" ]5 e& e. m  J: c1 C4 }' Y0 }. f

3 J  `) j& ]" A* P    第二节 中断
# k0 J+ ~# L4 x3 g8 ~1 d    2.1 中断介绍
* r- ]0 ~4 v  {& y' ~$ \        芯片内部有嵌套中断向量控制器(NVIC,Nested Vectored Interrupt Controller),支持24个中断,能够中断配置与处理异常代码。当发生一个中断请求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有4个不同的可编程的优先级,NVIC自动处理嵌套中断。对于安全关键系统,有不可屏蔽中断(NMI,Non maskable interrupt)输入。
) T9 [8 N; g  ?3 M( k  v" z    DA14580内部有一个键盘控制器,可以用于延时GPIO信号进入的时间。可以检测所有的I/O口的电平变化。当检测到信号时,可以产生中断(KEYBR_IRQ)。同时,另外有5个中断(GPIOn_IRQ)可以被GPIO口触发。
/ ~& U( A- F  z    2.2 寄存器介绍
9 H* g0 t* Y5 ?    2.2.1 GPIO_IRQ0中断源选择寄存器
2 W+ y; ^" J1 e- X# y+ c7 q8 f/ a' q" Q: h; A/ d. Z- j1 |4 b

, {5 d" l1 Q% H, U3 p    
, c) z- E" R( w( h# `6 ?    图3! e5 S& t- j" ^
    15:6位:保留不使用;9 Y. `1 S" G* D3 m0 u8 N- V) x
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;8 c+ S/ C2 f6 R# E! p
    2.2.2 GPIO_IRQ1中断源选择寄存器
9 g% x" z# K& o2 a! _7 B6 ?$ g
/ L9 _( ^4 h4 s8 K8 i" L: Y    
- b5 v( C2 p! [0 J    图4
* S6 r# W9 ^2 c* i* T3 f    15:6位:保留不使用;6 W2 r( T% Q, `* K8 Q
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;2 @: p4 V! V; _" a: V- }
    2.2.3 GPIO_IRQ2中断源选择寄存器% R" W1 i/ h1 Y& `3 [( F( c
  c; A) b" }, Z7 i: F4 }
   7 V5 [. f+ X4 V
    图56 t: ^( Y9 z) V. z$ L8 `5 A! G
    15:6位:保留不使用;
2 }& k: Y$ _  W" @    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
0 g: C0 _4 J* O, r    4.2.4 GPIO_IRQ3中断源选择寄存器" G3 d7 q' e& z9 u4 B

) F' U; p" u- l3 S/ K     ! x3 W. j- F8 G
    图6
( c+ O' L+ g9 m$ R1 C9 h: ]    15:6位:保留不使用;0 D, {8 o( n& D0 Q9 f) c; ^
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;* |* b0 Y" p- C
    2.2.5 GPIO_IRQ4中断源选择寄存器
# v8 i8 _8 s2 E1 S; b
- M* W/ h6 ~0 w- J     0 N: R9 }# q9 P% m1 A. T
    图78 C8 F7 o/ r% [" j2 y5 }0 k( @( _
    5:6位:保留不使用;
4 ^. a- W0 |/ ^) c) }    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
* s  y1 q: Z4 d    2.2.6 GPIO延时寄存器
. M% s$ {& Z# @1 J. S3 u, o( u5 `+ n
   # {' H$ C2 n, \  z+ ?
    图8. d! [/ D+ A  D; q1 G' B$ U( B
    15:14位:保留不使用;
- R6 T# F8 y( H    13位:使能键盘接口延时计数;
, @4 `. ^. W2 ~    12位:使能GPIO IRQ4延时计数;
& w0 R' v  s  d    11位:使能GPIO IRQ3延时计数;7 A3 x' p+ b# f: c
    10位:使能GPIO IRQ2延时计数;7 W+ n, C1 h6 B
    9位:使能GPIO IRQ1延时计数;
+ U" y7 L1 u# v& K1 {5 f' x! I    8位:使能GPIO IRQ0延时计数;9 f* P! s- H* k0 z
    7:6位:保留不使用;
- y: u: q/ w- Z9 A' C    5:0位:延时值,为N毫秒。% [4 ?( y' Q' O6 J; |9 ]' A9 m
    2.2.7 GPIO中断复位寄存器
' k7 W3 k: J* Y' W! ?1 s! Z4 N7 ?8 @* u4 ]' x+ L& V0 W( b
     I0 k+ ^0 g" I6 D% Z* g2 A) g
    图9$ C% F) v( q9 k0 [1 W; M) k
    15:6位:保留不使用;
1 P0 A4 t, H  }    5位:对该位写1,则复位KBRD中断,读取返回0;
  T0 h  G# H+ R" m. Z% d6 S    4位:对该位写1,则复位GPIO4中断,读取返回0;
0 g5 r' |) u. K: }- N    3位:对该位写1,则复位GPIO3中断,读取返回0;
% T0 q) |3 L8 x0 D+ x  l) K    4位:对该位写1,则复位GPIO2中断,读取返回0;
3 @& j5 w( k% B4 \$ |! u, G    1位:对该位写1,则复位GPIO1中断,读取返回0;( p# x; R* u/ H  I
    0位:对该位写1,则复位GPIO0中断,读取返回0。- G# X. Z3 w/ u' [+ R/ D, m, ^: D& Z
    2.2.8 GPIO中断电平控制寄存器
) c: N( u7 B7 l6 ^' E1 ]! z1 z/ l# n8 r; Y
3 L; L  V( C! D/ M: n& r
    : R6 `" a* v) S
    图106 A  ]& `& t$ ]2 e- n
    15:14位:保留不使用;! k0 \2 G) I' T; `
    12位:在复位GPIO中断4时不需要等待按键释放,所以一个新的中断会立刻产生;( ~; h; H( p# g& N  Y6 M0 G6 V
    11位:在复位GPIO中断3时不需要等待按键释放,所以一个新的中断会立刻产生;! J" G8 G! {: m/ S+ [
    10位:在复位GPIO中断2时不需要等待按键释放,所以一个新的中断会立刻产生;
% Q" |% m& x  ~6 C7 N( \0 S    9位:在复位GPIO中断1时不需要等待按键释放,所以一个新的中断会立刻产生;
; o5 h6 y3 }9 Z) |    8位:在复位GPIO中断0时不需要等待按键释放,所以一个新的中断会立刻产生;
; l, R, ~1 p7 ~; }    7:6位:保留不使用;5 F) K, |  d% Z9 o% }% ?, c. {  D
    4位:为0则表示输入高电平产生GPIO中断4,为1则表示输入低电平产生GPIO中断4;1 }) G) h0 t" v
    3位:为0则表示输入高电平产生GPIO中断3,为1则表示输入低电平产生GPIO中断3;
+ E4 t9 X+ N) e  \* h) O; j* P    2位:为0则表示输入高电平产生GPIO中断2,为1则表示输入低电平产生GPIO中断2;
4 ]5 y+ O' \7 _3 j    1位:为0则表示输入高电平产生GPIO中断1,为1则表示输入低电平产生GPIO中断1;
( `+ s7 U! v5 a- H" P    0位:为0则表示输入高电平产生GPIO中断0,为1则表示输入低电平产生GPIO中断0;# u$ w' z: [& p$ H
    注:数据手册中该寄存器中没有标注13位和5位,可能是勘误。" @8 y' J1 i+ l+ ^4 {
    2.2.9 键盘中断源选择寄存器0; H0 U2 p8 j' X* Y5 f% y

! d! @5 n' B% l$ M    
' p0 v, t; Y1 Q    图11
/ b! t) E% p4 k    15位:为0则表示按键释放不产生中断,为1表示按键释放也产生中断;& q! l" ?8 L! A8 G
    14位:为0则表示输入高电平产生KBRD中断,为1则表示输入低电平产生KBRD中断;2 r2 u) O+ X8 ?+ w' v9 Z8 O" L+ \
    13:8位:当按键按下,在不等于0的规定时间之后,自动产生重复按键中断,为0则禁止定时器;6 [5 w8 V5 V7 ^6 ^5 [! t
    7位:使能P07产生键盘中断;
$ ?4 a% z# M- U. W0 ~: T    6位:使能P06产生键盘中断;/ \3 p6 w4 ~0 N' y
    5位:使能P05产生键盘中断;. o' T9 [  B" t: \4 U. W$ X
    4位:使能P04产生键盘中断;
+ N$ B" j  R5 h* {0 @- V% F    3位:使能P03产生键盘中断;
( m3 Q$ B3 x/ p: A; Y2 `4 G    2位:使能P02产生键盘中断;$ {! F4 Q) K! `' g" Y& ]# O
    1位:使能P01产生键盘中断;& }3 r7 B6 T3 s, R
    0位:使能P00产生键盘中断。
0 X9 j; X% a9 }9 {    2.2.10 键盘中断源选择寄存器1
2 J. p) F) Q' {3 U0 e
; F7 T- k+ ]( M3 f8 [8 C) y* U    
8 ^: H) m  P# d' S. I3 A    图12
$ m/ O8 `5 c& `0 u0 f7 P) B    15位:使能P15产生键盘中断;
7 Q5 p, W; x- h. l5 J- ~    14位:使能P14产生键盘中断;
% M3 w& U6 S, {. t" z+ s    13位:使能P13产生键盘中断;
, N. z% s+ o: s% @1 O9 Q    12位:使能P12产生键盘中断;6 E: U7 N, H+ C
    11位:使能P11产生键盘中断;4 ?, N2 p; I8 b  g; q5 l2 l* D
    10位:使能P10产生键盘中断;) q* ^% U- d( v% P# s5 R
    9位:使能P29产生键盘中断;& b2 `+ N& Q$ }& t
    8位:使能P28产生键盘中断。4 h* V: K9 d/ }( H( w
    7位:使能P27产生键盘中断;
; M4 r! c/ ]. w) o% J    6位:使能P26产生键盘中断;
" [% n+ W6 M# G2 p8 @& a    5位:使能P25产生键盘中断;" V: `" g5 u) I6 |) w! a: J
    4位:使能P24产生键盘中断;/ B+ E' x; a* S$ X4 ~3 B
    3位:使能P23产生键盘中断;
! C+ R. a0 M% ]5 [. r/ i5 R7 z7 A/ v    2位:使能P22产生键盘中断;, F8 D, e$ \, ~% ^
    1位:使能P21产生键盘中断;
% a' }7 `, W  T- u/ B! c; q    0位:使能P20产生键盘中断。
9 {' H7 s5 C/ u    2.2.11 键盘中断源选择寄存器2
/ Z& K1 G1 O3 o8 P0 h, c  Q
9 a! @5 y5 W. e0 e8 j; H3 g    
* h; B0 h9 k! ^, ]: `; K    图13
/ N% n0 L5 H. S* U+ I    7位:使能P37产生键盘中断;
) v; [, F: K) t# K5 [    6位:使能P36产生键盘中断;/ i# |3 X7 f( f1 }
    5位:使能P35产生键盘中断;
6 n' Y6 j) n' e    4位:使能P34产生键盘中断;: p# L/ O" b3 W- e: |0 u! S
    3位:使能P33产生键盘中断;* x) s' f8 A* N4 G
    2位:使能P32产生键盘中断;
5 Z& F& ~, ~" L& i; f$ W# V/ f: c    1位:使能P31产生键盘中断;
2 I' V! k: e9 u+ L- \8 L+ l    0位:使能P30产生键盘中断。
  R0 U3 P' J' p7 i" T3 |+ y    2.3 寄存器配置讲解
7 P2 X* r6 S$ @5 A/ ^! E" X9 z    #define GPIO_IRQ0_IN_SEL_REG        (* ( volatile uint16*) 0x50001400)
! A9 Q5 J$ M  G" _0 u3 Q) f    #define GPIO_IRQ1_IN_SEL_REG        (* ( volatile uint16*) 0x50001402)6 l2 n. N2 I  Q& A2 K" X" v
    #define GPIO_IRQ2_IN_SEL_REG        (* ( volatile uint16*) 0x50001404)* I8 p' Y5 l$ q+ c: u, L% `/ ^
    #define GPIO_IRQ3_IN_SEL_REG        (* ( volatile uint16*) 0x50001406)
6 H% m9 S* v% b/ e% @( q    #define GPIO_IRQ4_IN_SEL_REG        (* ( volatile uint16*) 0x50001408)
: ]/ z& P8 Y. P    #define GPIO_DEBOUNCE_REG         (* ( volatile uint16*) 0x5000140C)8 X' c3 O1 G/ f* r
    #define GPIO_RESET_IRQ_REG          (* ( volatile uint16*) 0x5000140E)
, N4 d  q7 e& T4 ~) W: d- [# q/ j    #define GPIO_INT_LEVEL_CTRL_REG     (* ( volatile uint16*) 0x50001410)
8 {( k: u: [* g$ U: W    #define KBRD_IRQ_IN_SEL0_REG        (* ( volatile uint16*) 0x50001412)3 y6 {2 h. y6 d6 q. ^  {8 @
    #define KBRD_IRQ_IN_SEL1_REG        (* ( volatile uint16*) 0x50001414)4 P$ n; m# _1 N. {& v) U
    #define KBRD_IRQ_IN_SEL2_REG         (* ( volatile uint16*) 0x50001416): x1 J7 G0 I" j+ g8 i$ p4 q$ G4 |
    例1:P02为GPIO中断1的中断源,延时20毫秒,高电平产生中断,等待按键释放,如下所示:" d! e  O% e9 C  a3 R2 F
    GPIO_IRQ1_IN_SEL_REG =0x0003;
8 o2 V( S/ ]  Z- R8 e    GPIO_DEBOUNCE_REG =0x0114;- T! @  P; p. R/ ~; J
    GPIO_INT_LEVEL_CTRL_REG =0x0202;8 ?/ R6 V& L1 G4 s$ H
    GPIO中断1配置完成,在GPIO中断1的中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0002;这样才能进行下一次中断。
( N) \% h1 ?- r, n6 D& S. l4 C    例2:P03,P12,P28为KBRD中断源,低电平有效,释放不产生中断,不重复触发中断,延时30毫秒,如下所示:
  N  H3 }: d+ w" _    KBRD_IRQ_IN_SEL0_REG =0x4008;% r8 Z/ D; S: l( k0 w# X0 M
    KBRD_IRQ_IN_SEL1_REG =0x1100;
9 n4 l# j! B' \7 K    GPIO_DEBOUNCE_REG =0x201e;+ D- A- \( p1 O& T9 H+ y* l
    键盘中断配置完成,在键盘中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0020;这样才能进行下一次中断。
) f/ c% f1 Z3 d" ?, f/ ?7 r/ Y* u3 d* d5 }7 v+ R) [( f3 D; e

- j$ X# N/ E% }+ ?& f    第三节 中断实验2 d3 _3 ?1 k$ V! T- S
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。  I) J  e  D9 h1 l$ n" w
    使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:) V! H' D6 H& Y/ [, ~$ y
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:4 {- W* }) T& h, Y6 _7 |
2 ], W$ ^% }) b
   " f- H; x+ ?2 ?( u& P7 U  O
    图14
3 E9 A" M5 p& ^4 M8 M    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:) T( k4 g0 I2 U- H' m

  X; o# b( b9 l2 m# Q5 ^     ) a! _1 L% l5 i7 R
    图15! o. T' m! Y6 H; f' H
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。6 L4 j! Z) ~( P" J9 d1 l+ J* Q, S
    打开中断实验的Keil工程blinky.uvproj,位于目录:
! K' F! m9 c2 m, A' M4 R. I    ..\WT_Mobile\1.初级教程\DA14580\4_初级_中断\projects\target_apps\peripheral_examples\interrupt\Keil_5,如下图所示:; _. F1 G' a- J) f
+ h1 G# G* Y$ p! R
   
5 B5 U  R7 `  |# S7 l    图16" h1 Y! b5 {+ |
    在KEIL中编译源代码,点击DEBUG,然后点击全速运行,如下图所示:6 k: w: v0 I- E+ j& U
/ p( |  k" x# R# I

. s; d3 x/ x8 i) d9 p% c! |1 Z- z! Z! ?+ R# ?# h, ^" A8 v
   
$ k) U9 M: W3 _% q& J3 s( D6 Q% ^) e    图17
* R2 s/ _7 F% O    全速运行之后,将杜邦线的一头接在3.3V引脚上,另一头碰一下P13引脚,即可进入P13对应的外部中断,执行中断内的程序(点亮LED),碰一下P12引脚,则进入P12对应的外部中断,执行中断中的程序(关闭LED)。注意:因为中断触发方式为边沿触发,碰上之后再断开才有效。  s4 i4 _0 x4 H( d' ]2 I6 q
; [9 I) w+ C- w& |5 u8 d- l  e/ I
+ |9 C6 A4 V3 F) I6 ~

% N( X, Y7 [0 ~* j2 }8 j    配套资料:http://www.fengke.club ( X6 N9 D$ w& @5 I& Q; T  U0 L
    套件地址:http://shop115904315.taobao.com/
$ P8 C! F3 `- Z  v3 g/ ^7 k1 c    文件下载请点击: 中断教程.pdf (1.09 MB, 下载次数: 0) 2 X6 \  ~2 K2 c# e$ N" [0 R6 R

, W& N0 g% s) ?7 |# N( Q
- }9 m3 ]1 x1 Q- N8 W& f6 M
  • 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-6-19 14:44 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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