QQT912/CW32F030/原项目程序/SW/Libraries/inc/cw32f030_i2c.h

165 lines
6.0 KiB
C
Raw Normal View History

/**
* @file cw32f030_i2c.h
* @author your name (you@domain.com)
* @brief
* @version 0.1
* @date 2021-04-27
*
* @copyright Copyright (c) 2021
* x
*/
/*******************************************************************************
*
* <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>б<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><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>人<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><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<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><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><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><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><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>롢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD>ڿɽ<EFBFBD>ʡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>
* ijЩ˾<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>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijЩ<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>
*
*******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __CW32F03x_I2C_H
#define __CW32F03x_I2C_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "cw32f030.h"
#include "base_types.h"
#include "cw32f030_rcc.h"
/**
* @brief I2Cͨ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>
*
*/
typedef enum en_i2c_channel
{
I2C1 = 0,///<ͨ<><CDA8>1
I2C2 = 1,///<ͨ<><CDA8>2
}en_i2c_channel_t;
/**
******************************************************************************
** \brief I2C<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ýṹ
*****************************************************************************/
typedef struct
{
FunctionalState I2C_BaudEn; ///<<3C><><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
uint8_t I2C_Baud; ///<<3C><><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t I2C_OwnSlaveAddr0; ///<<3C>ӻ<EFBFBD><D3BB><EFBFBD>ַ0
FunctionalState I2C_OwnGc; ///<<3C>㲥<EFBFBD><E3B2A5>Ӧʹ<D3A6><CAB9>
uint8_t I2C_OwnSlaveAddr1; ///<<3C>ӻ<EFBFBD><D3BB><EFBFBD>ַ1
uint8_t I2C_OwnSlaveAddr2; ///<<3C>ӻ<EFBFBD><D3BB><EFBFBD>ַ2
FunctionalState I2C_FLT; ///<FLT<4C><54><EFBFBD><EFBFBD>
FunctionalState I2C_AA; ///<ACK<43><4B><EFBFBD><EFBFBD>
}I2C_InitTypeDef;
/** @defgroup I2C_Exported_Constants
* @{
*/
#define IS_I2C_ALL_PERIPH(PERIPH) (((PERIPH) == CW_I2C1) || \
((PERIPH) == CW_I2C2))
#define IS_I2C_OWN_ADDRESS0(ADDRESS0) ((ADDRESS0) <= 0x7F)
#define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x7F)
#define IS_I2C_OWN_ADDRESS2(ADDRESS2) ((ADDRESS2) <= 0x7F)
#define I2C_Baud_BRR_1 ((uint8_t)0x01)
#define I2C_Baud_BRR_2 ((uint8_t)0x02)
#define I2C_Baud_BRR_3 ((uint8_t)0x03)
#define I2C_Baud_BRR_4 ((uint8_t)0x04)
#define I2C_Baud_BRR_5 ((uint8_t)0x05)
#define I2C_Baud_BRR_6 ((uint8_t)0x06)
#define I2C_Baud_BRR_7 ((uint8_t)0x07)
#define IS_I2C_Baud_BRR(PARA) (((PARA) == I2C_Baud_BRR_1) || \
((PARA) == I2C_Baud_BRR_2) ||\
((PARA) == I2C_Baud_BRR_3) ||\
((PARA) == I2C_Baud_BRR_4) ||\
((PARA) == I2C_Baud_BRR_5) ||\
((PARA) == I2C_Baud_BRR_6) ||\
((PARA) == I2C_Baud_BRR_7))
/** @defgroup I2C_transfer_direction
* @{
*/
#define I2C_Direction_Transmitter ((uint8_t)0x00)
#define I2C_Direction_Receiver ((uint8_t)0x01)
#define IS_I2C_DIRECTION(DIRECTION) (((DIRECTION) == I2C_Direction_Transmitter) || \
((DIRECTION) == I2C_Direction_Receiver))
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>
void I2C_BaudGeneratorEnable(I2C_TypeDef* I2Cx, FunctionalState NewState);
//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>üĴ<C3BC><C4B4><EFBFBD>
void I2C_SetBaud(I2C_TypeDef *I2Cx, uint8_t u8TBaud);
//<2F><><EFBFBD><EFBFBD>START<52>ź<EFBFBD>
void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState);
//<2F><><EFBFBD><EFBFBD>STOP<4F>ź<EFBFBD>
void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState);
//Ack<63>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);
//Filter<65><72><EFBFBD><EFBFBD>
void I2C_FilterConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);
//<2F><><EFBFBD>ӻ<EFBFBD>ʱ<EFBFBD>Ĵӻ<C4B4><D3BB><EFBFBD>ַ0<D6B7><30><EFBFBD><EFBFBD>
void I2C_SetOwnSlaveAddress0(I2C_TypeDef* I2Cx, uint8_t I2CSlaveAddr);
//<2F><><EFBFBD>ӻ<EFBFBD>ʱ<EFBFBD>Ĵӻ<C4B4><D3BB><EFBFBD>ַ1<D6B7><31><EFBFBD><EFBFBD>
void I2C_SetOwnSlaveAddress1(I2C_TypeDef* I2Cx, uint8_t I2CSlaveAddr);
//<2F><><EFBFBD>ӻ<EFBFBD>ʱ<EFBFBD>Ĵӻ<C4B4><D3BB><EFBFBD>ַ2<D6B7><32><EFBFBD><EFBFBD>
void I2C_SetOwnSlaveAddress2(I2C_TypeDef* I2Cx, uint8_t I2CSlaveAddr);
//<2F><><EFBFBD>ӻ<EFBFBD>ʱ<EFBFBD>㲥<EFBFBD><E3B2A5>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
void I2C_GcConfig(I2C_TypeDef* I2Cx, FunctionalState NewState);
//I2Cģ<43><C4A3>ʹ<EFBFBD><CAB9>
void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState);
//<2F><>ȡSI<53>жϱ<D0B6>־
ITStatus I2C_GetIrq(I2C_TypeDef *I2Cx);
//<2F><><EFBFBD><EFBFBD>SI<53>жϱ<D0B6>־
void I2C_ClearIrq(I2C_TypeDef *I2Cx);
//<2F><>ȡ״̬<D7B4>Ĵ<EFBFBD><C4B4><EFBFBD>
uint8_t I2C_GetState(I2C_TypeDef *I2Cx);
//I2C MASTER<45><52>ʼ<EFBFBD><CABC>
void I2C_Master_Init(I2C_TypeDef *I2Cx,I2C_InitTypeDef *I2C_InitStruct);
//I2C SLAVE<56><45>ʼ<EFBFBD><CABC>
void I2C_Slave_Init(I2C_TypeDef *I2Cx,I2C_InitTypeDef *I2C_InitStruct);
//I2C1<43>رճ<D8B1>ʼ<EFBFBD><CABC>
void I2C1_DeInit(void);
//I2C2<43>رճ<D8B1>ʼ<EFBFBD><CABC>
void I2C2_DeInit(void);
//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data);
//<2F><><EFBFBD><EFBFBD>1<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx);
//<2F><><EFBFBD>͵<EFBFBD>ַ<EFBFBD>ֽ<EFBFBD>
void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction);
//<2F><><EFBFBD><EFBFBD>λI2C1ģ<31><C4A3>
void I2C1_SoftwareResetCmd(FunctionalState NewState);
//<2F><><EFBFBD><EFBFBD>λI2C2ģ<32><C4A3>
void I2C2_SoftwareResetCmd(FunctionalState NewState);
//<2F><>дEEPROM<4F><4D><EFBFBD><EFBFBD>
void I2C_MasterWriteEepromData(I2C_TypeDef *I2Cx,uint8_t u8Addr,uint8_t *pu8Data,uint32_t u32Len);
//<2F><><EFBFBD><EFBFBD>EEPROM<4F><4D><EFBFBD><EFBFBD>
void I2C_MasterReadEepomData(I2C_TypeDef *I2Cx,uint8_t u8Addr,uint8_t *pu8Data,uint32_t u32Len);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void I2C_MasterSendDataToSlave(I2C_TypeDef *I2Cx,uint8_t *pu8Data,uint32_t u32Len);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void I2C_MasterRecDataFromSlave(I2C_TypeDef *I2Cx,uint8_t *pu8Data,uint32_t u32Len);
//<2F>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void I2C_SlaveSendDataToMaster(I2C_TypeDef* I2Cx,uint8_t *pu8Data,uint32_t *u32Len);
//<2F>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void I2C_SlaveRecDataFromMaster(I2C_TypeDef* I2Cx,uint8_t *pu8Data,uint32_t *pu32Len);
//<2F>ӻ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
uint8_t I2C_MasterCheckSlaveBusy( I2C_TypeDef* I2Cx );
#ifdef __cplusplus
}
#endif
#endif /*__CW32F030_I2C_H */