zoukankan      html  css  js  c++  java
  • nRF52832-PPI部分学习

    PPI部分学习思维导图

    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开发教程》

  • 相关阅读:
    多态_python的小窝_百度空间
    可直接下载空间客户端
    简明 Python 教程 / 面向对象的编程 / 类与对象的方法
    C++ 基础 woaidongmao C++博客 good 量产
    set has enumerate
    python invoke super parent method
    分享:常用汉字的unicode 编码
    数据库调整也可以遵循“开闭原则”
    Ninject超轻量级的依赖注入工具
    点某个链接进网站,会发这个链接的会员加积分,实现方法(有时间限制)
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/9368899.html
Copyright © 2011-2022 走看看