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

  • 相关阅读:
    通过扩展让ASP.NET Web API支持JSONP -摘自网络
    怎么从sqlserver 数据库导出 insert 的数据语句
    'System.Web.Http.GlobalConfiguration' does not contain a definition for 'Configure'
    android学习笔记---发送状态栏通知
    .NET项目框架(转)
    Linux下查看文件权限、修改文件权限的方法
    免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
    electronic data interchange 电子数据交换
    Asp.Net中Ajax实现登陆判断
    如何用JS判断网页中某个id的网页元素是否存在
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/9368899.html
Copyright © 2020-2023  润新知