nRF Connect SDK API 3.3.99
Loading...
Searching...
No Matches
ppi_seq.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
5 */
6
7#ifndef NRF_DRIVERS_PPI_SEQ_PPI_SEQ_H
8#define NRF_DRIVERS_PPI_SEQ_PPI_SEQ_H
9
18#include <string.h>
19#include <nrfx_timer.h>
20#include <nrfx_grtc.h>
21#include <helpers/nrfx_gppi.h>
22#include <zephyr/kernel.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28#ifndef CONFIG_PPI_SEQ_MAX_PPI_HANDLES
29#define CONFIG_PPI_SEQ_MAX_PPI_HANDLES 8
30#endif
31
32/* Forward declaration. */
33struct ppi_seq_config;
34
36struct ppi_seq {
38 const struct ppi_seq_config *config;
39
41 nrfx_timer_t timer;
42
45
47 atomic_t repeat;
48
50 uint16_t batch_cnt;
51
53 uint8_t grtc_chan;
54
56 uint8_t ppi_cnt;
57};
58
64typedef void (*ppi_seq_cb_t)(struct ppi_seq *ppi_seq, bool last);
65
74
78 struct k_timer timer;
79
81 uint16_t offset;
82
84 uint64_t timestamp;
85
87 uint32_t period;
88};
89
93 nrfx_timer_t timer;
94
96 uint32_t end_seq_event;
97
98 /* Number of additional main operations in a cycle. For example if there
99 * are 2 SPI transfers in each cycle then it should be set to 1.
100 */
102};
103
116
120 uint32_t task;
121
123 uint32_t offset;
124};
125
130
132 NRF_TIMER_Type *timer_reg;
133
134#ifdef RTC_PRESENT
136 NRF_RTC_Type *rtc_reg;
137#endif
138
141
143 uint32_t task;
144
151
154
156};
157
166int ppi_seq_init(struct ppi_seq *seq, const struct ppi_seq_config *config);
167
174void ppi_seq_uninit(struct ppi_seq *seq);
175
193int ppi_seq_start(struct ppi_seq *seq, size_t period, size_t batch_cnt, int repeat);
194
204int ppi_seq_stop(struct ppi_seq *seq, bool immediate);
205
216
217#ifdef __cplusplus
218}
219#endif
220
223#endif /* NRF_DRIVERS_PPI_SEQ_PPI_SEQ_H */
void ppi_seq_uninit(struct ppi_seq *seq)
Uninitialize the sequencer.
#define CONFIG_PPI_SEQ_MAX_PPI_HANDLES
Definition ppi_seq.h:29
void(* ppi_seq_cb_t)(struct ppi_seq *ppi_seq, bool last)
Callback called after completion of each cycle.
Definition ppi_seq.h:64
int ppi_seq_init(struct ppi_seq *seq, const struct ppi_seq_config *config)
Initialize the sequencer.
void ppi_seq_rtc_irq_handler(struct ppi_seq *seq)
RTC interrupt handler.
int ppi_seq_stop(struct ppi_seq *seq, bool immediate)
Stop the sequencer.
int ppi_seq_start(struct ppi_seq *seq, size_t period, size_t batch_cnt, int repeat)
Start the sequencer.
ppi_seq_notifier_type
Type of notifier used for the requested number of sequences completion.
Definition ppi_seq.h:67
@ PPI_SEQ_NOTIFIER_SYS_TIMER
Definition ppi_seq.h:69
@ PPI_SEQ_NOTIFIER_NRFX_TIMER
Definition ppi_seq.h:72
uint32_t task
Definition ppi_seq.h:143
ppi_seq_cb_t callback
Definition ppi_seq.h:140
const struct ppi_seq_extra_op * extra_ops
Definition ppi_seq.h:150
NRF_TIMER_Type * timer_reg
Definition ppi_seq.h:132
struct ppi_seq_notifier * notifier
Definition ppi_seq.h:129
size_t extra_ops_count
Definition ppi_seq.h:153
bool skip_gppi
Definition ppi_seq.h:155
Sequencer configuration structure.
Definition ppi_seq.h:127
uint32_t task
Definition ppi_seq.h:120
uint32_t offset
Definition ppi_seq.h:123
Operation descriptor.
Definition ppi_seq.h:118
nrfx_timer_t timer
Definition ppi_seq.h:93
uint16_t extra_main_ops
Definition ppi_seq.h:101
uint32_t end_seq_event
Definition ppi_seq.h:96
nrfx_timer notifier structure. Useful for short periods.
Definition ppi_seq.h:91
uint32_t period
Definition ppi_seq.h:87
struct k_timer timer
Definition ppi_seq.h:78
uint16_t offset
Definition ppi_seq.h:81
uint64_t timestamp
Definition ppi_seq.h:84
System timer notifier structure. Low power and less resources.
Definition ppi_seq.h:76
struct ppi_seq_notifier_sys_timer sys_timer
Definition ppi_seq.h:110
struct ppi_seq_notifier_nrfx_timer nrfx_timer
Definition ppi_seq.h:113
enum ppi_seq_notifier_type type
Definition ppi_seq.h:107
Notifier structure.
Definition ppi_seq.h:105
uint8_t ppi_cnt
Definition ppi_seq.h:56
atomic_t repeat
Definition ppi_seq.h:47
const struct ppi_seq_config * config
Definition ppi_seq.h:38
uint16_t batch_cnt
Definition ppi_seq.h:50
nrfx_gppi_handle_t ppi_pool[8]
Definition ppi_seq.h:44
nrfx_timer_t timer
Definition ppi_seq.h:41
uint8_t grtc_chan
Definition ppi_seq.h:53
PPI sequencer structure.
Definition ppi_seq.h:36