2 **************************************************************************
3 * @file i2c_application.h
6 * @brief i2c application libray header file
7 **************************************************************************
8 * Copyright notice & Disclaimer
10 * The software Board Support Package (BSP) that is made available to
11 * download from Artery official website is the copyrighted work of Artery.
12 * Artery authorizes customers to use, copy, and distribute the BSP
13 * software and its related documentation for the purpose of design and
14 * development in conjunction with Artery microcontrollers. Use of the
15 * software is governed by this copyright notice and the following disclaimer.
17 * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
18 * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
19 * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
20 * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
21 * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
24 **************************************************************************
27 /*!< define to prevent recursive inclusion -------------------------------------*/
28 #ifndef __I2C_APPLICATION_H
29 #define __I2C_APPLICATION_H
35 /* includes ------------------------------------------------------------------*/
36 #include "at32f435_437.h"
38 /** @addtogroup AT32F435_437_middlewares_i2c_application_library
43 /** @defgroup I2C_library_event_check_flag
47 #define I2C_EVENT_CHECK_NONE ((uint32_t)0x00000000) /*!< check flag none */
48 #define I2C_EVENT_CHECK_ACKFAIL ((uint32_t)0x00000001) /*!< check flag ackfail */
49 #define I2C_EVENT_CHECK_STOP ((uint32_t)0x00000002) /*!< check flag stop */
55 /** @defgroup I2C_library_memory_address_width_mode
61 I2C_MEM_ADDR_WIDIH_8
= 0x01, /*!< memory address is 8 bit */
62 I2C_MEM_ADDR_WIDIH_16
= 0x02, /*!< memory address is 16 bit */
63 } i2c_mem_address_width_type
;
69 /** @defgroup I2C_library_transmission_mode
89 /** @defgroup I2C_library_status_code
95 I2C_OK
= 0, /*!< no error */
96 I2C_ERR_STEP_1
, /*!< step 1 error */
97 I2C_ERR_STEP_2
, /*!< step 2 error */
98 I2C_ERR_STEP_3
, /*!< step 3 error */
99 I2C_ERR_STEP_4
, /*!< step 4 error */
100 I2C_ERR_STEP_5
, /*!< step 5 error */
101 I2C_ERR_STEP_6
, /*!< step 6 error */
102 I2C_ERR_STEP_7
, /*!< step 7 error */
103 I2C_ERR_STEP_8
, /*!< step 8 error */
104 I2C_ERR_STEP_9
, /*!< step 9 error */
105 I2C_ERR_STEP_10
, /*!< step 10 error */
106 I2C_ERR_STEP_11
, /*!< step 11 error */
107 I2C_ERR_STEP_12
, /*!< step 12 error */
108 I2C_ERR_TCRLD
, /*!< tcrld error */
109 I2C_ERR_TDC
, /*!< tdc error */
110 I2C_ERR_ADDR
, /*!< addr error */
111 I2C_ERR_STOP
, /*!< stop error */
112 I2C_ERR_ACKFAIL
, /*!< ackfail error */
113 I2C_ERR_TIMEOUT
, /*!< timeout error */
114 I2C_ERR_INTERRUPT
, /*!< interrupt error */
121 /** @defgroup I2C_library_handler
127 i2c_type
*i2cx
; /*!< i2c registers base address */
128 uint8_t *pbuff
; /*!< pointer to i2c transfer buffer */
129 __IO
uint16_t psize
; /*!< i2c transfer size */
130 __IO
uint16_t pcount
; /*!< i2c transfer counter */
131 __IO
uint32_t mode
; /*!< i2c communication mode */
132 __IO
uint32_t status
; /*!< i2c communication status */
133 __IO i2c_status_type error_code
; /*!< i2c error code */
134 dma_channel_type
*dma_tx_channel
; /*!< dma transmit channel */
135 dma_channel_type
*dma_rx_channel
; /*!< dma receive channel */
136 dma_init_type dma_init_struct
; /*!< dma init parameters */
143 /** @defgroup I2C_library_exported_functions
147 void i2c_config (i2c_handle_type
* hi2c
);
148 void i2c_lowlevel_init (i2c_handle_type
* hi2c
);
149 void i2c_reset_ctrl2_register (i2c_handle_type
* hi2c
);
150 i2c_status_type
i2c_wait_end (i2c_handle_type
* hi2c
, uint32_t timeout
);
151 i2c_status_type
i2c_wait_flag (i2c_handle_type
* hi2c
, uint32_t flag
, uint32_t event_check
, uint32_t timeout
);
153 i2c_status_type
i2c_master_transmit (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
154 i2c_status_type
i2c_master_receive (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
155 i2c_status_type
i2c_slave_transmit (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
156 i2c_status_type
i2c_slave_receive (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
158 i2c_status_type
i2c_master_transmit_int (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
159 i2c_status_type
i2c_master_receive_int (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
160 i2c_status_type
i2c_slave_transmit_int (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
161 i2c_status_type
i2c_slave_receive_int (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
163 i2c_status_type
i2c_master_transmit_dma (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
164 i2c_status_type
i2c_master_receive_dma (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
165 i2c_status_type
i2c_slave_transmit_dma (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
166 i2c_status_type
i2c_slave_receive_dma (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
168 i2c_status_type
i2c_smbus_master_transmit (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
169 i2c_status_type
i2c_smbus_master_receive (i2c_handle_type
* hi2c
, uint16_t address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
170 i2c_status_type
i2c_smbus_slave_transmit (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
171 i2c_status_type
i2c_smbus_slave_receive (i2c_handle_type
* hi2c
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
173 i2c_status_type
i2c_memory_write (i2c_handle_type
* hi2c
, i2c_mem_address_width_type mem_address_width
, uint16_t address
, uint16_t mem_address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
174 i2c_status_type
i2c_memory_write_int (i2c_handle_type
* hi2c
, i2c_mem_address_width_type mem_address_width
, uint16_t address
, uint16_t mem_address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
175 i2c_status_type
i2c_memory_write_dma (i2c_handle_type
* hi2c
, i2c_mem_address_width_type mem_address_width
, uint16_t address
, uint16_t mem_address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
176 i2c_status_type
i2c_memory_read (i2c_handle_type
* hi2c
, i2c_mem_address_width_type mem_address_width
, uint16_t address
, uint16_t mem_address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
177 i2c_status_type
i2c_memory_read_int (i2c_handle_type
* hi2c
, i2c_mem_address_width_type mem_address_width
, uint16_t address
, uint16_t mem_address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
178 i2c_status_type
i2c_memory_read_dma (i2c_handle_type
* hi2c
, i2c_mem_address_width_type mem_address_width
, uint16_t address
, uint16_t mem_address
, uint8_t* pdata
, uint16_t size
, uint32_t timeout
);
180 void i2c_evt_irq_handler (i2c_handle_type
* hi2c
);
181 void i2c_err_irq_handler (i2c_handle_type
* hi2c
);
182 void i2c_dma_tx_irq_handler (i2c_handle_type
* hi2c
);
183 void i2c_dma_rx_irq_handler (i2c_handle_type
* hi2c
);