caffeine-hal 0.6.6
A Header-Defined Interface c library, it provides the hal layer for the Caffeine framework
Loading...
Searching...
No Matches
cfn_hal_spi.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_SPI_H
27#define CAFFEINE_HAL_HAL_SPI_H
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34/* Includes ---------------------------------------------------------*/
35#include "cfn_hal.h"
36#include "cfn_hal_base.h"
37#include "cfn_hal_gpio.h"
38#include "cfn_hal_types.h"
39
40/* Defines ----------------------------------------------------------*/
41
42/* Types Enums ------------------------------------------------------*/
43
53
65
78
91
92/* Types Structs ----------------------------------------------------*/
93
105
117
128
129typedef struct cfn_hal_spi_s cfn_hal_spi_t;
130
139
141
151typedef void (*cfn_hal_spi_callback_t)(cfn_hal_spi_t *driver,
152 uint32_t event_mask,
153 uint32_t error_mask,
154 uint8_t *data,
155 size_t nbr_of_bytes,
156 void *user_arg);
157
171
173
175
176/* Functions inline ------------------------------------------------- */
178 uint32_t peripheral_id,
179 struct cfn_hal_clock_s *clock,
180 void *dependency,
181 const cfn_hal_spi_api_t *api,
182 const cfn_hal_spi_phy_t *phy,
183 const cfn_hal_spi_config_t *config,
184 cfn_hal_spi_callback_t callback,
185 void *user_arg)
186{
188 driver, CFN_HAL_PERIPHERAL_TYPE_SPI, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
189}
190
198 const cfn_hal_spi_config_t *config)
199{
200 if (driver == NULL || config == NULL)
201 {
203 }
204
206 {
208 }
209
210 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, config);
211}
212
219{
220 if (!driver)
221 {
223 }
224 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
225 cfn_hal_error_code_t error = cfn_hal_spi_config_validate(driver, driver->config);
226 if (error != CFN_HAL_ERROR_OK)
227 {
228 return error;
229 }
230 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI);
231}
232
239{
240 if (!driver)
241 {
243 }
245}
246
254{
255 if (!driver)
256 {
258 }
260 if (error != CFN_HAL_ERROR_OK)
261 {
262 return error;
263 }
264 {
265 driver->config = config;
266 }
267 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, (const void *) config);
268}
269
277{
278 if (!driver || !config || !driver->config)
279 {
281 }
282 *config = *(driver->config);
283 return CFN_HAL_ERROR_OK;
284}
285
294 const cfn_hal_spi_callback_t callback,
295 void *user_arg)
296{
297 if (!driver)
298 {
300 }
301 {
302 driver->cb = callback;
303 driver->cb_user_arg = user_arg;
304 }
306 &driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, (cfn_hal_callback_t) callback, user_arg);
307}
308
323
331{
332 if (!driver)
333 {
335 }
336 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, event_mask);
337}
338
346{
347 if (!driver)
348 {
350 }
351 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, event_mask);
352}
353
361{
362 if (!driver)
363 {
365 }
366 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, event_mask);
367}
368
376{
377 if (!driver)
378 {
380 }
381 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, error_mask);
382}
383
391{
392 if (!driver)
393 {
395 }
396 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, error_mask);
397}
398
406{
407 if (!driver)
408 {
410 }
411 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SPI, error_mask);
412}
413
414/* SPI Specific Functions ------------------------------------------- */
415
428
440
449 const cfn_hal_spi_transaction_t *xfr,
450 uint32_t timeout)
451{
453 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_SPI, xfr_polling, driver, error, xfr, timeout);
454 return error;
455}
456
470 const cfn_hal_spi_config_t *config,
471 const cfn_hal_spi_phy_t *phy,
472 struct cfn_hal_clock_s *clock,
473 void *dependency,
474 cfn_hal_spi_callback_t callback,
475 void *user_arg);
477#ifdef __cplusplus
478}
479#endif
480
481#endif // CAFFEINE_HAL_HAL_SPI_H
Core Hardware Abstraction Layer definitions and macros.
#define CFN_HAL_CHECK_AND_CALL_FUNC_VARG(expected_peripheral_type, func, driver, result,...)
Definition cfn_hal.h:134
#define CFN_HAL_CHECK_AND_CALL_FUNC(expected_peripheral_type, func, driver, result)
Definition cfn_hal.h:114
#define CFN_HAL_INLINE
Macro for inlining HAL wrapper functions. Can be overridden with attribute((always_inline)) for perfo...
Definition cfn_hal.h:61
#define CFN_HAL_BIT(x)
Definition cfn_hal.h:79
#define CFN_HAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_hal.h:102
Base driver Hardware Abstraction Layer declarations.
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error disable for any driver. Deactivates exception-flow hardware triggers based on the provi...
Definition cfn_hal_base_impl.h:436
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_callback_register(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_callback_t callback, void *user_arg)
Generic callback registration for any driver.
Definition cfn_hal_base_impl.h:254
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error enable for any driver. Activates exception-flow hardware triggers based on the provided...
Definition cfn_hal_base_impl.h:411
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event enable for any driver. Activates nominal hardware triggers based on the provided mask.
Definition cfn_hal_base_impl.h:331
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *event_mask)
Generic event status getter for any driver. Retrieves the current nominal hardware triggers/flags.
Definition cfn_hal_base_impl.h:386
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *error_mask)
Generic error status getter for any driver. Retrieves current exception-flow hardware flags/errors.
Definition cfn_hal_base_impl.h:461
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic configuration setter for any driver.
Definition cfn_hal_base_impl.h:196
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_power_state_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_power_state_t state)
Generic power state transition for any driver.
Definition cfn_hal_base_impl.h:279
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_deinit(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic deinitialization for any driver. Returns the driver to the CONSTRUCTED state and releases boa...
Definition cfn_hal_base_impl.h:144
#define CFN_HAL_VMT_CHECK(api_struct_type)
Compile-time check to ensure a peripheral API struct is compatible with the base layer....
Definition cfn_hal_base.h:91
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_init(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic initialization for any driver. Handles board-level hooks, type validation,...
Definition cfn_hal_base_impl.h:85
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_validate(const cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic validation for a configuration.
Definition cfn_hal_base_impl.h:234
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event disable for any driver. Deactivates nominal hardware triggers based on the provided mas...
Definition cfn_hal_base_impl.h:361
#define CFN_HAL_POPULATE_DRIVER( driver_ptr, periph_type, periph_id, clock_ptr, dep_ptr, api_ptr, phy_ptr, cfg_ptr, cb_func, cb_arg)
Standardizes the population of a peripheral driver structure. This macro ensures that the base driver...
Definition cfn_hal_base_impl.h:45
General Purpose Input/Output (GPIO) HAL API.
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_event_disable(cfn_hal_spi_t *driver, uint32_t event_mask)
Disables one or more SPI nominal events.
Definition cfn_hal_spi.h:345
cfn_hal_error_code_t cfn_hal_spi_destruct(cfn_hal_spi_t *driver)
Definition cfn_hal_spi_port.c:85
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_event_enable(cfn_hal_spi_t *driver, uint32_t event_mask)
Enables one or more SPI nominal events.
Definition cfn_hal_spi.h:330
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_config_set(cfn_hal_spi_t *driver, const cfn_hal_spi_config_t *config)
Sets the SPI configuration.
Definition cfn_hal_spi.h:253
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_error_get(cfn_hal_spi_t *driver, uint32_t *error_mask)
Retrieves the current SPI exception error status.
Definition cfn_hal_spi.h:405
void(* cfn_hal_spi_callback_t)(cfn_hal_spi_t *driver, uint32_t event_mask, uint32_t error_mask, uint8_t *data, size_t nbr_of_bytes, void *user_arg)
SPI callback signature.
Definition cfn_hal_spi.h:151
cfn_hal_spi_error_t
SPI exception error flags.
Definition cfn_hal_spi.h:58
@ CFN_HAL_SPI_ERROR_NONE
Definition cfn_hal_spi.h:59
@ CFN_HAL_SPI_ERROR_FRAMING
Definition cfn_hal_spi.h:60
@ CFN_HAL_SPI_ERROR_CRC
Definition cfn_hal_spi.h:62
@ CFN_HAL_SPI_ERROR_GENERAL
Definition cfn_hal_spi.h:63
@ CFN_HAL_SPI_ERROR_OVERRUN
Definition cfn_hal_spi.h:61
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_deinit(cfn_hal_spi_t *driver)
Deinitializes the SPI driver.
Definition cfn_hal_spi.h:238
cfn_hal_spi_event_t
SPI nominal event flags.
Definition cfn_hal_spi.h:48
@ CFN_HAL_SPI_EVENT_NONE
Definition cfn_hal_spi.h:49
@ CFN_HAL_SPI_EVENT_RX_READY
Definition cfn_hal_spi.h:51
@ CFN_HAL_SPI_EVENT_TX_COMPLETE
Definition cfn_hal_spi.h:50
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_init(cfn_hal_spi_t *driver)
Initializes the SPI driver.
Definition cfn_hal_spi.h:218
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_xfr_dma(cfn_hal_spi_t *driver, const cfn_hal_spi_transaction_t *xfr)
Starts an SPI transaction using DMA (non-blocking).
Definition cfn_hal_spi.h:463
cfn_hal_spi_config_format_t
SPI clock phase and polarity formats.
Definition cfn_hal_spi.h:70
@ CFN_HAL_SPI_CONFIG_FMT_POL1_PHA0
Definition cfn_hal_spi.h:73
@ CFN_HAL_SPI_CONFIG_FMT_POL0_PHA1
Definition cfn_hal_spi.h:72
@ CFN_HAL_SPI_CONFIG_FMT_POL1_PHA1
Definition cfn_hal_spi.h:74
@ CFN_HAL_SPI_CONFIG_FMT_POL0_PHA0
Definition cfn_hal_spi.h:71
@ CFN_HAL_SPI_CONFIG_FMT_MAX
Definition cfn_hal_spi.h:76
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_xfr_polling(cfn_hal_spi_t *driver, const cfn_hal_spi_transaction_t *xfr, uint32_t timeout)
Executes an SPI transaction using polling (blocking).
Definition cfn_hal_spi.h:448
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_xfr_irq(cfn_hal_spi_t *driver, const cfn_hal_spi_transaction_t *xfr)
Starts an SPI transaction using interrupts (non-blocking).
Definition cfn_hal_spi.h:422
struct cfn_hal_spi_s cfn_hal_spi_t
Definition cfn_hal_spi.h:129
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_power_state_set(cfn_hal_spi_t *driver, cfn_hal_power_state_t state)
Sets the SPI power state.
Definition cfn_hal_spi.h:315
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_error_enable(cfn_hal_spi_t *driver, uint32_t error_mask)
Enables one or more SPI exception errors.
Definition cfn_hal_spi.h:375
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_event_get(cfn_hal_spi_t *driver, uint32_t *event_mask)
Retrieves the current SPI nominal event status.
Definition cfn_hal_spi.h:360
CFN_HAL_INLINE void cfn_hal_spi_populate(cfn_hal_spi_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_spi_api_t *api, const cfn_hal_spi_phy_t *phy, const cfn_hal_spi_config_t *config, cfn_hal_spi_callback_t callback, void *user_arg)
Definition cfn_hal_spi.h:177
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_xfr_irq_abort(cfn_hal_spi_t *driver)
Aborts an ongoing non-blocking SPI transaction.
Definition cfn_hal_spi.h:434
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_config_validate(const cfn_hal_spi_t *driver, const cfn_hal_spi_config_t *config)
Validates the SPI configuration.
Definition cfn_hal_spi.h:197
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_config_get(cfn_hal_spi_t *driver, cfn_hal_spi_config_t *config)
Gets the current SPI configuration.
Definition cfn_hal_spi.h:276
cfn_hal_error_code_t cfn_hal_spi_construct(cfn_hal_spi_t *driver, const cfn_hal_spi_config_t *config, const cfn_hal_spi_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_spi_callback_t callback, void *user_arg)
Definition cfn_hal_spi_port.c:69
cfn_hal_spi_config_cs_mode_t
SPI Chip Select (CS) management modes.
Definition cfn_hal_spi.h:83
@ CFN_HAL_SPI_CONFIG_CS_USER_CONTROLLED
Definition cfn_hal_spi.h:84
@ CFN_HAL_SPI_CONFIG_CS_HW_CONTROLLED
Definition cfn_hal_spi.h:87
@ CFN_HAL_SPI_CONFIG_CS_HAL_CONTROLLED
Definition cfn_hal_spi.h:86
@ CFN_HAL_SPI_CONFIG_CS_MAX
Definition cfn_hal_spi.h:89
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_error_disable(cfn_hal_spi_t *driver, uint32_t error_mask)
Disables one or more SPI exception errors.
Definition cfn_hal_spi.h:390
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_spi_callback_register(cfn_hal_spi_t *driver, const cfn_hal_spi_callback_t callback, void *user_arg)
Registers a callback for SPI events and errors.
Definition cfn_hal_spi.h:293
Common type definitions and enums for the HAL.
void(* cfn_hal_callback_t)(void)
Generic function pointer for HAL callbacks. Used as a standard-compliant carrier in the base layer.
Definition cfn_hal_types.h:98
enum cfn_hal_error_codes cfn_hal_error_code_t
cfn_hal_power_state_t
Definition cfn_hal_types.h:156
@ CFN_HAL_ERROR_OK
Definition cfn_hal_types.h:50
@ CFN_HAL_ERROR_BAD_PARAM
Definition cfn_hal_types.h:53
@ CFN_HAL_ERROR_BAD_CONFIG
Definition cfn_hal_types.h:60
#define CFN_HAL_PERIPHERAL_TYPE_SPI
Definition cfn_hal_types.h:129
Base API structure for all peripheral drivers. Every peripheral-specific API struct MUST have this as...
Definition cfn_hal_base.h:63
Lightweight handle to a specific GPIO pin. Used by other peripherals to reference physical pins.
Definition cfn_hal_gpio.h:173
SPI Virtual Method Table (VMT).
Definition cfn_hal_spi.h:162
cfn_hal_api_base_t base
Definition cfn_hal_spi.h:163
cfn_hal_error_code_t(* xfr_irq_abort)(cfn_hal_spi_t *driver)
Definition cfn_hal_spi.h:167
cfn_hal_error_code_t(* xfr_irq)(cfn_hal_spi_t *driver, const cfn_hal_spi_transaction_t *xfr)
Definition cfn_hal_spi.h:166
cfn_hal_error_code_t(* xfr_dma)(cfn_hal_spi_t *driver, const cfn_hal_spi_transaction_t *xfr)
Definition cfn_hal_spi.h:169
cfn_hal_error_code_t(* xfr_polling)(cfn_hal_spi_t *driver, const cfn_hal_spi_transaction_t *xfr, uint32_t timeout)
Definition cfn_hal_spi.h:168
SPI configuration structure.
Definition cfn_hal_spi.h:110
void * custom
Definition cfn_hal_spi.h:115
cfn_hal_spi_config_cs_mode_t cs_mode
Definition cfn_hal_spi.h:114
uint32_t bitrate
Definition cfn_hal_spi.h:111
uint32_t data_size
Definition cfn_hal_spi.h:112
cfn_hal_spi_config_format_t fmt
Definition cfn_hal_spi.h:113
SPI Device addressing association.
Definition cfn_hal_spi.h:135
cfn_hal_gpio_pin_handle_t * cs_pin
Definition cfn_hal_spi.h:137
cfn_hal_spi_t * spi
Definition cfn_hal_spi.h:136
SPI hardware physical mapping.
Definition cfn_hal_spi.h:98
void * user_data
Definition cfn_hal_spi.h:103
cfn_hal_gpio_pin_handle_t * mosi
Definition cfn_hal_spi.h:100
cfn_hal_gpio_pin_handle_t * miso
Definition cfn_hal_spi.h:101
void * instance
Definition cfn_hal_spi.h:99
cfn_hal_gpio_pin_handle_t * sck
Definition cfn_hal_spi.h:102
SPI transaction configuration.
Definition cfn_hal_spi.h:122
size_t nbr_of_bytes
Definition cfn_hal_spi.h:125
cfn_hal_gpio_pin_handle_t * cs
Definition cfn_hal_spi.h:126
uint8_t * rx_payload
Definition cfn_hal_spi.h:124
const uint8_t * tx_payload
Definition cfn_hal_spi.h:123