【Nordic博文分享系列】如何理解nRF5芯片外设PPI

A-小鲸鱼 2019-09-27 10:08:37 2147

PPI,英文全称Programmable Peripheral Interconnect,是Nordic独有的外设,其设计目的是让CPU处于idle模式下外设与外设之间也能完成相应通信,从而降低系统功耗。

为此,很多人会把PPI类比成DMA,的确PPI和DMA两者在设计最终目的上有一定的相似性,但两者的功能和原理完全不相同。

讲解PPI原理之前,先大概阐述一下Nordic芯片一个独特的设计理念。


Nordic芯片的独特

Nordic芯片每个外设都可以看做一个状态机,所以每个外设都有输入(task),输出(event)以及状态。

比较常见的task比如启动外设,清0寄存器等,常见的event比如数据发送完毕,外设关闭等。

实现上,每个task和event都是一个个独立的32-bit寄存器,这跟传统的芯片不一样,传统的芯片都是用寄存器的某一个bit来启动,或者某一个bit来显示状态。

换句话说,Nordic把传统芯片1bit要做的事情换成一个完整的32-bit寄存器来实现。

这样做的好处是,每个task和event都是一个寄存器,他们都可以用一个独立而唯一的地址来标识,这就为PPI打下了坚实的基础。比如Timer模块的寄存器列表如下所示,里面就包含了各种task和event寄存器:

再比如ADC模块的寄存器列表如下所示,里面也包含了各种task和event寄存器:

讲完Nordic独特的芯片设计理念后,现在开始讲PPI。


PPI

首先PPI也是一个外设,因此PPI也有自己的寄存器定义,主要用来配置PPI通道等。

简言之,PPI就是一个数字逻辑系统,它可以通过某一个PPI通道把外设1的event跟外设2的task相连,这样一旦外设1的event置起(相关寄存器为1),将会自动触发外设2的task(将相关寄存器自动置1)

下面以一个实际例子来加深大家对PPI的理解,假设我们要实现如下功能:

启动timer,定时10ms,10ms到后启动ADC模块。

这里我们以两种方式来实现该例子要求:

传统方式和PPI方式,大家仔细比较两者的区别,以理解PPI的积极作用。

一、传统方式

传统方式大致需要如下步骤:

1.初始化Timer模块和ADC模块——(CPU工作)
2.启动Timer——(CPU工作)
3.等待Timer中断——(CPU不工作)
4.10ms到,进入Timer timeout handler,启动ADC——(CPU工作)

二、PPI方式

PPI方式大致需要如下步骤:

1.初始化Timer模块,ADC模块,以及PPI模块,将Timer模块的timeout event和ADC模块的start task相连——(CPU工作)
2.启动Timer——(CPU工作)
3.等待Timer timeout,10ms到,PPI将自动启动ADC——(CPU不工作)

通过比较传统方式和PPI方式,PPI方式可以少进入一次timeout handler,从而减少CPU工作时间,降低系统功耗。由于不需要进入timeout handler,因此启动ADC的操作就不存在被其他高优先级中断打断的可能,这是PPI带来的第二个好处:系统实时性更好。

除了一个event对应一个task,PPI通过fork机制可以让一个event同时启动2个task,即把一个event同时和一个task以及task对应的fork相连,以实现一个event到来,2个task同时启动的目的。


SDK参考例子

大家可以参考SDK自带例子(Keil5工程)来进一步理解PPI的工作原理和编程该注意事项:

1.SDK安装目录\examples\peripheral\ppi\pca10040\blank\arm5_no_packs
2.SDK安装目录\examples\peripheral\gpiote\pca10040\blank\arm5_no_packs

下面为一段PPI使用代码示例,它实现的功能是:当定时时间到,通过PPI自动去操作IO口。


声明: 本文来自 Nordic半导体 ,目的在于信息传递,观点仅代表作者本人,不代表易百纳立场。如有侵权或其他问题,请联系我们。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
关于作者
A-小鲸鱼

A-小鲸鱼

我就是我,不一样的烟火~

原创621
阅读143.4w
收藏22
点赞34
评论45
打赏用户 0
我要创作
分享技术经验,可获取创作收益
分类专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
A-小鲸鱼
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区