RTEMS  5.0.0
alt_i2c.h
Go to the documentation of this file.
1 
7 /******************************************************************************
8 *
9 * Copyright 2013 Altera Corporation. All Rights Reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions are met:
13 *
14 * 1. Redistributions of source code must retain the above copyright notice,
15 * this list of conditions and the following disclaimer.
16 *
17 * 2. Redistributions in binary form must reproduce the above copyright notice,
18 * this list of conditions and the following disclaimer in the documentation
19 * and/or other materials provided with the distribution.
20 *
21 * 3. The name of the author may not be used to endorse or promote products
22 * derived from this software without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY EXPRESS OR
25 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
26 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO
27 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
29 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
32 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
33 * OF SUCH DAMAGE.
34 *
35 ******************************************************************************/
36 
41 #ifndef __ALT_I2C_H__
42 #define __ALT_I2C_H__
43 
44 #include "hwlib.h"
45 #include "alt_clock_manager.h"
46 #include "socal/alt_i2c.h"
47 #include "socal/alt_rstmgr.h"
48 #include "socal/hps.h"
49 #include "socal/socal.h"
50 
51 #ifdef __cplusplus
52 extern "C"
53 {
54 #endif /* __cplusplus */
55 
56 /******************************************************************************/
96 /******************************************************************************/
102 {
108 }
110 
111 
112 /*
113  * A pointer or handle to the I2C controller device instance. The ALT_I2C_DEV_t is
114  * initialized by a call to alt_i2c_init() and subsequently used by the other I2C
115  * controller API functions as a reference to a specific device.
116  *
117  * \internal
118  * ALT_I2C_DEV_t may be a struct or reference to an opaque data
119  * structure. Whatever "internal" type is suited to the needs of the
120  * implementation.
121  * \endinternal
122  */
123 typedef struct ALT_I2C_DEV_s
124 {
125  void * location;
127  uint32_t last_target;
128 }
130 
134 typedef enum ALT_I2C_CTLR_e
135 {
136  ALT_I2C_I2C0 = (int)ALT_I2C0_OFST,
137  ALT_I2C_I2C1 = (int)ALT_I2C1_OFST,
138  ALT_I2C_I2C2 = (int)ALT_I2C2_OFST,
139  ALT_I2C_I2C3 = (int)ALT_I2C3_OFST,
141 
149 typedef enum ALT_I2C_MODE_e
150 {
151  ALT_I2C_MODE_SLAVE = ALT_I2C_CON_MST_MOD_E_DIS,
152  ALT_I2C_MODE_MASTER = ALT_I2C_CON_MST_MOD_E_EN
154 
168 typedef enum ALT_I2C_SPEED_e
169 {
170  ALT_I2C_SPEED_STANDARD = ALT_I2C_CON_SPEED_E_STANDARD,
172  ALT_I2C_SPEED_FAST = ALT_I2C_CON_SPEED_E_FAST
175 
185 {
186  ALT_I2C_ADDR_MODE_7_BIT = ALT_I2C_TAR_IC_10BITADDR_MST_E_START7,
188  ALT_I2C_ADDR_MODE_10_BIT = ALT_I2C_TAR_IC_10BITADDR_MST_E_START10
191 
195 typedef enum ALT_I2C_STATUS_e
196 {
341 
354 {
513 
528 {
529  ALT_I2C_ADDR_MODE_t addr_mode;
548  ALT_I2C_SPEED_t speed_mode;
551  uint16_t ss_scl_hcnt;
555  uint16_t ss_scl_lcnt;
559  uint16_t fs_scl_hcnt;
563  uint16_t fs_scl_lcnt;
567  uint8_t fs_spklen;
574 
580 {
581  ALT_I2C_ADDR_MODE_t addr_mode;
584  uint32_t addr;
588  bool nack_enable;
603 
626 ALT_STATUS_CODE alt_i2c_init(const ALT_I2C_CTLR_t i2c, ALT_I2C_DEV_t *i2c_dev);
627 
649 
667 
693 
708 
723 
743 
762  const ALT_I2C_MASTER_CONFIG_t* cfg);
763 
781  const ALT_I2C_MASTER_CONFIG_t* cfg,
782  uint32_t * speed_in_hz);
783 
805  uint32_t speed_in_hz);
806 
810 #define alt_i2c_cfg_to_speed(i2c_dev, speed_in_hz, cfg) alt_i2c_master_config_speed_get((i2c_dev), (cfg), (speed_in_hz))
811 
815 #define alt_i2c_speed_to_cfg(i2c_dev, speed_in_hz, cfg) alt_i2c_master_config_speed_set((i2c_dev), (cfg), (speed_in_hz))
816 
836 
855  const ALT_I2C_SLAVE_CONFIG_t* cfg);
856 
890  uint16_t *hold_time);
891 
910  const uint16_t hold_time);
911 
931  ALT_I2C_MODE_t* mode);
932 
949  const ALT_I2C_MODE_t mode);
950 
969 
996 
1022 ALT_STATUS_CODE alt_i2c_write(ALT_I2C_DEV_t *i2c_dev, const uint8_t val);
1023 
1047  uint8_t *data);
1048 
1072  const uint8_t data);
1073 
1131  const void * data,
1132  const size_t size);
1133 
1149 
1170 
1225  const void * data,
1226  const size_t size,
1227  const bool issue_restart,
1228  const bool issue_stop);
1229 
1292  void * data,
1293  const size_t size,
1294  const bool issue_restart,
1295  const bool issue_stop);
1296 
1345  const bool issue_restart,
1346  const bool issue_stop);
1347 
1398  const uint8_t value,
1399  const bool issue_restart,
1400  const bool issue_stop);
1401 
1402 /******************************************************************************/
1482  const void * data,
1483  const size_t size,
1484  const bool issue_restart,
1485  const bool issue_stop);
1486 
1503 
1519 
1535 
1538 /******************************************************************************/
1593  uint32_t *status);
1594 
1618  uint32_t *status);
1619 
1642 
1671 
1700 
1725  ALT_I2C_TX_ABORT_CAUSE_t *cause);
1726 
1729 /******************************************************************************/
1747 #define ALT_I2C_RX_FIFO_NUM_ENTRIES 64
1748 
1763 
1778 
1796  uint32_t *num_entries);
1797 
1815  uint8_t *threshold);
1816 
1834  const uint8_t threshold);
1835 
1838 /******************************************************************************/
1856 #define ALT_I2C_TX_FIFO_NUM_ENTRIES 64
1857 
1872 
1887 
1905  uint32_t *num_entries);
1906 
1924  uint8_t *threshold);
1925 
1943  const uint8_t threshold);
1944 
1947 /******************************************************************************/
1980 
1994 
2008 
2022 
2027 #ifdef __cplusplus
2028 }
2029 #endif /* __cplusplus */
2030 #endif /* __ALT_I2C_H__ */
Definition: alt_i2c.h:137
Definition: alt_i2c.h:227
ALT_STATUS_CODE alt_i2c_sda_hold_time_get(ALT_I2C_DEV_t *i2c_dev, uint16_t *hold_time)
Definition: alt_i2c.c:626
Definition: alt_i2c.h:186
Definition: alt_i2c.h:106
ALT_STATUS_CODE alt_i2c_slave_bulk_transmit(ALT_I2C_DEV_t *i2c_dev, const void *data, const size_t size)
Definition: alt_i2c.c:859
ALT_STATUS_CODE alt_i2c_master_config_speed_get(ALT_I2C_DEV_t *i2c_dev, const ALT_I2C_MASTER_CONFIG_t *cfg, uint32_t *speed_in_hz)
Definition: alt_i2c.c:480
bool nack_enable
Definition: alt_i2c.h:588
ALT_I2C_TRANSFER_TYPE_e
Definition: alt_i2c.h:101
ALT_STATUS_CODE alt_i2c_general_call_ack_is_enabled(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1566
ALT_STATUS_CODE alt_i2c_master_transmit(ALT_I2C_DEV_t *i2c_dev, const void *data, const size_t size, const bool issue_restart, const bool issue_stop)
Definition: alt_i2c.c:1048
ALT_STATUS_CODE alt_i2c_sda_hold_time_set(ALT_I2C_DEV_t *i2c_dev, const uint16_t hold_time)
Definition: alt_i2c.c:643
ALT_STATUS_CODE alt_i2c_rx_dma_threshold_set(ALT_I2C_DEV_t *i2c_dev, uint8_t threshold)
Definition: alt_i2c.c:1968
ALT_STATUS_CODE alt_i2c_rx_fifo_is_empty(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1738
Definition: alt_i2c.h:236
Definition: alt_i2c.h:382
I2C slave device control.
Definition: i2c.h:290
Definition: alt_i2c.h:423
Definition: alt_i2c.h:107
ALT_I2C_ADDR_MODE_t addr_mode
Definition: alt_i2c.h:529
Definition: alt_i2c.h:284
Definition: 8xx_immap.h:216
Definition: alt_i2c.h:105
enum ALT_I2C_MODE_e ALT_I2C_MODE_t
ALT_STATUS_CODE alt_i2c_slave_config_get(ALT_I2C_DEV_t *i2c_dev, ALT_I2C_SLAVE_CONFIG_t *cfg)
Definition: alt_i2c.c:545
ALT_STATUS_CODE alt_i2c_issue_write(ALT_I2C_DEV_t *i2c_dev, const uint8_t value, const bool issue_restart, const bool issue_stop)
Definition: alt_i2c.c:1382
ALT_STATUS_CODE alt_i2c_int_status_get(ALT_I2C_DEV_t *i2c_dev, uint32_t *status)
Definition: alt_i2c.c:1590
uint32_t last_target
Definition: alt_i2c.h:127
ALT_I2C_MODE_e
Definition: alt_i2c.h:149
ALT_STATUS_CODE alt_i2c_tx_fifo_threshold_set(ALT_I2C_DEV_t *i2c_dev, const uint8_t threshold)
Definition: alt_i2c.c:1920
bool restart_enable
Definition: alt_i2c.h:533
ALT_STATUS_CODE alt_i2c_int_enable(ALT_I2C_DEV_t *i2c_dev, const uint32_t mask)
Definition: alt_i2c.c:1703
enum ALT_I2C_TRANSFER_TYPE_e ALT_I2C_TRANSFER_TYPE_t
ALT_STATUS_CODE alt_i2c_int_clear(ALT_I2C_DEV_t *i2c_dev, const uint32_t mask)
Definition: alt_i2c.c:1624
Definition: alt_i2c.h:416
uint16_t ss_scl_hcnt
Definition: alt_i2c.h:551
Definition: alt_i2c.h:355
Definition: alt_i2c.h:309
Definition: alt_i2c.h:487
enum ALT_I2C_SPEED_e ALT_I2C_SPEED_t
ALT_I2C_ADDR_MODE_t addr_mode
Definition: alt_i2c.h:581
Definition: alt_i2c.h:136
ALT_STATUS_CODE alt_i2c_tx_dma_threshold_get(ALT_I2C_DEV_t *i2c_dev, uint8_t *threshold)
Definition: alt_i2c.c:1985
ALT_STATUS_CODE alt_i2c_slave_receive(ALT_I2C_DEV_t *i2c_dev, uint8_t *data)
Definition: alt_i2c.c:825
Definition: alt_i2c.h:172
Definition: alt_i2c.h:433
ALT_STATUS_CODE alt_i2c_int_disable(ALT_I2C_DEV_t *i2c_dev, const uint32_t mask)
Definition: alt_i2c.c:1687
ALT_I2C_CTLR_e
Definition: alt_i2c.h:134
ALT_STATUS_CODE alt_i2c_disable(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:317
Definition: alt_i2c.h:104
Definition: alt_i2c.h:321
Definition: alt_i2c.h:139
ALT_STATUS_CODE alt_i2c_master_receive(ALT_I2C_DEV_t *i2c_dev, void *data, const size_t size, const bool issue_restart, const bool issue_stop)
Definition: alt_i2c.c:1226
ALT_STATUS_CODE alt_i2c_slave_transmit(ALT_I2C_DEV_t *i2c_dev, const uint8_t data)
Definition: alt_i2c.c:848
Definition: alt_i2c.h:138
uint32_t alt_freq_t
Definition: alt_clock_manager.h:66
ALT_STATUS_CODE alt_i2c_tx_fifo_level_get(ALT_I2C_DEV_t *i2c_dev, uint32_t *num_entries)
Definition: alt_i2c.c:1888
ALT_STATUS_CODE alt_i2c_op_mode_get(ALT_I2C_DEV_t *i2c_dev, ALT_I2C_MODE_t *mode)
Definition: alt_i2c.c:681
ALT_STATUS_CODE alt_i2c_read(ALT_I2C_DEV_t *i2c_dev, uint8_t *val)
Definition: alt_i2c.c:783
ALT_STATUS_CODE alt_i2c_rx_fifo_is_full(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1758
ALT_I2C_ADDR_MODE_e
Definition: alt_i2c.h:184
ALT_STATUS_CODE alt_i2c_master_target_set(ALT_I2C_DEV_t *i2c_dev, uint32_t target_addr)
Definition: alt_i2c.c:899
ALT_STATUS_CODE alt_i2c_master_config_speed_set(ALT_I2C_DEV_t *i2c_dev, ALT_I2C_MASTER_CONFIG_t *cfg, uint32_t speed_in_hz)
Definition: alt_i2c.c:504
Definition: alt_i2c.h:400
ALT_STATUS_CODE alt_i2c_issue_read(ALT_I2C_DEV_t *i2c_dev, const bool issue_restart, const bool issue_stop)
Definition: alt_i2c.c:1419
Definition: alt_i2c.h:205
Definition: alt_i2c.h:250
ALT_STATUS_CODE alt_i2c_master_config_get(ALT_I2C_DEV_t *i2c_dev, ALT_I2C_MASTER_CONFIG_t *cfg)
Definition: alt_i2c.c:379
Definition: alt_i2c.h:123
alt_freq_t clock_freq
Definition: alt_i2c.h:126
ALT_STATUS_CODE alt_i2c_op_mode_set(ALT_I2C_DEV_t *i2c_dev, const ALT_I2C_MODE_t mode)
Definition: alt_i2c.c:708
ALT_STATUS_CODE alt_i2c_master_target_get(ALT_I2C_DEV_t *i2c_dev, uint32_t *target_addr)
Definition: alt_i2c.c:887
ALT_STATUS_CODE alt_i2c_init(const ALT_I2C_CTLR_t i2c, ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:176
ALT_STATUS_CODE alt_i2c_tx_fifo_is_empty(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1848
ALT_STATUS_CODE alt_i2c_tx_dma_threshold_set(ALT_I2C_DEV_t *i2c_dev, uint8_t threshold)
Definition: alt_i2c.c:1996
ALT_STATUS_CODE alt_i2c_master_general_call(ALT_I2C_DEV_t *i2c_dev, const void *data, const size_t size, const bool issue_restart, const bool issue_stop)
Definition: alt_i2c.c:1456
uint16_t ss_scl_lcnt
Definition: alt_i2c.h:555
ALT_STATUS_CODE alt_i2c_general_call_ack_disable(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1490
ALT_STATUS_CODE alt_i2c_is_busy(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:763
Definition: alt_i2c.h:453
struct ALT_I2C_SLAVE_CONFIG_s ALT_I2C_SLAVE_CONFIG_t
ALT_STATUS_CODE alt_i2c_rx_fifo_level_get(ALT_I2C_DEV_t *i2c_dev, uint32_t *num_entries)
Definition: alt_i2c.c:1778
Definition: alt_i2c.h:152
Definition: alt_i2c.h:392
enum ALT_I2C_TX_ABORT_CAUSE_e ALT_I2C_TX_ABORT_CAUSE_t
Definition: alt_i2c.h:292
ALT_STATUS_CODE alt_i2c_rx_dma_threshold_get(ALT_I2C_DEV_t *i2c_dev, uint8_t *threshold)
Definition: alt_i2c.c:1957
Definition: alt_i2c.h:579
ALT_STATUS_CODE alt_i2c_tx_fifo_is_full(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1868
Definition: alt_i2c.h:264
Definition: alt_i2c.h:151
ALT_STATUS_CODE alt_i2c_uninit(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:271
Definition: alt_i2c.h:468
ALT_STATUS_CODE alt_i2c_write(ALT_I2C_DEV_t *i2c_dev, const uint8_t val)
Definition: alt_i2c.c:803
ALT_STATUS_CODE alt_i2c_slave_config_set(ALT_I2C_DEV_t *i2c_dev, const ALT_I2C_SLAVE_CONFIG_t *cfg)
Definition: alt_i2c.c:567
enum ALT_I2C_STATUS_e ALT_I2C_STATUS_t
Definition: alt_i2c.h:409
enum ALT_I2C_ADDR_MODE_e ALT_I2C_ADDR_MODE_t
ALT_STATUS_CODE alt_i2c_master_config_set(ALT_I2C_DEV_t *i2c_dev, const ALT_I2C_MASTER_CONFIG_t *cfg)
Definition: alt_i2c.c:407
Definition: alt_i2c.h:503
ALT_STATUS_CODE alt_i2c_rx_fifo_threshold_set(ALT_I2C_DEV_t *i2c_dev, const uint8_t threshold)
Definition: alt_i2c.c:1810
Definition: alt_i2c.h:170
void * location
Definition: alt_i2c.h:125
Definition: alt_i2c.h:330
int32_t ALT_STATUS_CODE
Definition: hwlib.h:60
uint8_t fs_spklen
Definition: alt_i2c.h:567
Definition: alt_i2c.h:315
ALT_I2C_TX_ABORT_CAUSE_e
Definition: alt_i2c.h:353
ALT_I2C_SPEED_t speed_mode
Definition: alt_i2c.h:548
Definition: alt_i2c.h:527
Definition: alt_i2c.h:216
uint32_t addr
Definition: alt_i2c.h:584
Definition: alt_i2c.h:364
ALT_I2C_SPEED_e
Definition: alt_i2c.h:168
ALT_STATUS_CODE alt_i2c_tx_fifo_threshold_get(ALT_I2C_DEV_t *i2c_dev, uint8_t *threshold)
Definition: alt_i2c.c:1904
Definition: alt_i2c.h:197
unsigned size
Definition: tte.h:74
ALT_STATUS_CODE alt_i2c_is_enabled(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:366
ALT_STATUS_CODE alt_i2c_general_call_ack_enable(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:1528
ALT_STATUS_CODE alt_i2c_int_raw_status_get(ALT_I2C_DEV_t *i2c_dev, uint32_t *status)
Definition: alt_i2c.c:1607
ALT_STATUS_CODE alt_i2c_reset(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:213
Definition: alt_i2c.h:461
Definition: alt_i2c.h:103
ALT_STATUS_CODE alt_i2c_rx_fifo_threshold_get(ALT_I2C_DEV_t *i2c_dev, uint8_t *threshold)
Definition: alt_i2c.c:1794
uint16_t fs_scl_hcnt
Definition: alt_i2c.h:559
Definition: alt_i2c.h:373
struct ALT_I2C_MASTER_CONFIG_s ALT_I2C_MASTER_CONFIG_t
enum ALT_I2C_CTLR_e ALT_I2C_CTLR_t
ALT_I2C_STATUS_e
Definition: alt_i2c.h:195
ALT_STATUS_CODE alt_i2c_tx_abort_cause_get(ALT_I2C_DEV_t *i2c_dev, ALT_I2C_TX_ABORT_CAUSE_t *cause)
Definition: alt_i2c.c:1720
Definition: alt_i2c.h:188
uint16_t fs_scl_lcnt
Definition: alt_i2c.h:563
ALT_STATUS_CODE alt_i2c_enable(ALT_I2C_DEV_t *i2c_dev)
Definition: alt_i2c.c:298