前言

可编程外围互连(PPI)使不同的外围设备能够自主交互彼此使用任务和事件,而无需使用CPU。PPI提供了一种机制,可以作为事件的结果自动触发一个外围设备中的任务发生在另一个外围。任务通过PPI通道连接到事件。PPI通道为由两个端点寄存器组成,事件端点(EEP)和任务端点(TEP)。一个接口任务通过使任务寄存器的地址与任务关联实现连接到任务端点。类似地,外围事件使用事件寄存器的地址连接到事件端点实现与事件相关联。

启用和禁用PPI通道的方法有两种:

•使用CHEN、CHENSET和CHENCLR分别启用或禁用PPI通道寄存器。

•通过组的Enable和,在PPI通道组中启用或禁用PPI通道禁用任务。

在触发这些任务之前,必须触发PPI通道组配置为定义哪些PPI通道属于哪些组。

PPI任务(例如CHG0EN)可以像其他任务一样通过PPI触发,这意味着它们可以作为TEP连接到PPI通道。一个事件可以通过使用多个通道和触发多个任务一个任务可以由多个事件以相同的方式触发。

上图是PPI的结构,其中EEP: 是 EVENT END POINT 的缩写。每个PPI通道拥有一个EEP。EEP是用来存放 EVENT 寄存器地址的,如上面说的条件,当 EVENT 产生的时候, 它会马上知道。TEP:是 TASK END POINT 的缩写,每个PPI通道有一个TEP。TEP是用来存放TASK 寄存器地址的,如上面说的要执行的动作。

每个 nRF5x 芯片有31个PPI通道, 而这31个通道被编成组(GROUP)。多个PPI通道编成组以后,我们可以用一个TASK 执行组里面所有的 PPI 通道的使能或者关闭,很方便使用。PPI是nRF5X 系列芯片特有的一个功能,它减轻了CPU的负担,提高了外设之间交互响应的速度,用途非常广泛。我们可以把 PPI 看成一根导线,导线的一端接要执行的动作,导线的另一端接动作执行的条件。当条件满足的时候,自动执行预设好的动作。

CH[n]  :  单个通道, nRF51 系列有31个PPI 通道,

CHG[m]: 通道组, 1个以上通道构成一个组。

CHEN:是个总开关,所有的PPI 通道的允许或者禁止都可以在这里操作。

本节将利用PPI模块,实现不使用中断,也不需要CPU介入,实现按键控制LED操作。

示例详解

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

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

  1. 工程创建:

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

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

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

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

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

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

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

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

  1. 工程代码

    1. OK之后在man.c中加入如下代码,为了对比说明这一点实现是的PPI功能,我们把上一节的中断部分代码给全部屏蔽掉:

关于PPI的更多接口函数可以查看nrf_ppi.h文件,里面的函数名字与功能很好理解。

  1. 编译工程,下载程序,按按键试试,是不是同样可以实现通过按键控制LED亮灭的功能,无需CPU介入,也无需中断处理。

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

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

下载|一起学nRF51xx 5

关注十三公众号

一起学nRF51xx 5 -  ppi相关推荐

  1. 一起学nRF51xx 9 -  pwm

    前言 上一讲我们学习了nrf51822定的器的使用,那行如何用定时器实现PWM输出呢,NRF51的time模块不支持 PWM 功能,不可我们可以通过定时器+PPI+GPIOTE模块一起工作的方式在NR ...

  2. 一起学nRF51xx 0 - 环境搭建

    前言 物联网时代怎么能少得了蓝牙4.0,Nordic的nRF5x系列MCU如 nRF51822 是功能强大.高灵活性的多协议 SoC,非常适用于 Bluetooth® 低功耗和 2.4GHz 超低功耗 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. 一起学nRF51xx 17 -  lpcomp

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

最新文章

  1. java中hashcode_浅谈Java中的Hash值
  2. vc++中几个常用的数学函数
  3. tomcat安装及虚拟web主机
  4. Python获取当前脚本绝对路径
  5. 电子书下载:ASP .NET 4 高级程序设计.第4版
  6. centos7 安装java 8_CentOS 7.8下安装完美安装配置Rosetta
  7. mpi4py安装报错error: Cannot compile MPI programs. Check your configuration!!!
  8. 28. 实现strStr()
  9. django高级应用(分页功能)
  10. maven install过程
  11. spring framework核心框架体系结构
  12. Win虚拟机查询不到自己的IP地址
  13. Qt视频直播软件--项目实战(Day2)
  14. python xlsxwriter 画图_python xlsxwriter创建excel图表的方法
  15. PyTorch学习(九)--用CNN模型识别手写数字数据集MNIST
  16. 前端性能优化(三)——浏览器九大缓存方法
  17. 【LeetCode】975. Odd Even Jump 解题报告(C++)
  18. 【数据分析师_02_SQL+MySQL】019_MySQL联结表(WHERE,AND,PK-FK,INNER JOIN)
  19. 湘潭大学计算机专业科目,湘潭大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  20. 【PASA集群管理神器】Glang竟然可以做出那么惊艳的系统

热门文章

  1. java中的构造方法,this、super的用法
  2. instanceof不是根据构造函数进行判断,而是原型链
  3. 修改Linux安装软件镜像源为阿里云
  4. 新地王的诞生终将付出惨痛的代价?
  5. C#中方法的参数四种类型(值参数、ref、out、params)详解
  6. UA MATH566 统计理论 位置-尺度参数族
  7. Linux insmod 命令学习
  8. win32汇编获取当前进程ID和可执行文件名
  9. 在 emu8086 中学习汇编In,Out指令
  10. python学习笔记day08 文件功能详解