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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
中断实验教程
——疯壳·开发板系列

+ {/ d+ y$ G; J7 @; F  z9 L: ^' R0 N8 _+ d
   1 v$ ]- l0 V3 ^( j8 v( x4 p4 D0 g
    图1
5 e) ]9 Y: L6 x: A4 A& @" ]5 s# S' n# j6 X+ a$ v
    第一节中断硬件电路
. f& N$ Z1 k+ S    将P12、P13配置为中断输入口,P12和P13已通过排针引出,如下图所示:
% M) F# e- v0 k) Q8 o, G; d) g8 K  \0 U( f. G
  
1 A( E5 O  n2 _! |# f   : [' t7 C* ~1 u6 U) ^: p
    图2
- J1 Z! p3 ?5 W6 b( n  |! g, _5 j4 Q. W. V5 o; ^
( B( d: Y3 j: l, m
    第二节 中断
% K; {& G" v3 j: l    2.1 中断介绍
6 B' [! H$ N8 t( N: Z        芯片内部有嵌套中断向量控制器(NVIC,Nested Vectored Interrupt Controller),支持24个中断,能够中断配置与处理异常代码。当发生一个中断请求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有4个不同的可编程的优先级,NVIC自动处理嵌套中断。对于安全关键系统,有不可屏蔽中断(NMI,Non maskable interrupt)输入。* M$ i4 F& T- b; P, X( a4 Q2 U" D
    DA14580内部有一个键盘控制器,可以用于延时GPIO信号进入的时间。可以检测所有的I/O口的电平变化。当检测到信号时,可以产生中断(KEYBR_IRQ)。同时,另外有5个中断(GPIOn_IRQ)可以被GPIO口触发。# w# ]+ i3 P8 a/ a
    2.2 寄存器介绍  ~6 X$ ]! E8 _1 ^8 y
    2.2.1 GPIO_IRQ0中断源选择寄存器
, E4 j; k/ k5 B( \9 H# n
6 w9 Y% }7 }+ r8 o4 k# x
3 d) }& @2 H) j* @7 |* x0 v     " Q! U8 Y) Z- A- q+ ^  ~
    图3
; }7 P  i, j2 y. E. D  ~1 n) M9 \    15:6位:保留不使用;
+ x( |& L; D, k$ i    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
6 V2 p. b& @8 X5 ?" F" \1 _    2.2.2 GPIO_IRQ1中断源选择寄存器, H) U) H, D1 _5 s, X) w0 V; J. z
6 D; q; F# X' u& U5 R
    ; ^- z: _' t# l) e  H4 o& l
    图48 R# c  o9 b$ Z9 Y# [$ u! W
    15:6位:保留不使用;% e& G0 R8 T7 Y
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
, G* B. p. {" r* t3 f    2.2.3 GPIO_IRQ2中断源选择寄存器
" t, n) k) p6 J! b8 o
, C) d# x8 ]; e) K4 }    ( C1 R6 [& I" S/ ~8 X5 W0 c) a: g
    图5; I) d, T! d/ w: ?
    15:6位:保留不使用;
% u- j2 {, Q; c- X# \8 e    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
. p% H* a' N) o+ V) g4 C    4.2.4 GPIO_IRQ3中断源选择寄存器6 y3 G4 m' P$ F/ [' r5 p: g$ p
; K; L" M+ _8 A) N" M
   
: E& b% r+ H+ ^0 a  C# u( o    图69 n. o) D2 x- Z) P$ a
    15:6位:保留不使用;
0 [. s6 |# G0 |, O    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;$ `; a0 A  i+ U  v3 V# A# m+ ~
    2.2.5 GPIO_IRQ4中断源选择寄存器. g: M1 @% y$ f- }
9 _3 P" ]4 D) y$ K3 W" [
    6 N( u; U7 K5 k% N, J; v
    图7
. x' o8 p# t" ^+ C. N% m3 r    5:6位:保留不使用;5 z. B3 H6 G: K
    5:0位:中断源选择,1~32分别对应选择P00~P37,其它值不选择任何引脚;
, q6 H, ]. U2 l, E* Z. e    2.2.6 GPIO延时寄存器0 o" G& z" g: P1 K6 X* u

" Q4 U: S: c8 q9 k4 g    * j$ j/ ]. E* E! q7 [7 `
    图89 a5 Q! C4 v: C5 [* r
    15:14位:保留不使用;
8 F+ H; Q. D* R' U6 u5 Y    13位:使能键盘接口延时计数;  V  f6 C& ^% o$ S
    12位:使能GPIO IRQ4延时计数;* U6 f; O, H; J* u% v* o$ q
    11位:使能GPIO IRQ3延时计数;+ m& h* P% a6 H, S, \
    10位:使能GPIO IRQ2延时计数;
( l1 N$ K2 G- Z6 p+ R( I  H    9位:使能GPIO IRQ1延时计数;
1 h9 T& L  A, x: y1 M9 w5 y% y3 e    8位:使能GPIO IRQ0延时计数;8 {- Z6 G6 I- [9 I4 t
    7:6位:保留不使用;0 M( ]; N- \, R# A% d$ v% L2 _* ?" K
    5:0位:延时值,为N毫秒。) B/ K! `1 e: k/ P' P! u
    2.2.7 GPIO中断复位寄存器! N. K  H* ?; L

& e' u, a: W( x) G    
1 V1 x& X# j- K" x, z& E: f/ V: p    图9
6 `( o9 {2 |  R( q' f3 @8 @( O! p    15:6位:保留不使用;# c5 o( K6 O2 L. K
    5位:对该位写1,则复位KBRD中断,读取返回0;
1 I5 x% [) {- m    4位:对该位写1,则复位GPIO4中断,读取返回0;% C' a, M& `, @! x; ^8 g. p
    3位:对该位写1,则复位GPIO3中断,读取返回0;
% x, O% j5 \8 a7 a5 A% x    4位:对该位写1,则复位GPIO2中断,读取返回0;4 x" j* T* u* I- c% `* l
    1位:对该位写1,则复位GPIO1中断,读取返回0;
* r) u" n- M4 O& x    0位:对该位写1,则复位GPIO0中断,读取返回0。
$ h# P# r+ B% Z( ~% y) }    2.2.8 GPIO中断电平控制寄存器4 N# C* e! Y5 i4 T. v

% f% i+ A5 X! d9 S- k 0 `# Z6 e8 @0 {2 J- _5 K( i
   
: p5 z  i+ l1 j3 y1 z' |! @& d4 H    图10( J7 W/ b9 o3 q3 _; v1 w' c4 d
    15:14位:保留不使用;
6 F5 D9 y, M6 q9 @" D    12位:在复位GPIO中断4时不需要等待按键释放,所以一个新的中断会立刻产生;
+ c+ W# l+ _( s8 C    11位:在复位GPIO中断3时不需要等待按键释放,所以一个新的中断会立刻产生;
% o6 p. R6 }' X! }9 h% W+ X    10位:在复位GPIO中断2时不需要等待按键释放,所以一个新的中断会立刻产生;, g* A& R+ T6 V
    9位:在复位GPIO中断1时不需要等待按键释放,所以一个新的中断会立刻产生;9 o5 f% ]9 D  c8 y6 ~9 d( h' q! _
    8位:在复位GPIO中断0时不需要等待按键释放,所以一个新的中断会立刻产生;
/ w# g, ~. A" O  T4 N  Y    7:6位:保留不使用;6 r6 b3 B2 t% l
    4位:为0则表示输入高电平产生GPIO中断4,为1则表示输入低电平产生GPIO中断4;" U  Z8 Z0 U2 c
    3位:为0则表示输入高电平产生GPIO中断3,为1则表示输入低电平产生GPIO中断3;
' |6 P+ v" B9 d( t    2位:为0则表示输入高电平产生GPIO中断2,为1则表示输入低电平产生GPIO中断2;
9 j9 o8 _& Q) Z- g+ T8 x, g+ @    1位:为0则表示输入高电平产生GPIO中断1,为1则表示输入低电平产生GPIO中断1;
( k4 L, }0 z- p8 h% m, H, y2 N0 h    0位:为0则表示输入高电平产生GPIO中断0,为1则表示输入低电平产生GPIO中断0;
6 h2 ?: n5 Q( n- c2 f* |    注:数据手册中该寄存器中没有标注13位和5位,可能是勘误。
8 f- _. M- i# o/ A. u& W2 Z- W    2.2.9 键盘中断源选择寄存器0  l7 d" a. S/ g  M  |. u% k) e
0 s6 Z- \0 k" ^$ x
   
$ a6 V7 o* N6 J  V" `    图11
/ d7 M; F  o  K. n( ?/ R    15位:为0则表示按键释放不产生中断,为1表示按键释放也产生中断;
4 _0 D. S* f8 ]/ P% G8 O    14位:为0则表示输入高电平产生KBRD中断,为1则表示输入低电平产生KBRD中断;
. s2 F+ ]: N8 _4 ?    13:8位:当按键按下,在不等于0的规定时间之后,自动产生重复按键中断,为0则禁止定时器;: V6 f+ e! W  K/ s6 u
    7位:使能P07产生键盘中断;
4 x: e$ x. u" _2 M+ \% G+ t    6位:使能P06产生键盘中断;
6 j1 M2 F9 b/ `& w( V    5位:使能P05产生键盘中断;
4 E$ X( X% o3 _- R  W6 ^4 P0 K2 V    4位:使能P04产生键盘中断;
" k; f2 V$ H% K3 N1 }, U/ O    3位:使能P03产生键盘中断;
4 O5 u" X/ \* ^& O" g7 }  R    2位:使能P02产生键盘中断;
3 [* }- y; Y$ u- K9 c) Q5 ?    1位:使能P01产生键盘中断;
4 W. K/ _) u0 e" K/ Z+ h/ a    0位:使能P00产生键盘中断。- W3 Q; n# z1 \
    2.2.10 键盘中断源选择寄存器1# c8 l% d1 X& b8 x5 j% y
  w- ]8 d: U, N! E  ], E; }
   & \" m; g/ d. i6 h$ K
    图12
; \& N+ f$ P5 T+ v) H! c    15位:使能P15产生键盘中断;
$ Q# y+ n2 i1 G; G; q1 o+ X    14位:使能P14产生键盘中断;2 n( ^& J* F5 g; ~
    13位:使能P13产生键盘中断;1 m( V" s4 e, C" h$ B/ q9 N% }
    12位:使能P12产生键盘中断;3 T' ~! E4 L. Q3 H  A! D- x
    11位:使能P11产生键盘中断;
2 ~* L# ]  Q( N( {- L0 }% K& i    10位:使能P10产生键盘中断;; p; P/ u$ o. g0 W" X
    9位:使能P29产生键盘中断;! n* s7 t: S5 K, g. h7 P
    8位:使能P28产生键盘中断。* h$ ^* D% w# u5 J( B6 `' e
    7位:使能P27产生键盘中断;
, m) T8 l( o4 c4 B    6位:使能P26产生键盘中断;. a' y7 Y9 i" r, U  O
    5位:使能P25产生键盘中断;
. o3 A+ x4 k$ d& M" w    4位:使能P24产生键盘中断;
! K; |# c# O2 w6 p* \& r) ^; H    3位:使能P23产生键盘中断;
* G/ _" o: E9 o! D: x  g" y    2位:使能P22产生键盘中断;
' x2 M8 {+ n9 t4 f1 d2 n" a3 {    1位:使能P21产生键盘中断;/ Y4 E# V* z; b  L
    0位:使能P20产生键盘中断。
* O1 F$ h4 M+ H+ y, C    2.2.11 键盘中断源选择寄存器2
. X1 x9 Z' H/ P4 h6 ]3 K4 z- R0 V- N( ~
   # C( Y" Q$ F5 S* q
    图130 A+ _0 S2 |% e( f' X/ p1 i
    7位:使能P37产生键盘中断;
# E+ T" C( w( D! P    6位:使能P36产生键盘中断;
* W! `8 X% b9 o  j9 k* p    5位:使能P35产生键盘中断;
3 Z% N; E+ E7 h0 T) Y5 m. D" N    4位:使能P34产生键盘中断;
7 d, W1 p# ^5 X; Z5 Q7 `# {    3位:使能P33产生键盘中断;/ N3 b2 J* h% I  z4 o6 c& Q8 _
    2位:使能P32产生键盘中断;  e. s6 Q' O2 a3 d5 u
    1位:使能P31产生键盘中断;) w) Z+ I5 z' m/ w
    0位:使能P30产生键盘中断。
$ T" i5 u; E( d- W' V  W    2.3 寄存器配置讲解+ e, t0 a! T: r; v  J4 D% |
    #define GPIO_IRQ0_IN_SEL_REG        (* ( volatile uint16*) 0x50001400)
6 I9 J+ T8 Y# F" Y    #define GPIO_IRQ1_IN_SEL_REG        (* ( volatile uint16*) 0x50001402)
+ e1 t* A: ?$ y/ Y    #define GPIO_IRQ2_IN_SEL_REG        (* ( volatile uint16*) 0x50001404)
1 G; d% ~2 w+ N  x    #define GPIO_IRQ3_IN_SEL_REG        (* ( volatile uint16*) 0x50001406). m" q8 z! V4 c" p; b
    #define GPIO_IRQ4_IN_SEL_REG        (* ( volatile uint16*) 0x50001408)
9 v. T: ]) M* R+ A& E/ O    #define GPIO_DEBOUNCE_REG         (* ( volatile uint16*) 0x5000140C)
7 K5 H# `+ T7 m8 y: u$ q! F    #define GPIO_RESET_IRQ_REG          (* ( volatile uint16*) 0x5000140E)
. o7 K9 Z: n: G' ]# V    #define GPIO_INT_LEVEL_CTRL_REG     (* ( volatile uint16*) 0x50001410)
$ V4 l* I0 |' ?# M: G! ^' Y! V: y* p& o    #define KBRD_IRQ_IN_SEL0_REG        (* ( volatile uint16*) 0x50001412): U6 A0 q3 y$ {+ x: A
    #define KBRD_IRQ_IN_SEL1_REG        (* ( volatile uint16*) 0x50001414), |* N' N+ [# F  j( ~! K6 j& C4 T5 S
    #define KBRD_IRQ_IN_SEL2_REG         (* ( volatile uint16*) 0x50001416)
" ~* i# }1 Q4 z+ |$ \; ?    例1:P02为GPIO中断1的中断源,延时20毫秒,高电平产生中断,等待按键释放,如下所示:
  I' o, d1 ~6 y9 @    GPIO_IRQ1_IN_SEL_REG =0x0003;: h, \# q8 x6 Z2 l
    GPIO_DEBOUNCE_REG =0x0114;2 Z- s0 a) ~  c" p
    GPIO_INT_LEVEL_CTRL_REG =0x0202;
8 O, @' A% u% x+ \  U: o    GPIO中断1配置完成,在GPIO中断1的中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0002;这样才能进行下一次中断。
1 g. L* u8 G4 ^( J! b, t& S8 E/ Z    例2:P03,P12,P28为KBRD中断源,低电平有效,释放不产生中断,不重复触发中断,延时30毫秒,如下所示:6 y5 N1 P  P& ?# n% m9 ^
    KBRD_IRQ_IN_SEL0_REG =0x4008;) ~, T' \! S6 ?% e3 X- F& K
    KBRD_IRQ_IN_SEL1_REG =0x1100;. A+ ~3 j, A# R8 W& Y( S
    GPIO_DEBOUNCE_REG =0x201e;
- f; [/ L" s. F% A0 x    键盘中断配置完成,在键盘中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0020;这样才能进行下一次中断。& j. r6 P( ^: `2 _! Z" y& V
) L0 J7 L$ s3 f3 k" {- J& q2 E: b

. B3 V, e% x, H    第三节 中断实验5 ?" [" G/ v$ t. W4 P. Y
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。
1 h: `6 t, ?1 o, ]. D5 r2 o% R* A( E    使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:
& f8 n' z7 w$ f    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:( J" Y: [9 {0 y
8 e& M# N# o6 K# ^3 L9 e+ [
   
0 q1 y) H+ p0 N5 ^9 o    图14- h+ Z8 A2 ~2 W" s2 G9 J
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
. j+ m7 j6 I9 J. ~
- j/ Z! x5 v9 u8 s$ ]  V/ |    
& P: o8 Y0 r( N. m& P    图152 _; m7 ?7 y" v/ s  N0 y
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。" m) ]) C% g3 v* I1 R. F
    打开中断实验的Keil工程blinky.uvproj,位于目录:( y) w+ U8 |' m$ C, D1 }
    ..\WT_Mobile\1.初级教程\DA14580\4_初级_中断\projects\target_apps\peripheral_examples\interrupt\Keil_5,如下图所示:
  j% _2 D9 H( ~; J0 i% M
4 o% P2 e& T  [7 h. o' G    
# q# \0 W  g8 V* z, e, r    图16. n4 H, O; X7 i5 ?, O- ]6 ]9 N# G, ~
    在KEIL中编译源代码,点击DEBUG,然后点击全速运行,如下图所示:- L* z3 c( H! R0 }# I$ |+ z
- V0 T+ U4 k* I; E' Y. \$ @
( u; E# H* g" Z& E& D7 C, c

$ `- g: C% e0 ?    
, r- N, K3 Z+ m* O& P$ ]    图175 {4 P, w6 e* H* ^# ~& n
    全速运行之后,将杜邦线的一头接在3.3V引脚上,另一头碰一下P13引脚,即可进入P13对应的外部中断,执行中断内的程序(点亮LED),碰一下P12引脚,则进入P12对应的外部中断,执行中断中的程序(关闭LED)。注意:因为中断触发方式为边沿触发,碰上之后再断开才有效。
8 f6 C$ T$ U" ?( E+ \: x/ V& ]8 d* r+ q6 v

  ?$ K+ i) `$ k$ v( q0 t& n
- Y, r# R% g( w9 F( _2 V* g7 K- f, J    配套资料:http://www.fengke.club " i. _1 b" v' e8 p6 `7 N
    套件地址:http://shop115904315.taobao.com/% h7 p4 x& F+ E  y; W% g' z/ Y7 R4 x
    文件下载请点击: 中断教程.pdf (1.09 MB, 下载次数: 0) 4 w+ v1 D4 i( H9 u
5 n% D8 G+ {( o/ L$ g

+ [  G* J& [7 ]
  • 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-10-11 22:56 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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