Análisis de PPI desarrollado por nRF52832

1. Principio de PPI

1. Concept
PPI es la abreviatura de Interconexión periférica programable
2.
Proporciona un canal de hardware para "conectar" eventos y tareas de diferentes periféricos juntos. Cuando ocurre un evento, el hardware activa automáticamente la "conexión" del evento "Tarea
3. Ventajas " El
diseño del mecanismo PPI permite que la tarea se "conecte" para que el hardware la active automáticamente, eliminando la necesidad de que la CPU participe en los pasos. Este aspecto reduce la carga en la CPU y, por otro lado, garantiza la naturaleza en tiempo real de generar eventos para ejecutar tareas.

4. Principio de implementación
1) nRF52832 tiene un total de 32 canales (numerados del 0 al 31), de los cuales 12 canales (canales 20 a 31) han sido preprogramados, y los 20 canales restantes (canales 0 a 19) son programables por el usuario ; y
2) cada canal consta de tres registros puntos finales PPI, un EEP (evento de punto final: puntos finales de eventos) y dos TEP (tarea End-Point: tarea de punto final, la tarea de la variable secundaria) registro;
3) tarea Los puntos finales y los puntos finales de tareas secundarias se activan al mismo tiempo;
4) Al usar PPI para conectar eventos periféricos y tareas periféricas, escriba la dirección del registro de eventos periféricos en la EEP del canal PPI y escriba la dirección del registro de tareas periféricas en TEP del canal PPI, y finalmente habilite el canal PPI para realizar la conexión entre eventos y tareas;

5. El grupo
PPI nRF52832 comparte 6 grupos PPI CHG [0] ~ CHG [5]. El canal PPI se puede agregar al grupo PPI para una administración centralizada para habilitar o deshabilitar el canal PPI al mismo tiempo.
Nota: Cuando un canal PPI pertenece a dos grupos PPI al mismo tiempo, si un grupo PPI está habilitado y el otro grupo PPI está deshabilitado, la función de habilitación tiene prioridad.

Dos, registro PPI

PPI solo tiene registro de tareas y registro general, no tiene registro de eventos, por lo que PPI no puede generar eventos
1. Registro de tareas
1) CHG [n] .EN (n = 0 ~ 5): habilita el grupo de canales PPI n
2) CHG [n] .DIS (n = 0 ~ 5): deshabilita el grupo de canales PPI n

2. Registro general
1) CHEN: habilitar / deshabilitar el canal PPI
2) CHENSET: habilitar el canal PPI
3) CHENCLR: deshabilitar el canal PPI
4) CH [n] .EEP (n = 0 ~ 19): canal PPI n punto final del evento
5) CH [n] .TEP (n = 0 ~ 19): canal PPI n punto final de la tarea
6) CHG [n] (n = 0 ~ 5): grupo de canales PPI n
7) HORQUILLA [n] .TEP (n = 0 ~ 31): canal PPI n punto final de tarea secundaria

Tres, análisis de programación

Versión del SDK: nRF5_SDK_15.2.0_9412b96

1. Pasos básicos de programación
1) Inicializar el módulo PPI
2) Aplicar al controlador para el canal PPI
3) Configurar EEP y TEP del canal
4) Habilitar el canal PPI

2. funciones de biblioteca Relacionados
1) ret_code_t nrf_drv_ppi_init (void);
Función: PPI Inicialización Módulo
2) nrfx_err_t nrfx_ppi_channel_alloc (nrf_ppi_channel_t * p_channel
); Función: canal de aplicación PPI
3) nrfx_err_t nrfx_ppi_channel_assign (canal nrf_ppi_channel_t,
EEP uint32_t, uint32_t tep); función : de configuración de canal EEP y de TEP
. 4) nrfx_err_t nrfx_ppi_channel_fork_assign (canal nrf_ppi_channel_t, fork_tep uint32_t);
función: tareas subcanal configuración de extremo
5) nrfx_err_t nrfx_ppi_group_alloc (nrf_ppi_channel_group_t * p_group
); función: aplicación PPI grupo de canales
6) __ STATIC_INLINE nrfx_err_t nrfx_ppi_channel_include_in_group (nrf_ppi_channel_t canal, función nrf_ppi_channel_group_t group)
: agrega el canal especificado al grupo de canales PPI
7) __STATIC_INLINE nrfx_err_t nrfx_ppi_channel_remove_from_group (nrf_ppi_channel_t canal
, grupo nrf_ppi_channel_group_t) Función: Elimina el canal especificado desde el grupo de canales PPI
8) nrfx_err_t nrfx_ppi_channel_enable (canal nrf_ppi_channel_t)
; Función: permitir el paso PPI
9) nrfx_err_t nrfx_ppi_channel_disable (canal nrf_ppi_channel_t)
; Función: Disable PPI Canal
10) nrfx_err_t nrfx_ppi_group_enable (nrf_ppi_channel_group_t group);
función: habilitar el grupo de canales PPI
11) nrfx_err_t nrfx_ppi_group_disable (nrf_ppi_channel_group_t group); grupo
: deshabilitar canal PPI

3. Ejemplo de código

#include "boards.h"
#include "nrf_drv_gpiote.h"
#include "nrf_drv_ppi.h"

void gpiote_init(void)
{
	ret_code_t err_code;
	//初始化GPIOTE模块
	err_code = nrf_drv_gpiote_init();
	APP_ERROR_CHECK(err_code);
	//定义GPIOTE输出初始化结构体并赋值
	nrf_drv_gpiote_out_config_t out_config = NRFX_GPIOTE_CONFIG_OUT_TASK_TOGGLE(true);
	//初始化GPIOTE输出引脚
	err_code = nrfx_gpiote_out_init(LED_1,&out_config);
	APP_ERROR_CHECK(err_code);
	//使能任务模式
	nrf_drv_gpiote_out_task_enable(LED_1);
	//定义GPIOTE输入初始化结构体并赋值,配置下降沿产生事件
	nrf_drv_gpiote_in_config_t in_config = NRFX_GPIOTE_CONFIG_IN_SENSE_HITOLO(true);
	in_config.pull = NRF_GPIO_PIN_PULLUP;
	//配置引脚为GPIOTE输入
	err_code = nrfx_gpiote_in_init(BUTTON_1,&in_config,NULL);
	APP_ERROR_CHECK(err_code);
	//使能事件模式
	nrf_drv_gpiote_in_event_enable(BUTTON_1,true);
}

//定义PPI通道
nrf_ppi_channel_t my_ppi_channel;
void ppi_config(void)
{
	ret_code_t err_code = NRF_SUCCESS;
	//初始化PPI模块
	err_code = nrf_drv_ppi_init();
	APP_ERROR_CHECK(err_code);
	//申请PPI通道
	err_code = nrfx_ppi_channel_alloc(&my_ppi_channel);
	APP_ERROR_CHECK(err_code);
	//设置PPI通道EEP和TEP端点地址	
	err_code = nrfx_ppi_channel_assign(my_ppi_channel,nrfx_gpiote_in_event_addr_get(BUTTON_1),nrfx_gpiote_out_task_addr_get(LED_1));
	APP_ERROR_CHECK(err_code);
	//使能PPI通道
	err_code = nrfx_ppi_channel_enable(my_ppi_channel);
	APP_ERROR_CHECK(err_code);
}

int main(void)
{
	gpiote_init();
	ppi_config();
	return 0;
}

 

Publicado 81 artículos originales · 21 elogios · 30,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/qq_33575901/article/details/90043139
Recomendado
Clasificación