764 lines
23 KiB
C
764 lines
23 KiB
C
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @file ciu32l051_std_i2c.h
|
|||
|
* @author MCU Ecosystem Development Team
|
|||
|
* @brief I2C STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* <EFBFBD>ṩI2C<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD>塣
|
|||
|
*
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
* @attention
|
|||
|
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
*/
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#ifndef CIU32L051_STD_I2C_H
|
|||
|
#define CIU32L051_STD_I2C_H
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup CIU32L051_STD_Driver
|
|||
|
* @{
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @defgroup I2C I2C
|
|||
|
* @brief I2C<EFBFBD>ӿڵ<EFBFBD>STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @{
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C" {
|
|||
|
#endif
|
|||
|
|
|||
|
/*------------------------------------includes--------------------------------------------------*/
|
|||
|
#include "ciu32l051_std_common.h"
|
|||
|
|
|||
|
/*------------------------------------type define-----------------------------------------------*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @defgroup I2C_Types I2C Types
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @{
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD>嶨<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint32_t timing; /**< ʱ<>ӷ<EFBFBD>Ƶ<EFBFBD><C6B5>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ռ<EFBFBD>ձȡ<D5B1><C8A1><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>ʱ<EFBFBD>䡢<EFBFBD><E4A1A2><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD> */
|
|||
|
|
|||
|
uint32_t digital_filter; /**< <20><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
@arg I2C_DIGITALFILTER_DISABLE... */
|
|||
|
|
|||
|
uint32_t address1_length; /**< <20>豸<EFBFBD><E8B1B8>ַ1<D6B7><31>ַģʽ<C4A3><CABD><EFBFBD><EFBFBD>
|
|||
|
@arg I2C_ADDRESS1MODE_7BIT... */
|
|||
|
|
|||
|
uint32_t address1; /**< I2C<32>豸<EFBFBD><E8B1B8>ַ1 */
|
|||
|
|
|||
|
uint32_t acknowledge_type; /**< Ӧ<><D3A6>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
|
|||
|
@arg I2C_DATA_ACK */
|
|||
|
}std_i2c_init_t;
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
/*--------------------------------------------define--------------------------------------------*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @defgroup I2C_Constants I2C Constants
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>弰<EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_DISABLE I2C_CR1_DNF_DISABLE /**< <20><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>ֹ */
|
|||
|
#define I2C_DIGITALFILTER_1CLK I2C_CR1_DNF_1CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>1<EFBFBD><31>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_2CLK I2C_CR1_DNF_2CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>2<EFBFBD><32>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_3CLK I2C_CR1_DNF_3CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>3<EFBFBD><33>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_4CLK I2C_CR1_DNF_4CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>4<EFBFBD><34>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_5CLK I2C_CR1_DNF_5CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>5<EFBFBD><35>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_6CLK I2C_CR1_DNF_6CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>6<EFBFBD><36>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_7CLK I2C_CR1_DNF_7CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>7<EFBFBD><37>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_8CLK I2C_CR1_DNF_8CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>8<EFBFBD><38>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_9CLK I2C_CR1_DNF_9CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>9<EFBFBD><39>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_10CLK I2C_CR1_DNF_10CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>10<31><30>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_11CLK I2C_CR1_DNF_11CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>11<31><31>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_12CLK I2C_CR1_DNF_12CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>12<31><32>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_13CLK I2C_CR1_DNF_13CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>13<31><33>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_14CLK I2C_CR1_DNF_14CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>14<31><34>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DIGITALFILTER_15CLK I2C_CR1_DNF_15CLK /**< <20>˳<EFBFBD>С<EFBFBD><D0A1>15<31><35>I2C_KCLK<4C><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|||
|
/* I2C<32>豸<EFBFBD><E8B1B8>ַ1ģʽ<C4A3><CABD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_ADDRESS1MODE_7BIT (0x00000000U) /**< 7λ<37><CEBB>ַģʽ */
|
|||
|
#define I2C_ADDRESS1MODE_10BIT I2C_ADDR1_ADDR1MODE /**< 10λ<30><CEBB>ַģʽ */
|
|||
|
|
|||
|
/* <20><>ģʽӦ<CABD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DATA_ACK (0x00000000U) /**< <20><>ģʽӦ<CABD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_DATA_NACK I2C_CR2_NACK /**< <20><>ģʽӦ<CABD><D3A6><EFBFBD>ر<EFBFBD> */
|
|||
|
|
|||
|
/* I2C<32><43>ģʽѰַ<D1B0><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_MASTER_ADDRESSING_7BIT (0x00000000U) /**< I2C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>7bit<69><74>ַ */
|
|||
|
#define I2C_MASTER_ADDRESSING_10BIT I2C_CR2_ADDR10 /**< I2C <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10bit<69><74>ַ*/
|
|||
|
|
|||
|
/* I2C<32>豸<EFBFBD><E8B1B8>ַ2<D6B7><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_ADDR2_NOMASK ((uint8_t)0x00U) /**< ADDR2[7:1]ȫ<><C8AB><EFBFBD>Ƚ<EFBFBD> */
|
|||
|
#define I2C_ADDR2_MASK1 ((uint8_t)0x01U) /**< ADDR2[1]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<>Ƚ<EFBFBD>ADDR2[7:2] */
|
|||
|
#define I2C_ADDR2_MASK2 ((uint8_t)0x02U) /**< ADDR2[2:1]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<>Ƚ<EFBFBD>ADDR2[7:3] */
|
|||
|
#define I2C_ADDR2_MASK3 ((uint8_t)0x03U) /**< ADDR2[3:1]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<>Ƚ<EFBFBD>ADDR2[7:4] */
|
|||
|
#define I2C_ADDR2_MASK4 ((uint8_t)0x04U) /**< ADDR2[4:1]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<>Ƚ<EFBFBD>ADDR2[7:5] */
|
|||
|
#define I2C_ADDR2_MASK5 ((uint8_t)0x05U) /**< ADDR2[5:1]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<>Ƚ<EFBFBD>ADDR2[7:6] */
|
|||
|
#define I2C_ADDR2_MASK6 ((uint8_t)0x06U) /**< ADDR2[6:1]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<>Ƚ<EFBFBD>ADDR2[7] */
|
|||
|
#define I2C_ADDR2_MASK7 ((uint8_t)0x07U) /**< ADDR2[7:1]ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Խ<EFBFBD><D4BD>յ<EFBFBD>ȫ<EFBFBD><C8AB>7λ<37><CEBB>ַ(<28><>I2C<32><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ)Ӧ<><D3A6> */
|
|||
|
|
|||
|
/* I2C <20>ж<EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_ERR I2C_CR1_ERRIE /**< <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_TC I2C_CR1_TCIE /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_STOP I2C_CR1_STOPIE /**< ֹͣλ<D6B9><CEBB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_NACK I2C_CR1_NACKIE /**< <20><><EFBFBD><EFBFBD>NACK<43>ж<EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_ADDR I2C_CR1_ADDRIE /**< <20><>ַƥ<D6B7><C6A5><EFBFBD>ж<EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_RX I2C_CR1_RXIE /**< <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
#define I2C_INTERRUPT_TX I2C_CR1_TXIE /**< <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD> */
|
|||
|
|
|||
|
/* I2C ״̬<D7B4><CCAC>־λ */
|
|||
|
#define I2C_FLAG_TXE I2C_ISR_TXE /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD>Ϊ<EFBFBD>ձ<EFBFBD>־ */
|
|||
|
#define I2C_FLAG_TXIS I2C_ISR_TXIS /**< <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>״̬<D7B4><CCAC>־ */
|
|||
|
#define I2C_FLAG_RXNE I2C_ISR_RXNE /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<DDBC><C4B4><EFBFBD><EFBFBD>ǿձ<C7BF>־ */
|
|||
|
#define I2C_FLAG_ADDR I2C_ISR_ADDR /**< <20><>ַƥ<D6B7><C6A5><EFBFBD><EFBFBD>־ (<28><>ģʽ) */
|
|||
|
#define I2C_FLAG_NACK I2C_ISR_NACKF /**< <20><><EFBFBD><EFBFBD>NACK<43><4B>־ */
|
|||
|
#define I2C_FLAG_STOP I2C_ISR_STOPF /**< ֹͣλ<D6B9><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
|
|||
|
#define I2C_FLAG_TC I2C_ISR_TC /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־ (<28><>ģʽ) */
|
|||
|
#define I2C_FLAG_TCR I2C_ISR_TCR /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵȴ<C9B5><C8B4><EFBFBD><EFBFBD>ر<EFBFBD>־ */
|
|||
|
#define I2C_FLAG_BERR I2C_ISR_BERR /**< <20><><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD>־ */
|
|||
|
#define I2C_FLAG_ARLO I2C_ISR_ARLO /**< <20>ٲ<EFBFBD>ʧ<EFBFBD>ܱ<EFBFBD>־ */
|
|||
|
#define I2C_FLAG_OVR I2C_ISR_OVR /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־ */
|
|||
|
#define I2C_FLAG_BUSY I2C_ISR_BUSY /**< <20><><EFBFBD>߱<EFBFBD>ռ<EFBFBD>ñ<EFBFBD>־ */
|
|||
|
#define I2C_FLAG_DIR I2C_ISR_DIR /**< <20><><EFBFBD>ݴ<EFBFBD><DDB4>䷽<EFBFBD><E4B7BD><EFBFBD><EFBFBD>־ (<28><>ģʽ) */
|
|||
|
|
|||
|
/* I2C <20><><EFBFBD>ݴ<EFBFBD><DDB4>䷽<EFBFBD><E4B7BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_REQUEST_WRITE (0x00000000U) /**< д<><D0B4><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_REQUEST_READ I2C_CR2_RD_WRN /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|||
|
/* I2C <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD> */
|
|||
|
#define I2C_MODE_RELOAD I2C_CR2_RELOAD /**< <20><>װ<EFBFBD><D7B0>ģʽ */
|
|||
|
#define I2C_MODE_AUTOEND I2C_CR2_AUTOEND /**< <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
#define I2C_MODE_SOFTEND (0x00000000U) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ */
|
|||
|
|
|||
|
/* NBYTES<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
#define I2C_MAX_NBYTES_SIZE (255U) /**< NBYTES<45><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/*-------------------------------------------functions------------------------------------------*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @defgroup I2C_External_Functions I2C External Functions
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD>⺯<EFBFBD><EFBFBD>
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @brief ʹ<EFBFBD><EFBFBD>I2C<EFBFBD>ӿ<EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_PE;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ֹI2C<EFBFBD>ӿ<EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_PE);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param digital_filter <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_DIGITALFILTER_DISABLE: <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_DIGITALFILTER_1CLK: <EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>1 * I2C_KCLK
|
|||
|
* @arg I2C_DIGITALFILTER_2CLK: <EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>2 * I2C_KCLK
|
|||
|
* @arg ...
|
|||
|
* @arg I2C_DIGITALFILTER_15CLK: <EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><EFBFBD>15 * I2C_KCLK
|
|||
|
* @note <EFBFBD>˲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_digital_filter_config(I2C_t *i2cx, uint32_t digital_filter)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR1, I2C_CR1_DNF, digital_filter);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_dma_tx_req_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_TXDMAEN;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_dma_tx_req_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_TXDMAEN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_dma_rx_req_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_RXDMAEN;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_dma_rx_req_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_RXDMAEN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽʱ<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܿ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_clock_stretch_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_NOSTRETCH);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽʱ<EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_clock_stretch_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_NOSTRETCH;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_slave_bytes_control_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_SBC;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_slave_bytes_control_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_SBC);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>STOPģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_wakeup_from_stop_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_WUPEN;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>STOPģʽ<EFBFBD><EFBFBD><EFBFBD>ѽ<EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_wakeup_from_stop_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_WUPEN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD>㲥<EFBFBD><EFBFBD>ַӦ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_general_call_address_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 |= I2C_CR1_GCEN;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD>㲥<EFBFBD><EFBFBD>ַӦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_general_call_address_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~I2C_CR1_GCEN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ַ1
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param dev_addr1_mode I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_ADDRESS1MODE_7BIT: I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ7bit
|
|||
|
* @arg I2C_ADDRESS1MODE_10BIT: I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10bit
|
|||
|
* @param dev_address1 I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><EFBFBD>0x0~0x3FF֮<EFBFBD>䣩
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_device_address1_config(I2C_t *i2cx, uint32_t dev_addr1_mode, uint32_t dev_address1)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->ADDR1, (I2C_ADDR1_ADDR1MODE | I2C_ADDR1_ADDR1), (dev_addr1_mode | dev_address1));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ַ1ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_device_address1_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->ADDR1 |= I2C_ADDR1_ADDR1EN;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_device_address1_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->ADDR1 &= (~I2C_ADDR1_ADDR1EN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ַ2
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param dev_addr2_mask I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_ADDR2_NOMASK: ADDR2[7:1]ȫ<EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>
|
|||
|
* @arg I2C_ADDR2_MASK1: ADDR2[1]<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<EFBFBD>Ƚ<EFBFBD>ADDR2[7:2]
|
|||
|
* @arg I2C_ADDR2_MASK2: ADDR2[2:1]<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ֻ<EFBFBD>Ƚ<EFBFBD>ADDR2[7:3]
|
|||
|
* @arg ...
|
|||
|
* @arg I2C_ADDR2_MASK7: ADDR2[7:1]ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD>Խ<EFBFBD><EFBFBD>յ<EFBFBD>ȫ<EFBFBD><EFBFBD>7λ<EFBFBD><EFBFBD>ַ(<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ)Ӧ<EFBFBD><EFBFBD>
|
|||
|
* @param dev_address2 I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><EFBFBD>0x0~0x7F֮<EFBFBD>䣩
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_device_address2_config(I2C_t *i2cx, uint32_t dev_addr2_mask, uint32_t dev_address2)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->ADDR2, (I2C_ADDR2_ADDR2MASK | I2C_ADDR2_ADDR2), ((dev_addr2_mask << I2C_ADDR2_ADDR2MASK_POS) | (dev_address2 << I2C_ADDR2_ADDR2_POS)));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ַ2ʹ<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_device_address2_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->ADDR2 |= I2C_ADDR2_ADDR2EN;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>ַ2<EFBFBD><EFBFBD>ֹ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_device_address2_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->ADDR2 &= (~I2C_ADDR2_ADDR2EN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2Cʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param timing д<EFBFBD><EFBFBD>TIMING<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @note I2C<EFBFBD><EFBFBD>ֹʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2Cʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䡢<EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD>䡢SCL<EFBFBD>͵<EFBFBD>ƽʱ<EFBFBD>䣩
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_set_timing(I2C_t *i2cx, uint32_t timing)
|
|||
|
{
|
|||
|
i2cx->TIMING = timing;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡI2Cʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param timing_param I2Cʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_TIMING_PRESC: ʱ<EFBFBD><EFBFBD>Ԥ<EFBFBD><EFBFBD>Ƶ
|
|||
|
* @arg I2C_TIMING_SCLDEL: <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_TIMING_SDADEL: <EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_TIMING_SCLH: SCL<EFBFBD>ߵ<EFBFBD>ƽʱ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_TIMING_SCLL: SCL<EFBFBD>͵<EFBFBD>ƽʱ<EFBFBD><EFBFBD>
|
|||
|
* @retval uint32_t TIMING<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE uint32_t std_i2c_get_timing(I2C_t *i2cx, uint32_t timing_param)
|
|||
|
{
|
|||
|
return (uint32_t)(i2cx->TIMING & timing_param);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ʹ<EFBFBD><EFBFBD>I2C<EFBFBD>ж<EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param interrupt ʹ<EFBFBD><EFBFBD>I2C<EFBFBD>ж<EFBFBD>Դѡ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_ERR: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_TC: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_STOP: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣλ<EFBFBD>ж<EFBFBD>
|
|||
|
* @arg ...
|
|||
|
* @arg I2C_INTERRUPT_TX: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_interrupt_enable(I2C_t *i2cx, uint32_t interrupt)
|
|||
|
{
|
|||
|
i2cx->CR1 |= interrupt;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ֹI2C<EFBFBD>ж<EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param interrupt I2C<EFBFBD>ж<EFBFBD>ѡ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_ERR: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_TC: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_STOP: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣλ<EFBFBD>ж<EFBFBD>
|
|||
|
* @arg ...
|
|||
|
* @arg I2C_INTERRUPT_TX: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_interrupt_disable(I2C_t *i2cx, uint32_t interrupt)
|
|||
|
{
|
|||
|
i2cx->CR1 &= (~interrupt);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡI2C<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param interrupt I2C<EFBFBD>ж<EFBFBD>ѡ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_ERR: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_TC: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @arg I2C_INTERRUPT_STOP: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣλ<EFBFBD>ж<EFBFBD>
|
|||
|
* @arg ...
|
|||
|
* @arg I2C_INTERRUPT_TX: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|||
|
* @retval bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD>ж<EFBFBD>ʹ<EFBFBD><EFBFBD>״̬
|
|||
|
* @arg true: <EFBFBD><EFBFBD>ʾѡ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Դʹ<EFBFBD><EFBFBD>
|
|||
|
* @arg false: <EFBFBD><EFBFBD>ʾѡ<EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Դδʹ<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE bool std_i2c_get_interrupt_enable(I2C_t *i2cx, uint32_t interrupt)
|
|||
|
{
|
|||
|
return ((i2cx->CR1 & interrupt) == interrupt);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡI2C״̬<EFBFBD><EFBFBD>־λ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param flag I2C״̬<EFBFBD><EFBFBD>־λѡ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_FLAG_TXE: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_FLAG_TXIS: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>״̬
|
|||
|
* @arg I2C_FLAG_RXNE: I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD>
|
|||
|
* @arg ...
|
|||
|
* @arg I2C_FLAG_DIR: I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>
|
|||
|
* @retval bool <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C״̬<EFBFBD><EFBFBD>־λ״̬
|
|||
|
* @arg true: ״̬<EFBFBD><EFBFBD>־λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg false: ״̬<EFBFBD><EFBFBD>־λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE bool std_i2c_get_flag(I2C_t *i2cx, uint32_t flag)
|
|||
|
{
|
|||
|
return ((i2cx->ISR & flag) == flag);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD>»<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval uint32_t ƥ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ΧΪ0x00~0x3F<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE uint32_t std_i2c_get_address_match_code(I2C_t *i2cx)
|
|||
|
{
|
|||
|
return (uint32_t)(((i2cx->ISR & I2C_ISR_ADDRCODE) >> I2C_ISR_ADDRCODE_POS) << 1);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C״̬<EFBFBD><EFBFBD>־λ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param flag I2C״̬<EFBFBD><EFBFBD>־λѡ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_FLAG_ADDR: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ADDR<EFBFBD><EFBFBD>־
|
|||
|
* @arg I2C_FLAG_NACK: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>NACKF<EFBFBD><EFBFBD>־
|
|||
|
* @arg I2C_FLAG_STOP: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>STOPF<EFBFBD><EFBFBD>־
|
|||
|
* @arg I2C_FLAG_BERR: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>BERR<EFBFBD><EFBFBD>־
|
|||
|
* @arg I2C_FLAG_ARLO: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ARLO<EFBFBD><EFBFBD>־
|
|||
|
* @arg I2C_FLAG_OVR: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>OVR<EFBFBD><EFBFBD>־
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_clear_flag(I2C_t *i2cx, uint32_t flag)
|
|||
|
{
|
|||
|
i2cx->ICR |= flag;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ʹ<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_autoend_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 |= I2C_CR2_AUTOEND;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ֹI2C<EFBFBD><EFBFBD>ģʽ<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_autoend_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 &= (~I2C_CR2_AUTOEND);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ʹ<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_reload_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 |= I2C_CR2_RELOAD;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ֹI2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_reload_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 &= (~I2C_CR2_RELOAD);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param value <EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><EFBFBD>0x0~0xFF֮<EFBFBD>䣩
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_set_bytes_count_value(I2C_t *i2cx, uint32_t value)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR2, I2C_CR2_NBYTES, value << I2C_CR2_NBYTES_POS);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval uint32_t <EFBFBD>ֽڼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><EFBFBD>0x0~0xFF֮<EFBFBD>䣩
|
|||
|
*/
|
|||
|
__STATIC_INLINE uint32_t std_i2c_get_bytes_count_value(I2C_t *i2cx)
|
|||
|
{
|
|||
|
return (uint32_t)((i2cx->CR2 & I2C_CR2_NBYTES) >> I2C_CR2_NBYTES_POS);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD>ģʽ<EFBFBD>µ<EFBFBD>ַƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACK<EFBFBD><EFBFBD>NACKӦ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param acknowledge Ӧ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ѡ<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_DATA_ACK: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ACKӦ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
* @arg I2C_DATA_NACK: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>NACKӦ<EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_set_next_data_ack(I2C_t *i2cx, uint32_t acknowledge)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR2, I2C_CR2_NACK, acknowledge);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>ʼλ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_start_condition_generate(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 |= I2C_CR2_START;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣλ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_stop_condition_generate(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 |= I2C_CR2_STOP;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief ʹ<EFBFBD><EFBFBD>10λ<EFBFBD><EFBFBD>ַͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD>տ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_10bit_address_auto_read_enable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 |= I2C_CR2_HEAD10R;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ֹ10λ<EFBFBD><EFBFBD>ַͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD>տ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_10bit_address_auto_read_disable(I2C_t *i2cx)
|
|||
|
{
|
|||
|
i2cx->CR2 &= (~I2C_CR2_HEAD10R);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD>Ѱַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param address_mode I2C<EFBFBD><EFBFBD>ģʽѰַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_MASTER_ADDRESSING_7BIT: I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ7bit
|
|||
|
* @arg I2C_MASTER_ADDRESSING_10BIT: I2C<EFBFBD>豸<EFBFBD><EFBFBD>ַ1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10bit
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_address1_mode_config(I2C_t *i2cx, uint32_t address_mode)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR2, I2C_CR2_ADDR10, address_mode);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param direct <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_REQUEST_WRITE: <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_REQUEST_READ: <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @note <EFBFBD><EFBFBD>STARTλ<EFBFBD><EFBFBD>1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_set_transfer_direction(I2C_t *i2cx, uint32_t direct)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR2, I2C_CR2_RD_WRN, direct);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD>»<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>䷽<EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_REQUEST_WRITE: <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @arg I2C_REQUEST_READ: <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE uint32_t std_i2c_get_transfer_direction(I2C_t *i2cx)
|
|||
|
{
|
|||
|
return (uint32_t)(i2cx->CR2 & I2C_CR2_RD_WRN);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param slave_addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵Ĵ<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
* @note <EFBFBD><EFBFBD>STARTλ<EFBFBD><EFBFBD>1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_set_slave_address(I2C_t *i2cx, uint32_t slave_addr)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR2, I2C_CR2_SADDR, slave_addr);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD>ģʽ<EFBFBD>»<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval uint32_t <EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
*/
|
|||
|
__STATIC_INLINE uint32_t std_i2c_get_slave_address(I2C_t *i2cx)
|
|||
|
{
|
|||
|
return (uint32_t)(i2cx->CR2 & I2C_CR2_SADDR);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief I2C<EFBFBD><EFBFBD>ģʽͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param slave_addr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>豸<EFBFBD><EFBFBD>ַ
|
|||
|
* @param transfer_size <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ķ<EFBFBD>ΧΪ0x0~0xFF<EFBFBD><EFBFBD>
|
|||
|
* @param end_mode ѡ<EFBFBD><EFBFBD>I2C<EFBFBD>Ľ<EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
* @arg I2C_MODE_RELOAD: <EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
* @arg I2C_MODE_AUTOEND: <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
* @arg I2C_MODE_SOFTEND: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_master_transfer_config(I2C_t *i2cx, uint32_t slave_addr, uint32_t transfer_size, uint32_t end_mode)
|
|||
|
{
|
|||
|
MODIFY_REG(i2cx->CR2, (I2C_CR2_SADDR | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND), \
|
|||
|
((slave_addr & I2C_CR2_SADDR) | ((transfer_size << I2C_CR2_NBYTES_POS) & I2C_CR2_NBYTES) \
|
|||
|
| end_mode));
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼĴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @retval uint8_t <EFBFBD><EFBFBD><EFBFBD>ݼĴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ΧΪ0x00~0xFF<EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE uint8_t std_i2c_receive_byte(I2C_t *i2cx)
|
|||
|
{
|
|||
|
return (uint8_t)(i2cx->RDR);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief д<EFBFBD><EFBFBD><EFBFBD>ݼĴ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param i2cx I2C<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* @param send_data д<EFBFBD><EFBFBD>I2C TDR<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΧΪ0x00~0xFF<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
__STATIC_INLINE void std_i2c_transmit_byte(I2C_t *i2cx, uint8_t send_data)
|
|||
|
{
|
|||
|
i2cx->TDR = send_data;
|
|||
|
}
|
|||
|
|
|||
|
/* I2C<32><43>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD> */
|
|||
|
void std_i2c_deinit(I2C_t *i2cx);
|
|||
|
void std_i2c_init(I2C_t *i2cx, std_i2c_init_t *i2c_init);
|
|||
|
|
|||
|
/* I2C<32>ṹ<EFBFBD><E1B9B9><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD> */
|
|||
|
void std_i2c_struct_init(std_i2c_init_t *i2c_init);
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
#endif /* CIU32L051_STD_I2C_H */
|