109 lines
2.8 KiB
C
109 lines
2.8 KiB
C
/************************************************************************************************/
|
||
/**
|
||
* @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 */
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @}
|
||
*/
|