CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Source/ciu32l051_std_i2c.c

109 lines
2.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/************************************************************************************************/
/**
* @file ciu32l051_std_i2c.c
* @author MCU Ecosystem Development Team
* @brief I2C STD库驱动。
* 实现I2C初始化等API。
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/
/************************************************************************************************/
/**
* @addtogroup CIU32L051_STD_Driver
* @{
*/
/**
* @addtogroup I2C
* @{
*
*/
/************************************************************************************************/
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std.h"
#ifdef STD_I2C_PERIPHERAL_USED
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @addtogroup I2C_External_Functions
* @{
*
*/
/************************************************************************************************/
/**
* @brief I2C初始化函数
* @param i2cx I2C外设
* @param i2c_init_param I2C初始化结构体指针
* @retval 无
*/
void std_i2c_init(I2C_t *i2cx, std_i2c_init_t *i2c_init_param)
{
/* I2C时钟配置寄存器配置 */
std_i2c_set_timing(i2cx, i2c_init_param->timing);
/* 配置I2C设备地址1 */
std_i2c_device_address1_disable(i2cx);
std_i2c_device_address1_config(i2cx, i2c_init_param->address1_length, i2c_init_param->address1);
std_i2c_device_address1_enable(i2cx);
/* 数字滤波器配置 */
std_i2c_digital_filter_config(i2cx, i2c_init_param->digital_filter);
/* 配置I2C从模式下的应答方式 */
std_i2c_set_next_data_ack(i2cx, i2c_init_param->acknowledge_type);
/* 使能I2C接口 */
std_i2c_enable(i2cx);
}
/**
* @brief I2C去初始化函数
* @param i2cx I2C外设
* @retval 无
*/
void std_i2c_deinit(I2C_t *i2cx)
{
/* I2C复位并关闭I2C的时钟 */
std_rcc_apb1_reset(RCC_PERIPH_RESET_I2C1);
std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_I2C1);
}
/**
* @brief I2C初始化结构体初始化
* @param i2c_init_struct I2C初始化结构体指针
* @retval 无
*/
void std_i2c_struct_init(std_i2c_init_t *i2c_init_struct)
{
i2c_init_struct->timing = 0U;
i2c_init_struct->digital_filter = I2C_DIGITALFILTER_DISABLE;
i2c_init_struct->address1_length = I2C_ADDRESS1MODE_7BIT;
i2c_init_struct->address1 = 0U;
i2c_init_struct->acknowledge_type = I2C_DATA_NACK;
}
/**
* @}
*/
#endif /* STD_I2C_PERIPHERAL_USED */
/**
* @}
*/
/**
* @}
*/