前言

上一节我们讲过nrf51822的gpiote功能,利用GPIOte的Event,中断,和Task做了一个简单的用按键控制LED的实验,其间用到了中断,涉及到中断的开启,优先级设置,中断响应函数的实现等等,

nrf51822 cpu使用的是M0核心,其中断的控制也是由内部的NVIC模块进行控制,关于NVIC的详细操作如果有STM32开发基础的话,这边基本也不会有会什么障碍,本节将会以上一讲gpiote的代码为例,重点给大家介绍始何在 nrf51822 中实现中断操作。

示例详解

基于硬件平台: nrf51822ek_tm开发板。

本示例所用的最小系统板原理图:

  1. 工程创建:

    1. 打开KEIL,新建一个空工程:Project->New uVision Project

工程名为nrfxx-Int确认后按下图选择芯片为nrf51822_xxAA->ok

在弹出的对话框中勾选CMSIS中的CORE;Device中的Startup(后面有nrf51 Series字样的);在nrf_device中勾选nrf_gpio, nrf_gpiote,nrf_delay.

OK之后工程自动生成如下代码:

新建一个空白文档,保存为main.c,并加入工程中:

配置工程,选择使用MicroLIB库,可以减小程序体积:

加入NRF51定义,并选择化等级3,可以减小程序体积,但仿真运行时可能会出现与代码顺序不一致现象:

调试工具选择J-LINK,并将接口设置为SW口勾选下载程序后自动复位及运行:

  1. 工程代码

    1. OK之后在man.c中加入如下代码:

下面重点解析一下实现中断响应的相关代码:

首先我们用到的是GPIOTE模块及其中断,打开arm_startup_nrf51.s文件,找到GPIOTE模块对应的中断响应函数GPIOTE_IRQHandler:

复制GPIOTE_IRQHandler到main.c ,并补齐形参及返回值,加入响应代码:

然后在main函数使能中断:

NVIC_SetPriority(GPIOTE_IRQn, 1);             // 设置中断优先级

NVIC_ClearPendingIRQ(GPIOTE_IRQn);           // 清除中断标志

NVIC_EnableIRQ(GPIOTE_IRQn);               // 使能中断 – 必需

__enable_irq();                              // 开启全局中断 – 默认也是开的

其中GPIOTE_IRQn为 GPIOTE_IRQHandler 中将 “Handler”变成”n”即可,上面四行代码中,其实就第三行是必需,其它三行在本例为非必需代码。

  1. 编译工程,仿真调试-》全速运行并在GPIOTE_IRQHandler中放入一个断点:

按下按键,程序成功进入到中断函数中:

可以看到NRF中断的操作与STM32 的mcu很类似,就三步,开总中断,使能指定中断,实现中断响应函数,其它模块的中断操作也是类似。

OK,本期实验完成!下期见!同时如果大家有什么疑问或是有想了解的其它内容,也欢迎大家留言!!最后喜欢这个公众号的同学们记得加关注了,会有不定期技术干货推出!!

文中源码资料下载,在公众号里给十三发消息:

下载|一起学nRF51xx 4

关注十三公众号

一起学nRF51xx 4 -  int相关推荐

  1. 一起学nRF51xx 21 -  蓝牙项目工程的初始化流程解读

    前言 本节主要工作是对<一起学nRF51xx 20 -  移植SDK蓝牙例程>章节程序进行解读. 示例详解 基于硬件平台:nrf51822ek_tm开发板. 本示例所用的最小系统板原理图: ...

  2. 一起学nRF51xx 23 -  s130蓝牙API介绍

    张十三 前言 通过前面的章节,我们学习了nrf51的蓝牙协议栈(S130)的基本使用,对S130协议栈的实现原理有了一定了解,也认识到了S130协议栈的强大,那么协议栈中的API接口具体是什么功能?各 ...

  3. 一起学nRF51xx 22 -  实现一个具体SVC调用功能的demo

    前言 上一节<一起学nRF51xx 21 -  蓝牙项目工程的初始化流程解读>讲到nordic的蓝牙协议栈是通过SVC来实现APP与协议栈之间通接口调用的,那么如何来实现一个具体SVC调用 ...

  4. 一起学nRF51xx 20 -  移植SDK蓝牙例程

    前言 Nordic公司为nRF51系列SOC提供有完整的开发SDK包,里面有大量的例程,通过学习官方例程并最终应用到自己项目工程中是一个比较高效的学习与项目开发技巧,本节将与大家一起完成蓝牙例程的移植 ...

  5. 一起学nRF51xx 19 -  移植SDK普通接口例程

    一起学nRF51xx 19 -  移植SDK普通接口例程 张十三 前言 Nordic公司为nRF51系列SOC提供有完整的开发SDK包,里面有大量的例程,通过学习官方例程并最终应用到自己项目工程中是一 ...

  6. 一起学nRF51xx 18 -  蓝牙协议栈烧录

    前言 在讲协议栈前我们先简要介绍一下NORDIC公司的协议栈特点: 1 协议栈和应用程序代码没有链接时间依存性,并可独立编译和更新 2 堆栈受运行时保护,应用程序访问受限或被阻止 3 堆栈为 100% ...

  7. 一起学nRF51xx 17 -  lpcomp

    前言 nRF51系列SOC内部低功耗比较器(LPCOMP)的使用.此比较器类似于用运放搭建的比较器,当VIN+输入的电压大于VIN-输入的电压,输出结果为高电平:当VIN+输入的电源小于VIN-输入的 ...

  8. 一起学nRF51xx 16 -  adc

    前言 nRF51的ADC设计得比较简单,它有几个可配置的部分: 1)PSEL(pinselection):nRF51系列芯片有8个模拟输入通道,并且这几个脚是固定的,不能像GPIO那样可以重新映射.P ...

  9. 一起学nRF51xx 15 - spis

    前言 SPIS是一个从SPI,它与EasyDMA一起支持与外部的主SPI超低功耗串行通信.EasyDMA使得SPIS交互无需CPU的介入.在提高数据传输效率的同时还减轻了CPU的负担. SPIS即是S ...

最新文章

  1. AHOI2013 Round2 Day2 简要题解
  2. 慕课堂签到迟到怎么办_线上教学第一周:长安大学精品课程助力“云端课堂”...
  3. 网络安全、Web安全、渗透测试之笔经面经总结(二)
  4. 第五章:Java_面向对象编程(三)
  5. 从开发者角度谈Mysql主键
  6. Windows CE创建桌面快捷方式
  7. android系统语音合成,android 语音合成报错
  8. java 获取子线程_Java 主线程获取子线程返回结果
  9. Hbase block cache
  10. 【IoT】产品设计:关于专利申请,这篇文章就够了
  11. 安卓没有删除谷歌服务框架
  12. 真机调试错误 Reason: image not found想到的
  13. HDU5619 Jam's store(最小费用最大流 MCMF)
  14. 在网站中添加微博“一键关注”代码
  15. docker下安装typecho建立自己得博客系统(1)dockerfile篇
  16. Linux宝塔控制面板如何实现多个二级域名301重定向跳转
  17. 2022年京东五月份有什么活动?京东打折力度最大是什么时候?
  18. Needleman–Wunsch algorithm
  19. 从《战狼2》到Oracle数据库,这中间有几个云的距离?
  20. 一款运动类APP开发需要哪些功能

热门文章

  1. bzoj4034: [HAOI2015]树上操作
  2. 题解报告:hdu1219AC Me
  3. Beta 冲刺 (5/7)
  4. [hdu4333]Revolving Digits
  5. base库中的BarrierClosure
  6. 智能算法之Matlab实现(1)——遗传算法(1)
  7. 编写Ogre插件的一般方法
  8. C# 用数据库记录填充树
  9. Matlab符号运算 - 解微分方程
  10. 直接用Win32 API创建对话框Demo