Altera HWLIB  16.0
The Altera HW Manager API Reference Manual
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups
alt_i2c.h
Go to the documentation of this file.
1 /******************************************************************************
2 *
3 * Copyright 2013 Altera Corporation. All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors
16 * may be used to endorse or promote products derived from this software without
17 * specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 ******************************************************************************/
32 
33 /*
34  * $Id: //depot/embedded/rel/15.0/ip/hps/altera_hps/hwlib/include/alt_i2c.h#1 $
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;
126  alt_freq_t clock_freq;
127  uint32_t last_target;
128 }
129 ALT_I2C_DEV_t;
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 {
533  bool restart_enable;
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 {
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 
648 ALT_STATUS_CODE alt_i2c_reset(ALT_I2C_DEV_t * i2c_dev);
649 
666 ALT_STATUS_CODE alt_i2c_uninit(ALT_I2C_DEV_t *i2c_dev);
667 
692 ALT_STATUS_CODE alt_i2c_disable(ALT_I2C_DEV_t *i2c_dev);
693 
707 ALT_STATUS_CODE alt_i2c_enable(ALT_I2C_DEV_t *i2c_dev);
708 
722 ALT_STATUS_CODE alt_i2c_is_enabled(ALT_I2C_DEV_t *i2c_dev);
723 
741 ALT_STATUS_CODE alt_i2c_master_config_get(ALT_I2C_DEV_t *i2c_dev,
743 
761 ALT_STATUS_CODE alt_i2c_master_config_set(ALT_I2C_DEV_t *i2c_dev,
762  const ALT_I2C_MASTER_CONFIG_t* cfg);
763 
780 ALT_STATUS_CODE alt_i2c_master_config_speed_get(ALT_I2C_DEV_t *i2c_dev,
781  const ALT_I2C_MASTER_CONFIG_t* cfg,
782  uint32_t * speed_in_hz);
783 
803 ALT_STATUS_CODE alt_i2c_master_config_speed_set(ALT_I2C_DEV_t *i2c_dev,
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 
834 ALT_STATUS_CODE alt_i2c_slave_config_get(ALT_I2C_DEV_t *i2c_dev,
836 
854 ALT_STATUS_CODE alt_i2c_slave_config_set(ALT_I2C_DEV_t *i2c_dev,
855  const ALT_I2C_SLAVE_CONFIG_t* cfg);
856 
889 ALT_STATUS_CODE alt_i2c_sda_hold_time_get(ALT_I2C_DEV_t *i2c_dev,
890  uint16_t *hold_time);
891 
909 ALT_STATUS_CODE alt_i2c_sda_hold_time_set(ALT_I2C_DEV_t *i2c_dev,
910  const uint16_t hold_time);
911 
930 ALT_STATUS_CODE alt_i2c_op_mode_get(ALT_I2C_DEV_t *i2c_dev,
931  ALT_I2C_MODE_t* mode);
932 
948 ALT_STATUS_CODE alt_i2c_op_mode_set(ALT_I2C_DEV_t *i2c_dev,
949  const ALT_I2C_MODE_t mode);
950 
968 ALT_STATUS_CODE alt_i2c_is_busy(ALT_I2C_DEV_t *i2c_dev);
969 
995 ALT_STATUS_CODE alt_i2c_read(ALT_I2C_DEV_t *i2c_dev, uint8_t *val);
996 
1022 ALT_STATUS_CODE alt_i2c_write(ALT_I2C_DEV_t *i2c_dev, const uint8_t val);
1023 
1046 ALT_STATUS_CODE alt_i2c_slave_receive(ALT_I2C_DEV_t *i2c_dev,
1047  uint8_t *data);
1048 
1071 ALT_STATUS_CODE alt_i2c_slave_transmit(ALT_I2C_DEV_t *i2c_dev,
1072  const uint8_t data);
1073 
1130 ALT_STATUS_CODE alt_i2c_slave_bulk_transmit(ALT_I2C_DEV_t *i2c_dev,
1131  const void * data,
1132  const size_t size);
1133 
1148 ALT_STATUS_CODE alt_i2c_master_target_get(ALT_I2C_DEV_t * i2c_dev, uint32_t * target_addr);
1149 
1169 ALT_STATUS_CODE alt_i2c_master_target_set(ALT_I2C_DEV_t * i2c_dev, uint32_t target_addr);
1170 
1224 ALT_STATUS_CODE alt_i2c_master_transmit(ALT_I2C_DEV_t *i2c_dev,
1225  const void * data,
1226  const size_t size,
1227  const bool issue_restart,
1228  const bool issue_stop);
1229 
1291 ALT_STATUS_CODE alt_i2c_master_receive(ALT_I2C_DEV_t *i2c_dev,
1292  void * data,
1293  const size_t size,
1294  const bool issue_restart,
1295  const bool issue_stop);
1296 
1344 ALT_STATUS_CODE alt_i2c_issue_read(ALT_I2C_DEV_t *i2c_dev,
1345  const bool issue_restart,
1346  const bool issue_stop);
1347 
1397 ALT_STATUS_CODE alt_i2c_issue_write(ALT_I2C_DEV_t *i2c_dev,
1398  const uint8_t value,
1399  const bool issue_restart,
1400  const bool issue_stop);
1401 
1402 /******************************************************************************/
1481 ALT_STATUS_CODE alt_i2c_master_general_call(ALT_I2C_DEV_t *i2c_dev,
1482  const void * data,
1483  const size_t size,
1484  const bool issue_restart,
1485  const bool issue_stop);
1486 
1502 ALT_STATUS_CODE alt_i2c_general_call_ack_disable(ALT_I2C_DEV_t *i2c_dev);
1503 
1518 ALT_STATUS_CODE alt_i2c_general_call_ack_enable(ALT_I2C_DEV_t *i2c_dev);
1519 
1534 ALT_STATUS_CODE alt_i2c_general_call_ack_is_enabled(ALT_I2C_DEV_t *i2c_dev);
1535 
1538 /******************************************************************************/
1592 ALT_STATUS_CODE alt_i2c_int_status_get(ALT_I2C_DEV_t *i2c_dev,
1593  uint32_t *status);
1594 
1617 ALT_STATUS_CODE alt_i2c_int_raw_status_get(ALT_I2C_DEV_t *i2c_dev,
1618  uint32_t *status);
1619 
1641 ALT_STATUS_CODE alt_i2c_int_clear(ALT_I2C_DEV_t *i2c_dev, const uint32_t mask);
1642 
1670 ALT_STATUS_CODE alt_i2c_int_disable(ALT_I2C_DEV_t *i2c_dev, const uint32_t mask);
1671 
1699 ALT_STATUS_CODE alt_i2c_int_enable(ALT_I2C_DEV_t *i2c_dev, const uint32_t mask);
1700 
1724 ALT_STATUS_CODE alt_i2c_tx_abort_cause_get(ALT_I2C_DEV_t *i2c_dev,
1725  ALT_I2C_TX_ABORT_CAUSE_t *cause);
1726 
1729 /******************************************************************************/
1747 #define ALT_I2C_RX_FIFO_NUM_ENTRIES 64
1748 
1762 ALT_STATUS_CODE alt_i2c_rx_fifo_is_empty(ALT_I2C_DEV_t *i2c_dev);
1763 
1777 ALT_STATUS_CODE alt_i2c_rx_fifo_is_full(ALT_I2C_DEV_t *i2c_dev);
1778 
1795 ALT_STATUS_CODE alt_i2c_rx_fifo_level_get(ALT_I2C_DEV_t *i2c_dev,
1796  uint32_t *num_entries);
1797 
1814 ALT_STATUS_CODE alt_i2c_rx_fifo_threshold_get(ALT_I2C_DEV_t *i2c_dev,
1815  uint8_t *threshold);
1816 
1833 ALT_STATUS_CODE alt_i2c_rx_fifo_threshold_set(ALT_I2C_DEV_t *i2c_dev,
1834  const uint8_t threshold);
1835 
1838 /******************************************************************************/
1856 #define ALT_I2C_TX_FIFO_NUM_ENTRIES 64
1857 
1871 ALT_STATUS_CODE alt_i2c_tx_fifo_is_empty(ALT_I2C_DEV_t *i2c_dev);
1872 
1886 ALT_STATUS_CODE alt_i2c_tx_fifo_is_full(ALT_I2C_DEV_t *i2c_dev);
1887 
1904 ALT_STATUS_CODE alt_i2c_tx_fifo_level_get(ALT_I2C_DEV_t *i2c_dev,
1905  uint32_t *num_entries);
1906 
1923 ALT_STATUS_CODE alt_i2c_tx_fifo_threshold_get(ALT_I2C_DEV_t *i2c_dev,
1924  uint8_t *threshold);
1925 
1942 ALT_STATUS_CODE alt_i2c_tx_fifo_threshold_set(ALT_I2C_DEV_t *i2c_dev,
1943  const uint8_t threshold);
1944 
1947 /******************************************************************************/
1979 ALT_STATUS_CODE alt_i2c_rx_dma_threshold_get(ALT_I2C_DEV_t * i2c_dev, uint8_t * threshold);
1980 
1993 ALT_STATUS_CODE alt_i2c_rx_dma_threshold_set(ALT_I2C_DEV_t * i2c_dev, uint8_t threshold);
1994 
2007 ALT_STATUS_CODE alt_i2c_tx_dma_threshold_get(ALT_I2C_DEV_t * i2c_dev, uint8_t * threshold);
2008 
2021 ALT_STATUS_CODE alt_i2c_tx_dma_threshold_set(ALT_I2C_DEV_t * i2c_dev, uint8_t threshold);
2022 
2027 #ifdef __cplusplus
2028 }
2029 #endif /* __cplusplus */
2030 #endif /* __ALT_I2C_H__ */