查看: 735|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2022-4-17 15:37
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2022-8-11 11:38:27 | 显示全部楼层 |阅读模式
    分享到:
    ARM功能手机
    ——疯壳·开发板系列
    中断实验教程   



    1.png
        图1

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

    2.0.png
    2.1.png    
        图2


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

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

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

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

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

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

    8.png    
        图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.png   
        图9
        15:6位:保留不使用;
        5位:对该位写1,则复位KBRD中断,读取返回0;
        4位:对该位写1,则复位GPIO4中断,读取返回0;
        3位:对该位写1,则复位GPIO3中断,读取返回0;
        4位:对该位写1,则复位GPIO2中断,读取返回0;
        1位:对该位写1,则复位GPIO1中断,读取返回0;
        0位:对该位写1,则复位GPIO0中断,读取返回0。
        2.2.8 GPIO中断电平控制寄存器

    10.0.png
    10.1.png    
        图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;
        3位:为0则表示输入高电平产生GPIO中断3,为1则表示输入低电平产生GPIO中断3;
        2位:为0则表示输入高电平产生GPIO中断2,为1则表示输入低电平产生GPIO中断2;
        1位:为0则表示输入高电平产生GPIO中断1,为1则表示输入低电平产生GPIO中断1;
        0位:为0则表示输入高电平产生GPIO中断0,为1则表示输入低电平产生GPIO中断0;
        注:数据手册中该寄存器中没有标注13位和5位,可能是勘误。
        2.2.9 键盘中断源选择寄存器0

    11.png    
        图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位:使能P00产生键盘中断。
        2.2.10 键盘中断源选择寄存器1

    12.png    
        图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位:使能P20产生键盘中断。
        2.2.11 键盘中断源选择寄存器2

    13.png    
        图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.png    
        图14
        (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:

    15.png   
        图15
        将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
        打开中断实验的Keil工程blinky.uvproj,位于目录:
        ..\WT_Mobile\1.初级教程\DA14580\4_初级_中断\projects\target_apps\peripheral_examples\interrupt\Keil_5,如下图所示:

    16.png    
        图16
        在KEIL中编译源代码,点击DEBUG,然后点击全速运行,如下图所示:

    17.0.png

    17.1.png    
        图17
        全速运行之后,将杜邦线的一头接在3.3V引脚上,另一头碰一下P13引脚,即可进入P13对应的外部中断,执行中断内的程序(点亮LED),碰一下P12引脚,则进入P12对应的外部中断,执行中断中的程序(关闭LED)。注意:因为中断触发方式为边沿触发,碰上之后再断开才有效。




    完整配套资料和对应开源套件地址:http://www.fengke.club

        文件下载请点击: 中断教程.pdf (1.09 MB, 下载次数: 0)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-7 00:24 , Processed in 0.120261 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.