![]() |
no-OS
|
Implementation of stm32 I3C driver. More...
#include <stdlib.h>#include <string.h>#include <errno.h>#include "no_os_util.h"#include "no_os_alloc.h"#include "no_os_i3c.h"#include "stm32_i3c.h"#include "stm32_dma.h"Classes | |
| struct | stm32_i3c_dma_ctx |
| STM32 platform specific I3C DMA context descriptor. More... | |
Functions | |
| void | stm32_i3c_dma_callback (struct no_os_dma_xfer_desc *old_xfer, struct no_os_dma_xfer_desc *next_xfer, void *ctx) |
| DMA callback handler. | |
| void | HAL_I3C_TgtReqDynamicAddrCallback (I3C_HandleTypeDef *hi3c, uint64_t targetPayload) |
| I3C target request a dynamic address callback. When called, assigns a dynamic address to the target. | |
| void | HAL_I3C_CtrlDAACpltCallback (I3C_HandleTypeDef *hi3c) |
| Controller dynamic address assignment Complete callback. | |
| void | HAL_I3C_CtrlTxCpltCallback (I3C_HandleTypeDef *hi3c) |
| Controller Transmit Complete callback. | |
| void | HAL_I3C_CtrlRxCpltCallback (I3C_HandleTypeDef *hi3c) |
| Controller Reception Complete callback. | |
| void | HAL_I3C_ErrorCallback (I3C_HandleTypeDef *hi3c) |
| void | HAL_I3C_CtrlMultipleXferCpltCallback (I3C_HandleTypeDef *hi3c) |
| void | HAL_I3C_NotifyCallback (I3C_HandleTypeDef *hi3c, uint32_t eventId) |
| int | stm32_i3c_init (struct no_os_i3c_desc *desc, const struct no_os_i3c_init_param *param) |
| Initialize the I3C device. | |
| int | stm32_i3c_init_bus (struct no_os_i3c_bus_desc *desc, const struct no_os_i3c_bus_init_param *param) |
| Initialize the I3C bus. | |
| int | stm32_i3c_do_daa (struct no_os_i3c_bus_desc *desc, bool rstdaa) |
| Do I3C DAA to assign the dynamic addresses. | |
| int | stm32_i3c_remove (struct no_os_i3c_desc *desc) |
| Free the resources allocated by stm32_i3c_init(). | |
| int | stm32_i3c_remove_bus (struct no_os_i3c_bus_desc *desc) |
| Deinit I3C bus and free resources allocated by stm32_i3c_init_bus(). | |
| int | stm32_i3c_send_ccc (struct no_os_i3c_bus_desc *desc, uint8_t addr, uint8_t id, bool rnw, bool defining, uint8_t *data, uint8_t size) |
| Send CCC as bus. Retrieve data is only valid for unicast commands. Multi frames are not supported such as: | |
| int | stm32_i3c_write (struct no_os_i3c_desc *desc, uint8_t *data, uint8_t data_len) |
| I3C private write transaction as bus. | |
| int | stm32_i3c_read (struct no_os_i3c_desc *desc, uint8_t *data, uint8_t data_len) |
| I3C private read transaction as bus. | |
| int | stm32_i3c_write_and_read (struct no_os_i3c_desc *desc, uint8_t *tx_data, uint8_t tx_data_len, uint8_t *rx_data, uint8_t rx_data_len) |
| I3C private write and read transaction as bus. | |
| int | stm32_i3c_is_dev_ready (struct no_os_i3c_desc *desc) |
| Check if I3C device is ready. | |
| int | stm32_i3c_conf_irq (struct no_os_i3c_bus_desc *desc, uint8_t irq, bool en) |
| Configure I3C interrupts. | |
| int | stm32_i3c_get_ccc_info (struct no_os_i3c_bus_desc *desc, uint8_t irq) |
| Update I3C CCC info. | |
| int32_t | stm32_i3c_transfer_dma_async (struct no_os_i3c_desc *desc, struct no_os_i3c_msg *msgs, uint32_t len, void(*callback)(void *), void *ctx) |
| Configure and start a series of transfers using DMA. | |
| int32_t | stm32_i3c_transfer_abort (struct no_os_i3c_desc *desc) |
| Abort the ongoing DMA transaction. | |
Variables | |
| volatile bool | i3c_dma_cplt [NO_OS_I3C_MAX_BUS_NUMBER] = {false} |
| const struct no_os_i3c_platform_ops | stm32_i3c_ops |
| stm32 platform specific I3C platform ops structure. | |
Implementation of stm32 I3C driver.
Copyright 2024(c) Analog Devices, Inc.
SPDX-License-Identifier: BSD-3-Clause
| void HAL_I3C_CtrlDAACpltCallback | ( | I3C_HandleTypeDef * | hi3c | ) |
Controller dynamic address assignment Complete callback.
| hi3c | - Pointer to an I3C_HandleTypeDef structure that contains the configuration information for the specified I3C. |
| void HAL_I3C_CtrlMultipleXferCpltCallback | ( | I3C_HandleTypeDef * | hi3c | ) |
| void HAL_I3C_CtrlRxCpltCallback | ( | I3C_HandleTypeDef * | hi3c | ) |
Controller Reception Complete callback.
| hi3c | - Pointer to an I3C_HandleTypeDef structure that contains the configuration information for the specified I3C. |
| void HAL_I3C_CtrlTxCpltCallback | ( | I3C_HandleTypeDef * | hi3c | ) |
Controller Transmit Complete callback.
| hi3c | - Pointer to an I3C_HandleTypeDef structure that contains the configuration information for the specified I3C. |
| void HAL_I3C_ErrorCallback | ( | I3C_HandleTypeDef * | hi3c | ) |
| void HAL_I3C_NotifyCallback | ( | I3C_HandleTypeDef * | hi3c, |
| uint32_t | eventId ) |
| void HAL_I3C_TgtReqDynamicAddrCallback | ( | I3C_HandleTypeDef * | hi3c, |
| uint64_t | targetPayload ) |
I3C target request a dynamic address callback. When called, assigns a dynamic address to the target.
| hi3c | - Pointer to an I3C_HandleTypeDef structure that contains the configuration information for the specified I3C. |
| targetPayload | - The {BCR, DCR, PID} yielded by the device during the DAA. |
| int stm32_i3c_conf_irq | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | irq, | ||
| bool | en ) |
Configure I3C interrupts.
| desc | - The I3C descriptor. |
| irq | - The interrupt type to enable/disable. |
| en | - 1 to enable, 0 to disable irq type. |
| void stm32_i3c_dma_callback | ( | struct no_os_dma_xfer_desc * | old_xfer, |
| struct no_os_dma_xfer_desc * | next_xfer, | ||
| void * | ctx ) |
DMA callback handler.
| old_xfer | - Completed DMA xfer descriptor. |
| next_xfer | - DMA xfer descriptor to be configured. |
| ctx | - The DMA callback context |
| int stm32_i3c_do_daa | ( | struct no_os_i3c_bus_desc * | desc, |
| bool | rstdaa ) |
Do I3C DAA to assign the dynamic addresses.
| desc | - The I3C bus descriptor. |
| rstdaa | - Unassigned the DA of devices already assigned. |
| int stm32_i3c_get_ccc_info | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | irq ) |
Update I3C CCC info.
| desc | - The I3C descriptor. |
| irq | - The interrupt type to update the field. |
| int stm32_i3c_init | ( | struct no_os_i3c_desc * | desc, |
| const struct no_os_i3c_init_param * | param ) |
Initialize the I3C device.
| desc | - The I3C device descriptor. |
| param | - The structure that contains the I3C parameters (unused). |
| int stm32_i3c_init_bus | ( | struct no_os_i3c_bus_desc * | desc, |
| const struct no_os_i3c_bus_init_param * | param ) |
Initialize the I3C bus.
| desc | - The I3C bus descriptor. |
| param | - The structure that contains the I3C parameters. |
| int stm32_i3c_is_dev_ready | ( | struct no_os_i3c_desc * | desc | ) |
Check if I3C device is ready.
| desc | - The I3C descriptor. |
| int stm32_i3c_read | ( | struct no_os_i3c_desc * | desc, |
| uint8_t * | data, | ||
| uint8_t | data_len ) |
I3C private read transaction as bus.
| desc | - The I3C descriptor. |
| data | - The buffer where received data is to be stored. |
| data_len | - Number of bytes to receive. |
| int stm32_i3c_remove | ( | struct no_os_i3c_desc * | desc | ) |
Free the resources allocated by stm32_i3c_init().
| desc | - The I3C device descriptor. |
| int stm32_i3c_remove_bus | ( | struct no_os_i3c_bus_desc * | desc | ) |
Deinit I3C bus and free resources allocated by stm32_i3c_init_bus().
| desc | - The I3C bus descriptor. |
| int stm32_i3c_send_ccc | ( | struct no_os_i3c_bus_desc * | desc, |
| uint8_t | addr, | ||
| uint8_t | id, | ||
| bool | rnw, | ||
| bool | defining, | ||
| uint8_t * | data, | ||
| uint8_t | size ) |
Send CCC as bus. Retrieve data is only valid for unicast commands. Multi frames are not supported such as:
| desc | - The I3C descriptor. |
| addr | - Address to send to. |
| id | - CCC ID. |
| rnw | - True if the CCC should retrieve data from the device. |
| defining | - Contain defining byte. |
| data | - The buffer with the data to transmit. |
| size | - Number of bytes in the buffer. |
| int32_t stm32_i3c_transfer_abort | ( | struct no_os_i3c_desc * | desc | ) |
Abort the ongoing DMA transaction.
| desc | - The I3C descriptor. |
| int32_t stm32_i3c_transfer_dma_async | ( | struct no_os_i3c_desc * | desc, |
| struct no_os_i3c_msg * | msgs, | ||
| uint32_t | len, | ||
| void(* | callback )(void *), | ||
| void * | ctx ) |
Configure and start a series of transfers using DMA.
| desc | - The I3C descriptor. |
| msgs | - The messages array. |
| len | - Number of messages. |
| callback | - Function to be invoked after transfers. |
| ctx | - User defined parameter for the callback function. |
| int stm32_i3c_write | ( | struct no_os_i3c_desc * | desc, |
| uint8_t * | data, | ||
| uint8_t | data_len ) |
I3C private write transaction as bus.
| desc | - The I3C descriptor. |
| data | - The buffer with the data to transmit. |
| data_len | - Number of bytes in the buffer. |
| int stm32_i3c_write_and_read | ( | struct no_os_i3c_desc * | desc, |
| uint8_t * | tx_data, | ||
| uint8_t | tx_data_len, | ||
| uint8_t * | rx_data, | ||
| uint8_t | rx_data_len ) |
I3C private write and read transaction as bus.
| desc | - The I3C descriptor. |
| tx_data | - The buffer with the transmitted data. |
| tx_data_len | - Number of bytes to write. |
| rx_data | - The buffer with the received data. |
| rx_data_len | - Number of bytes to read. |
| volatile bool i3c_dma_cplt[NO_OS_I3C_MAX_BUS_NUMBER] = {false} |
| const struct no_os_i3c_platform_ops stm32_i3c_ops |
stm32 platform specific I3C platform ops structure.
STM32 specific I3C platform ops structure.