Skip to content

Commit d66ed4d

Browse files
Hieu NguyenKhiemNguyenT
authored andcommitted
hal: renesas: rz: Initial support for PINCTRL and GPIO for RZ/T
Initial HAL support for PINCTRL and GPIO of RZ/T Signed-off-by: Hieu Nguyen <[email protected]> Signed-off-by: Nhut Nguyen <[email protected]>
1 parent 09c0a8b commit d66ed4d

File tree

3 files changed

+1485
-0
lines changed

3 files changed

+1485
-0
lines changed
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
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+
* @addtogroup IOPORT
9+
* @{
10+
**********************************************************************************************************************/
11+
12+
#ifndef R_IOPORT_H
13+
#define R_IOPORT_H
14+
15+
/***********************************************************************************************************************
16+
* Includes
17+
**********************************************************************************************************************/
18+
#include "bsp_api.h"
19+
20+
/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */
21+
FSP_HEADER
22+
23+
#include "r_ioport_api.h"
24+
#include "r_ioport_cfg.h"
25+
26+
/***********************************************************************************************************************
27+
* Macro definitions
28+
**********************************************************************************************************************/
29+
#define IOPORT_SINGLE_PORT_NUM (4)
30+
#define IOPORT_PORT_GROUP_NUM (2)
31+
#define IOPORT_PORT_GROUP_1 (0)
32+
#define IOPORT_PORT_GROUP_2 (1)
33+
#define IOPORT_SINGLE_PORT_0 (0)
34+
#define IOPORT_SINGLE_PORT_1 (1)
35+
#define IOPORT_SINGLE_PORT_2 (2)
36+
#define IOPORT_SINGLE_PORT_3 (3)
37+
38+
/***********************************************************************************************************************
39+
* Typedef definitions
40+
**********************************************************************************************************************/
41+
42+
/** Pin selection for port group
43+
* @note Event link must be configured by the ELC
44+
*/
45+
typedef enum e_ioport_event_pin_selection
46+
{
47+
IOPORT_EVENT_PIN_SELECTION_NONE = 0x00, ///< No pin selection for port group
48+
IOPORT_EVENT_PIN_SELECTION_PIN_0 = 0x01, ///< Select pin 0 to port group
49+
IOPORT_EVENT_PIN_SELECTION_PIN_1 = 0x02, ///< Select pin 1 to port group
50+
IOPORT_EVENT_PIN_SELECTION_PIN_2 = 0x04, ///< Select pin 2 to port group
51+
IOPORT_EVENT_PIN_SELECTION_PIN_3 = 0x08, ///< Select pin 3 to port group
52+
IOPORT_EVENT_PIN_SELECTION_PIN_4 = 0x10, ///< Select pin 4 to port group
53+
IOPORT_EVENT_PIN_SELECTION_PIN_5 = 0x20, ///< Select pin 5 to port group
54+
IOPORT_EVENT_PIN_SELECTION_PIN_6 = 0x40, ///< Select pin 6 to port group
55+
IOPORT_EVENT_PIN_SELECTION_PIN_7 = 0x80, ///< Select pin 7 to port group
56+
} ioport_event_pin_selection_t;
57+
58+
/** Port group operation
59+
* @note Event link must be configured by the ELC
60+
*/
61+
typedef enum e_ioport_event_output_operation
62+
{
63+
IOPORT_EVENT_OUTPUT_OPERATION_LOW = 0x0, ///< Set Low output to output operation
64+
IOPORT_EVENT_OUTPUT_OPERATION_HIGH = 0x1, ///< Set High output to output operation
65+
IOPORT_EVENT_OUTPUT_OPERATION_TOGGLE = 0x2, ///< Set toggle output to output operation
66+
IOPORT_EVENT_OUTPUT_OPERATION_BUFFER = 0x3, ///< Set buffer value output to output operation
67+
} ioport_event_output_operation_t;
68+
69+
/** Input port group event control
70+
* @note Event link must be configured by the ELC
71+
*/
72+
typedef enum e_ioport_event_control
73+
{
74+
IOPORT_EVENT_CONTROL_DISABLE = 0x0, ///< Disable function related with event link
75+
IOPORT_EVENT_CONTROL_ENABLE = 0x1, ///< Enable function related with event link
76+
} ioport_event_control_t;
77+
78+
/** Single port event direction
79+
* @note Event link must be configured by the ELC
80+
*/
81+
typedef enum e_ioport_event_direction
82+
{
83+
IOPORT_EVENT_DIRECTION_OUTPUT = 0x0, ///< Set output direction to single port
84+
IOPORT_EVENT_DIRECTION_INPUT = 0x1, ///< Set input direction to single port
85+
} ioport_event_direction_t;
86+
87+
/** Input event edge detection
88+
* @note Event link must be configured by the ELC
89+
*/
90+
typedef enum e_ioport_event_detection
91+
{
92+
IOPORT_EVENT_DETECTION_RISING_EDGE = 0x0, ///< Set rising edge to event detection for input event
93+
IOPORT_EVENT_DETECTION_FALLING_EDGE = 0x1, ///< Set falling edge to event detection for input event
94+
IOPORT_EVENT_DETECTION_BOTH_EGDE = 0x2, ///< Set both edges to event detection for input event
95+
} ioport_event_detection_t;
96+
97+
/** Initial value for buffer register
98+
* @note Event link must be configured by the ELC
99+
*/
100+
typedef enum e_ioport_event_initial_buffer_value
101+
{
102+
IOPORT_EVENT_INITIAL_BUFFER_VALUE_LOW = 0U, ///< Set low input to initial value of buffer register for input port group
103+
IOPORT_EVENT_INITIAL_BUFFER_VALUE_HIGH = 1U, ///< Set high input to initial value of buffer register for input port group
104+
} ioport_event_initial_buffer_value_t;
105+
106+
/** Single port configuration
107+
* @note Event link must be configured by the ELC
108+
*/
109+
typedef struct st_ioport_event_single
110+
{
111+
ioport_event_control_t event_control; ///< Event link control for single port
112+
ioport_event_direction_t direction; ///< Event direction for single port
113+
uint16_t port_num; ///< Port number specified to single port
114+
ioport_event_output_operation_t operation; ///< Single port operation select
115+
ioport_event_detection_t edge_detection; ///< Edge detection select
116+
} ioport_event_single_t;
117+
118+
/** Output port group configuration
119+
* @note Event link must be configured by the ELC
120+
*/
121+
typedef struct st_ioport_event_group_output
122+
{
123+
uint8_t pin_select; ///< Port number specified to output port group
124+
ioport_event_output_operation_t operation; ///< Port group operation select
125+
} ioport_event_group_output_t;
126+
127+
/** Input port group configuration
128+
* @note Event link must be configured by the ELC
129+
*/
130+
typedef struct st_ioport_event_group_input
131+
{
132+
ioport_event_control_t event_control; ///< Event link control for input port group
133+
ioport_event_detection_t edge_detection; ///< Edge detection select
134+
ioport_event_control_t overwrite_control; ///< Buffer register overwrite control
135+
uint8_t pin_select; ///< Port number specified to input port group
136+
uint8_t buffer_init_value; ///< Buffer register initial value
137+
} ioport_event_group_input_t;
138+
139+
/** IOPORT extended configuration for event link function
140+
* @note Event link must be configured by the ELC
141+
*/
142+
typedef struct st_ioport_extend_cfg
143+
{
144+
ioport_event_group_output_t port_group_output_cfg[IOPORT_PORT_GROUP_NUM]; ///< Output port group configuration
145+
ioport_event_group_input_t port_group_input_cfg[IOPORT_PORT_GROUP_NUM]; ///< Input port group configuration
146+
ioport_event_single_t single_port_cfg[IOPORT_SINGLE_PORT_NUM]; ///< Single input port configuration
147+
} ioport_extend_cfg_t;
148+
149+
/** IOPORT private control block. DO NOT MODIFY. Initialization occurs when R_IOPORT_Open() is called. */
150+
typedef struct st_ioport_instance_ctrl
151+
{
152+
uint32_t open; // Whether or not ioport is open
153+
void const * p_context; // Pointer to context to be passed into callback
154+
ioport_cfg_t const * p_cfg; // Pointer to the configuration block
155+
} ioport_instance_ctrl_t;
156+
157+
/**********************************************************************************************************************
158+
* Exported global variables
159+
**********************************************************************************************************************/
160+
161+
/** @cond INC_HEADER_DEFS_SEC */
162+
/** Filled in Interface API structure for this Instance. */
163+
extern const ioport_api_t g_ioport_on_ioport;
164+
165+
/** @endcond */
166+
167+
/***********************************************************************************************************************
168+
* Public APIs
169+
**********************************************************************************************************************/
170+
171+
fsp_err_t R_IOPORT_Open(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg);
172+
fsp_err_t R_IOPORT_Close(ioport_ctrl_t * const p_ctrl);
173+
fsp_err_t R_IOPORT_PinsCfg(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg);
174+
fsp_err_t R_IOPORT_PinCfg(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg);
175+
fsp_err_t R_IOPORT_PinEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event);
176+
fsp_err_t R_IOPORT_PinEventOutputWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value);
177+
fsp_err_t R_IOPORT_PinRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value);
178+
fsp_err_t R_IOPORT_PinWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level);
179+
fsp_err_t R_IOPORT_PortDirectionSet(ioport_ctrl_t * const p_ctrl,
180+
bsp_io_port_t port,
181+
ioport_size_t direction_values,
182+
ioport_size_t mask);
183+
fsp_err_t R_IOPORT_PortEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data);
184+
fsp_err_t R_IOPORT_PortEventOutputWrite(ioport_ctrl_t * const p_ctrl,
185+
bsp_io_port_t port,
186+
ioport_size_t event_data,
187+
ioport_size_t mask_value);
188+
fsp_err_t R_IOPORT_PortRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value);
189+
fsp_err_t R_IOPORT_PortWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask);
190+
191+
/*******************************************************************************************************************//**
192+
* @} (end defgroup IOPORT)
193+
**********************************************************************************************************************/
194+
195+
/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */
196+
FSP_FOOTER
197+
198+
#endif // R_IOPORT_H

0 commit comments

Comments
 (0)