Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
swdp.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 PHYTEC Messtechnik GmbH
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_SWDP_H_
14#define ZEPHYR_INCLUDE_SWDP_H_
15
16#include <zephyr/device.h>
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
30
39
41#define SWDP_REQUEST_APnDP BIT(0)
43#define SWDP_REQUEST_RnW BIT(1)
45#define SWDP_REQUEST_A2 BIT(2)
47#define SWDP_REQUEST_A3 BIT(3)
48
50
59
61#define SWDP_ACK_OK BIT(0)
63#define SWDP_ACK_WAIT BIT(1)
65#define SWDP_ACK_FAULT BIT(2)
66
68
70#define SWDP_TRANSFER_ERROR BIT(3)
71
80
82#define SWDP_SWCLK_PIN 0U
84#define SWDP_SWDIO_PIN 1U
86#define SWDP_nRESET_PIN 7U
87
89
94struct swdp_api {
103 int (*swdp_output_sequence)(const struct device *dev,
104 uint32_t count,
105 const uint8_t *data);
106
115 int (*swdp_input_sequence)(const struct device *dev,
116 uint32_t count,
117 uint8_t *data);
118
129 int (*swdp_transfer)(const struct device *dev,
130 uint8_t request,
131 uint32_t *data,
132 uint8_t idle_cycles,
133 uint8_t *response);
134
144 int (*swdp_set_pins)(const struct device *dev,
145 uint8_t pins, uint8_t value);
146
155 int (*swdp_get_pins)(const struct device *dev, uint8_t *state);
156
164 int (*swdp_set_clock)(const struct device *dev, uint32_t clock);
165
174 int (*swdp_configure)(const struct device *dev,
175 uint8_t turnaround,
176 bool data_phase);
177
186 int (*swdp_port_on)(const struct device *dev);
187
194 int (*swdp_port_off)(const struct device *dev);
195};
196
207__syscall int swdp_output_sequence(const struct device *dev,
208 const uint32_t count,
209 const uint8_t *const data);
210
211static inline int z_impl_swdp_output_sequence(const struct device *dev,
212 const uint32_t count,
213 const uint8_t *const data)
214{
215 const struct swdp_api *api = dev->api;
216
217 return api->swdp_output_sequence(dev, count, data);
218}
219
228__syscall int swdp_input_sequence(const struct device *dev,
229 const uint32_t count,
230 uint8_t *const buf);
231
232static inline int z_impl_swdp_input_sequence(const struct device *dev,
233 const uint32_t count,
234 uint8_t *const buf)
235{
236 const struct swdp_api *api = dev->api;
237
238 return api->swdp_input_sequence(dev, count, buf);
239}
240
254__syscall int swdp_transfer(const struct device *dev,
255 const uint8_t request,
256 uint32_t *const data,
257 const uint8_t idle_cycles,
258 uint8_t *const response);
259
260static inline int z_impl_swdp_transfer(const struct device *dev,
261 const uint8_t request,
262 uint32_t *const data,
263 const uint8_t idle_cycles,
264 uint8_t *const response)
265{
266 const struct swdp_api *api = dev->api;
267
268 return api->swdp_transfer(dev, request, data, idle_cycles, response);
269}
270
280__syscall int swdp_set_pins(const struct device *dev,
281 const uint8_t pins,
282 const uint8_t value);
283
284static inline int z_impl_swdp_set_pins(const struct device *dev,
285 const uint8_t pins,
286 const uint8_t value)
287{
288 const struct swdp_api *api = dev->api;
289
290 return api->swdp_set_pins(dev, pins, value);
291}
292
301__syscall int swdp_get_pins(const struct device *dev,
302 uint8_t *const state);
303
304static inline int z_impl_swdp_get_pins(const struct device *dev,
305 uint8_t *const state)
306{
307 const struct swdp_api *api = dev->api;
308
309 return api->swdp_get_pins(dev, state);
310}
311
319__syscall int swdp_set_clock(const struct device *dev,
320 const uint32_t clock);
321
322static inline int z_impl_swdp_set_clock(const struct device *dev,
323 const uint32_t clock)
324{
325 const struct swdp_api *api = dev->api;
326
327 return api->swdp_set_clock(dev, clock);
328}
329
338__syscall int swdp_port_on(const struct device *dev);
339
340static inline int z_impl_swdp_port_on(const struct device *dev)
341{
342 const struct swdp_api *api = dev->api;
343
344 return api->swdp_port_on(dev);
345}
346
353__syscall int swdp_port_off(const struct device *dev);
354
355static inline int z_impl_swdp_port_off(const struct device *dev)
356{
357 const struct swdp_api *api = dev->api;
358
359 return api->swdp_port_off(dev);
360}
361
370__syscall int swdp_configure(const struct device *dev,
371 const uint8_t turnaround,
372 const bool data_phase);
373
374static inline int z_impl_swdp_configure(const struct device *dev,
375 const uint8_t turnaround,
376 const bool data_phase)
377{
378 const struct swdp_api *api = dev->api;
379
380 return api->swdp_configure(dev, turnaround, data_phase);
381}
382
383#ifdef __cplusplus
384}
385#endif
386
388
389#include <zephyr/syscalls/swdp.h>
390
391#endif /* ZEPHYR_INCLUDE_SWDP_H_ */
int swdp_port_on(const struct device *dev)
Enable interface, set pins to default state.
int swdp_output_sequence(const struct device *dev, const uint32_t count, const uint8_t *const data)
Write count bits to SWDIO from data LSB first.
int swdp_input_sequence(const struct device *dev, const uint32_t count, uint8_t *const buf)
Read count bits from SWDIO into data LSB first.
int swdp_get_pins(const struct device *dev, uint8_t *const state)
Get SWCLK, SWDPIO, and nRESET pins state.
int swdp_set_pins(const struct device *dev, const uint8_t pins, const uint8_t value)
Set SWCLK, SWDPIO, and nRESET pins state.
int swdp_transfer(const struct device *dev, const uint8_t request, uint32_t *const data, const uint8_t idle_cycles, uint8_t *const response)
Perform SWDP transfer and store response.
int swdp_configure(const struct device *dev, const uint8_t turnaround, const bool data_phase)
Configure SWDP interface.
int swdp_port_off(const struct device *dev)
Disable interface, set pins to High-Z mode.
int swdp_set_clock(const struct device *dev, const uint32_t clock)
Set SWDP clock frequency.
state
Definition parser_state.h:29
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Serial Wire Debug Port (SWDP) driver API.
Definition swdp.h:94
int(* swdp_input_sequence)(const struct device *dev, uint32_t count, uint8_t *data)
Read count bits from SWDIO into data LSB first.
Definition swdp.h:115
int(* swdp_transfer)(const struct device *dev, uint8_t request, uint32_t *data, uint8_t idle_cycles, uint8_t *response)
Perform SWDP transfer and store response.
Definition swdp.h:129
int(* swdp_output_sequence)(const struct device *dev, uint32_t count, const uint8_t *data)
Write count bits to SWDIO from data LSB first.
Definition swdp.h:103
int(* swdp_configure)(const struct device *dev, uint8_t turnaround, bool data_phase)
Configure SWDP interface.
Definition swdp.h:174
int(* swdp_port_on)(const struct device *dev)
Enable interface, set pins to default state.
Definition swdp.h:186
int(* swdp_port_off)(const struct device *dev)
Disable interface, set pins to High-Z mode.
Definition swdp.h:194
int(* swdp_set_clock)(const struct device *dev, uint32_t clock)
Set SWDP clock frequency.
Definition swdp.h:164
int(* swdp_get_pins)(const struct device *dev, uint8_t *state)
Get SWCLK, SWDPIO, and nRESET pins state.
Definition swdp.h:155
int(* swdp_set_pins)(const struct device *dev, uint8_t pins, uint8_t value)
Set SWCLK, SWDPIO, and nRESET pins state.
Definition swdp.h:144