nRF Connect SDK API
3.4.99
Toggle main menu visibility
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
17
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
25
extern
"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. */
33
struct
ppi_seq_config
;
34
36
struct
ppi_seq
{
38
const
struct
ppi_seq_config
*
config
;
39
41
nrfx_timer_t
timer
;
42
44
nrfx_gppi_handle_t
ppi_pool
[
CONFIG_PPI_SEQ_MAX_PPI_HANDLES
];
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
64
typedef
void (*
ppi_seq_cb_t
)(
struct
ppi_seq
*
ppi_seq
,
bool
last);
65
67
enum
ppi_seq_notifier_type
{
69
PPI_SEQ_NOTIFIER_SYS_TIMER
,
70
72
PPI_SEQ_NOTIFIER_NRFX_TIMER
,
73
};
74
76
struct
ppi_seq_notifier_sys_timer
{
78
struct
k_timer
timer
;
79
81
uint16_t
offset
;
82
84
uint64_t
timestamp
;
85
87
uint32_t
period
;
88
};
89
91
struct
ppi_seq_notifier_nrfx_timer
{
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
*/
101
uint16_t
extra_main_ops
;
102
104
bool
attached
;
105
};
106
108
struct
ppi_seq_notifier
{
110
enum
ppi_seq_notifier_type
type
;
111
union
{
113
struct
ppi_seq_notifier_sys_timer
sys_timer
;
114
116
struct
ppi_seq_notifier_nrfx_timer
nrfx_timer
;
117
};
118
};
119
121
struct
ppi_seq_extra_op
{
123
uint32_t
task
;
124
126
uint32_t
offset
;
127
};
128
130
struct
ppi_seq_config
{
132
struct
ppi_seq_notifier
*
notifier
;
133
135
NRF_TIMER_Type *
timer_reg
;
136
137
#ifdef RTC_PRESENT
139
NRF_RTC_Type *rtc_reg;
140
#endif
141
143
ppi_seq_cb_t
callback
;
144
146
uint32_t
task
;
147
153
const
struct
ppi_seq_extra_op
*
extra_ops
;
154
156
size_t
extra_ops_count
;
157
158
bool
skip_gppi
;
159
};
160
169
int
ppi_seq_init
(
struct
ppi_seq
*seq,
const
struct
ppi_seq_config
*config);
170
177
void
ppi_seq_uninit
(
struct
ppi_seq
*seq);
178
196
int
ppi_seq_start
(
struct
ppi_seq
*seq,
size_t
period,
size_t
batch_cnt,
int
repeat);
197
207
int
ppi_seq_stop
(
struct
ppi_seq
*seq,
bool
immediate);
208
218
void
ppi_seq_rtc_irq_handler
(
struct
ppi_seq
*seq);
219
220
#ifdef __cplusplus
221
}
222
#endif
223
225
226
#endif
/* NRF_DRIVERS_PPI_SEQ_PPI_SEQ_H */
ppi_seq_uninit
void ppi_seq_uninit(struct ppi_seq *seq)
Uninitialize the sequencer.
CONFIG_PPI_SEQ_MAX_PPI_HANDLES
#define CONFIG_PPI_SEQ_MAX_PPI_HANDLES
Definition
ppi_seq.h:29
ppi_seq_cb_t
void(* ppi_seq_cb_t)(struct ppi_seq *ppi_seq, bool last)
Callback called after completion of each cycle.
Definition
ppi_seq.h:64
ppi_seq_init
int ppi_seq_init(struct ppi_seq *seq, const struct ppi_seq_config *config)
Initialize the sequencer.
ppi_seq_rtc_irq_handler
void ppi_seq_rtc_irq_handler(struct ppi_seq *seq)
RTC interrupt handler.
ppi_seq_stop
int ppi_seq_stop(struct ppi_seq *seq, bool immediate)
Stop the sequencer.
ppi_seq_start
int ppi_seq_start(struct ppi_seq *seq, size_t period, size_t batch_cnt, int repeat)
Start the sequencer.
ppi_seq_notifier_type
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
@ PPI_SEQ_NOTIFIER_SYS_TIMER
Definition
ppi_seq.h:69
PPI_SEQ_NOTIFIER_NRFX_TIMER
@ PPI_SEQ_NOTIFIER_NRFX_TIMER
Definition
ppi_seq.h:72
ppi_seq_config::task
uint32_t task
Definition
ppi_seq.h:146
ppi_seq_config::callback
ppi_seq_cb_t callback
Definition
ppi_seq.h:143
ppi_seq_config::extra_ops
const struct ppi_seq_extra_op * extra_ops
Definition
ppi_seq.h:153
ppi_seq_config::timer_reg
NRF_TIMER_Type * timer_reg
Definition
ppi_seq.h:135
ppi_seq_config::notifier
struct ppi_seq_notifier * notifier
Definition
ppi_seq.h:132
ppi_seq_config::extra_ops_count
size_t extra_ops_count
Definition
ppi_seq.h:156
ppi_seq_config::skip_gppi
bool skip_gppi
Definition
ppi_seq.h:158
ppi_seq_config
Sequencer configuration structure.
Definition
ppi_seq.h:130
ppi_seq_extra_op::task
uint32_t task
Definition
ppi_seq.h:123
ppi_seq_extra_op::offset
uint32_t offset
Definition
ppi_seq.h:126
ppi_seq_extra_op
Operation descriptor.
Definition
ppi_seq.h:121
ppi_seq_notifier_nrfx_timer::attached
bool attached
Definition
ppi_seq.h:104
ppi_seq_notifier_nrfx_timer::timer
nrfx_timer_t timer
Definition
ppi_seq.h:93
ppi_seq_notifier_nrfx_timer::extra_main_ops
uint16_t extra_main_ops
Definition
ppi_seq.h:101
ppi_seq_notifier_nrfx_timer::end_seq_event
uint32_t end_seq_event
Definition
ppi_seq.h:96
ppi_seq_notifier_nrfx_timer
nrfx_timer notifier structure. Useful for short periods.
Definition
ppi_seq.h:91
ppi_seq_notifier_sys_timer::period
uint32_t period
Definition
ppi_seq.h:87
ppi_seq_notifier_sys_timer::timer
struct k_timer timer
Definition
ppi_seq.h:78
ppi_seq_notifier_sys_timer::offset
uint16_t offset
Definition
ppi_seq.h:81
ppi_seq_notifier_sys_timer::timestamp
uint64_t timestamp
Definition
ppi_seq.h:84
ppi_seq_notifier_sys_timer
System timer notifier structure. Low power and less resources.
Definition
ppi_seq.h:76
ppi_seq_notifier::sys_timer
struct ppi_seq_notifier_sys_timer sys_timer
Definition
ppi_seq.h:113
ppi_seq_notifier::nrfx_timer
struct ppi_seq_notifier_nrfx_timer nrfx_timer
Definition
ppi_seq.h:116
ppi_seq_notifier::type
enum ppi_seq_notifier_type type
Definition
ppi_seq.h:110
ppi_seq_notifier
Notifier structure.
Definition
ppi_seq.h:108
ppi_seq::ppi_cnt
uint8_t ppi_cnt
Definition
ppi_seq.h:56
ppi_seq::repeat
atomic_t repeat
Definition
ppi_seq.h:47
ppi_seq::config
const struct ppi_seq_config * config
Definition
ppi_seq.h:38
ppi_seq::batch_cnt
uint16_t batch_cnt
Definition
ppi_seq.h:50
ppi_seq::ppi_pool
nrfx_gppi_handle_t ppi_pool[8]
Definition
ppi_seq.h:44
ppi_seq::timer
nrfx_timer_t timer
Definition
ppi_seq.h:41
ppi_seq::grtc_chan
uint8_t grtc_chan
Definition
ppi_seq.h:53
ppi_seq
PPI sequencer structure.
Definition
ppi_seq.h:36
include
drivers
ppi_seq
ppi_seq.h
Generated on
for nRF Connect SDK API by
1.17.0