锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【开发教程6】疯壳·ARM功能手机-中断实验教程

时间:2023-10-11 02:37:02 二极管ppm3fd201e0p28j4mj密封连接器p28k2aqjg连接器

ARM功能手机
——疯壳·开发板系列
实验教程中断


图1

第一节中断硬件电路
将P12、P13配置为中断输入口,P12和P13已通过排针引出,如下图所示:


图2


第二节 中断
2.1 中断介绍
芯片内有嵌套中断向量控制器(NVIC,Nested Vectored Interrupt Controller),配置和处理异常代码可支持24个中断。自动执行相应的中断函数,不需要软件来确定异常向量。中断可以有四个不同的可编程优先级,NVIC嵌套中断的自动处理。对于安全关键系统,有不可阻挡的中断(NMI,Non maskable interrupt)输入。
DA14580内部有一个键盘控制器,可用于延迟GPIO进入信号的时间。可以检测所有信号I/O口的电平变化。当检测到信号时,会中断(KEYBR_IRQ)。同时,还有五个中断。(GPIOn_IRQ)可以被GPIO口触发。
2.2 寄存器介绍
2.2.1 GPIO_IRQ选择寄存器作为中断源


图3
15:6:保留不使用;
5:0:中断源选择,1~32分别对应选择P00~P其他值不选择任何引脚;
2.2.2 GPIO_IRQ1中断源选择寄存器


图4
15:6:保留不使用;
5:0:中断源选择,1~32分别对应选择P00~P其他值不选择任何引脚;
2.2.3 GPIO_IRQ2中断源选择寄存器


图5
15:6:保留不使用;
5:0:中断源选择,1~32分别对应选择P00~P其他值不选择任何引脚;
4.2.4 GPIO_IRQ3中断源选择寄存器


图6
15:6:保留不使用;
5:0:中断源选择,1~32分别对应选择P00~P其他值不选择任何引脚;
2.2.5 GPIO_IRQ4中断源选择寄存器


图7
5:6位保留不使用;
5:0:中断源选择,1~32分别对应选择P00~P其他值不选择任何引脚;
2.2.6 GPIO延时寄存器


图8
15:14:保留不使用;
13位:延时计数能量键盘接口;
12位:使能GPIO IRQ4延时计数;
11位:使能GPIO IRQ3延时计数;
10位:使能GPIO IRQ2延时计数;
9位:使能GPIO IRQ1延时计数;
8位:使能GPIO IRQ0延时计数;
7:6位保留不使用;
5:0:延迟值,N毫秒。
2.2.7 GPIO中断复位寄存器


图9
15:6:保留不使用;
5位:写1位,复位KBRD中断,读取返回0;
四位:对该位写1,复位GPIO中断,读取返回0;
三位:对该位写1,复位GPIO中断,读取返回0;
四位:对该位写1,复位GPIO中断,读取返回0;
1:对该位写1,复位GPIO中断,读取返回0;
0位:写1位,复位GPIO中断,读取返回0。
2.2.8 GPIO中断电平控制寄存器


图10
15:14:保留不使用;
12位:在复位GPIO中断4不需要等待按钮释放,因此会立即产生新的中断;
11位:在复位GPIO中断3不需要等待按钮释放,因此会立即产生新的中断;
10位:在复位GPIO中断2不需要等待按钮释放,因此会立即产生新的中断;
9位:在复位GPIO中断1不需要等待按钮释放,因此会立即产生新的中断;
8位:在复位GPIO中断0不需要等待按钮释放,所以会立即产生新的中断;
7:6位:保留不使用;
4位:0表示输入高电平GPIO中断4为1,表示输入低电平GPIO中断4;
三:0表示输入高电平GPIO中断3为1,表示输入低电平GPIO中断3;
2位:0表示输入高电平GPIO中断2为1,表示输入低电平GPIO中断2;
1:0表示输入高电平GPIO中断1表示输入低电平GPIO中断1;
0:0表示输入高电平GPIO中断0为1,表示输入低电平GPIO中断0;
注:数据手册中寄存器未标注13位和5位,可能是勘误。
2.2.9 键盘中断源选择寄存器0


图11
15位:0表示按键释放不中断,1表示按键释放也中断;
14位:0表示输入高电平KBRD中断为1,表示输入低电平KBRD中断;
13:8位:按下按钮时,不等于0的规定时间后,重复按钮自动中断,0禁止定时器;
7位:使能P07键盘中断;
6位:使能P06键盘中断;
5位:使能P05产生键盘中断;
4位:使能P04产生键盘中断;
3位:使能P03产生键盘中断;
2位:使能P02键盘中断;
1位:使能P01产生键盘中断;
0位:使能P产生键盘中断。
2.2.10 键盘中断源选择寄存器1


图12
15位:使能P15键盘中断;
14位:使能P14键盘中断;
13位:使能P13键盘中断;
12位:使能P12产生键盘中断;
11位:使能P11键盘中断;
10位:使能P10产生键盘中断;
9位:使能P29键盘中断;
8位:使能P28键盘中断。
7位:使能P27键盘中断;
6位:使能P26键盘中断;
5位:使能P25键盘中断;
4位:使能P24键盘中断;
3位:使能P23产生键盘中断;
2位:使能P22键盘中断;
1位:使能P21键盘中断;
0位:使能P产生键盘中断。
2.2.1 键盘中断源选择寄存器2
    
    
    图13
    7位:使能P37产生键盘中断;
    6位:使能P36产生键盘中断;
    5位:使能P35产生键盘中断;
    4位:使能P34产生键盘中断;
    3位:使能P33产生键盘中断;
    2位:使能P32产生键盘中断;
    1位:使能P31产生键盘中断;
    0位:使能P30产生键盘中断。
    2.3 寄存器配置讲解
    #define GPIO_IRQ0_IN_SEL_REG        (* ( volatile uint16*) 0x50001400)
    #define GPIO_IRQ1_IN_SEL_REG        (* ( volatile uint16*) 0x50001402)
    #define GPIO_IRQ2_IN_SEL_REG        (* ( volatile uint16*) 0x50001404)
    #define GPIO_IRQ3_IN_SEL_REG        (* ( volatile uint16*) 0x50001406)
    #define GPIO_IRQ4_IN_SEL_REG        (* ( volatile uint16*) 0x50001408)
    #define GPIO_DEBOUNCE_REG         (* ( volatile uint16*) 0x5000140C)
    #define GPIO_RESET_IRQ_REG          (* ( volatile uint16*) 0x5000140E)
    #define GPIO_INT_LEVEL_CTRL_REG     (* ( volatile uint16*) 0x50001410)
    #define KBRD_IRQ_IN_SEL0_REG        (* ( volatile uint16*) 0x50001412)
    #define KBRD_IRQ_IN_SEL1_REG        (* ( volatile uint16*) 0x50001414)
    #define KBRD_IRQ_IN_SEL2_REG         (* ( volatile uint16*) 0x50001416)
    例1:P02为GPIO中断1的中断源,延时20毫秒,高电平产生中断,等待按键释放,如下所示:
    GPIO_IRQ1_IN_SEL_REG =0x0003;
    GPIO_DEBOUNCE_REG =0x0114;
    GPIO_INT_LEVEL_CTRL_REG =0x0202;
    GPIO中断1配置完成,在GPIO中断1的中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0002;这样才能进行下一次中断。
    例2:P03,P12,P28为KBRD中断源,低电平有效,释放不产生中断,不重复触发中断,延时30毫秒,如下所示:
    KBRD_IRQ_IN_SEL0_REG =0x4008;
    KBRD_IRQ_IN_SEL1_REG =0x1100;
    GPIO_DEBOUNCE_REG =0x201e;
    键盘中断配置完成,在键盘中断函数中需要复位中断,需要添加语句GPIO_RESET_IRQ_REG =0x0020;这样才能进行下一次中断。
    
    
    第三节 中断实验
    实验需要使用的模块有:手机开发板底板,Jlink调试工具,杜邦线、3.7V锂电池或Mocro USB线。
    使用JLINK通过杜邦线连接手机蓝牙位于手机主控底板,连接方式如下:
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
    
  
    图14
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
    
    
    图15
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
    打开中断实验的Keil工程blinky.uvproj,位于目录:
    ..\WT_Mobile\1.初级教程\DA14580\4_初级_中断\projects\target_apps\peripheral_examples\interrupt\Keil_5,如下图所示:
    
    
    图16
    在KEIL中编译源代码,点击DEBUG,然后点击全速运行,如下图所示:
    
    
    图17
    全速运行之后,将杜邦线的一头接在3.3V引脚上,另一头碰一下P13引脚,即可进入P13对应的外部中断,执行中断内的程序(点亮LED),碰一下P12引脚,则进入P12对应的外部中断,执行中断中的程序(关闭LED)。注意:因为中断触发方式为边沿触发,碰上之后再断开才有效。
    
    
    

更多完整学习资料和对应开源套件,请登陆官网:“疯壳”

如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章