VSF Documented
vsf_template_i2c.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_TEMPLATE_I2C_H__
19#define __VSF_TEMPLATE_I2C_H__
20
21/*============================ INCLUDES ======================================*/
22
24#include "hal/arch/vsf_arch.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30/*============================ MACROS ========================================*/
31
38#ifndef VSF_I2C_CFG_MULTI_CLASS
39# define VSF_I2C_CFG_MULTI_CLASS ENABLED
40#endif
41
50#if defined(VSF_HW_I2C_COUNT) && !defined(VSF_HW_I2C_MASK)
51# define VSF_HW_I2C_MASK VSF_HAL_COUNT_TO_MASK(VSF_HW_I2C_COUNT)
52#endif
53
62#if !defined(VSF_HW_I2C_COUNT) && defined(VSF_HW_I2C_MASK)
63# define VSF_HW_I2C_COUNT VSF_HAL_MASK_TO_COUNT(VSF_HW_I2C_MASK)
64#endif
65
76#ifndef VSF_I2C_CFG_PREFIX
77# if VSF_I2C_CFG_MULTI_CLASS == ENABLED
78# define VSF_I2C_CFG_PREFIX vsf
79# elif defined(VSF_HW_I2C_COUNT) && (VSF_HW_I2C_COUNT != 0)
80# define VSF_I2C_CFG_PREFIX vsf_hw
81# else
82# define VSF_I2C_CFG_PREFIX vsf
83# endif
84#endif
85
94#ifndef VSF_I2C_CFG_FUNCTION_RENAME
95# define VSF_I2C_CFG_FUNCTION_RENAME ENABLED
96#endif
97
106#ifndef VSF_I2C_CFG_REIMPLEMENT_TYPE_MODE
107# define VSF_I2C_CFG_REIMPLEMENT_TYPE_MODE DISABLED
108#endif
109
118#ifndef VSF_I2C_CFG_REIMPLEMENT_TYPE_CMD
119# define VSF_I2C_CFG_REIMPLEMENT_TYPE_CMD DISABLED
120#endif
121
130#ifndef VSF_I2C_CFG_REIMPLEMENT_TYPE_IRQ_MASK
131# define VSF_I2C_CFG_REIMPLEMENT_TYPE_IRQ_MASK DISABLED
132#endif
133
144#ifndef VSF_I2C_CFG_REIMPLEMENT_TYPE_STATUS
145# define VSF_I2C_CFG_REIMPLEMENT_TYPE_STATUS DISABLED
146#endif
147
158#ifndef VSF_I2C_CFG_REIMPLEMENT_TYPE_CTRL
159# define VSF_I2C_CFG_REIMPLEMENT_TYPE_CTRL DISABLED
160#endif
161
173#if VSF_I2C_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
174# define VSF_I2C_CFG_REIMPLEMENT_TYPE_CFG DISABLED
175#endif
176
185#ifndef VSF_I2C_CFG_INHERIT_HAL_CAPABILITY
186# define VSF_I2C_CFG_INHERIT_HAL_CAPABILITY ENABLED
187#endif
188
189/*============================ MACROFIED FUNCTIONS ===========================*/
190
197#define VSF_I2C_APIS(__PREFIX_NAME) \
198 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, vsf_err_t, i2c, init, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr) \
199 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, void, i2c, fini, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
200 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, fsm_rt_t, i2c, enable, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
201 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, fsm_rt_t, i2c, disable, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
202 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, void, i2c, irq_enable, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
203 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, void, i2c, irq_disable, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
204 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, vsf_i2c_status_t, i2c, status, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
205 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, vsf_i2c_capability_t, i2c, capability, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
206 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, void, i2c, master_fifo_transfer, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, uint16_t address, \
207 vsf_i2c_cmd_t cmd, uint_fast16_t count, uint8_t* buffer_ptr, vsf_i2c_cmd_t *cur_cmd_ptr, uint_fast16_t *offset_ptr) \
208 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, vsf_err_t, i2c, master_request, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, uint16_t address, \
209 vsf_i2c_cmd_t cmd, uint_fast16_t count, uint8_t* buffer_ptr) \
210 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, uint_fast16_t, i2c, master_get_transferred_count, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
211 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, uint_fast16_t, i2c, slave_fifo_transfer, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, bool transmit_or_receive, \
212 uint_fast16_t count, uint8_t* buffer_ptr) \
213 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, vsf_err_t, i2c, slave_request, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, bool transmit_or_receive, \
214 uint_fast16_t count, uint8_t* buffer_ptr) \
215 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, uint_fast16_t, i2c, slave_get_transferred_count, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr) \
216 __VSF_HAL_TEMPLATE_API(__PREFIX_NAME, vsf_err_t, i2c, ctrl, VSF_MCONNECT(__PREFIX_NAME, _i2c_t) *i2c_ptr, vsf_i2c_ctrl_t ctrl, void* param)
217
218/*============================ TYPES =========================================*/
219
236#if VSF_I2C_CFG_REIMPLEMENT_TYPE_MODE == DISABLED
237typedef enum vsf_i2c_mode_t {
246 VSF_I2C_MODE_MASTER = (0x1ul << 28),
247
256 VSF_I2C_MODE_SLAVE = (0x0ul << 28),
257
267
276 VSF_I2C_SPEED_FAST_MODE = (0x1ul << 29),
277
287
297
306 VSF_I2C_ADDR_7_BITS = (0x0ul << 31),
307
316 VSF_I2C_ADDR_10_BITS = (0x1ul << 31),
318#endif
319
328enum {
339
352
363
375};
376
383#if VSF_I2C_CFG_REIMPLEMENT_TYPE_CMD == DISABLED
384typedef enum vsf_i2c_cmd_t {
393 VSF_I2C_CMD_WRITE = (0x00ul << 0),
394
403 VSF_I2C_CMD_READ = (0x01ul << 0),
404
413 VSF_I2C_CMD_START = (0x00ul << 28),
414
423 VSF_I2C_CMD_STOP = (0x00ul << 29),
424
435 VSF_I2C_CMD_RESTART = (0x01ul << 30),
436
445 VSF_I2C_CMD_7_BITS = (0x00ul << 31),
446
455 VSF_I2C_CMD_10_BITS = (0x01ul << 31),
457#endif
458
467enum {
477
488
497#ifndef VSF_I2C_CMD_ALL_BITS_MASK
503#endif
504};
505
536#if VSF_I2C_CFG_REIMPLEMENT_TYPE_IRQ_MASK == DISABLED
537typedef enum vsf_i2c_irq_mask_t {
551
565
577
589
601
613
625
637
638
650
651
663
675
689
703
715
728#endif
729
730enum {
731#ifndef VSF_I2C_IRQ_ALL_BITS_MASK
747#endif
748};
749
750#if VSF_I2C_CFG_REIMPLEMENT_TYPE_STATUS == DISABLED
757typedef struct vsf_i2c_status_t {
758 union {
760 struct {
761 uint32_t is_busy : 1;
762 };
764 };
766#endif
767
768#if VSF_I2C_CFG_REIMPLEMENT_TYPE_CAPABILITY == DISABLED
777typedef struct vsf_i2c_capability_t {
778#if VSF_I2C_CFG_INHERIT_HAL_CAPABILITY == ENABLED
780#endif
784
788
792
796
800
805#endif
806
807#if VSF_I2C_CFG_REIMPLEMENT_TYPE_CFG == DISABLED
814typedef struct vsf_i2c_t vsf_i2c_t;
815
849typedef void vsf_i2c_isr_handler_t(void *target_ptr,
850 vsf_i2c_t *i2c_ptr,
852
860typedef struct vsf_i2c_isr_t {
864
868
873
881typedef struct vsf_i2c_cfg_t {
885
889
893
898#endif
899
900#if VSF_I2C_CFG_REIMPLEMENT_TYPE_CTRL == DISABLED
909typedef enum vsf_i2c_ctrl_t {
910 /*
913 VSF_I2C_CTRL_MASTER_ABORT = (0x1ul << 3),
914 #define VSF_I2C_CTRL_MASTER_ABORT VSF_I2C_CTRL_MASTER_ABORT
915 */
916
917 /*
920 VSF_I2C_CTRL_SLAVE_ABORT = (0x1ul << 4),
921 #define VSF_I2C_CTRL_SLAVE_ABORT VSF_I2C_CTRL_SLAVE_ABORT
922 */
923
924 /*
927 VSF_I2C_CTRL_ANALOG_FILTER_ENABLE = (0x0ul << 5),
930 VSF_I2C_CTRL_ANALOG_FILTER_DISABLE = (0x1ul << 5),
931 #define VSF_I2C_CTRL_ANALOG_FILTER_ENABLE VSF_I2C_CTRL_ANALOG_FILTER_ENABLE
932 #define VSF_I2C_CTRL_ANALOG_FILTER_DISABLE VSF_I2C_CTRL_ANALOG_FILTER_DISABLE
933 */
934
935 /*
938 VSF_I2C_CTRL_DIGITAL_FILTER_ENABLE = (0x0ul << 7),
941 VSF_I2C_CTRL_DIGITAL_FILTER_DISABLE = (0x1ul << 7),
942 #define VSF_I2C_CTRL_DIGITAL_FILTER_ENABLE VSF_I2C_CTRL_DIGITAL_FILTER_ENABLE
943 #define VSF_I2C_CTRL_DIGITAL_FILTER_DISABLE VSF_I2C_CTRL_DIGITAL_FILTER_DISABLE
944 */
945
950#endif
951
960typedef struct vsf_i2c_op_t {
962#undef __VSF_HAL_TEMPLATE_API
963#define __VSF_HAL_TEMPLATE_API VSF_HAL_TEMPLATE_API_FP
965
966 VSF_I2C_APIS(vsf)
968
969#if VSF_I2C_CFG_MULTI_CLASS == ENABLED
976struct vsf_i2c_t {
980};
981#endif
982
983/*============================ GLOBAL VARIABLES ==============================*/
984/*============================ PROTOTYPES ====================================*/
985
1005extern vsf_err_t vsf_i2c_init(vsf_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr);
1006
1018extern void vsf_i2c_fini(vsf_i2c_t *i2c_ptr);
1019
1031extern fsm_rt_t vsf_i2c_enable(vsf_i2c_t *i2c_ptr);
1032
1047extern fsm_rt_t vsf_i2c_disable(vsf_i2c_t *i2c_ptr);
1048
1063
1078
1091
1104
1128extern void vsf_i2c_master_fifo_transfer(vsf_i2c_t *i2c_ptr,
1129 uint16_t address,
1130 vsf_i2c_cmd_t cmd,
1131 uint_fast16_t count,
1132 uint8_t *buffer_ptr,
1133 vsf_i2c_cmd_t *cur_cmd_ptr,
1134 uint_fast16_t *offset_ptr);
1135
1156 bool transmit_or_receive,
1157 uint_fast16_t count,
1158 uint8_t *buffer_ptr);
1159
1180 uint16_t address,
1181 vsf_i2c_cmd_t cmd,
1182 uint_fast16_t count,
1183 uint8_t *buffer_ptr);
1184
1203 bool transmit_or_receive,
1204 uint_fast16_t count,
1205 uint8_t *buffer_ptr);
1206
1221
1234
1250extern vsf_err_t vsf_i2c_ctrl(vsf_i2c_t *i2c_ptr, vsf_i2c_ctrl_t ctrl, void * param);
1251
1252/*============================ INCLUDES ======================================*/
1253
1255
1256/*============================ MACROFIED FUNCTIONS ===========================*/
1257
1259#if VSF_I2C_CFG_FUNCTION_RENAME == ENABLED
1260# define __vsf_i2c_t VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_t)
1261# define vsf_i2c_init(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_init) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1262# define vsf_i2c_fini(__I2C) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_fini) ((__vsf_i2c_t *)(__I2C))
1263# define vsf_i2c_enable(__I2C) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_enable) ((__vsf_i2c_t *)(__I2C))
1264# define vsf_i2c_disable(__I2C) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_disable) ((__vsf_i2c_t *)(__I2C))
1265# define vsf_i2c_irq_enable(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_irq_enable) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1266# define vsf_i2c_irq_disable(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_irq_disable) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1267# define vsf_i2c_status(__I2C) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_status) ((__vsf_i2c_t *)(__I2C))
1268# define vsf_i2c_capability(__I2C) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_capability) ((__vsf_i2c_t *)(__I2C))
1269# define vsf_i2c_master_fifo_transfer(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_master_fifo_transfer) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1270# define vsf_i2c_master_request(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_master_request) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1271# define vsf_i2c_master_get_transferred_count(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_master_get_transferred_count) ((__vsf_i2c_t *)(__I2C))
1272# define vsf_i2c_slave_fifo_transfer(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_slave_fifo_transfer) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1273# define vsf_i2c_slave_request(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_slave_request) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1274# define vsf_i2c_slave_get_transferred_count(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_slave_get_transferred_count) ((__vsf_i2c_t *)(__I2C))
1275# define vsf_i2c_ctrl(__I2C, ...) VSF_MCONNECT(VSF_I2C_CFG_PREFIX, _i2c_ctrl) ((__vsf_i2c_t *)(__I2C), ##__VA_ARGS__)
1276#endif
1278
1279#ifdef __cplusplus
1280}
1281#endif
1282
1283#endif /*__VSF_TEMPLATE_I2C_H__*/
vsf_err_t
Definition __type.h:42
vsf_arch_prio_t
Definition cortex_a_generic.h:88
vsf_i2c_cmd_t
Definition i2c.h:32
vsf_i2c_mode_t
Definition i2c.h:118
vsf_i2c_irq_mask_t
Definition i2c.h:154
void vsf_i2c_isr_handler_t(void *target_ptr, vsf_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask)
Definition i2c.h:199
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned short uint_fast16_t
Definition stdint.h:25
unsigned char uint8_t
Definition stdint.h:5
Predefined I2C capability structure that can be reimplemented in specific HAL drivers.
Definition vsf_template_i2c.h:777
uint8_t support_restart
Definition vsf_template_i2c.h:795
uint8_t support_no_stop
Definition vsf_template_i2c.h:791
inherit(vsf_peripheral_capability_t) vsf_i2c_irq_mask_t irq_mask
uint_fast16_t max_transfer_size
Definition vsf_template_i2c.h:799
uint_fast16_t min_transfer_size
Definition vsf_template_i2c.h:803
uint8_t support_no_start
Definition vsf_template_i2c.h:787
I2C configuration.
Definition vsf_template_i2c.h:881
vsf_i2c_mode_t mode
Definition vsf_template_i2c.h:884
uint_fast16_t slave_addr
Definition vsf_template_i2c.h:896
vsf_i2c_isr_t isr
Definition vsf_template_i2c.h:892
uint32_t clock_hz
Definition vsf_template_i2c.h:888
I2C interrupt configuration.
Definition vsf_template_i2c.h:860
vsf_i2c_isr_handler_t * handler_fn
Definition vsf_template_i2c.h:863
void * target_ptr
Definition vsf_template_i2c.h:867
vsf_arch_prio_t prio
Definition vsf_template_i2c.h:871
I2C operation function pointers for multi-class support.
Definition vsf_template_i2c.h:960
Predefined VSF I2C status that can be reimplemented in specific hal drivers.
Definition vsf_template_i2c.h:757
uint32_t value
Definition vsf_template_i2c.h:763
I2C instance structure for multi-class support.
Definition vsf_template_i2c.h:976
const vsf_i2c_op_t * op
Definition vsf_template_i2c.h:979
Definition vsf_template_hal_driver.h:203
Definition vsf_template_hal_driver.h:196
fsm_rt_t
Definition vsf_fsm.h:315
void vsf_i2c_master_fifo_transfer(vsf_i2c_t *i2c_ptr, uint16_t address, vsf_i2c_cmd_t cmd, uint_fast16_t count, uint8_t *buffer_ptr, vsf_i2c_cmd_t *cur_cmd_ptr, uint_fast16_t *offset_ptr)
I2C instance as master mode performs a FIFO transfer.
Definition i2c_common.c:109
void vsf_i2c_irq_disable(vsf_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask)
I2C instance disables interrupts.
Definition i2c_common.c:82
struct vsf_i2c_cfg_t vsf_i2c_cfg_t
I2C configuration.
struct vsf_i2c_status_t vsf_i2c_status_t
Predefined VSF I2C status that can be reimplemented in specific hal drivers.
fsm_rt_t vsf_i2c_disable(vsf_i2c_t *i2c_ptr)
Disable a I2C instance.
Definition i2c_common.c:64
uint_fast16_t vsf_i2c_slave_get_transferred_count(vsf_i2c_t *i2c_ptr)
get the counter of transfers for current request by the I2C slave
Definition i2c_common.c:168
vsf_i2c_capability_t vsf_i2c_capability(vsf_i2c_t *i2c_ptr)
Get the capabilities of I2C instance.
Definition i2c_common.c:100
vsf_i2c_mode_t
Predefined VSF I2C modes that can be reimplemented in specific HAL drivers.If we want to add optional...
Definition vsf_template_i2c.h:237
@ VSF_I2C_MODE_MASTER
Select master mode for I2C operation. The device initiates and controls the I2C bus communication.
Definition vsf_template_i2c.h:246
@ VSF_I2C_SPEED_HIGH_SPEED_MODE
High speed mode, up to 3.4 Mbit/s. Highest specified I2C speed for performance-critical applications.
Definition vsf_template_i2c.h:296
@ VSF_I2C_MODE_SLAVE
Select slave mode for I2C operation. The device responds to I2C bus commands from master devices.
Definition vsf_template_i2c.h:256
@ VSF_I2C_SPEED_STANDARD_MODE
Standard mode, up to 100 kbit/s. The lowest I2C speed specification, compatible with most devices.
Definition vsf_template_i2c.h:266
@ VSF_I2C_ADDR_7_BITS
7-bit address mode. Standard addressing mode supporting up to 128 unique devices.
Definition vsf_template_i2c.h:306
@ VSF_I2C_SPEED_FAST_MODE_PLUS
Fast mode plus, up to 1 Mbit/s. Enhanced fast mode for higher throughput applications.
Definition vsf_template_i2c.h:286
@ VSF_I2C_SPEED_FAST_MODE
Fast mode, up to 400 kbit/s. Commonly used medium speed I2C mode.
Definition vsf_template_i2c.h:276
@ VSF_I2C_ADDR_10_BITS
10-bit address mode. Extended addressing mode supporting up to 1024 unique devices.
Definition vsf_template_i2c.h:316
vsf_err_t vsf_i2c_ctrl(vsf_i2c_t *i2c_ptr, vsf_i2c_ctrl_t ctrl, void *param)
Calls the specified I2C command.
Definition i2c_common.c:177
@ VSF_I2C_MODE_MASK
Mask for master/slave mode selection. Extracts VSF_I2C_MODE_MASTER and VSF_I2C_MODE_SLAVE bits.
Definition vsf_template_i2c.h:337
@ VSF_I2C_ADDR_MASK
Mask for I2C address mode selection. Extracts VSF_I2C_ADDR_7_BITS and VSF_I2C_ADDR_10_BITS bits.
Definition vsf_template_i2c.h:361
@ VSF_I2C_MODE_ALL_BITS_MASK
Combined mask for all I2C mode configuration bits. Includes mode, speed, and address mode masks.
Definition vsf_template_i2c.h:372
@ VSF_I2C_SPEED_MASK
Mask for I2C speed mode configuration. Extracts all speed mode bits (standard, fast,...
Definition vsf_template_i2c.h:348
struct vsf_i2c_capability_t vsf_i2c_capability_t
Predefined I2C capability structure that can be reimplemented in specific HAL drivers.
struct vsf_i2c_isr_t vsf_i2c_isr_t
I2C interrupt configuration.
vsf_i2c_status_t vsf_i2c_status(vsf_i2c_t *i2c_ptr)
Get the status of I2C instance.
Definition i2c_common.c:91
uint_fast16_t vsf_i2c_master_get_transferred_count(vsf_i2c_t *i2c_ptr)
get the counter of transfers for current request by the I2C master
Definition i2c_common.c:159
vsf_err_t vsf_i2c_init(vsf_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr)
Initialize a I2C instance.
Definition i2c_common.c:37
vsf_i2c_cmd_t
Predefined VSF I2C commands that can be reimplemented in specific HAL drivers.
Definition vsf_template_i2c.h:384
@ VSF_I2C_CMD_10_BITS
10-bit addressing mode command. Configures the I2C transaction to use 10-bit slave addressing.
Definition vsf_template_i2c.h:455
@ VSF_I2C_CMD_7_BITS
7-bit addressing mode command. Configures the I2C transaction to use 7-bit slave addressing.
Definition vsf_template_i2c.h:445
@ VSF_I2C_CMD_STOP
Stop condition command. Generates a STOP condition on the I2C bus to end the current transaction.
Definition vsf_template_i2c.h:423
@ VSF_I2C_CMD_RESTART
Restart condition command. Generates a repeated START condition without releasing the bus....
Definition vsf_template_i2c.h:435
@ VSF_I2C_CMD_WRITE
Write command for I2C data transfer. Used to write data on the I2C bus.
Definition vsf_template_i2c.h:393
@ VSF_I2C_CMD_READ
Read command for I2C data transfer. Used to read data from the I2C bus.
Definition vsf_template_i2c.h:403
@ VSF_I2C_CMD_START
Start condition command. Generates a START condition on the I2C bus to begin a new transaction.
Definition vsf_template_i2c.h:413
void vsf_i2c_fini(vsf_i2c_t *i2c_ptr)
Finalize a I2C instance.
Definition i2c_common.c:46
vsf_err_t vsf_i2c_slave_request(vsf_i2c_t *i2c_ptr, bool transmit_or_receive, uint_fast16_t count, uint8_t *buffer_ptr)
I2C instance as slave mode requests a transfer.
Definition i2c_common.c:148
vsf_err_t vsf_i2c_master_request(vsf_i2c_t *i2c_ptr, uint16_t address, vsf_i2c_cmd_t cmd, uint_fast16_t count, uint8_t *buffer_ptr)
I2C instance as master mode requests a transfer.
Definition i2c_common.c:136
vsf_i2c_ctrl_t
I2C control commands for hardware-specific operations.
Definition vsf_template_i2c.h:909
@ __VSF_I2C_CTRL_DUMMP
Definition vsf_template_i2c.h:948
fsm_rt_t vsf_i2c_enable(vsf_i2c_t *i2c_ptr)
Enable a I2C instance.
Definition i2c_common.c:55
uint_fast16_t vsf_i2c_slave_fifo_transfer(vsf_i2c_t *i2c_ptr, bool transmit_or_receive, uint_fast16_t count, uint8_t *buffer_ptr)
I2C instance as slave mode performs a FIFO transfer.
Definition i2c_common.c:123
void vsf_i2c_irq_enable(vsf_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask)
I2C instance enables interrupts.
Definition i2c_common.c:73
@ VSF_I2C_IRQ_ALL_BITS_MASK
Definition vsf_template_i2c.h:732
vsf_i2c_irq_mask_t
Predefined VSF I2C interrupt masks that can be reimplemented in specific HAL drivers....
Definition vsf_template_i2c.h:537
@ VSF_I2C_IRQ_MASK_MASTER_STOP_DETECT
Master mode: Start condition detection interrupt. Triggered when the master device generates a START ...
Definition vsf_template_i2c.h:649
@ VSF_I2C_IRQ_MASK_SLAVE_TX
Slave mode: Transmit FIFO threshold interrupt. Triggered when transmit FIFO level falls below thresho...
Definition vsf_template_i2c.h:688
@ VSF_I2C_IRQ_MASK_MASTER_TRANSFER_COMPLETE
Master mode: Transfer completion interrupt. Triggered when the current transfer operation is complete...
Definition vsf_template_i2c.h:576
@ VSF_I2C_IRQ_MASK_SLAVE_START_OR_RESTART_DETECT
Slave mode: Repeated START condition detection interrupt. Triggered when repeated START condition is ...
Definition vsf_template_i2c.h:662
@ VSF_I2C_IRQ_MASK_MASTER_TX
Master mode: Transmit FIFO threshold interrupt. Triggered when transmit FIFO level falls below thresh...
Definition vsf_template_i2c.h:550
@ VSF_I2C_IRQ_MASK_MASTER_ERR
Master mode: Error interrupt. Triggered on any error condition in master mode. Only valid in master m...
Definition vsf_template_i2c.h:624
@ VSF_I2C_IRQ_MASK_MASTER_RX
Master mode: Receive FIFO threshold interrupt. Triggered when receive FIFO level exceeds threshold in...
Definition vsf_template_i2c.h:564
@ VSF_I2C_IRQ_MASK_SLAVE_TRANSFER_COMPLETE
Slave mode: Transfer completion interrupt. Triggered when the current transfer operation is completed...
Definition vsf_template_i2c.h:714
@ VSF_I2C_IRQ_MASK_MASTER_START_OR_RESTART_DETECT
Slave mode: START or RESTART condition detection interrupt. Triggered when START condition is detecte...
Definition vsf_template_i2c.h:636
@ VSF_I2C_IRQ_MASK_MASTER_ADDRESS_NACK
Master mode: Address NACK detection interrupt. Triggered when a NACK is received after sending the ad...
Definition vsf_template_i2c.h:600
@ VSF_I2C_IRQ_MASK_SLAVE_ERR
Slave mode: Error interrupt. Triggered on any error condition in slave mode. Only valid in slave mode...
Definition vsf_template_i2c.h:726
@ VSF_I2C_IRQ_MASK_SLAVE_STOP_DETECT
Slave mode: STOP condition detection interrupt. Triggered when STOP condition is detected while in sl...
Definition vsf_template_i2c.h:674
@ VSF_I2C_IRQ_MASK_MASTER_ARBITRATION_LOST
Master mode: Arbitration lost interrupt. Triggered when the master loses arbitration in multi-master ...
Definition vsf_template_i2c.h:588
@ VSF_I2C_IRQ_MASK_MASTER_TX_NACK_DETECT
Master mode: data transmit NACK detection interrupt. Triggered when a NACK is received during master ...
Definition vsf_template_i2c.h:612
@ VSF_I2C_IRQ_MASK_SLAVE_RX
Slave mode: Receive FIFO threshold interrupt. Triggered when receive FIFO level exceeds threshold in ...
Definition vsf_template_i2c.h:702
void vsf_i2c_isr_handler_t(void *target_ptr, vsf_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask)
I2C interrupt callback function prototype.
Definition vsf_template_i2c.h:849
#define VSF_I2C_APIS(__PREFIX_NAME)
I2C API template, used to generate I2C type, specific prefix function declarations,...
Definition vsf_template_i2c.h:197
@ VSF_I2C_CMD_RW_MASK
Mask for read/write command selection. Extracts VSF_I2C_CMD_WRITE and VSF_I2C_CMD_READ bits.
Definition vsf_template_i2c.h:476
@ VSF_I2C_CMD_BITS_MASK
Mask for I2C address bits configuration. Extracts VSF_I2C_CMD_7_BITS and VSF_I2C_CMD_10_BITS bits.
Definition vsf_template_i2c.h:486
@ VSF_I2C_CMD_ALL_BITS_MASK
Combined mask for all I2C command bits. Includes read/write, start/stop/restart, and address bits mas...
Definition vsf_template_i2c.h:498
Generated from commit: vsfteam/vsf@2b286be