|
| 1 | +/* |
| 2 | +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates |
| 3 | +* |
| 4 | +* SPDX-License-Identifier: BSD-3-Clause |
| 5 | +*/ |
| 6 | + |
| 7 | +/*******************************************************************************************************************//** |
| 8 | + * @ingroup RENESAS_INTERFACES |
| 9 | + * @defgroup IOPORT_API I/O Port Interface |
| 10 | + * @brief Interface for accessing I/O ports and configuring I/O functionality. |
| 11 | + * |
| 12 | + * @section IOPORT_API_SUMMARY Summary |
| 13 | + * The IOPort shared interface provides the ability to access the IOPorts of a device at both bit and port level. |
| 14 | + * Port and pin direction can be changed. |
| 15 | + * |
| 16 | + * IOPORT Interface description: @ref IOPORT |
| 17 | + * |
| 18 | + * @{ |
| 19 | + **********************************************************************************************************************/ |
| 20 | + |
| 21 | +#ifndef R_IOPORT_API_H |
| 22 | +#define R_IOPORT_API_H |
| 23 | + |
| 24 | +/*********************************************************************************************************************** |
| 25 | + * Includes |
| 26 | + **********************************************************************************************************************/ |
| 27 | + |
| 28 | +/* Common error codes and definitions. */ |
| 29 | +#include "bsp_api.h" |
| 30 | + |
| 31 | +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ |
| 32 | +FSP_HEADER |
| 33 | + |
| 34 | +/********************************************************************************************************************** |
| 35 | + * Macro definitions |
| 36 | + **********************************************************************************************************************/ |
| 37 | + |
| 38 | +/********************************************************************************************************************** |
| 39 | + * Typedef definitions |
| 40 | + **********************************************************************************************************************/ |
| 41 | + |
| 42 | +/** IO port type used with ports */ |
| 43 | +typedef uint16_t ioport_size_t; ///< IO port size on this device |
| 44 | + |
| 45 | +/** PFS writing enable/disable. */ |
| 46 | +typedef enum e_ioport_pwpr |
| 47 | +{ |
| 48 | + IOPORT_PFS_WRITE_DISABLE = 0, ///< Disable PFS write access |
| 49 | + IOPORT_PFS_WRITE_ENABLE = 1 ///< Enable PFS write access |
| 50 | +} ioport_pwpr_t; |
| 51 | + |
| 52 | +/** Pin identifier and Pin Function Setting (PFS) value */ |
| 53 | +typedef struct st_ioport_pin_cfg |
| 54 | +{ |
| 55 | + uint32_t pin_cfg; ///< Pin PFS configuration - Use ioport_cfg_options_t parameters to configure |
| 56 | + bsp_io_port_pin_t pin; ///< Pin identifier |
| 57 | +} ioport_pin_cfg_t; |
| 58 | + |
| 59 | +/** Multiple pin configuration data for loading into each GPIO register by R_IOPORT_Init() */ |
| 60 | +typedef struct st_ioport_cfg |
| 61 | +{ |
| 62 | + uint16_t number_of_pins; ///< Number of pins for which there is configuration data |
| 63 | + ioport_pin_cfg_t const * p_pin_cfg_data; ///< Pin configuration data |
| 64 | + const void * p_extend; ///< Pointer to hardware extend configuration |
| 65 | +} ioport_cfg_t; |
| 66 | + |
| 67 | +/** IOPORT control block. Allocate an instance specific control block to pass into the IOPORT API calls. |
| 68 | + * @par Implemented as |
| 69 | + * - ioport_instance_ctrl_t |
| 70 | + */ |
| 71 | +typedef void ioport_ctrl_t; |
| 72 | + |
| 73 | +/** IOPort driver structure. IOPort functions implemented at the HAL layer will follow this API. */ |
| 74 | +typedef struct st_ioport_api |
| 75 | +{ |
| 76 | + /** Initialize internal driver data and initial pin configurations. Called during startup. Do |
| 77 | + * not call this API during runtime. Use @ref ioport_api_t::pinsCfg for runtime reconfiguration of |
| 78 | + * multiple pins. |
| 79 | + * @par Implemented as |
| 80 | + * - @ref R_IOPORT_Open() |
| 81 | + * @param[in] p_cfg Pointer to pin configuration data array. |
| 82 | + */ |
| 83 | + fsp_err_t (* open)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); |
| 84 | + |
| 85 | + /** Close the API. |
| 86 | + * @par Implemented as |
| 87 | + * - @ref R_IOPORT_Close() |
| 88 | + * |
| 89 | + * @param[in] p_ctrl Pointer to control structure. |
| 90 | + **/ |
| 91 | + fsp_err_t (* close)(ioport_ctrl_t * const p_ctrl); |
| 92 | + |
| 93 | + /** Configure multiple pins. |
| 94 | + * @par Implemented as |
| 95 | + * - @ref R_IOPORT_PinsCfg() |
| 96 | + * @param[in] p_cfg Pointer to pin configuration data array. |
| 97 | + */ |
| 98 | + fsp_err_t (* pinsCfg)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); |
| 99 | + |
| 100 | + /** Configure settings for an individual pin. |
| 101 | + * @par Implemented as |
| 102 | + * - @ref R_IOPORT_PinCfg() |
| 103 | + * @param[in] pin Pin to be read. |
| 104 | + * @param[in] cfg Configuration options for the pin. |
| 105 | + */ |
| 106 | + fsp_err_t (* pinCfg)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); |
| 107 | + |
| 108 | + /** Read the event input data of the specified pin and return the level. |
| 109 | + * @par Implemented as |
| 110 | + * - @ref R_IOPORT_PinEventInputRead() |
| 111 | + * @param[in] pin Pin to be read. |
| 112 | + * @param[in] p_pin_event Pointer to return the event data. |
| 113 | + */ |
| 114 | + fsp_err_t (* pinEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event); |
| 115 | + |
| 116 | + /** Write pin event data. |
| 117 | + * @par Implemented as |
| 118 | + * - @ref R_IOPORT_PinEventOutputWrite() |
| 119 | + * @param[in] pin Pin event data is to be written to. |
| 120 | + * @param[in] pin_value Level to be written to pin output event. |
| 121 | + */ |
| 122 | + fsp_err_t (* pinEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value); |
| 123 | + |
| 124 | + /** Read level of a pin. |
| 125 | + * @par Implemented as |
| 126 | + * - @ref R_IOPORT_PinRead() |
| 127 | + * @param[in] pin Pin to be read. |
| 128 | + * @param[in] p_pin_value Pointer to return the pin level. |
| 129 | + */ |
| 130 | + fsp_err_t (* pinRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value); |
| 131 | + |
| 132 | + /** Write specified level to a pin. |
| 133 | + * @par Implemented as |
| 134 | + * - @ref R_IOPORT_PinWrite() |
| 135 | + * @param[in] pin Pin to be written to. |
| 136 | + * @param[in] level State to be written to the pin. |
| 137 | + */ |
| 138 | + fsp_err_t (* pinWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level); |
| 139 | + |
| 140 | + /** Set the direction of one or more pins on a port. |
| 141 | + * @par Implemented as |
| 142 | + * - @ref R_IOPORT_PortDirectionSet() |
| 143 | + * @param[in] port Port being configured. |
| 144 | + * @param[in] direction_values Value controlling direction of pins on port |
| 145 | + * (3 - output (input enable), 2 - output (input disable), 1 input, 0 - Hi-Z). |
| 146 | + * @param[in] mask Mask controlling which pins on the port are to be configured. |
| 147 | + */ |
| 148 | + fsp_err_t (* portDirectionSet)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t direction_values, |
| 149 | + ioport_size_t mask); |
| 150 | + |
| 151 | + /** Read captured event data for a port. |
| 152 | + * @par Implemented as |
| 153 | + * - @ref R_IOPORT_PortEventInputRead() |
| 154 | + * @param[in] port Port to be read. |
| 155 | + * @param[in] p_event_data Pointer to return the event data. |
| 156 | + */ |
| 157 | + fsp_err_t (* portEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data); |
| 158 | + |
| 159 | + /** Write event output data for a port. |
| 160 | + * @par Implemented as |
| 161 | + * - @ref R_IOPORT_PortEventOutputWrite() |
| 162 | + * @param[in] port Port event data will be written to. |
| 163 | + * @param[in] event_data Data to be written as event data to specified port. |
| 164 | + * @param[in] mask_value Each bit set to 1 in the mask corresponds to that bit's value in event data. |
| 165 | + * being written to port. |
| 166 | + */ |
| 167 | + fsp_err_t (* portEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t event_data, |
| 168 | + ioport_size_t mask_value); |
| 169 | + |
| 170 | + /** Read states of pins on the specified port. |
| 171 | + * @par Implemented as |
| 172 | + * - @ref R_IOPORT_PortRead() |
| 173 | + * @param[in] port Port to be read. |
| 174 | + * @param[in] p_port_value Pointer to return the port value. |
| 175 | + */ |
| 176 | + fsp_err_t (* portRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value); |
| 177 | + |
| 178 | + /** Write to multiple pins on a port. |
| 179 | + * @par Implemented as |
| 180 | + * - @ref R_IOPORT_PortWrite() |
| 181 | + * @param[in] port Port to be written to. |
| 182 | + * @param[in] value Value to be written to the port. |
| 183 | + * @param[in] mask Mask controlling which pins on the port are written to. |
| 184 | + */ |
| 185 | + fsp_err_t (* portWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask); |
| 186 | +} ioport_api_t; |
| 187 | + |
| 188 | +/** This structure encompasses everything that is needed to use an instance of this interface. */ |
| 189 | +typedef struct st_ioport_instance |
| 190 | +{ |
| 191 | + ioport_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance |
| 192 | + ioport_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance |
| 193 | + ioport_api_t const * p_api; ///< Pointer to the API structure for this instance |
| 194 | +} ioport_instance_t; |
| 195 | + |
| 196 | +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ |
| 197 | +FSP_FOOTER |
| 198 | + |
| 199 | +#endif |
| 200 | + |
| 201 | +/*******************************************************************************************************************//** |
| 202 | + * @} (end defgroup IOPORT_API) |
| 203 | + **********************************************************************************************************************/ |
0 commit comments