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

【开发教程7】疯壳·AI语音人脸识别-中断

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
CC3200AI实验教程
——疯壳·开发板系列
中断
5 i) O, P  t( X' `+ [( }2 ~0 R+ r5 C

$ I' q7 f3 W, j) R- ?9 O) x) O' L1 A: l5 V" h6 b

8 }' C* w+ C2 d0 c, D    接口数据传送控制方式有查询、中断和DMA等,中断是重要的接口数据传送控制方式。中断控制分为全局和局部两级,全局中断由NVIC控制,局部中断由外设控制。
! a$ ~5 Y+ P0 E* v    嵌套向量中断控制器NVIC支持多个内部异常和多达240个外部中断。从广义上讲,异常和中断都是暂停正在执行的程序转去执行异常或中断处理程序,然后返回原来的程序继续执行。从狭义上将,异常由内部事件引起,而中断有外部硬件产生。
! `6 ~( B) p7 q- o3 W    异常和中断的处理与子程序调用有相似之处,但也有下列本质区别:
5 j& J' n6 B! L" y    什么时候调用子程序是确定的,而什么时候产生异常和中断时不确定的。子程序的起始地址由调用程序给出,而异常和中断程序的起始地址存放在地址表中。% C- n2 r2 J0 y) q/ r! v
    子程序的执行一般是无条件的,而异常和中断处理程序的执行要先使能。/ Z* u( t: r+ j, `8 @  `
    CC3200的NVIC具有下列特性:
5 L. Q, S. A' u- p% f# P8 T    a、确定的、快速的中断处理,总是12个时钟周期;
4 w# u; y* y% l: \    b、每个中断的优先级可编程(0~7,0表示最高优先级);/ i& ]0 r" L5 h
    c、3~8位优先级配置;
/ J$ _- F) |, C, A( w    d、动态重新分配中断优先级;
! _. }- ~# q( V3 Z1 _# D# F    e、中断优先级分组允许选择中断优先级分组和中断子优先级的数量。低延迟中断和异常处理;3 O0 I( n- ^& M9 O- n
    f、中断信号电平和边沿检测。% j1 m! b5 ?3 u% M
    1.1寄存器
2 b$ q- T2 w- O6 ^    本小节将使用的GPIO外部中断来实现按键的功能。每个GPIO端口的中断功能通过7个寄存器来进行控制。这些寄存器用来选择中断源、中断优先级和边沿特性。当一个或者多个GPIO输入引起中断时,一个单中断信号输出到整个GPIO端口的中断控制器。) ~# z7 X. E% V- H  F
    下面三个寄存器定义了引起中断的边沿或检测:* J7 ~) e  A3 @; W- Y
    a、GPIOIS:GPIO 中断检测寄存器;  U- k$ S6 _  g" D) P- m
    b、GPIOIBE:GPIO  中断边沿寄存器;
9 s! s& |: @" j9 ~    c、GPIOIEV:GPIO  中断时间寄存器。4 H8 E9 e9 t1 N+ ^! @' m' Q, g2 i2 p
    中断功能通过GPIO中断掩码(GPIOIM)寄存器来进行使能和关闭。2 b; O! R) P" X# y* q8 ?
    当一个中断条件产生时,有两个地方可以查看中断信号的状态:GPIO源中断状态(GPIORIS)寄存器和GPIO掩码中断状态(GPIOMIS)寄存器。正如名称暗示的那样,GPIOMIS寄存器只显示可以发送给中断控制器的中断条件。GPIORIS 寄存器表示一个 GPIO引脚达到了产生中断的条件,但是不一定会发送给中断控制器。
3 N" A3 M/ a/ {4 _: I7 T    如果是GPIO电平检测中断,产生中断的电平信号必须保持到中断服务的产生。一旦输入的信号解除中断产生的逻辑信号,对应的GPIORIS寄存器中的源中断寄存器位将被清零。对于GPIO边沿检测中断,GPIORIS寄存器中的RIS位通过向寄存器GPIOICR中的对应位写入1来进行清零。GPIOMIS寄存器中的对应位反应源中断状态位的掩码值。" C# s6 T( @7 V2 m" ?/ f- b
    当编辑中断控制寄存器时,应当将中断全部关闭(GPIOIM清零)。如果对应的位使能的话,则写任何中断控制寄存器都会产生不必要的中断' w2 J+ Q" D7 H- h% R
    GPIOIS是中断检测寄存器。置位则对应的引脚进行电平检测,清零则对应的引脚进行边沿检测。在复位时,所有的位清零。如图1.0.1所示。
4 `% Q) ~# I/ T4 ^; A+ d) a6 @    注意:为了防止产生错误的中断,在配置中断检测寄存器和边沿寄存器的时候,应当清零GPIOIM寄存器中的IME位来屏蔽中断引脚。配置GPIOIS寄存器的IS位和GPIOIBE寄存器的IBE位。清除GPIORIS寄存器。最后通过置位GPIOIM寄存器中的IME位来打开引脚。
% C8 a+ d  j& U0 ?+ r7 \* C/ f; g+ R/ f# I% S

7 N  y+ V4 g. f' R    图1.0.1 GPIOIS寄存器5 t. K* Q! F2 B: U5 ]8 B
    GPIOIBE寄存器允许双边沿来触发中断。当GPIOIS寄存器设置为检测边沿时, 则设置GPIOIBE寄存器来配置对应的引脚来检测上升和下降沿,而忽略 GPIOIEV 寄存器中的对应位的配置。清零一位则配置为引脚受GPIOIEV寄存器的控制。复位之后,所有的位都被清零。如图1.0.2所示。
$ a* B- B. r; T. I1 A+ y4 a    注意:为了防止产生错误的中断,在配置中断检测寄存器和边沿寄存器的时候,应当清零GPIOIM寄存器中的IME位来屏蔽中断引脚。配置GPIOIS寄存器的IS位和GPIOIBE寄存器的IBE位。清除GPIORIS寄存器。最后通过置位GPIOIM寄存器中的IME位来打开引脚。
# a0 m4 J+ f* [; e; }
! T- k* u4 j* k. v; m 3 `# N5 f- l+ P
    图1.0.2 GPIOIBE寄存器5 S# R  Y$ u1 g- X
    GPIOIEV寄存器是中断事件寄存器。置位该寄存器中对应的位来配置对应的引脚检测上升沿或者高电平,这取决于GPIOIS 寄存器对应位的配置。清零该寄存器中的对应位则对应的引脚检测下降沿或者低电平,这取决于GPIOIS寄存器中对应位的配置。复位之后所有的位都清零。如图1.0.3所示。6 y; T" s  L7 z5 N, }2 H3 @0 p3 I  T
: t3 S. o  @  c3 i. A3 f

" F0 s8 Q9 U/ f    图1.0.3 GPIOIEV寄存器9 u4 I3 w+ y3 c
    GPIOIM寄存器是中断掩码寄存器。置位该寄存器中的对应位,则对应引脚上产生的中断将通过组合中断信号发送给中断控制器。清零则对应的引脚产生的中断不会发送给中断控制器。复位之后所有的位都清零。如图1.0.4所示。# j$ B' E' v! ?

# h% O( u. b# M2 M
0 o! j6 a  r' r    图1.0.4 GPIOIM寄存器+ [5 I* g# X0 P6 ~+ H
    GPIORIS寄存器是源中断状态寄存器。当对应的引脚达到中断条件时,该寄存器中对应的位被置位。如果中断掩码(GPIOIM)寄存器中的对应位被置位,   则发送中断信号到中断控制寄存器。某一位读取为0,则说明对应的引脚没有产生中断。对于电平触发中断,引脚上的中断信号必须保持到中断服务。一旦中断信号达不到中断逻辑检测要求,则GPIOIS寄存器对应的RIS位将被清零。对于一个GPIO边沿检测中断,GPIORIS寄存器中的RIS位通过置位GPIOICR寄存器中对应的位进行清零。GOUIMIS寄存器中的位反映RIS位的掩码值。如图1.0.5所示。
+ [% |, x& m8 y. G* q( e% z: K' b1 I( Z7 c$ R- [/ K0 P

3 K8 c, N7 D( S+ R! {  P5 T: g    图1.0.5 GPIORIS寄存器
7 \  o! Q" J5 v: V: K+ d' V    GPIOMIS寄存器是掩码中断状态寄存器。如果寄存器中对应位被置位,则对应的中断将被发送到中断控制器。如果某一位被清零,则无论是否有中断产生,
) }+ j% X  g" U6 S    中断都会被屏蔽掉。GPIOMIS寄存器是中断掩码之后的状态。如图1.0.6所示。
7 b& T: P  O) ^, X+ D# [# u. y0 s

9 L4 j1 ^4 }- w& s# h0 K    图1.0.6 GPIOMIS寄存器
9 O2 H% {, @- `* }) e9 u6 V    GPIOICR寄存器是中断清零寄存器。对于边沿检测中断,置位GPIOICR寄存器中对应的位,则会清除GPIORIS和GPIOMIS寄存器中对应的位。如果中断是电平检测,则该寄存器中的对应位没有影响。另外,向该寄存器中写入0也没有任何影响。如图1.0.7所示。3 Q' g- i1 Z: A' H# B. s; |

) s7 O3 {: N, ^/ g
8 i! o: z* s" m: p: x6 M    图1.0.7 GPIOICR寄存器
* {* `$ n9 v8 V. w, _3 [4 i" I    1.2实验现象1 A0 F) S7 S4 n& Q
    本实验在是官方CC3200SDK_1.2.0中Interrupt例程代码的基础上修改得来的,打开Interrupt_Demo,由于本次实验用到串口和按键,所以在mian函数的PinMuxConfig()中配置了串口0的输入输出以及GPIO_13和GPIO_22的方向为输入。
; @% z" W% C6 U    本次实验的关键是在ButtonIntInit()函数中,该函数如图1.0.8所示。; |% Q. ?) t/ R& j. U
2 a! j( y7 Q" y) D9 A" t8 y

2 S7 r9 u* H& }6 o3 n+ F    图1.0.8 ButtonIntInit()函数* C) u3 l; b; T- \" Q9 A
    在该函数中吧GPIO_13与GOIO_22配置为下降沿触发,触发的中断函数为Button1IntHandler()以及Button2IntHandler(),进入中断后,首先清除标志位,然后通过串口0打印出“Button1”以及“Button2”。% `& @8 f$ M- L$ H+ [
    打开Uniflash,把编译后生成bin文件下载到板子上(参考GPIO小节),把串口选择的拨码的第一个“RXD”以及“CH340G_VCC”拨到ON,这里我们用到了串口0的接收,打开串口调试助手,选择对应的串口号,波特率设置为115200,打开串口,a按下复位,可以看到串口打印信息如图1.0.9所示。
9 k! B; U$ v9 I5 [8 G" v8 W5 I, }. ^6 {
1 F) v; G/ m1 h; g* J4 c 6 j" ~- ^- C' W: S) |" Y, _+ |
    图1.0.9 复位时串口打印5 [! @5 e0 g& u0 I8 O6 j9 ~% @
    按下板子上的SW2和SW3可以看到串口打印信息如图1.1.0所示。
* D8 w& R/ X7 Z% b; r5 q0 ^& O" k) v5 o0 Z$ b

3 f' S$ L! u* X    图1.1.0 按下按键后串口打印
! j- D- w# B; d" P5 g/ D2 f
& }0 ^7 f; R& H# W$ s! }' @5 V
6 A4 b0 f% D/ M. M
. \! ^- G8 j9 x" ^7 t, O* l! J5 ~文件下载请点击: 【5】中断.pdf (758.29 KB, 下载次数: 0)
' h0 b2 w: B. t
& ~6 c4 O1 U$ V8 B

该用户从未签到

2#
发表于 2022-8-4 16:07 | 只看该作者
好东西,学习学习!谢谢分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 02:21 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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