博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nRF52832-PPI部分学习
阅读量:6099 次
发布时间:2019-06-20

本文共 1295 字,大约阅读时间需要 4 分钟。

PPI部分学习思维导图

1327401-20180725230207889-197133659.jpg

PPI原理

1.1PPI简介

PPI实现的就是通过初始化配置,将不同外设的事件和任务连接起来,让事件自动去触发任务的功能,PPI有多个通道,

每个通道包含一个EEP和TEP,使用PPI连接外设事件和外设任务的时候,将外设事件寄存器的地址写入EEP,将外设任务
寄存器的地址写入到PPI通道的TEP,然后使能该PPI通道即可实现外设事件和外设任务的连接。

1.2预编程PPI通道

PPI中的通道20和通道31已经被预编程,这些PPI通道已经分配给了特定的外设事件和外设任务,CPU不能对这些通道进行

配置,但是CPU可以把他们加入到PPI组,也可以使能或禁止这些PPI通道。
详细见nRF52832数据手册

1.3PPI组

如果需要一个事件能同时触发多个任务或者一个任务能同时被多个事件触发,可以通过PPI组来实现。

相关寄存器

CHEN寄存器:使能或禁止PPI通道

CHENSET寄存器:用于使能PPI通道
CHENCLR寄存器:禁止PPI通道

PPI的应用步骤

3.1初始化PPI模块

uint32_t nrf_drv_ppi_init   (   void        )

3.2分配PPI通道

PPI通道是由驱动来分配的,而不是应用程序指定的,当需要一个PPI通道的时候,调用nrf_drv_ppi_channel_alloc()函数

该函数会查找空闲的PPI通道,并将查找到的第一个PPI通道传递给函数的输入参数p_channel

uint32_t nrf_drv_ppi_channel_alloc  (   nrf_ppi_channel_t *     p_channel   )

3.3配置PPI通道的EEP和TEP

uint32_t nrf_drv_ppi_channel_assign (       nrf_ppi_channel_t   channel,  //PPI channel to be assigned endpoints    uint32_t    eep,  //事件寄存器的地址    uint32_t    tep   //任务寄存器的地址)

地址的获得有两种方式

(1)从芯片的应用指南中查到
(2)通过调用外设的驱动函数来获得地址
如Timer0的COMPARE[0]事件寄存器地址获得

__STATIC_INLINE uint32_t nrf_drv_timer_event_address_get    (       nrf_drv_timer_t const *const    p_instance,    nrf_timer_event_t   timer_event )

3.4使能PPI通道

uint32_t nrf_drv_ppi_channel_enable (   nrf_ppi_channel_t   channel )

参考资料

1 艾克姆科技 《nRF52832开发教程》

转载于:https://www.cnblogs.com/Manual-Linux/p/9368899.html

你可能感兴趣的文章
常用端口号大全
查看>>
Linux网络配置介绍及相关命令
查看>>
如何利用Redis分布式锁实现控制并发
查看>>
机械式通风系统原理
查看>>
使用Eclipse-Maven-git做Java开发(17)--maven项目初步
查看>>
嵌入式开发之C基础学习笔记01--基本原理
查看>>
树形下拉框
查看>>
mysql 5.7 rpm 安装
查看>>
[转] VMware vSphere esxi中的用户权限与角色
查看>>
linux zip解压缩中文乱码
查看>>
MyBatis学习总结(9)——使用MyBatis Generator自动创建代码
查看>>
Distributed Configuration Management Platform(分布式配置管理平台)
查看>>
Java Web学习总结(14)——JSP基础语法
查看>>
PHP常用函数大全
查看>>
历届Jolt图书震撼奖
查看>>
拖延症(下)
查看>>
ORACLE数据泵使用详解
查看>>
我的友情链接
查看>>
ora-01102问题的解决
查看>>
win10系统重置密码
查看>>