165 lines
6.0 KiB
C
165 lines
6.0 KiB
C
|
|
/**
|
|||
|
|
* @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 */
|